Merge pull request 'feat(sim): sky scale + auto-start experience + drop reef_hawaiian' (#29) from feat/sky-scale-expanded-pools into main

This commit was merged in pull request #29.
This commit is contained in:
2026-06-29 14:01:46 +00:00
630 changed files with 6906 additions and 1123 deletions
+252
View File
@@ -63,6 +63,258 @@ stays noncommercial**.
> confirm with operator). The current ring scale id is `cosmos`; when the pool is
> wired, `cosmos` becomes one pool member.
## 🏗️ BUILD (2026-06-28, branch `feat/sky-scale-expanded-pools`) — curated pools + sky scale
> **Decision:** add the `sky` scale + **curate every pool to ~78 clips** (operator chose
> "curate, expand from the sim" over a full ~2,000-morph bake). Morphs are **cheap and
> length-independent** — `transition_cmd` does `trim=0:3`, so each morph uses only the
> first 3s of each clip (26MB all-intra), so the curated bake is ~616 morphs ≈ ~1.8GB /
> ~30 min. **Long clips (4560s) validated:** a 53s loop bitrate-capped (libx264 crf 23,
> `-maxrate 2.8M -bufsize 5.6M`, 1080p) = ~20MB, under the ~25MB front-proxy/LFS ceiling.
> The pool processor downloads each source, trims its long window, [vidstab-stabilizes /
> xfade-splices where flagged], crossfade-loops, and writes the capped proxy to
> `simulator/sample_media/<id>/base.mp4`.
>
> **Curated lineup (~43 clips; 30 new + 13 existing reused; prune/expand from the sim):**
> - **cosmos (7):** cosmos, cosmos_galaxies + cosmos_orion, _tarantula, _westerlund, _southernring, _carina_eso
> - **orbit (7):** orbit_planetearth, _bluemarble + orbit_aurora2025, _citylights, _helene, _epic, _illuminated
> - **sky (8) NEW SCALE** (between orbit & coast): sky_grca_templesa, sky_greenland_landice (stab), sky_greenland_suture (stab), sky_jungle_amazon (amazon+canopy splice), sky_jungle_waterfall, sky_coast_cliffspain, sky_mtn_castlecrags, sky_mtn_rocky
> - **coast (7):** coast_birdrock, _surfgrass + coast_kelp, _otters, _kalaloch, _seals, _mist (dropped short drakesbeach/elkbeach)
> - **reef (6):** reef_lionfish, _spawning, _hawkfish, _coralspacific + reef_redsea, _flowergarden (dropped murky reef_snapper; dropped reef_hawaiian — text overlay)
> - **abyss (7):** abyss_wow, _midwaterexp, _hiding + abyss_bigfin, _dandelion, _octopus, _seapig
>
> **Remaining build steps:** (1) processor finishes the 30 new bases → (2) wire
> `build_pool_manifest.py` (RING_ORDER + `sky`, POOLS, SCALE_AUDIO, META/AFFECT/LABELS for
> new clips) → (3) regenerate manifest + `--media` morph bake (~616) → (4) update
> `test_build_pool_manifest.py` morph-count assertion + run pytest/playwright → (5) ship via
> §9 (localhost+E2E → PPE). All dropped/unpicked Round-4 candidates remain in
> `/review_pool.html` for easy add-back.
## 📜 License policy FINALIZED (2026-06-28) + Round-4 expanded candidates
> **License policy (supersedes the "strict PD" framing above).** The operator confirmed
> the installation **alters** footage (needs derivative rights), **will keep a credits
> list**, and **may be shown commercially**. **Usable:** `CC0`, US-gov **Public Domain**,
> **CC BY**, **CC BY-SA** (share-alike accepted), **Pexels License**. **Never usable:**
> **CC BY-ND** (no derivatives) and **all NonCommercial (`CC BY-NC*`)** variants. For CC
> BY / BY-SA, credit the author + note "footage altered." Pexels needs no attribution.
> Recorded in agent memory `media-license-policy`.
>
> ⚠️ **License correction (abyss sourcing):** **Schmidt Ocean Institute, Nautilus Live /
> Ocean Exploration Trust, and MBARI are NonCommercial / all-rights-reserved → NOT usable.**
> Deep-sea picks are NOAA Ocean Exploration (PD) / CC0 only.
>
> **Round-4 (2026-06-28): ~10 fresh candidates PER altitude**, sourced under the widened
> licenses and chosen for **long clean windows (4560s)** per the operator's "make the
> videos longer" ask (we cap bitrate to keep LFS objects <25MB). All 56 are HEAD-verified
> and live in the streaming gallery **`/review_pool.html`** (the URLs/windows/licenses are
> recorded in that committed file). Awaiting operator picks per altitude. Highlights:
> cosmos = Orion/Tarantula/Westerlund/Bubble/Carina-ESO/Stephan's-Quintet/Southern-Ring
> flythroughs (NASA SVS PD + ESA/ESO CC BY); orbit = ISS auroras + city-lights + storm-limb
> + EPIC full-disk + ESA Sentinel (PD/CC0/CC BY-SA); sky = volcano/savanna/autumn/sea-of-clouds/
> dunes/salt-flats/vineyards/badlands/boreal terrains; coast = kelp/otters/tidepool-crab/
> surf-on-rock/gulls/seals; reef = Red Sea (CC BY-SA) + 6 NOAA reels (clear-water windows);
> abyss = bigfin squid/dandelion siphonophore/psychedelic medusa/ghost shark/octopus/
> CC0 sea-pig/bamboo-coral forest/vents/dragonfish/isopod.
## ☁️ sky — PROPOSED NEW scale (candidates, awaiting operator review)
> **New altitude: "up in the clouds, flying over the earth" (sourced 2026-06-27).**
> A new ring scale that sits **between `orbit` (ISS / space) and `coast` (ground)** —
> the airplane-window / low-flight layer. Proposed slug **`sky`**, emoji ☁️; ring
> order would become cosmos → orbit → **sky** → coast → reef → abyss (operator to
> confirm slug + placement). The 20 candidates below are **NOT yet downloaded or
> processed** — they are a review list. Watch them streaming from the source at
> **`/review_sky.html`** (served by the sim; nothing downloads until you press
> play), then pick the keepers and we'll trim → crossfade-loop → 1080p them into a
> pool like every other scale. All are strict US-gov **public domain** unless noted;
> all direct URLs HEAD-verified 200 + `video/mp4` on 2026-06-27.
> ✅ **OPERATOR SELECTED (2026-06-28) — 15 clips, SOURCING CLOSED** (Selected band on `/review_sky.html`):
> - *Aircraft aerials (4):* `sky_grca_templesa`, `sky_grca_templesb`,
> `sky_greenland_landice` (**stabilize**, vidstab — wobbly), `sky_greenland_suture` (**stabilize**).
> *(`sky_greenland_gopro` removed.)*
> - *Rainforest (4):* `sky_jungle_amazon` (**spliced with `sky_jungle_canopy`** into one clip,
> short crossfade at the seam), `sky_jungle_river`, `sky_jungle_waterfall`,
> `sky_jungle_warmlight`. *(All Pexels License.)*
> - *Coast (3):* `sky_coast_dunes` (CC-BY — credit; downscale the 4K),
> `sky_coast_turquoise`, `sky_coast_cliffspain` (Pexels).
> *(`sky_coast_norway` and `sky_coast_cliffsurf2` removed.)*
> - *Mountains (4):* `sky_mtn_rocky`, `sky_mtn_castlecrags`, `sky_mtn_granite`,
> `sky_mtn_sierra` (swapped in for `sky_mtn_snowfield`).
>
> Balance: aircraft 4 · rainforest 4 · coast 3 · mountains 4. The Round-3b/3c
> rainforest candidates not listed above (`misty`/`clouds`/`riverhd`/`textured` +
> `_alt`s) were **not chosen**.
>
> **Clip-length audit (2026-06-28, measured via cv2 on the on-disk pool):** shortest
> existing loops are `coast_drakesbeach` **14s** and `coast_elkbeach` **17s** (both the
> ground-level coast scale), then `reef_snapper` 20s, `cosmos_miri` 21s; everything else
> ~23s (`reef_spawning` 27s longest). The new `sky` clips all have ≥24s windows → bake to
> ~2223s. Open option: re-trim the two short coast outliers to longer windows during the
> sky processing pass.
>
> **Dropped / superseded:** the other 15 round-1 candidates; round-2 coast
> `sky_coast_icefjord` + `sky_coast_moher`; round-2 mountains `sky_mtn_shasta` +
> `sky_mtn_snowfield`; the round-2 rainforest batch (lidar/DVIDS jungle — all rejected);
> round-3 coast `sky_coast_reef` (unpicked) + `sky_coast_oregon` (humans + nauseating
> FPV). `sky_coast_reeflagoon`/`sky_coast_cliffsurf` (too short) → replaced; the short
> round-3 rainforest clips (`amazon`/`canopy`/`river` kept; `misty`/`clouds`/`riverhd`
> too short) → replaced in Round-3b. Live review page: `/review_sky.html`.
**Group A — real aerial, from aircraft** (the heart of the scale):
| id | clip | source | direct media | window (s) | notes |
|----|------|--------|--------------|-----------|-------|
| `sky_grca_pivot` | Grand Canyon — high-altitude, straight down + slow 360° pivot | NPS GRCA b-roll hd09 — https://www.nps.gov/grca/learn/photosmultimedia/b-roll_hd09.htm | https://www.nps.gov/nps-audiovideo/audiovideo/302c9dbf-f9ad-4964-bbf3-a21b536f36ed1080p.mp4 | 024 | PD · 1080p · text/human-free; ~25s clip (use whole) |
| `sky_grca_upstream` | Grand Canyon — high-elevation glide tracking upstream | NPS GRCA hd09 (same page) | https://www.nps.gov/nps-audiovideo/audiovideo/237ed336-b101-4a44-81f1-36d692c08a7a1080p.mp4 | 1236 | PD · 1080p · trim before the mid-clip zoom |
| `sky_grca_templesa` | Grand Canyon — banking aerial over cliffs & "temples" (A) | NPS GRCA hd10 — https://www.nps.gov/grca/learn/photosmultimedia/b-roll_hd10.htm | https://www.nps.gov/nps-audiovideo/audiovideo/0121cbe5-b185-4f9f-94af-e55f3ade40161080p.mp4 | 024 | PD · 1080p |
| `sky_grca_templesb` | Grand Canyon — cliffs & "temples" aerial (B, alt angle) | NPS GRCA hd10 (same page) | https://www.nps.gov/nps-audiovideo/audiovideo/0b014199-8287-441c-b535-2416d7b049521080p.mp4 | 024 | PD · 1080p |
| `sky_grca_river` | Grand Canyon — low-elevation aerial skimming the Colorado River | NPS GRCA hd08 — https://www.nps.gov/grca/learn/photosmultimedia/b-roll_hd08.htm | https://www.nps.gov/nps-audiovideo/audiovideo/008a5147-7b14-49a1-9871-13aeb03325aa1080p.mp4 | 024 | PD · 1080p · lower/faster altitude variety |
| `sky_greenland_gopro` | IceBridge — Western Greenland, forward flight (GoPro) | NASA SVS 13474 — https://svs.gsfc.nasa.gov/13474 | https://svs.gsfc.nasa.gov/vis/a010000/a013400/a013474/YOUTUBE_1080_13474_2019_GoPro_Front_4K_youtube_1080.mp4 | 3054 | PD · 1080p (4K master on page) |
| `sky_greenland_landice` | IceBridge — N. Greenland, low flight over snowy land ice | NASA SVS 13472 — https://svs.gsfc.nasa.gov/13472 | https://svs.gsfc.nasa.gov/vis/a010000/a013400/a013472/YOUTUBE_1080_13472_Panasonic_2016_Airborne_LandIce_4K_youtube_1080.mp4 | 2044 | PD · 1080p |
| `sky_svalbard_land` | IceBridge — Svalbard, over glaciated mountains | NASA SVS 13473 — https://svs.gsfc.nasa.gov/13473 | https://svs.gsfc.nasa.gov/vis/a010000/a013400/a013473/YOUTUBE_1080_13473_LandIce_2017_iPhone_youtube_1080.mp4 | 2549 | PD · 1080p |
| `sky_svalbard_seaice` | IceBridge — Svalbard, banking over fractured pack ice | NASA SVS 13477 — https://svs.gsfc.nasa.gov/13477 | https://svs.gsfc.nasa.gov/vis/a010000/a013400/a013477/YOUTUBE_1080_13477_iPhone_2017_SeaIce_Broken_youtube_1080.mp4 | 2044 | PD · 1080p · abstract ice leads |
| `sky_petermann_icebergs` | IceBridge — over icebergs toward Petermann calving front | NASA SVS 13471 — https://svs.gsfc.nasa.gov/13471 | https://svs.gsfc.nasa.gov/vis/a010000/a013400/a013471/YOUTUBE_1080_3471_4K_SeaIce_2017_Icebergs_CalvingFront_youtube_1080.mp4 | 3054 | PD · 1080p (4K master) |
| `sky_greenland_suture` | IceBridge — N. Greenland, overhead sea-ice patterning ("Suture") | NASA SVS 13472 — https://svs.gsfc.nasa.gov/13472 | https://svs.gsfc.nasa.gov/vis/a010000/a013400/a013472/YOUTUBE_1080_13472_4K_SeaIce_2017_Suture_youtube_1080.mp4 | 1539 | PD · 1080p (4K master) · nadir ice texture |
| `sky_helheim` | "The Helheim Experience" — scenic C-130 flight near Helheim Glacier | NASA SVS 11862 — https://svs.gsfc.nasa.gov/11862/ | https://svs.gsfc.nasa.gov/vis/a010000/a011800/a011862/Helheim_scenic_youtube_hq.mov | 4064 | PD · ⚠ **720p only** · source has a music bed (mute it) |
| `sky_clouds_mountains` | "Cloudy with a Chance of Mountains" — clouds + mountains aerial | US DoD / DVIDS 464215 — https://www.dvidshub.net/video/464215/cloudy-with-chance-mountains-no-lower-thirds | https://d34w7g4gy10iej.cloudfront.net/video/1604/DOD_103314280/DOD_103314280-1024x576-1769k.mp4 | scrub | PD (DoD) · ⚠ **576p** · "no lower thirds" cut; scrub to an aerial-only segment |
**Group B — cloudscapes & atmosphere (CG renders, "in/above the clouds"):**
| id | clip | source | direct media | window (s) | notes |
|----|------|--------|--------------|-----------|-------|
| `sky_clouds_na` | Clouds over North America — cinematic cloud-layer sweep | NASA SVS 3860 — https://svs.gsfc.nasa.gov/3860/ | https://svs.gsfc.nasa.gov/vis/a000000/a003800/a003860/hsymph_na.mp4 | 327 | PD · 1080p · closest "sea of clouds" beauty shot (~115 MB) |
| `sky_clouds_gulf` | Simulated clouds over the Gulf — artistic "beauty" render | NASA SVS 3921 — https://svs.gsfc.nasa.gov/3921/ | https://svs.gsfc.nasa.gov/vis/a000000/a003900/a003921/michael_beauty_v08_1080p.mp4 | 226 | PD · 1080p · art-lit towering clouds (~118 MB) |
| `sky_geos_7km` | GEOS-5 modeled clouds — 7 km global resolution | NASA SVS 3657 — https://svs.gsfc.nasa.gov/3657/ | https://svs.gsfc.nasa.gov/vis/a000000/a003600/a003657/comp_geos5_7km.mp4 | 327 | PD · 1080p · small file (~23 MB, LFS-friendly) |
| `sky_geos_35km` | GEOS-5 modeled clouds — 3.5 km global resolution | NASA SVS 3659 — https://svs.gsfc.nasa.gov/3659/ | https://svs.gsfc.nasa.gov/vis/a000000/a003600/a003659/comp_geos5_3.5km_new.mp4 | 428 | PD · 1080p · ⚠ white flashes at loop-restart — land window between them (~141 MB) |
| `sky_geos_visible` | GEOS-5 "visible" — photoreal clouds + aerosols deck | NASA SVS 30591 — https://svs.gsfc.nasa.gov/30591/ | https://svs.gsfc.nasa.gov/vis/a030000/a030500/a030591/geos_visible_1080p.mp4 | 1034 | PD · 1080p (4K master) · ⚠ **large ~573 MB**; scrub for any colorbar |
**Group C — atmospheric limb / full-disk (orbit-adjacent, optional — may overlap `orbit`):**
| id | clip | source | direct media | window (s) | notes |
|----|------|--------|--------------|-----------|-------|
| `sky_earth_atmos` | Spinning Earth with atmosphere, clouds & night lights | NASA SVS 5570 — https://svs.gsfc.nasa.gov/5570/ | https://svs.gsfc.nasa.gov/vis/a000000/a005500/a005570/Earth_wAtmos_spin_02_1080p60.mp4 | 024 | PD · 1080p60 (4K master) · visible atmospheric limb + cloud layer (~33 MB) |
| `sky_goes_fulldisk` | GOES-16 — first full-disk Earth (true color) | NOAA GOES-R — https://www.goes-r.gov/multimedia/dataAndImageryVideosGoes-16.html | https://www.goes-r.gov/multimedia/originalVideoCopies/dataAndImagery/GOES16/ABI_Jan15_2017_fulldisk_loop.mp4 | 07 (loop) | PD (NOAA/NASA) · 1440×1080 · ⚠ tiny NOAA+NASA logo bottom-right (croppable) |
### Round-2 candidates (2026-06-28) — aerial over rainforest / coast / mountains
All direct URLs HEAD-verified 200 on 2026-06-28. Strict US-gov **public domain**
unless a license is given; CC-BY/CC-BY-SA usable with the credit shown; ⚠ Pexels
clips use a custom non-PD license (flagged). "Human-free" on the CC-BY/Pexels clips
is from descriptions — eyeball the window before baking.
**🌴 rainforest (aerial over canopy)** — *clean strict-PD photographic rainforest aerial is thin; NASA's are lidar renders, the DVIDS clips need windowing:*
| id | clip | source | direct media | window (s) | notes |
|----|------|--------|--------------|-----------|-------|
| `sky_canopy_transect` | 50 km of Brazilian forest canopy — continuous flyover | NASA SVS 4530 — https://svs.gsfc.nasa.gov/4530 | https://svs.gsfc.nasa.gov/vis/a000000/a004500/a004530/transect2014_1080p30.mp4 | 1842 | PD · 1080p (4K avail) · ⚠ lidar render, not photographic |
| `sky_canopy_flythrough` | Flying through LIDAR canopy — into the leaves | NASA SVS 4532 — https://svs.gsfc.nasa.gov/4532/ | https://svs.gsfc.nasa.gov/vis/a000000/a004500/a004532/flythrough_1080p30.mp4 | 1034 | PD · 1080p · ⚠ lidar render; abstract |
| `sky_jungle_pr` | Puerto Rico — helicopter aerial over jungle mountains | DVIDS 584062 — https://www.dvidshub.net/video/584062/ | https://d34w7g4gy10iej.cloudfront.net/video/1802/DOD_105308416/DOD_105308416.mp4 | 3458 | PD (USACE) · 1080p, no audio · ⚠ recovery b-roll — only mountain-overflight is clean |
| `sky_jungle_thai` | Thailand — aerial over dense jungle canopy (Cobra Gold) | DVIDS 585804 — https://www.dvidshub.net/video/585804/ | https://d34w7g4gy10iej.cloudfront.net/video/1802/DOD_105335187/DOD_105335187.mp4 | 024 | PD (USMC) · ≤1080p · ⚠ live-fire exercise — pick early canopy beat |
**🌊 coast — no humans (aerial):**
| id | clip | source | direct media | window (s) | license / notes |
|----|------|--------|--------------|-----------|-----------------|
| `sky_coast_icefjord` | Greenland — Ilulissat ice fjord, glaciers meeting the sea | NASA SVS 11982 — https://svs.gsfc.nasa.gov/11982/ | https://svs.gsfc.nasa.gov/vis/a010000/a011900/a011982/Aerials.webm | 3054 | PD · 4K webm ~56 MB · real helicopter aerials (1080p mp4 `Aerials_2.mp4` also live, ~282 MB) |
| `sky_coast_moher` | Cliffs of Moher — drone over Atlantic sea cliffs | Wikimedia — https://commons.wikimedia.org/wiki/File:Cliffs_of_Moher_drone-video.webm | https://upload.wikimedia.org/wikipedia/commons/6/62/Cliffs_of_Moher_drone-video.webm | 1539 | **CC BY-SA 4.0 — credit Wiebe de Jager** · 1080p · use over-water window |
| `sky_coast_norway` | Arctic Norway — fjords &amp; coastal waterways (FPV drone) | Wikimedia — https://commons.wikimedia.org/wiki/File:Aerial_imagery_of_fjords_and_rivers_in_Arctic_Norway.webm | https://upload.wikimedia.org/wikipedia/commons/8/80/Aerial_imagery_of_fjords_and_rivers_in_Arctic_Norway.webm | 6084 | **CC BY 3.0 — credit anotherview** · 4K ⚠ ~485 MB, trim |
| `sky_coast_dunes` | The Slufter, Texel — coastal dunes &amp; tidal channels | Wikimedia — https://commons.wikimedia.org/wiki/File:The_Slufter_from_above.webm | https://upload.wikimedia.org/wikipedia/commons/1/12/The_Slufter_from_above.webm | 3054 | **CC BY 3.0 — credit Sander van Schie De Verfilmer** · 4K ⚠ ~436 MB, trim |
| `sky_coast_reeflagoon` | Coral reef / turquoise lagoon from above | Pexels 12952333 — https://www.pexels.com/video/drone-video-of-coral-reefs-under-turquoise-sea-water-12952333/ | https://videos.pexels.com/video-files/12952333/12952333-hd_1920_1080_25fps.mp4 | 024 | ⚠ **Pexels License (not PD)** · 1080p (1440p avail) · "No People" tag — confirm |
| `sky_coast_cliffsurf` | Rugged cliff coastline above the surf | Pexels 5619876 — https://www.pexels.com/video/drone-footage-of-a-cliff-coastline-above-the-sea-water-5619876/ | https://videos.pexels.com/video-files/5619876/5619876-hd_1920_1080_25fps.mp4 | 024 | ⚠ **Pexels License (not PD)** · 1080p ~8 MB · confirm no surfers/boats |
**⛰️ mountains (aerial over peaks &amp; ridgelines)** — *the richest strict-PD vein (NPS + US Forest Service):*
| id | clip | source | direct media | window (s) | notes |
|----|------|--------|--------------|-----------|-------|
| `sky_mtn_rocky` | Rocky Mountain NP — aerial over alpine summits &amp; tundra | NPS — https://www.nps.gov/media/video/view.htm?id=8E66DB80-64C2-4258-B878-5F9244FB6C60 | https://www.nps.gov/nps-audiovideo/audiovideo/188046ff-c9d6-4859-8c7a-1e0d3d306ed61080p.mp4 | 6084 | PD · 1080p · pick peaks segment (Trail Ridge Rd in some shots) |
| `sky_mtn_castlecrags` | Castle Crags — past jagged granite spires &amp; ridgelines | DVIDS 998726 — https://www.dvidshub.net/video/998726/ | https://d34w7g4gy10iej.cloudfront.net/video/2603/DOD_111563303/DOD_111563303.mp4 | 120144 | PD (USFS) · 1080p · confirmed no text/people — strongest pick |
| `sky_mtn_shasta` | Mount Shasta — drone aerial of the snow-capped volcano | DVIDS 998733 — https://www.dvidshub.net/video/998733/ | https://d34w7g4gy10iej.cloudfront.net/video/2603/DOD_111563312/DOD_111563312.mp4 | 3054 | PD (USFS) · 1080p · distant town in part of clip |
| `sky_mtn_granite` | Shasta-Trinity NF — high alpine terrain near Granite Peak | DVIDS 998735 — https://www.dvidshub.net/video/998735/ | https://d34w7g4gy10iej.cloudfront.net/video/2603/DOD_111563314/DOD_111563314.mp4 | 90114 | PD (USFS) · 1080p · ridgelines, no text/people noted |
| `sky_mtn_snowfield` | Mount Shasta slopes — over white alpine snowfields | DVIDS 998725 — https://www.dvidshub.net/video/998725/ | https://d34w7g4gy10iej.cloudfront.net/video/2603/DOD_111563300/DOD_111563300.mp4 | 3054 | PD (USFS) · 1080p · favor higher-altitude snow (trailhead may appear low) |
| `sky_mtn_sierra` | Sierra near Peddler Hill — snow-blanketed high country | DVIDS 996457 — https://www.dvidshub.net/video/996457/ | https://d34w7g4gy10iej.cloudfront.net/video/2602/DOD_111530221/DOD_111530221.mp4 | 4064 | PD (USFS) · 1080p · softer snowy ridges |
### Round-3 candidates (2026-06-28) — fresh rainforest + longer reef/cliff
Replaces the rejected round-2 rainforest batch, and gives the two "liked but too
short" coast subjects proper length. All HEAD-verified 200 on 2026-06-28; all
durations support a 24s+ window. **Mostly Pexels License** (free to use, **not**
PD/CC — flagged) since clean strict-PD photographic aerial in these subjects is
effectively absent; one CC-BY option included. Human-free is per description —
eyeball the window before baking.
**🌴 rainforest — fresh batch (photographic drone, wild/uninhabited):**
| id | clip | direct media | window (s) | license / notes |
|----|------|--------------|-----------|-----------------|
| `sky_jungle_amazon` | Lush Amazon rainforest canopy — slow aerial push | https://videos.pexels.com/video-files/31291128/13360655_3840_2160_60fps.mp4 | 327 | ⚠ Pexels · 4K60 · confirmed no people/buildings/roads/watermark — **top pick** · [page](https://www.pexels.com/video/aerial-view-of-lush-amazon-rainforest-canopy-31291128/) |
| `sky_jungle_canopy` | Lush green jungle canopy — gliding aerial | https://videos.pexels.com/video-files/29780524/12796533_1920_1080_25fps.mp4 | 226 | ⚠ Pexels · native 1080p ~61 MB · [page](https://www.pexels.com/video/aerial-view-of-lush-green-jungle-canopy-29780524/) |
| `sky_jungle_river` | Amazon rainforest river through unbroken jungle | https://videos.pexels.com/video-files/35969886/15251199_3840_2160_30fps.mp4 | 327 | ⚠ Pexels · 4K · the "jungle river" angle · [page](https://www.pexels.com/video/stunning-aerial-view-of-amazon-rainforest-river-35969886/) |
| `sky_jungle_misty` | Misty mountain forest — low cloud over jungle hills | https://videos.pexels.com/video-files/34697024/14706326_3840_2160_30fps.mp4 | 327 | ⚠ Pexels · 4K · cloud-forest mood · [page](https://www.pexels.com/video/misty-mountain-forest-aerial-view-in-dense-jungle-34697024/) |
| `sky_jungle_clouds` | Lush greenery shrouded in clouds — aerial | https://videos.pexels.com/video-files/36998596/15673868_3840_2160_60fps.mp4 | 327 | ⚠ Pexels · 4K60 ~19 MB (small) · [page](https://www.pexels.com/video/aerial-view-of-lush-greenery-shrouded-in-clouds-36998596/) |
| `sky_jungle_riverhd` | Serene jungle river landscape — aerial | https://videos.pexels.com/video-files/35897960/15226438_1920_1080_30fps.mp4 | 024 | ⚠ Pexels · native 1080p ~25 MB (fits LFS as-is) · [page](https://www.pexels.com/video/serene-aerial-view-of-jungle-river-landscape-35897960/) |
**🌊 coast — longer replacements (≥26s of footage):**
| id | clip | direct media | window (s) | dur | license / notes |
|----|------|--------------|-----------|-----|-----------------|
| `sky_coast_reef` | Coral reef + blue lagoon, Balicasag (replaces `reeflagoon`) | https://videos.pexels.com/video-files/36379860/15428423_3840_2160_60fps.mp4 | 428 | 32s | ⚠ Pexels · 4K60 · truest coral match · ⚠ dive site — check window for boats · [page](https://www.pexels.com/video/aerial-drone-view-of-balicasag-island-coral-reefs-36379860/) |
| `sky_coast_turquoise` | Rocks in shallow turquoise water, straight down (reeflagoon alt) | https://videos.pexels.com/video-files/12738229/12738229-uhd_2560_1440_30fps.mp4 | 428 | 32s | ⚠ Pexels · 1440p · cleanest turquoise (rocky seabed > coral) · [page](https://www.pexels.com/video/drone-view-of-rocks-in-shallow-turquoise-water-12738229/) |
| `sky_coast_cliffsurf2` | Mountain cliffs above the sea, crashing surf (replaces `cliffsurf`) | https://videos.pexels.com/video-files/4385207/4385207-hd_1920_1080_30fps.mp4 | 832 | 50s | ⚠ Pexels · native 1080p · rugged cliffs + surf, no man-made · [page](https://www.pexels.com/video/drone-footage-of-mountain-cliffs-above-the-sea-water-4385207/) |
| `sky_coast_cliffspain` | Dramatic Atlantic sea cliffs, N. Spain (cliffsurf alt) | https://videos.pexels.com/video-files/36668415/15545045_3840_2160_60fps.mp4 | 125 | 26s | ⚠ Pexels · 4K60 · page-confirmed no people/boats/buildings/text · [page](https://www.pexels.com/video/dramatic-cliffs-in-northern-spain-with-ocean-views-36668415/) |
| `sky_coast_oregon` | Oregon Coast — rugged Pacific sea cliffs &amp; surf (FPV drone) | https://upload.wikimedia.org/wikipedia/commons/4/40/Oregon_Coast_Odyssey-_FPV_Drone_Captures_Stunning_Ocean_Views.webm | 2044 | 96s | **CC BY 3.0 — credit EagleView** · 4K · the one clean CC cliff option · ⚠ FPV = faster/tilted motion · [page](https://commons.wikimedia.org/wiki/File:Oregon_Coast_Odyssey-_FPV_Drone_Captures_Stunning_Ocean_Views.webm) |
**🌴 Round-3b rainforest — longer versions of the three liked-but-too-short moods (still open):**
Durations measured via ffprobe; all comfortably support a 24s window. All ⚠ Pexels License.
| id | clip | direct media | window (s) | dur | notes |
|----|------|--------------|-----------|-----|-------|
| `sky_jungle_misty` | Misty rainforest in dense fog — fog rolling over canopy | https://videos.pexels.com/video-files/30770305/13162099_3840_2160_30fps.mp4 | 1034 | 120s | 4K · top misty pick, no flags · [page](https://www.pexels.com/video/misty-rainforest-aerial-view-in-dense-fog-30770305/) |
| `sky_jungle_misty_alt` | Misty mountainous jungle, Vietnam — mist on ridgelines | https://videos.pexels.com/video-files/30575002/13092740_3840_2160_60fps.mp4 | 327 | 31s | 4K60 · cloud-forest ridgelines · [page](https://www.pexels.com/video/misty-mountainous-jungle-in-vietnam-30575002/) |
| `sky_jungle_clouds` | Serene misty green hills — same shoot as original, longer | https://videos.pexels.com/video-files/36998553/15673828_3840_2160_60fps.mp4 | 529 | 38s | 4K60 · adjacent ID to the liked clip · [page](https://www.pexels.com/video/serene-aerial-view-of-misty-green-hills-36998553/) |
| `sky_jungle_clouds_alt` | Flying through clouds over green hills | https://videos.pexels.com/video-files/28499216/12400645_3840_2160_25fps.mp4 | 1236 | 49s | 4K · strongest "shrouded" feel · [page](https://www.pexels.com/video/aerial-view-through-clouds-over-green-hills-28499216/) |
| `sky_jungle_riverhd` | Lush green forest &amp; river — river through canopy | https://videos.pexels.com/video-files/35612503/15091993_3840_2160_30fps.mp4 | 1034 | 54s | 4K · 2nd river (redundant if one river is enough) · [page](https://www.pexels.com/video/aerial-view-of-lush-green-forest-and-river-35612503/) |
**✨ Round-3c rainforest — more distinct looks (balance rainforest to ~4, still open):**
Distinct subjects beyond canopy/river/misty. All ⚠ Pexels License, all ≥33s.
Gaps the search could NOT fill at the 28s + clean bar: golden-hour raking light,
volcanic-rainforest ridges, dramatic oxbow S-curves, mist-in-columns (closest
options were <28s, vertical, contaminated with villages/canoes, or temperate biome).
| id | clip | direct media | window (s) | dur | look |
|----|------|--------------|-----------|-----|------|
| `sky_jungle_waterfall` | Waterfall plunging out of dense jungle canopy | https://videos.pexels.com/video-files/8334944/8334944-uhd_4096_2160_24fps.mp4 | 1034 | 46s | WATERFALL — fully distinct, strongest new look · [page](https://www.pexels.com/video/drone-footage-of-a-forest-with-waterfalls-8334944/) |
| `sky_jungle_warmlight` | Tropical jungle canopy in warm hazy morning light | https://videos.pexels.com/video-files/26829790/12015586_3840_2160_30fps.mp4 | 428 | ~33s | warm low-light (closest to golden-hour found) · [page](https://www.pexels.com/video/aerial-view-of-a-tropical-jungle-with-fog-and-trees-26829790/) |
| `sky_jungle_textured` | Varied jungle canopy — mixed greens &amp; emergent texture | https://videos.pexels.com/video-files/2317719/2317719-uhd_3840_2160_24fps.mp4 | 630 | 37s | textured/emergent canopy, richer than the plain glide · [page](https://www.pexels.com/video/aerial-footage-of-a-jungle-2317719/) |
> **Round-3 sourcing note:** reef/lagoon clips ≥25s are scarce (most are 1220s); the
> two above clear the bar. Cliff-coast supply is good. The genuine remaining gap is
> *strict-PD / CC* reef + rainforest — Commons has no clean aerial reef video and only
> short/credit-bound rainforest, so Pexels is the pragmatic floor here.
> **Round-2 sourcing notes:** NPS bans in-park drone ops (2014) → almost no NPS
> *aerial* coast/forest; DVIDS coast aerials nearly all had people/boats/vehicles;
> photographic strict-PD rainforest aerial is the genuine gap (NASA's are lidar
> renders) — Pixabay/Pexels drone canopy is the fallback if none of the above land.
> DVIDS direct files serve as `binary/octet-stream` but are valid mp4 (the page uses
> `<source type="video/mp4">` so they preview inline).
> **Sources considered & rejected** (so a future session doesn't re-chase them):
> NOAA's high-res GOES satellite loops (FOUREASTER full-disk, Irma/Maria geocolor,
> "Clouds with Precipitation", "Satellite Models") all carry burned-in telemetry
> bars / political borders / date stamps / colorbars → **unusable**. NOAA's clean
> globes (SOS "Clouds real-time", "Blue Marble") are text-free but only **400×400**
> *and* overlap the existing `orbit` blue-marble. NESDIS "Earth from Orbit" and the
> Ocean-Today "Hurricane Hunters" piece are produced/narrated packages with
> text+people. NASA "Fly Above Alaskan Glaciers" is 360°/equirectangular (not a flat
> clip). The IceBridge cockpit "banking over Disko Bay" cut has windshield/panel in
> frame. The full **NASA SVS IceBridge 1347113477** series is a rich vein if more
> aerial-ice clips are wanted later (each page also offers multi-GB 4K `.mov`
> masters).
## 🛰️ orbit (pool of 3)
| id | clip | source | window (s) | license |
+89 -7
View File
@@ -38,21 +38,32 @@ MANIFEST = MEDIA / "manifest.json"
# --- Pools: scale id -> ordered clip ids (primary first) (content-candidate-pool.md) ---
POOLS: dict[str, list[str]] = {
"cosmos": ["cosmos", "cosmos_miri", "cosmos_galaxies", "cosmos_hudf", "cosmos_xdf"],
"orbit": ["orbit_planetearth", "orbit_crewobs", "orbit_bluemarble"],
"coast": ["coast_birdrock", "coast_surfgrass", "coast_elkbeach", "coast_drakesbeach"],
"reef": ["reef_lionfish", "reef_spawning", "reef_hawkfish", "reef_snapper", "reef_coralspacific"],
"abyss": ["abyss_wow", "abyss_midwaterexp", "abyss_hiding"],
"cosmos": ["cosmos", "cosmos_galaxies", "cosmos_orion", "cosmos_tarantula",
"cosmos_westerlund", "cosmos_southernring", "cosmos_carina_eso"],
"orbit": ["orbit_planetearth", "orbit_bluemarble", "orbit_aurora2025",
"orbit_citylights", "orbit_helene", "orbit_epic"],
"sky": ["sky_grca_templesa", "sky_greenland_landice", "sky_greenland_suture",
"sky_jungle_amazon", "sky_jungle_waterfall", "sky_coast_cliffspain",
"sky_mtn_castlecrags", "sky_mtn_rocky"],
"coast": ["coast_birdrock", "coast_surfgrass", "coast_kelp", "coast_otters",
"coast_kalaloch", "coast_seals", "coast_mist"],
"reef": ["reef_lionfish", "reef_spawning", "reef_hawkfish", "reef_coralspacific",
"reef_redsea", "reef_flowergarden"],
"abyss": ["abyss_wow", "abyss_midwaterexp", "abyss_hiding", "abyss_bigfin",
"abyss_dandelion", "abyss_octopus", "abyss_seapig"],
}
# Ring order (large -> small, wraps): cosmos -> orbit -> coast -> reef -> abyss -> cosmos.
RING_ORDER = ["cosmos", "orbit", "coast", "reef", "abyss"]
# Ring order (large -> small, wraps): cosmos -> orbit -> sky -> coast -> reef -> abyss -> cosmos.
# `sky` (the airplane-window / low-flight layer) sits between orbit (space) and coast (ground).
RING_ORDER = ["cosmos", "orbit", "sky", "coast", "reef", "abyss"]
# Per-scale soundtrack (audio spec §5.1) — the production-pass output of
# simulator/build_audio_media.py, served at /media/audio/<path>.
SCALE_AUDIO: dict[str, str] = {
"cosmos": "cosmos/pillars.loop.mp3",
"orbit": "orbit/spaceamb.loop.mp3",
# TODO(sky): wants its own wind/air ambience — reusing the orbit space-amb loop as a placeholder.
"sky": "orbit/spaceamb.loop.mp3",
"coast": "coast/waves.loop.mp3",
"reef": "reef/soundscape.loop.mp3",
"abyss": "abyss/whale.loop.mp3",
@@ -113,6 +124,71 @@ META: dict[str, tuple[str, str, str]] = {
"NOAA Ocean Exploration midwater-exploration-1920x1080-1; trim 1640s, crossfade-loop"),
"abyss_hiding": ("“Hiding in the Dark” (NOAA Ocean Exploration)", PD,
"NOAA Ocean Exploration dark-1280x720-1; trim 2044s, crossfade-loop"),
# --- Round-4 curated additions (2026-06-28, branch feat/sky-scale-expanded-pools) ---
# cosmos
"cosmos_orion": ("Orion Nebula — visible/IR flythrough (NASA SVS)", PD,
"NASA SVS 30957 orion_vis_ir_zoom_xfade-1920x1080p30; trim 4095s, crossfade-loop. Text-free."),
"cosmos_tarantula": ("Tarantula Nebula (30 Doradus) zoom (NASA/ESA/CSA/STScI)", CCBY_WEBB,
"ESA/Webb weic2212b; 1080p, trim 159s, crossfade-loop."),
"cosmos_westerlund": ("Flight through star cluster Westerlund 2 (ESA/Hubble)", "CC-BY 4.0 — credit ESA/Hubble",
"ESA/Hubble heic1509f; 1080p, trim 559s, crossfade-loop."),
"cosmos_southernring": ("Southern Ring Nebula zoom (NASA/ESA/CSA/STScI)", CCBY_WEBB,
"ESA/Webb weic2207a; 1080p, trim 159s, crossfade-loop."),
"cosmos_carina_eso": ("Carina Nebula zoom (ESO)", "CC-BY 4.0 — credit ESO",
"ESO eso1828c; 1080p, trim 048s, crossfade-loop."),
# orbit
"orbit_aurora2025": ("ISS aurora — Nov 2025 geomagnetic storm (NASA JSC)", PD,
"NASA JSC ESRS ISS_20251112_071350; 1080p, trim 560s, crossfade-loop."),
"orbit_citylights": ("ISS night pass — West Coast city lights (NASA JSC)", PD,
"NASA SVS 30180 iss028_nighttime_20110819; 720p, trim 054s, crossfade-loop."),
"orbit_helene": ("Hurricane Helene from the ISS — storm + atmospheric limb (NASA JSC)", PD,
"NASA JSC jsc2024m000168; trim 559s, crossfade-loop."),
"orbit_epic": ("DSCOVR/EPIC full-disk Earth time-lapse (NASA GSFC)", PD,
"NASA SVS 12118 EPIC_timelapse; trim 060s, crossfade-loop."),
"orbit_illuminated": ("“Earth Illuminated” — aurora + Milky Way over the limb (NASA JSC)", "CC0 / public domain",
"NASA JSC Earth_Illuminated_120808; trim 68113s, crossfade-loop."),
# sky (NEW scale — airplane-window / low-flight, between orbit and coast)
"sky_grca_templesa": ("Grand Canyon — banking aerial over cliffs & temples (NPS)", PD_NPS,
"NPS Grand Canyon b-roll hd10 0121cbe5; 1080p, trim 024s, crossfade-loop."),
"sky_greenland_landice": ("IceBridge — low flight over N. Greenland snowy land ice (NASA SVS)", PD,
"NASA SVS 13472 Panasonic 2016 Airborne LandIce; trim 2060s, vidstab-stabilized, crossfade-loop."),
"sky_greenland_suture": ("IceBridge — overhead N. Greenland sea-ice patterning (NASA SVS)", PD,
"NASA SVS 13472 4K SeaIce 2017 Suture; trim 1050s, vidstab-stabilized, crossfade-loop."),
"sky_jungle_amazon": ("Amazon rainforest canopy — amazon→canopy splice", "Pexels License",
"Pexels 31291128 (amazon canopy) → 29780524 (jungle canopy), 1s xfade splice; crossfade-loop."),
"sky_jungle_waterfall": ("Waterfall plunging out of dense jungle canopy", "Pexels License",
"Pexels 8334944; 4K source, trim 646s, crossfade-loop."),
"sky_coast_cliffspain": ("Dramatic Atlantic sea cliffs, Northern Spain — aerial", "Pexels License",
"Pexels 36668415; 4K source, trim 125s, crossfade-loop."),
"sky_mtn_castlecrags": ("Castle Crags — gliding past jagged granite spires (US Forest Service)", PD,
"USFS/DVIDS 998726 DOD_111563303; trim 120174s, crossfade-loop."),
"sky_mtn_rocky": ("Rocky Mountain NP — aerial over alpine summits & tundra (NPS)", PD_NPS,
"NPS Rocky Mountain b-roll 188046ff; trim 60110s, crossfade-loop."),
# coast
"coast_kelp": ("Giant kelp forest, underwater", "Pexels License",
"Pexels 30285973; 4K source, trim 046s, crossfade-loop."),
"coast_otters": ("Wild sea otters, Elkhorn Slough CA (USFWS)", PD,
"USFWS Pacific Southwest b-roll (Wikimedia 28833083527); trim 048s, crossfade-loop."),
"coast_kalaloch": ("Slow surf on rock at sunset, Kalaloch WA", "CC-BY-SA 4.0 — credit Joe Mabel",
"Wikimedia Waves crashing on rocks off Beach 4, Kalaloch; trim 046s, crossfade-loop."),
"coast_seals": ("Harbor seals hauled out on a rock", "Pexels License",
"Pexels 6497564; 4K source, trim 854s, crossfade-loop."),
"coast_mist": ("Sea mist over a rocky coastline", "Pexels License",
"Pexels 31036891; 4K source, trim 357s, crossfade-loop."),
# reef
"reef_redsea": ("Red Sea coral reef — clear blue, colorful", "CC-BY-SA 4.0 — credit Kora27",
"Wikimedia Korallenriff im Roten Meer DSCF1654; trim 6286s, crossfade-loop."),
"reef_flowergarden": ("Sunlit reef + sergeant majors + jack/scad schools (NOAA Fisheries)", PD,
"NOAA Fisheries b-roll VIDEO_ID 1553921798001; trim 868s, crossfade-loop."),
# abyss
"abyss_bigfin": ("Bigfin squid drifting in black water (NOAA Ocean Exploration)", PD,
"NOAA OER Windows to the Deep 2021 dive10-bigfin-squid; trim 3476s, crossfade-loop."),
"abyss_dandelion": ("Dandelion siphonophore — glowing orb + threads (NOAA Ocean Exploration)", PD,
"NOAA OER 2021 North Atlantic Stepping Stones dive13-dandelion; trim 1270s, crossfade-loop."),
"abyss_octopus": ("Deep-sea octopus (Graneledone) crawling (NOAA Ocean Exploration)", PD,
"NOAA OER 2023 EXPRESS West Coast; Wikimedia Graneledone_boreopacifica_close-up; trim 660s, crossfade-loop."),
"abyss_seapig": ("Swimming sea cucumber (Enypniastes), CC0 (NOAA)", "CC0 / public domain",
"NOAA Okeanos Gulf of Mexico 2014 Ex1402-dive06; trim 044s, crossfade-loop."),
}
# --- Affect vocabulary per SCALE (shared by all the scale's pool members) -------
@@ -131,6 +207,12 @@ AFFECT: dict[str, list[tuple]] = {
("feel.unity", [0.66, 0.58], 3, ["one", "unity", "belonging", "a borderless belonging"]),
("feel.distance", [0.42, 0.82], 4, ["far", "distance", "remoteness", "an exquisite remoteness"]),
],
"sky": [
("feel.exhilaration", [0.50, 0.44], 1, ["whee", "exhilaration", "elation", "a soaring elation"]),
("feel.freedom", [0.22, 0.68], 2, ["free", "freedom", "release", "a boundless release"]),
("feel.lightness", [0.66, 0.58], 3, ["light", "lightness", "buoyancy", "a weightless buoyancy"]),
("feel.vertigo", [0.42, 0.82], 4, ["whoa", "vertigo", "giddiness", "a giddy, falling vertigo"]),
],
"coast": [
("feel.ease", [0.50, 0.44], 1, ["nice", "ease", "calm", "an unhurried calm"]),
("feel.nostalgia", [0.22, 0.68], 2, ["miss", "nostalgia", "wistfulness", "a salt-air wistfulness"]),
+7 -7
View File
@@ -72,22 +72,22 @@ test("a new volume fade supersedes a stale one (audio not silenced after landing
expect(vol).toBeGreaterThan(0.7); // ended near 0.8, not dragged to 0
});
test("audio is a 0-10 level dial, defaulting to 0", async ({ page }) => {
test("audio is a 0-10 level dial", async ({ page }) => {
await boot(page);
const ctl = await page.evaluate(() => {
const c = document.querySelector("#audio") as HTMLInputElement;
return { type: c.type, min: c.min, max: c.max, value: c.value };
return { type: c.type, min: c.min, max: c.max };
});
expect(ctl.type).toBe("range");
expect(ctl.min).toBe("0");
expect(ctl.max).toBe("10");
expect(ctl.value).toBe("0"); // silent until raised
});
test("turning video on for the first time lifts audio to 3/10", async ({ page }) => {
test("the experience auto-starts once loaded: video on + audio at 3/10", async ({ page }) => {
await boot(page);
expect(await page.evaluate(() => (document.querySelector("#audio") as HTMLInputElement).value)).toBe("0");
await enableVideo(page); // first video-on couples audio at a gentle level
// No gesture needed — autoStart() flips Video on and lifts audio to a gentle level
// the moment the preload finishes.
await expect.poll(() => page.evaluate(() => (document.querySelector("#visual") as HTMLInputElement).checked)).toBe(true);
await expect.poll(() => page.evaluate(() => (document.querySelector("#audio") as HTMLInputElement).value)).toBe("3");
// The level label reflects it.
expect(await page.evaluate(() => document.querySelector("#audio-level-val")?.textContent)).toBe("3");
@@ -134,7 +134,7 @@ test("auto-scrub speed is constant per altitude (a 2-step jump takes ~2x a 1-ste
return (await page.evaluate(() => performance.now())) - t0;
}
const t1 = await timeJump(60, "orbit"); // cosmos -> orbit (1 altitude)
const t2 = await timeJump(120, "reef"); // orbit -> reef (2 altitudes)
const t2 = await timeJump(120, "coast"); // orbit -> coast (2 altitudes; ring is cosmos·orbit·sky·coast·reef·abyss)
const ratio = t2 / t1;
expect(ratio).toBeGreaterThan(1.5); // proportional to distance, not a fixed total
expect(ratio).toBeLessThan(2.7); // ~2x, not more
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More