EtonMu commited on
Commit
3094efd
Β·
verified Β·
1 Parent(s): 1fb8d71

Add mechanism visualization page (static/index.html)

Browse files
Files changed (1) hide show
  1. static/index.html +1 -68
static/index.html CHANGED
@@ -835,7 +835,7 @@
835
  <div class="brand-sub">machine learning powered color rebuild</div>
836
  </div>
837
  <div class="head-right">
838
- <a class="head-link" id="howOpen"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--accent)" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="5" width="14" height="14" rx="2.5"/><path d="M9 2v3M15 2v3M9 19v3M15 19v3M2 9h3M2 15h3M19 9h3M19 15h3"/><circle cx="12" cy="12" r="2.4"/></svg><span>How the ML algorithm works here</span></a>
839
  <a class="head-link" id="privacyOpen"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--accent)" stroke-width="2.2" stroke-linecap="round" aria-hidden="true"><rect x="4" y="10.5" width="16" height="10" rx="2.5"/><path d="M8 10.5V7a4 4 0 0 1 8 0v3.5"/></svg><span>Your privacy is strictly guaranteed</span></a>
840
  </div>
841
  </header>
@@ -1030,67 +1030,6 @@
1030
  </div>
1031
 
1032
  <!-- ======================= HOW IT WORKS MODAL ======================= -->
1033
- <div id="howModal" class="modal-bg">
1034
- <div class="modal-card wide">
1035
- <h2>How Deep Analog works</h2>
1036
- <div class="sub">From a single reference image to a reusable film look β€” in seconds</div>
1037
-
1038
- <p style="margin-top:14px"><a href="static/visualization.html" target="_blank" rel="noopener"
1039
- style="display:inline-flex;align-items:center;gap:8px;color:var(--accent);font-weight:600;text-decoration:none;border:1px solid var(--accent);border-radius:10px;padding:9px 16px;">
1040
- <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z"/></svg>
1041
- Visualization of mechanisms&nbsp;β†’</a></p>
1042
-
1043
- <p>In plain English: Deep Analog <b>reverse-engineers film through data</b>. During
1044
- training, the model studied thousands of photograph pairs β€” the same picture with and
1045
- without a look applied β€” over and over, hundreds of thousands of exposures in total,
1046
- until it learned the hidden mapping between <i>how an image looks</i> and <i>the recipe
1047
- that makes it look that way</i>. It's like an apprentice darkroom printer who has studied
1048
- so many of the master's prints that, shown any new frame just once, they can write down
1049
- the complete formula β€” color, tone, grain, glow β€” to recreate it. That written-down
1050
- formula is exactly what this site hands you.</p>
1051
-
1052
- <img class="figure" src="static/how/teaser.jpg" alt="Deep Analog teaser: reference film scan to predicted LUT to rendered photo">
1053
-
1054
- <h4><span class="step-n">1</span>Two networks read your reference</h4>
1055
- <p>When you upload a reference β€” a film scan, a movie still, anything with a look you love β€”
1056
- two small neural networks study it. <b>StyleLUTNet</b> encodes its color character and predicts
1057
- a complete <b>3D LUT</b>: a 33Γ—33Γ—33 lattice that says, for every color a photo can contain,
1058
- what color the film would turn it into. <b>FilmAnalyzerNet</b> estimates the physical
1059
- parameters of the film itself: grain density and size, and the threshold, radius and tint
1060
- of its halation.</p>
1061
- <img class="figure" src="static/how/architecture.jpg" alt="Deep Analog architecture: StyleLUTNet predicts a 3D LUT, FilmAnalyzerNet extracts physical parameters">
1062
- <p class="figcap">The Deep Analog architecture (from the paper).</p>
1063
-
1064
- <h4><span class="step-n">2</span>A six-stage digital darkroom</h4>
1065
- <p>Your photo is then developed through a deterministic pipeline, mirroring how film actually
1066
- forms an image: the predicted <b>3D LUT</b> grades the color β†’ <b>tone-curve matching</b> aligns
1067
- the brightness distribution with the reference β†’ <b>film tone</b> lifts the blacks, rolls off
1068
- the highlights and applies the stock's shadow/highlight tints β†’ <b>multi-scale grain</b> is
1069
- synthesized β†’ <b>per-channel halation</b> scatters a red glow around bright lights.</p>
1070
- <img class="figure" src="static/how/stages.jpg" alt="Reference-conditioned processing workflow: input, LUT grading, tone matching, film tone, grain, halation">
1071
- <p class="figcap">The reference-conditioned processing workflow (from the paper).</p>
1072
-
1073
- <h4><span class="step-n">3</span>Everything is yours to keep</h4>
1074
- <p>The extracted look leaves with you: the exact <b>.cube LUT</b> for Photoshop, Resolve,
1075
- Premiere or Final Cut; <b>.xmp</b> and <b>.costyle</b> presets for Lightroom and Capture One;
1076
- and the full parameter set as <b>JSON</b>. Your images are processed in memory and never
1077
- stored β€” see the privacy statement for details.</p>
1078
-
1079
- <h4><span class="step-n">4</span>Under the hood</h4>
1080
- <p>StyleLUTNet is an <b>82.6-million-parameter</b> model built on a ResNet-18 encoder and an
1081
- MLP decoder that predicts a 17Β³ residual LUT, upsampled trilinearly to 33Β³. It was trained
1082
- for <b>100 epochs</b> on style-transfer pairs built from the
1083
- <b>MIT-Adobe FiveK</b> dataset (5,000 professionally retouched photographs), with smoothness,
1084
- monotonicity and histogram-matching losses to keep the predicted LUTs physically plausible,
1085
- and evaluated on a held-out 350-image test set. Because the reference is read at 224Γ—224
1086
- and the LUT is applied by interpolation, the whole pipeline runs in seconds on a CPU β€”
1087
- no GPU needed, which is exactly what this demo is running on.</p>
1088
-
1089
- <p class="patent-note">Deep Analog Β· MSCS capstone research by Eton Mu Β· Patent pending.</p>
1090
- <button class="close-btn" id="howClose">Close</button>
1091
- </div>
1092
- </div>
1093
-
1094
  <!-- ======================= PRIVACY MODAL ======================= -->
