diff --git a/docs/content-candidate-pool.md b/docs/content-candidate-pool.md index 8086092..7c12794 100644 --- a/docs/content-candidate-pool.md +++ b/docs/content-candidate-pool.md @@ -27,25 +27,24 @@ stays non‑commercial**. | id | clip | source | window (s) | license / credit | |----|------|--------|-----------|------------------| -| `cosmos` | Orion Nebula flythrough | NASA/JPL‑Caltech — https://images.nasa.gov/details/JPL-20221122-SOLSYSf-0001-Orion%20Dust%20and%20Death | ~30–54 | PD (17 U.S.C. §105) | +| `cosmos` | Orion Nebula flythrough | NASA SVS 30957 — https://svs.gsfc.nasa.gov/30957/ (`orion_vis-1920x1080.mp4`, *Flight Through the Orion Nebula*, visible light) | 10–34 | CC‑BY‑class — credit **NASA, ESA, STScI** | -> ⚠️ **Orion is NOT text-free.** The source is the *annotated* "Orion: Dust and -> Death" visualization — NASA burns lower-third captions in throughout -> ("DUST FILAMENT", "BLUE BUBBLE", …), so trimming can't avoid them. We crop past -> them: `simulator/build_pool_manifest.py:decaption_cosmos()` keeps the top 66% of -> the frame (16:9 preserved, ~1.5× tighter framing) and re-fits to 1920×1080. Run -> it ONCE after (re)sourcing the Orion clip, then re-run `generate_media()` so the -> cosmos-orbit / abyss-cosmos transitions use the cropped base. +> ℹ️ **Orion source swapped to a text-free clip (2026-06-25).** The original +> primary was NASA/JPL's *"Orion: Dust and Death"* — an annotated visualization +> with lower-third captions ("DUST FILAMENT", "BLUE BUBBLE", …) burned in +> throughout, so trimming couldn't avoid them and a crop lost framing. Replaced +> with STScI's **Flight Through the Orion Nebula** (visible light, SVS 30957) — +> a full-frame, text-free flythrough of the same nebula. The earlier crop helper +> (`decaption_cosmos`) is gone; no caption removal is needed for this source. | `cosmos_galaxies` | Flying Through Galaxies | NASA SVS — https://svs.gsfc.nasa.gov/vis/a010000/a014900/a014950/14950_Galaxies_FlyThrough_4k.mp4 | 8–32 | PD | | `cosmos_hudf` | Hubble Ultra Deep Field zoom | NASA SVS — https://svs.gsfc.nasa.gov/vis/a030000/a030600/a030687/hudf-b-1920x1080p30.mov | 20–44 | CC‑BY‑class — credit **NASA, ESA, STScI** | | `cosmos_xdf` | eXtreme Deep Field flythrough | NASA SVS — https://svs.gsfc.nasa.gov/vis/a030000/a030600/a030681/hxdf_fly-b-1920x1080p30.mov | 2–26 | CC‑BY‑class — credit **NASA, ESA, STScI** | > ⚠️ **DISCREPANCY to fix next session.** Operator selected cosmos **#1, #3 > (Orion), #4, #5**. During processing, **#6 Galaxy Traverse was run by mistake -> instead of #3 Orion**. The Orion clip (#3) lives at -> `simulator/sample_media/cosmos/base.mp4` (the prior real base), so the pool above -> is correct — but it carries burned-in captions (see the Orion note above; now -> cropped out). **`cosmos_traverse` is an UNSELECTED extra on disk — drop it** (or +> instead of #3 Orion**. The cosmos primary now lives at +> `simulator/sample_media/cosmos/base.mp4` as the text-free SVS 30957 flythrough +> (see the Orion note above). **`cosmos_traverse` is an UNSELECTED extra on disk — drop it** (or > confirm with operator). The current ring scale id is `cosmos`; when the pool is > wired, `cosmos` becomes one pool member. diff --git a/simulator/build_pool_manifest.py b/simulator/build_pool_manifest.py index 3f0ef6c..e8eb186 100644 --- a/simulator/build_pool_manifest.py +++ b/simulator/build_pool_manifest.py @@ -55,8 +55,9 @@ CCBY_STSCI = "CC-BY-class — credit NASA, ESA, STScI" # --- Per-clip provenance: id -> (title, license, source) --- META: dict[str, tuple[str, str, str]] = { # cosmos - "cosmos": ("Orion Nebula flythrough (NASA/JPL-Caltech)", PD, - "NASA/JPL-Caltech — images.nasa.gov JPL-20221122-SOLSYSf-0001 (Orion); trim ~30–54s, crossfade-loop"), + "cosmos": ("Orion Nebula flythrough (NASA/ESA/STScI)", CCBY_STSCI, + "NASA SVS 30957 orion_vis-1920x1080 (Flight Through the Orion Nebula, visible light); " + "trim 10–34s, crossfade-loop. Text-free — replaces the captioned JPL 'Dust and Death' clip."), "cosmos_galaxies": ("Flying Through Galaxies (NASA SVS)", PD, "NASA SVS a014950 14950_Galaxies_FlyThrough_4k; trim 8–32s, crossfade-loop"), "cosmos_hudf": ("Hubble Ultra Deep Field zoom (NASA/ESA/STScI)", CCBY_STSCI, @@ -408,35 +409,6 @@ def generate_media() -> None: print(f"generated transitions/{a}-{b}.mp4 (+ .rev) from real bases") -# Fraction of frame HEIGHT kept (from the top) to drop the NASA burned-in -# lower-third captions on the cosmos Orion clip ("DUST FILAMENT", "BLUE BUBBLE", -# …). The "Orion: Dust and Death" visualization is captioned throughout, so -# trimming can't avoid them — we crop past them instead. ~1.5x tighter framing. -COSMOS_CAPTION_KEEP = 0.66 - - -def decaption_cosmos() -> None: - """Re-crop the cosmos Orion base/master IN PLACE to remove NASA's burned-in - lower-third caption band, keeping 16:9 (crop width to match, center-x, top- - anchored) then re-fitting to 1920x1080. Run ONCE after (re)sourcing the Orion - clip — re-running would crop again. Media is gitignored, so this is the - recorded, reproducible form of the operation.""" - ff = _ffmpeg() - f = COSMOS_CAPTION_KEEP - vf = f"crop=iw*{f}:ih*{f}:iw*{(1 - f) / 2}:0,scale=1920:1080" - for name, crf in (("base", "20"), ("master", "18")): - p = MEDIA / "cosmos" / f"{name}.mp4" - if not p.exists(): - continue - tmp = p.with_suffix(".decap.mp4") - subprocess.run([ - ff, "-y", "-i", str(p), "-vf", vf, - "-c:v", "libx264", "-crf", crf, "-pix_fmt", "yuv420p", "-an", str(tmp), - ], check=True, capture_output=True) - tmp.replace(p) - print(f"de-captioned cosmos/{name}.mp4 (kept top {int(f * 100)}%)") - - def main(argv: list[str]) -> None: manifest = build_manifest() MANIFEST.write_text(json.dumps(manifest, indent=2, ensure_ascii=False) + "\n")