moved_repo_first_update

This commit is contained in:
rpotter6298
2026-02-24 10:39:48 +01:00
commit 9894a23f09
98 changed files with 35387 additions and 0 deletions
+481
View File
@@ -0,0 +1,481 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Hypertower V2 Builder</title>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<div class="app">
<section class="pane left">
<header class="pane-header">
<div>
<h1>Hypertower V2 Builder</h1>
<p class="subtitle">
Draft your towers, bridges, and transforms, then inspect the generated JSON.
</p>
</div>
<div class="status">
<span id="node-count">0 nodes</span>
<span id="edge-count">0 edges</span>
</div>
</header>
<div class="panel">
<h2>Nodes</h2>
<div class="button-grid">
<button data-add="data">Add Data Source</button>
<button data-add="filter">Add Filter</button>
<button data-add="transform">Add Transform</button>
<button data-add="loader">Add Loader</button>
<button data-add="image_tower">Add Tower</button>
<button data-add="bridge">Add Bridge</button>
<button data-add="classifier">Add Classifier</button>
</div>
</div>
<div class="panel">
<h2>Presets</h2>
<div class="field">
<label for="preset-select">Preset</label>
<select id="preset-select"></select>
</div>
<div class="button-row">
<button id="preset-apply">Apply Preset</button>
<button id="preset-save" class="ghost">Save Selection</button>
</div>
<p class="hint">Use Shift + drag on the graph to select multiple nodes.</p>
<div class="field">
<label for="import-class-select">Import class</label>
<select id="import-class-select">
<option value="">Select…</option>
<option value="PapilaData">PapilaData</option>
</select>
</div>
<div class="button-row">
<button id="import-class-btn">Import Class</button>
</div>
<p class="hint">Adds data sources for the selected dataset.</p>
</div>
<div class="panel">
<h2>Selection</h2>
<div class="field">
<label>Selected Node</label>
<div id="selected-node" class="pill muted">None</div>
</div>
<div class="field">
<label for="node-label">Label</label>
<input id="node-label" placeholder="Rename node" />
</div>
<div id="selection-generic">
<div class="field">
<label for="node-slot">Input Slot</label>
<input id="node-slot" placeholder="e.g. image_1" />
</div>
<div class="field">
<label for="node-output">Output Slot</label>
<input id="node-output" placeholder="e.g. embedding_1" />
</div>
</div>
<div id="selection-loader" class="selection-block hidden">
<div class="field">
<label>Input Type</label>
<select id="loader-input-type">
<option value="image">image</option>
<option value="matrix">matrix</option>
</select>
</div>
<div class="field">
<label>Input Index</label>
<select id="loader-input-index">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
</div>
<div class="field">
<label>Output Type</label>
<select id="loader-output-type" disabled>
<option value="image">image</option>
<option value="matrix">matrix</option>
</select>
<div class="hint">Output mirrors input type.</div>
</div>
</div>
<div id="selection-filter" class="selection-block hidden">
<div class="field">
<label>Input Type</label>
<select id="filter-input-type">
<option value="image">image</option>
<option value="matrix">matrix</option>
</select>
</div>
<div class="field">
<label>Output Type</label>
<select id="filter-output-type" disabled>
<option value="image">image</option>
<option value="matrix">matrix</option>
</select>
<div class="hint">Output mirrors input type.</div>
</div>
<div class="field">
<label>Filter Type</label>
<select id="filter-type">
<option value="regex">regex</option>
<option value="column">column</option>
</select>
</div>
<div id="filter-regex-fields">
<div class="field">
<label for="filter-regex-pattern">Regex Pattern</label>
<input id="filter-regex-pattern" placeholder="e.g. OD|_OD|Right" />
</div>
</div>
<div id="filter-column-fields" class="hidden">
<div class="field">
<label for="filter-column-name">Column</label>
<input id="filter-column-name" placeholder="e.g. IOP" />
</div>
<div class="field">
<label for="filter-column-operator">Operator</label>
<select id="filter-column-operator">
<option value=">">&gt;</option>
<option value=">=">&gt;=</option>
<option value="=">=</option>
<option value="!=">!=</option>
<option value="<=">&lt;=</option>
<option value="<">&lt;</option>
</select>
</div>
<div class="field">
<label for="filter-column-value">Value</label>
<input id="filter-column-value" placeholder="e.g. 21" />
</div>
</div>
</div>
<div id="selection-transform" class="selection-block hidden">
<div class="field">
<label>Transform Type</label>
<select id="transform-type">
<option value="roi_crop">roi_crop</option>
<option value="center_crop">center_crop</option>
<option value="jitter_bundle">jitter_bundle</option>
<option value="resize">resize</option>
</select>
</div>
<div id="transform-roi-fields">
<div class="field">
<label>Mask Source</label>
<select id="transform-roi-mask-source">
<option value="gt">gt</option>
<option value="unet">unet</option>
</select>
</div>
<div class="field">
<label for="transform-roi-scale">Scale</label>
<input id="transform-roi-scale" type="number" step="0.1" value="2.5" />
</div>
<div class="field">
<label for="transform-roi-target">Target Size</label>
<input id="transform-roi-target" type="number" step="1" value="224" />
<div class="hint">Set empty to skip resizing.</div>
</div>
<div class="field">
<label>
<input id="transform-roi-fallback" type="checkbox" checked />
Fallback to original if mask missing
</label>
</div>
</div>
<div id="transform-center-fields" class="hidden">
<div class="field">
<label for="transform-center-size">Center Crop Size</label>
<input id="transform-center-size" type="number" step="1" value="224" />
</div>
</div>
<div id="transform-jitter-fields" class="hidden">
<div class="field">
<label>
<input id="transform-jitter-hflip" type="checkbox" checked />
Random horizontal flip
</label>
</div>
<div class="field">
<label>
<input id="transform-jitter-vflip" type="checkbox" checked />
Random vertical flip
</label>
</div>
<div class="field">
<label for="transform-jitter-rotation">Rotation (deg)</label>
<input id="transform-jitter-rotation" type="number" step="1" value="15" />
</div>
<div class="field">
<label>
<input id="transform-jitter-color-enabled" type="checkbox" checked />
Color jitter
</label>
<input
id="transform-jitter-color"
placeholder="0.1,0.1,0.1,0.05"
value="0.1,0.1,0.1,0.05"
/>
</div>
</div>
<div id="transform-resize-fields" class="hidden">
<div class="field">
<label for="transform-resize-size">Resize Size</label>
<input id="transform-resize-size" type="number" step="1" value="256" />
</div>
</div>
</div>
<div id="selection-tower" class="selection-block hidden">
<div class="field">
<label>Tower Type</label>
<select id="tower-type">
<option value="image">image</option>
<option value="metadata">metadata</option>
</select>
</div>
<div id="tower-image-fields">
<div class="field">
<label>Backbone</label>
<select id="tower-backbone">
<option value="efficientnet_b0">efficientnet_b0</option>
<option value="resnet50">resnet50</option>
<option value="densenet121">densenet121</option>
<option value="vgg16">vgg16</option>
<option value="mobilenet_v2">mobilenet_v2</option>
<option value="inception_v3">inception_v3</option>
<option value="refugelike">refugelike</option>
<option value="refuge_densenet">refuge_densenet</option>
<option value="refuge_efficient_b0">refuge_efficient_b0</option>
<option value="refuge_efficient_b7">refuge_efficient_b7</option>
</select>
</div>
<div class="field">
<label for="tower-freeze-ratio">Freeze Ratio</label>
<input id="tower-freeze-ratio" type="number" step="0.05" value="0" />
</div>
<div class="field">
<label>
<input id="tower-augment" type="checkbox" checked />
Image augmentation
</label>
</div>
<div class="field">
<label for="tower-geometry-dim">Geometry Dim</label>
<input id="tower-geometry-dim" type="number" step="1" value="0" />
</div>
<div class="field">
<label>
<input id="tower-use-se" type="checkbox" />
Use SE
</label>
</div>
<div class="field">
<label for="tower-se-reduction">SE Reduction</label>
<input id="tower-se-reduction" type="number" step="1" value="16" />
</div>
<div class="field">
<label>
<input id="tower-se-pre-norm" type="checkbox" checked />
SE Pre-Norm
</label>
</div>
</div>
<div id="tower-md-fields" class="hidden">
<div class="field">
<label for="tower-md-hidden">Hidden Dim</label>
<input id="tower-md-hidden" type="number" step="1" value="128" />
</div>
<div class="field">
<label for="tower-md-dropout">Dropout</label>
<input id="tower-md-dropout" type="number" step="0.05" value="0.1" />
</div>
<div class="field">
<label>
<input id="tower-md-use-se" type="checkbox" />
Use SE
</label>
</div>
<div class="field">
<label for="tower-md-se-reduction">SE Reduction</label>
<input id="tower-md-se-reduction" type="number" step="1" value="16" />
</div>
<div class="field">
<label>
<input id="tower-md-se-pre-norm" type="checkbox" checked />
SE Pre-Norm
</label>
</div>
<div class="field">
<label for="tower-md-freeze-ratio">Freeze Ratio</label>
<input id="tower-md-freeze-ratio" type="number" step="0.05" value="0" />
</div>
</div>
</div>
<div id="selection-bridge" class="selection-block hidden">
<div class="field">
<label>Bridge Method</label>
<select id="bridge-method">
<option value="fusion">fusion</option>
<option value="consensus">consensus</option>
</select>
<div class="hint">Fusion uses embeddings; consensus combines logits.</div>
</div>
<div id="bridge-fusion-fields">
<div class="field">
<label for="bridge-fusion-dim">Fusion Dim</label>
<input id="bridge-fusion-dim" type="number" step="1" value="256" />
</div>
<div class="field">
<label>
<input id="bridge-use-se" type="checkbox" checked />
Use SE
</label>
</div>
<div class="field">
<label for="bridge-se-reduction">SE Reduction</label>
<input id="bridge-se-reduction" type="number" step="1" value="16" />
</div>
<div class="field">
<label>
<input id="bridge-se-pre-norm" type="checkbox" checked />
SE Pre-Norm
</label>
</div>
</div>
</div>
<div id="selection-classifier" class="selection-block hidden">
<div class="hint">
Classifier settings are managed at the Hypertower level.
</div>
</div>
<div id="selection-data" class="selection-block hidden">
<div class="field">
<label>Output Type (select first)</label>
<select id="data-output-type">
<option value="">Select…</option>
<option value="image">image</option>
<option value="matrix">matrix</option>
</select>
</div>
<div class="field">
<label>Source</label>
<div class="button-row">
<button id="data-browse" class="ghost">Browse…</button>
</div>
<div id="data-source-status" class="hint">No source selected.</div>
</div>
<div class="button-row">
<button id="duplicate-data" class="ghost">Duplicate Data Source</button>
</div>
</div>
<div class="button-row">
<button id="apply-node">Apply</button>
<button id="delete-node" class="danger">Delete</button>
</div>
</div>
<div class="panel">
<h2>State</h2>
<div class="button-row">
<button id="auto-layout">Auto Layout</button>
<button id="reset-graph" class="ghost">Reset</button>
</div>
<div class="button-row">
<button id="save-local">Save Local</button>
<button id="load-local">Load Local</button>
</div>
<div class="button-row">
<button id="export-json">Export JSON</button>
<label class="file-upload">
Import JSON
<input id="import-json" type="file" accept="application/json" />
</label>
</div>
</div>
</section>
<section class="pane right">
<header class="pane-header">
<div>
<h2>Model Graph</h2>
<div class="hint">Drag to pan. Scroll to zoom.</div>
</div>
<div class="graph-controls">
<button id="connect-mode">Connect</button>
<button id="disconnect-selected">Remove Selected Edges</button>
</div>
</header>
<div id="graph-container">
<svg id="graph" viewBox="0 0 1200 900" preserveAspectRatio="xMidYMid meet"></svg>
</div>
</section>
<section class="pane bottom">
<header class="pane-header">
<h2>Configuration JSON</h2>
<button id="toggle-json" class="ghost">Collapse</button>
</header>
<pre id="json-view" class="json-view"></pre>
</section>
</div>
<div id="modal-overlay" class="modal-overlay hidden">
<div class="modal">
<header class="modal-header">
<div>
<h3>Browse Repository</h3>
<p id="modal-mode" class="hint">Select a directory.</p>
</div>
<button id="modal-close" class="ghost">Close</button>
</header>
<div class="modal-body">
<div id="breadcrumb" class="breadcrumb"></div>
<div id="modal-list" class="modal-list"></div>
</div>
<footer class="modal-footer">
<button id="modal-select-dir" class="ghost">Use this directory</button>
<button id="modal-select-file" class="ghost">Use selected file</button>
</footer>
</div>
</div>
<div id="preview-overlay" class="modal-overlay hidden">
<div class="modal">
<header class="modal-header">
<div>
<h3>Data Browser</h3>
<p id="preview-subtitle" class="hint">No source selected.</p>
</div>
<button id="preview-close" class="ghost">Close</button>
</header>
<div class="modal-body">
<div id="preview-body" class="preview-body"></div>
</div>
</div>
</div>
<script src="app.js"></script>
</body>
</html>