feat(content): swap cosmos Orion to a text-free SVS flythrough

Replaces the JPL "Orion: Dust and Death" primary (captioned throughout — we'd
cropped it, losing framing) with STScI's "Flight Through the Orion Nebula"
(visible light, NASA SVS 30957) — a full-frame, text-free flythrough of the same
nebula. Sourced via the content pipeline (trim 10–34s + crossfade-loop → 1080p
master + base); cosmos-orbit / abyss-cosmos transitions regenerated from it.

- build_pool_manifest META: cosmos -> SVS 30957, license CC-BY-class (NASA/ESA/
  STScI), new trim window.
- Remove the now-obsolete decaption_cosmos() crop helper (the new source needs
  no caption removal).
- docs/content-candidate-pool.md: record the source swap; drop the crop note.

269 passed, 2 skipped. New clip verified text-free + full-frame by-eye;
final look to be confirmed by the operator.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
BenStullsBets
2026-06-25 09:28:10 -07:00
parent a2ef792f0f
commit 129bb23cb9
2 changed files with 14 additions and 43 deletions
+11 -12
View File
@@ -27,25 +27,24 @@ stays noncommercial**.
| id | clip | source | window (s) | license / credit |
|----|------|--------|-----------|------------------|
| `cosmos` | Orion Nebula flythrough | NASA/JPLCaltech — https://images.nasa.gov/details/JPL-20221122-SOLSYSf-0001-Orion%20Dust%20and%20Death | ~3054 | 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) | 1034 | CCBYclass — 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 | 832 | PD |
| `cosmos_hudf` | Hubble Ultra Deep Field zoom | NASA SVS — https://svs.gsfc.nasa.gov/vis/a030000/a030600/a030687/hudf-b-1920x1080p30.mov | 2044 | CCBYclass — 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 | 226 | CCBYclass — 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.
+3 -31
View File
@@ -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 ~3054s, 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 1034s, 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 832s, 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")