Efradeca commited on
Commit
a2cfdb6
·
verified ·
1 Parent(s): 784bd8e

chore: deploy private lightloom build

Browse files
app.py CHANGED
@@ -145,7 +145,7 @@ def health() -> dict[str, Any]:
145
  "privacy_mode": os.getenv("LIGHTLOOM_PRIVACY_MODE", "1") == "1",
146
  "cpu_count": os.cpu_count(),
147
  "director_backend": CONFIG.director_backend,
148
- "build": "clean-scenes-2",
149
  }
150
 
151
 
@@ -847,6 +847,7 @@ def scroll_session_frame(session: str, name: str):
847
  # flowing in with low delay — no "record, stop, then render". ---
848
  _SCROLL_ROOT = Path("/tmp/lightloom/scroll")
849
  _LIVE_MAX = 24 # keep at most this many session dirs on disk; sweep the oldest
 
850
 
851
 
852
  def _sweep_scroll_sessions(keep: int = _LIVE_MAX) -> None:
@@ -998,15 +999,16 @@ def _scroll_live_phrase(session: str, text: str, audio_b64: str, lang: str):
998
 
999
  # overlap == seg means each strip carries the WHOLE previous strip as context (the max
1000
  # available, since the stored strip is seg-wide); smoothness comes from the morph prompt.
1001
- h, overlap, seg = 512, 384, 384 # WIDER strips + full overlap -> fewer seams, less "rectangles"
1002
  strips_per_phrase = 2 # fewer, wider strips per phrase
1003
- # CLEAN per-strip outpaint: paint each strip as the actual scene description, carrying
1004
- # the previous strip as context. No SLERP/SDEdit mushing — those degraded clarity into
1005
- # color smear (the laminar-v1 regression). Clear, description-matching scenes first;
1006
- # smooth scene MORPHING is the v2 (per-column buffered-flow) research build, not a hack.
1007
  try:
1008
  for k in range(strips_per_phrase):
1009
- sec = outpaint_right(pipe, ctx, subject + style, seg_w=seg, height=h, overlap=overlap, steps=4, seed=200 + g * 3)
 
1010
  ctx = sec
1011
  sec.save(out_dir / f"section-{g}.webp", "WEBP", quality=88)
1012
  yield {
 
145
  "privacy_mode": os.getenv("LIGHTLOOM_PRIVACY_MODE", "1") == "1",
146
  "cpu_count": os.cpu_count(),
147
  "director_backend": CONFIG.director_backend,
148
+ "build": "clean-scenes-3",
149
  }
150
 
151
 
 
847
  # flowing in with low delay — no "record, stop, then render". ---
848
  _SCROLL_ROOT = Path("/tmp/lightloom/scroll")
849
  _LIVE_MAX = 24 # keep at most this many session dirs on disk; sweep the oldest
850
+ _REANCHOR = 10 # repaint a fresh clean strip every N strips to reset autoregressive drift
851
 
852
 
853
  def _sweep_scroll_sessions(keep: int = _LIVE_MAX) -> None:
 
999
 
1000
  # overlap == seg means each strip carries the WHOLE previous strip as context (the max
1001
  # available, since the stored strip is seg-wide); smoothness comes from the morph prompt.
1002
+ h, overlap, seg = 512, 256, 384 # wider strips, partial overlap -> propagates less drift
1003
  strips_per_phrase = 2 # fewer, wider strips per phrase
1004
+ # CLEAN per-strip outpaint (no SLERP/SDEdit mushing — those degraded clarity). To stop
1005
+ # the long-session COLOR DRIFT of autoregressive outpainting, periodically RE-ANCHOR:
1006
+ # every _REANCHOR strips, repaint a FRESH clean strip from the prompt (ctx=None) so the
1007
+ # accumulated error resets; the organic feather + the stable session style hide the join.
1008
  try:
1009
  for k in range(strips_per_phrase):
1010
+ reanchor = g > 0 and g % _REANCHOR == 0
1011
+ sec = outpaint_right(pipe, None if reanchor else ctx, subject + style, seg_w=seg, height=h, overlap=overlap, steps=4, seed=200 + g * 3)
1012
  ctx = sec
1013
  sec.save(out_dir / f"section-{g}.webp", "WEBP", quality=88)
1014
  yield {
frontend/js/stage-scroll.js CHANGED
@@ -209,7 +209,7 @@ const Scroll = (() => {
209
  mat.uniforms.uU0.value = scrollX / STRIP_W;
210
  // 2.5D: a small depth wobble + a horizontal lean (near content leads the far)
211
  mat.uniforms.uPar.value.set(rm ? 0 : 0.010 * Math.sin(t * 0.5), rm ? 0 : 0.006 * Math.sin(t * 0.37));
212
- mat.uniforms.uLean.value = rm ? 0 : 0.018;
213
  // focus = the section under the centre of the view -> caption
214
  const centerX = scrollX + viewU * STRIP_W * 0.5;
215
  let f = null;
 
209
  mat.uniforms.uU0.value = scrollX / STRIP_W;
210
  // 2.5D: a small depth wobble + a horizontal lean (near content leads the far)
211
  mat.uniforms.uPar.value.set(rm ? 0 : 0.010 * Math.sin(t * 0.5), rm ? 0 : 0.006 * Math.sin(t * 0.37));
212
+ mat.uniforms.uLean.value = rm ? 0 : 0.011; // softer horizontal lean -> less seam offset between strips
213
  // focus = the section under the centre of the view -> caption
214
  const centerX = scrollX + viewU * STRIP_W * 0.5;
215
  let f = null;
scripts/shoot-mic-live.cjs CHANGED
@@ -72,8 +72,8 @@ const WAV = path.resolve(process.env.WAV || ".shots/narration.wav");
72
  lastCount = st.count;
73
  await page.screenshot({ path: shot("mic-live-" + Math.min(lastCount, 9) + ".png") });
74
  }
75
- if (i % 4 === 0) console.log("t=" + (i * 2 + 1) + "s", JSON.stringify({ count: st.count, transcripts: st.transcripts, sections: st.sections, pendingAhead: st.pendingAhead }));
76
- if (lastCount >= 15) break;
77
  }
78
 
79
  // stop narration
 
72
  lastCount = st.count;
73
  await page.screenshot({ path: shot("mic-live-" + Math.min(lastCount, 9) + ".png") });
74
  }
75
+ if (i % 4 === 0) console.log("t=" + (i * 2 + 1) + "s", JSON.stringify({ count: st.count, sections: (st.sections||[]).length, pendingAhead: st.pendingAhead }));
76
+ if (lastCount >= (parseInt(process.env.TARGET || "15", 10))) break;
77
  }
78
 
79
  // stop narration