1095
  <div id="privacyModal">
1096
  <div class="modal-card">
@@ -2349,12 +2288,6 @@
2349
  if (e.target === $('privacyModal')) $('privacyModal').classList.remove('open');
2350
  });
2351
 
2352
- // ------------------------------------------------ how-it-works modal
2353
- $('howOpen').addEventListener('click', () => $('howModal').classList.add('open'));
2354
- $('howClose').addEventListener('click', () => $('howModal').classList.remove('open'));
2355
- $('howModal').addEventListener('click', e => {
2356
- if (e.target === $('howModal')) $('howModal').classList.remove('open');
2357
- });
2358
  })();
2359
  </script>
2360
  </body>
 
835
  <div class="brand-sub">machine learning powered color rebuild</div>
836
  </div>
837
  <div class="head-right">
838
+ <a class="head-link" id="howOpen" href="static/visualization.html" target="_blank" rel="noopener"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--accent)" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="5" width="14" height="14" rx="2.5"/><path d="M9 2v3M15 2v3M9 19v3M15 19v3M2 9h3M2 15h3M19 9h3M19 15h3"/><circle cx="12" cy="12" r="2.4"/></svg><span>How the ML algorithm works here</span></a>
839
  <a class="head-link" id="privacyOpen"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="var(--accent)" stroke-width="2.2" stroke-linecap="round" aria-hidden="true"><rect x="4" y="10.5" width="16" height="10" rx="2.5"/><path d="M8 10.5V7a4 4 0 0 1 8 0v3.5"/></svg><span>Your privacy is strictly guaranteed</span></a>
840
  </div>
841
  </header>
 
1030
  </div>
1031
 
1032
  <!-- ======================= HOW IT WORKS MODAL ======================= -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1033
  <!-- ======================= PRIVACY MODAL ======================= -->
1034
  <div id="privacyModal">
1035
  <div class="modal-card">
 
2288
  if (e.target === $('privacyModal')) $('privacyModal').classList.remove('open');
2289
  });
2290
 
 
 
 
 
 
 
2291
  })();
2292
  </script>
2293
  </body>