diff --git a/Makefile b/Makefile index d663205..ade5356 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: sim sim-local +.PHONY: sim sim-local deploy deploy-media # Prefer the project venv's interpreter (this box has no bare `python` on PATH), # fall back to python3, then python. @@ -9,3 +9,12 @@ sim: sim-local: $(PYTHON) -m uvicorn simulator.app:app --reload --port 8000 + +# Repeatable deploy to benstull.art (Cloudflare Pages + R2). One-time setup +# (wrangler login, bucket/CORS/domain) is in deploy/cloudflare/README.md. +# `deploy` is frontend-only (fast); `deploy-media` also re-syncs media to R2. +deploy: + ./deploy/cloudflare/deploy.sh + +deploy-media: + ./deploy/cloudflare/deploy.sh --media diff --git a/deploy/cloudflare/README.md b/deploy/cloudflare/README.md index b39d979..e345995 100644 --- a/deploy/cloudflare/README.md +++ b/deploy/cloudflare/README.md @@ -10,6 +10,22 @@ Plan: `docs/superpowers/plans/2026-06-30-cloudflare-static-publish.md`. This project is **exempt from the flotilla/PPE/§9 pipeline** (operator-set) — it deploys directly to Cloudflare. Safety/hygiene rules still hold. +## Repeatable deploy (after the one-time setup below) + +Once the bucket/CORS/custom-domains + `wrangler login` exist (one-time, §1–3), every +later deploy is one command (`deploy/cloudflare/deploy.sh`, or the Make targets): + +```bash +make deploy # frontend only: build + Pages deploy (fast — most deploys) +make deploy-media # also re-sync all media to R2 (~2 min, parallel) — when media changed +./deploy/cloudflare/deploy.sh --media-only # only the R2 media sync, skip Pages +``` + +The script rebuilds `dist/`, (optionally) parallel-uploads `dist-media/` to R2, and +deploys Pages — printing the live URL. It checks `wrangler` auth first and fails +loudly. Override defaults via env: `BUCKET`, `PROJECT`, `MEDIA_BASE`, `APP_PATH`, +`BRANCH`, `JOBS`. The sections below document the one-time setup the script assumes. + ## Prerequisites (operator gestures — need Cloudflare auth) `wrangler` is not installed in the dev box; the deploy runs from a machine with diff --git a/deploy/cloudflare/deploy.sh b/deploy/cloudflare/deploy.sh new file mode 100755 index 0000000..796f531 --- /dev/null +++ b/deploy/cloudflare/deploy.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +# Repeatable deploy of the HEF simulator to benstull.art (Cloudflare Pages + R2). +# +# deploy/cloudflare/deploy.sh # frontend only: build + Pages deploy (fast) +# deploy/cloudflare/deploy.sh --media # also re-sync all media to R2 (~2 min, parallel) +# deploy/cloudflare/deploy.sh --media-only # only the R2 media sync, no Pages deploy +# +# Assumes the ONE-TIME setup is already done (see README.md): wrangler logged in, +# the R2 bucket + CORS + static.benstull.art custom domain, and the Pages project + +# benstull.art custom domain. This script only does the repeatable part. +# +# Override any of these via env: BUCKET, PROJECT, MEDIA_BASE, APP_PATH, BRANCH, JOBS. +set -euo pipefail + +BUCKET="${BUCKET:-human-experience-simulator-media}" +PROJECT="${PROJECT:-human-experience-simulator}" +MEDIA_BASE="${MEDIA_BASE:-https://static.benstull.art/}" +APP_PATH="${APP_PATH:-/human-experience-simulator}" +BRANCH="${BRANCH:-main}" +JOBS="${JOBS:-10}" + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +OUT="$REPO_ROOT/dist" +export MEDIA_OUT="$REPO_ROOT/dist-media" +PY="${PY:-$REPO_ROOT/.venv/bin/python}" +export WRANGLER="${WRANGLER:-$(command -v wrangler || echo "$HOME/.npm-global/bin/wrangler")}" + +do_media=0 +do_pages=1 +case "${1:-}" in + --media) do_media=1 ;; + --media-only) do_media=1; do_pages=0 ;; + "") ;; + *) echo "unknown flag: $1 (use --media or --media-only)"; exit 2 ;; +esac + +[ -x "$WRANGLER" ] || { command -v "$WRANGLER" >/dev/null || { echo "wrangler not found ($WRANGLER) — npm i -g wrangler"; exit 1; }; } +"$WRANGLER" whoami >/dev/null 2>&1 || { echo "not authenticated — run: $WRANGLER login"; exit 1; } + +echo "▶ build ($MEDIA_BASE)" +cd "$REPO_ROOT" +"$PY" -m tools.build_static --out "$OUT" --media-out "$MEDIA_OUT" \ + --media-base "$MEDIA_BASE" --app-path "$APP_PATH" | tail -1 + +if [ "$do_media" = 1 ]; then + echo "▶ R2 media sync → $BUCKET (parallel x$JOBS, no bulk-sync exists)" + export BUCKET + fails=$(find "$MEDIA_OUT" -type f -print0 \ + | xargs -0 -P "$JOBS" -I {} bash "$REPO_ROOT/deploy/cloudflare/r2-put-one.sh" {} \ + | tee /dev/stderr | grep -c '^FAIL ' || true) + [ "$fails" = 0 ] || { echo "✘ $fails media uploads failed"; exit 1; } + echo "✔ media synced" +fi + +if [ "$do_pages" = 1 ]; then + echo "▶ Pages deploy → $PROJECT" + "$WRANGLER" pages deploy "$OUT" --project-name "$PROJECT" --branch "$BRANCH" --commit-dirty=true | tail -3 +fi + +echo "✔ done — https://benstull.art$APP_PATH/" diff --git a/deploy/cloudflare/r2-put-one.sh b/deploy/cloudflare/r2-put-one.sh new file mode 100755 index 0000000..ae1068e --- /dev/null +++ b/deploy/cloudflare/r2-put-one.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# Upload ONE file to R2 with the right content-type + immutable cache. Used by +# deploy.sh's parallel xargs (wrangler has no bulk sync). Reads BUCKET / MEDIA_OUT / +# WRANGLER from the environment; the single argument is the local file path. +set -u +f="$1" +key="${f#"$MEDIA_OUT"/}" +# Guard: if the prefix strip didn't fire (e.g. relative path vs absolute MEDIA_OUT), +# the key would wrongly keep a leading dir → wrong R2 path. Fail loudly, don't ship it. +if [ "$key" = "$f" ]; then + echo "FAIL $f (key strip failed — MEDIA_OUT='$MEDIA_OUT' is not a prefix; pass absolute paths)" + exit 1 +fi +case "${f##*.}" in + mp4) ct=video/mp4 ;; + mp3) ct=audio/mpeg ;; + json) ct=application/json ;; + *) ct=application/octet-stream ;; +esac +if "$WRANGLER" r2 object put "$BUCKET/$key" --file "$f" --remote \ + --content-type "$ct" --cache-control "public, max-age=31536000, immutable" >/dev/null 2>&1; then + echo "ok $key" +else + echo "FAIL $key" +fi diff --git a/sessions/0027/SESSION-0027.0-TRANSCRIPT-2026-06-29T22-04--2026-06-30T06-47.md b/sessions/0027/SESSION-0027.0-TRANSCRIPT-2026-06-29T22-04--2026-06-30T06-47.md new file mode 100644 index 0000000..303d4d0 --- /dev/null +++ b/sessions/0027/SESSION-0027.0-TRANSCRIPT-2026-06-29T22-04--2026-06-30T06-47.md @@ -0,0 +1,94 @@ +# Session 0027.0 — Transcript + +> App: human-experience-filter-art +> Start: 2026-06-29T22-04 (PST) +> End: 2026-06-30T06-47 (PST) +> Type: planning-and-executing +> Posture: yolo +> Claude-Session: 3e51cce1-9023-4a16-b607-99894dfe0597 +> Checkout: /Users/benstull/git/benstull.org/benstull/human-experience-filter-art +> Status: **FINALIZED** + +## Launch prompt + +``` +Add left and right brain annotations (including localization) for any that are missing. +``` + +## Plan + +> Anchor: operator direct instruction (standalone leaf content-fill task, §4.3 R2b). + +**Goal:** Author the missing **left-brain** factual `LABELS` (tiered general→scientific→+fact +labels) for the rotating-pool clips that lack them, plus their **es/fr/ja** translations, +then rebuild + merge the manifest. Right-brain `affect` is auto-generated per scale for +every clip via `_affect_for_clip` — nothing missing there. + +## Pre-state + +- `main` at `5beee55` locally but **diverged from `origin/main`**: 11 merged-but-unpushed + commits (the entire i18n localization feature + a video-loop safety-net fix) stranded + locally; `origin/main` still at `eff43bd` (PR #29). Plus 3 files with an uncommitted + "boots-silent / no auto-start" change. Two stale `--INPROGRESS` placeholders (0015, 0017). +- Annotation reality (from a read-only survey of `build_pool_manifest.py` + catalogs): + right-brain `affect` present on all 41 clips (auto-per-scale); left-brain `LABELS` + present on only 13 of 41. 28 pool clips had `"annotations": []`. + +## Arc + +1. **Scoped the task** — explored the annotation/i18n system; established that the gap was + left-brain only (right-brain is auto-generated), 28 clips, + their es/fr/ja strings. +2. **Claimed session 0027** (peek showed the two stale placeholders; noted + proceeded). +3. **Surfaced the unclean baseline**; operator chose *"Push stranded, also commit dirty."* + - Stashed the 3 dirty files, merged `origin/main`'s claim commit, **pushed the 11 + stranded commits** (`020219f`). + - Committed the boots-silent change on `fix/boot-silent-no-autostart`, verified + (299 pytest pass), **merged + pushed** (`7bd6c9a`). +4. **Annotation work** on `feat/left-brain-annotations`: + - Added 28 `LABELS` entries (static tiered labels) to `build_pool_manifest.py` + (Round-5 block); rebuilt manifest → all 41 clips annotated; extracted en catalog. + - Dispatched **3 parallel translator subagents** (es/fr/ja) for the 67 new keys, + matching existing catalog voice; fixed 2 ja `measure.*` values to the `約`/localized + convention; merged fragments into catalogs; merged all 3 langs into the manifest. + - Verified: 41 clips × en/es/fr/ja full key + tier-length parity; 299 pytest pass + (3 pre-existing `cv2` env failures only); 37 i18n/manifest tests green; spot-checked + translations. **Merged + pushed** (`934f60c`), deleted both branches. + +## Cut state + +- `main` == `origin/main` @ `934f60c`, clean tree, branches removed. +- 41/41 clips carry left+right annotations with full en/es/fr/ja parity. +- §9: local tests green. No PPE/E2E machinery exists for this app yet (pipeline is policy, + not automated — §10.6); prod promotion stays operator-gated. Visual review deferred to + operator (no Chrome on box). + +## Operator plate + +- **Review by eye** the 28 newly-labelled clips across all 4 languages in the running sim. +- The labels are **static**; the abyss/reef *creature* clips would benefit from a later + **tracked-label** upgrade via author mode (couldn't auto-file as a tracker issue — the + capture token returned 401 in this env; full context is in the session-0027 memory note). +- A few species IDs were inferred from clip META, not the frame (`reef_redsea`→anthias, + `reef_flowergarden`→jack/scad+sergeant-major) — worth confirming at review. +- Two stale `--INPROGRESS` sessions (0015, 0017) remain unfinalized — likely the crashed + sessions that stranded the 11 commits; left untouched for the operator. + +## Next-session prompt + +``` +/goal Review the new left-brain annotations (all 28 newly-labelled pool clips, across en/es/fr/ja) by eye in the running simulator; correct any species/box that reads wrong, and decide whether the abyss/reef creature clips should get tracked labels via author mode. +``` + +## Deferred decisions + +- **Static labels, not tracked.** Authored all 28 clips' left-brain labels as fixed-box + `static_label`s rather than motion-tracked labels. Alternative: tracked labels (as the + reef/abyss showcase clips use) so the box follows drifting creatures. Chose static because + the footage wasn't eyeballed — fabricating track coordinates would claim precision I don't + have. The abyss/reef creature clips are the ones that would most benefit from a later + tracked-label upgrade via author mode. +- **Some species IDs inferred from clip metadata, not the footage.** `reef_redsea`→anthias, + `reef_flowergarden`→jack/scad + sergeant-major — read from the clip META title/source. + High-confidence from provenance, but worth an eyeball check. +- **`O-type` kept verbatim in es/fr/ja** (per the translation brief) rather than the more + natural `tipo O` / `type O`. Minor; flagged by the es translator. diff --git a/sessions/0027/SESSION-0027.0-TRANSCRIPT-2026-06-29T22-04--INPROGRESS.md b/sessions/0027/SESSION-0027.0-TRANSCRIPT-2026-06-29T22-04--INPROGRESS.md deleted file mode 100644 index 6eeb540..0000000 --- a/sessions/0027/SESSION-0027.0-TRANSCRIPT-2026-06-29T22-04--INPROGRESS.md +++ /dev/null @@ -1,28 +0,0 @@ -# Session 0027.0 — Transcript - -> App: human-experience-filter-art -> Start: 2026-06-29T22-04 (PST) -> Type: planning-and-executing -> Posture: yolo -> Claude-Session: 3e51cce1-9023-4a16-b607-99894dfe0597 -> Checkout: /Users/benstull/git/benstull.org/benstull/human-experience-filter-art -> Status: **PLACEHOLDER — claimed at session start; finalized at session end.** -> -> This file reserves session ID 0027 for human-experience-filter-art. The driver replaces this -> body with the full transcript and renames the file to its final -> SESSION-0027.0-TRANSCRIPT-2026-06-29T22-04--.md form at session end. - -## Launch prompt - -``` -Add left and right brain annotations (including localization) for any that are missing. - -Resolved scope: right-brain `affect` is auto-generated per scale for every clip (nothing missing). The gap is left-brain `LABELS` (factual/scientific tiered labels) on 28 rotating-pool clips that have no entry in simulator/build_pool_manifest.py, plus their es/fr/ja translations in tools/i18n/catalogs. Author them following the existing static_label pattern, rebuild the manifest, merge translations, run tests. - -``` - -## Deferred decisions - -_Autonomous-mode low-confidence calls the driver made and would have -liked operator input on. Appended as the session runs; surfaced at -finalize. Empty if none._ diff --git a/sessions/0028/SESSION-0028.0-TRANSCRIPT-2026-06-30T06-53--2026-06-30T07-21.md b/sessions/0028/SESSION-0028.0-TRANSCRIPT-2026-06-30T06-53--2026-06-30T07-21.md new file mode 100644 index 0000000..b7b91c9 --- /dev/null +++ b/sessions/0028/SESSION-0028.0-TRANSCRIPT-2026-06-30T06-53--2026-06-30T07-21.md @@ -0,0 +1,125 @@ +# Session 0028.0 — Transcript + +> App: human-experience-filter-art +> Start: 2026-06-30T06-53 (PST) +> Type: planning-and-executing +> Posture: yolo +> Claude-Session: d9da7994-e036-4b7c-b2d4-d2675ac4e5a1 +> Checkout: /Users/benstull/git/benstull.org/benstull/human-experience-filter-art +> Status: **FINALIZED.** +> Worktree: `worktree-session-0028` (isolated; concurrent session in flight). Torn down at finalize. +> Outcome: D3 reverse-landing frame jump FIXED, app-side. PR #30 → main (`582183d`). + +## Launch prompt + +`/goal next` — operator then directed: "There's a concurrent session — do this one out +of a worktree in a different dir." Session 0028 runs isolated in worktree +`worktree-session-0028` while a concurrent session owns the simulator startup ("Run +simulation" button: `index.html`/`style.css`/`i18n.js`). + +## Plan + +> Anchor: leaf bug — D3 reverse-landing frame jump (no tracker issue; the s0027 capture +> token returned 401. Residual flagged in the altitude-morph-and-scrub memory note + +> scrub-driven-transitions design.) + +**Goal:** kill the ~3-second frame jump when ASCENDING the altitude dial and landing on +the higher-altitude clip. + +**Root cause (verified by reading the bake + player):** each baked morph +`transitions/{h}__{l}.mp4` spans `src(h)@0s` (frac 0) → `dst(l)@~LOOP_TAIL_S` (frac 1), +and the scrub uses this single forward file in BOTH directions. The steady loop element +always seeks to `LOOP_TAIL_S` (3.0s) on landing. So: +- DESCEND (dir>0) lands on `dst` at frac 1 → morph ends `dst@3` ≈ loop@3 → seamless ✓ + (the s0026 "loop-from-tail" fix). +- ASCEND (dir<0) lands on `src` at frac 0 → morph shows `src@0`, but loop seeks `src@3` + → ~3s jump ✗ (D3). + +**Fix (app-side, no media re-bake — beats re-baking 154 LFS morphs):** make the loop +landing frame DIRECTION-AWARE. On a reverse landing seek the loop to 0 (= the morph's +frac-0 frame) and wrap `[0,dur]` (the base is already a seamless crossfade-loop); forward +keeps `[LOOP_TAIL_S,dur]`. Pure decision extracted to `scrub.js loopLandFrame(dir, +loopTailS)` + node tests; wired through `loadLoop`/settle/wrap handlers in `app.js`. + +**Tasks:** +1. TDD `HEFScrub.loopLandFrame(dir, loopTailS)` in `scrub.js` (+ `scrub.test.js`). +2. Wire `app.js`: `loadLoop(clip, landFrame)`, directional settle seek, `dataset.loopStart` + in the `timeupdate`/`ended` wrap handlers. +3. Add a reverse-landing e2e (mirror of the existing forward "loops from tail" test). +4. Verify: node unit tests + pytest + e2e (best-effort) all green. +5. Branch → PR → merge (yolo). PPE/E2E machinery not built for this app (§10.6) — local + green is the bar; prod promotion stays operator-gated. + +## Deferred decisions + +_Autonomous-mode low-confidence calls the driver made and would have +liked operator input on. Appended as the session runs; surfaced at +finalize. Empty if none._ + +- **Fix shape: app-side direction-aware loop landing, NOT a 154-morph re-bake.** The + s0026 memory note guessed the D3 fix would be "per-clip loop files." Reading the bake + + player showed the root cause is simpler: the morph's frac-0 frame is `src@0` but the + loop always seeked the tail (`LOOP_TAIL_S`). Fixed entirely in `app.js`/`scrub.js` by + landing the loop on the morph's actual frac-0 frame (0) when ascending. This avoids + re-baking 154 LFS morphs (no media churn, a tiny reviewable diff, the base clips are + already seamless crossfade-loops so `[0,dur]` wraps cleanly). Alternative considered: + re-bake morphs to start at `src@LOOP_TAIL_S` — heavier, no benefit. +- **Pre-existing e2e failure left as-is:** `loop-recovery.spec.ts` fails in this + environment on the CLEAN baseline too (verified by stashing my changes). It boots + without enabling video, so the loop's `loopTail` is never armed and the `ended` guard + returns early. Not introduced here; my change preserves that guard exactly. Worth a + separate look (the test likely needs to `enableVideo` first), but out of scope for D3. +- **Could not verify by eye.** The fix is logic- and test-verified (node + the new + reverse-landing e2e asserting the loop anchors at the head, not the tail); the actual + visual seamlessness of an ascending landing still wants an operator eyeball in the + running sim. + +## Session arc + +1. Claimed session **0028** (race-free, via git). Two stale `--INPROGRESS` placeholders + (0015, 0017) noted as orphaned, left untouched. +2. Baseline survey surfaced uncommitted `run-sim` button edits + main behind by 2 + (session commits). Operator confirmed a **concurrent session** owns that startup work + and directed isolation → created worktree `worktree-session-0028` off `origin/main`, + leaving the concurrent session's edits in the canonical clone untouched. +3. Orientation: in-repo `docs/ROADMAP.md` is stale (formal frontier = deferred hardware); + live frontier is in memory. Stored `/goal next` (0027's by-eye annotation review) is + operator-eyes work I can't complete; the run-sim button is the concurrent session's. + Asked the operator to pick 0028's disjoint item → **D3 reverse-landing fix**. +4. Read the bake (`build_pool_manifest.transition_cmd`) + player (`app.js` loop/morph) to + pin the root cause (morph spans `src@0`→`dst@tail`; loop always seeks the tail). +5. TDD: `HEFScrub.loopLandFrame` (red → green), then wired `app.js` + (`loadLoop(clip,landFrame)`, `dataset.loopStart`, directional settle, wrap handlers). +6. Added a reverse-landing e2e. Verified: node 16/16, **altitude-lock e2e 12/12** (forward + no-regression + new reverse test), pytest 299 pass. Confirmed `loop-recovery.spec.ts` + fails on the clean baseline too (pre-existing, not mine) by stashing. +7. Committed → PR #30 → merged to `main` (`582183d`) → deleted branch. Updated memory. + +## Cut state + +- **On `main` (`582183d`):** D3 fix — `simulator/static/scrub.js` (+`loopLandFrame`), + `simulator/static/app.js` (direction-aware loop landing), `simulator/unit/scrub.test.js`, + `simulator/e2e/tests/altitude-lock.spec.ts` (reverse-landing test). +- **Tests:** node 16/16; altitude-lock e2e 12/12; pytest 299 pass / 3 pre-existing + env-only failures (real-ffprobe/ffmpeg + ML detect; untouched — no Python changed) / 4 + skipped. `loop-recovery.spec.ts` is a pre-existing baseline failure in this env. +- **§9 / deploy:** this whole project is **exempt** from flotilla/PPE/§9 (memory: + project-exempt-from-wiggleverse-deploy; public target is static Cloudflare). Local-green + is the bar — met. No PPE stage to run. +- **No plan artifact archived:** fused leaf fix, plan inline in this transcript; app has + **no content repo** (`CONTENT_REMOTE` empty) — nothing to archive. + +## Operator plate + +- **Review by eye** an ASCENDING altitude landing in the running sim — confirm the + ~3s reverse-landing jump is gone (logic/test-verified only; no Chrome on box here). +- Still standing from s0027: by-eye review of the 28 left-brain annotations (4 langs); + decide on tracked labels for abyss/reef creature clips. +- A concurrent session was shipping the "Run simulation" startup button — reconcile/land + that separately (its edits are in the canonical clone, not touched here). + +## Next-session prompt + +``` +/goal Review by eye in the running simulator: (1) an ASCENDING altitude landing — confirm the D3 reverse-landing frame jump is gone; (2) the 28 left-brain annotations across en/es/fr/ja, correcting any species/box that reads wrong; then decide whether the abyss/reef creature clips should get tracked labels via author mode. +``` diff --git a/sessions/0029/SESSION-0029.0-TRANSCRIPT-2026-06-30T08-09--2026-06-30T08-41.md b/sessions/0029/SESSION-0029.0-TRANSCRIPT-2026-06-30T08-09--2026-06-30T08-41.md new file mode 100644 index 0000000..99d6020 --- /dev/null +++ b/sessions/0029/SESSION-0029.0-TRANSCRIPT-2026-06-30T08-09--2026-06-30T08-41.md @@ -0,0 +1,76 @@ +# Session 0029.0 — Transcript + +> App: human-experience-filter-art +> Start: 2026-06-30T08-09 (PST) +> End: 2026-06-30T08-41 (PST) +> Type: planning-and-executing +> Posture: yolo +> Claude-Session: c87a07d3-917c-44bc-82cf-c6d8edee952b +> Checkout: /Users/benstull/git/benstull.org/benstull/human-experience-filter-art +> Branch: design/cloudflare-static-publish +> Status: **FINALIZED** + +## Launch prompt + +"We need to make sure credits for Creative Commons licensed videos are compliant. +What are some options?" → after presenting options the operator chose **Option A** +(manifest-driven static credits/colophon page surfaced to the public) + **Option D1** +(declare the altered footage CC BY-SA 4.0). Non-commercial. + +## Pre-state + +- Branch `design/cloudflare-static-publish` (static-publish work, pushed). Working + tree had uncommitted, unrelated in-flight work: a "Run simulation" start button + (6 files) **plus** an `r2-cors.json` reformat (surfaced via stash, 7 total). +- Per-clip `license`/`source` already in `clips.json` (baked from `/api/clips`) but + only shown in the dev panel + internal review pages — public experience showed none. +- A concurrent session was live in worktree `fix+audio-and-tracking-labels` (off main); + the operator was also committing directly to `design/cloudflare-static-publish`. + +## Arc + +1. **Audited** the license surface: `tools/licensing.py`, `pipeline/provenance.py`, + manifest, frontend. Found credits exist in data + review tooling but not the public + experience → that's the gap. Presented options A–D; operator chose A + D1. +2. **Claimed session 0029** (planning-and-executing, yolo). Two stale `--INPROGRESS` + placeholders (0015, 0017) noted as long-dead, left alone. +3. **Operator-requested pre-work:** the uncommitted in-flight work. Stashed it, + created an isolated worktree (`.claude/worktrees/session-0029` off the branch HEAD, + since the static work lives there not on main), applied the stash. + - Discovered the branch had advanced under me to `8cc472c` (operator's direct + commit). It **intentionally** keeps `r2-cors.json` in S3-array form alongside a + new `r2-cors.wrangler.json` (runbook documents both) → **dropped** my conflicting + `r2-cors.json` reformat commit; kept + rebased only the Run-simulation button. + - Committed the button (`3a45e33`), ff-merged + pushed. +4. **Built Option A + D1** (TDD): node test for the pure credits logic first (red) → + `credits.js` (UMD: `creditEntries`/`creditsListHtml`, escaped, sorted) → `credits.html` + colophon (D1 CC BY-SA declaration + "altered" note; JS-filled video attributions; + PD/CC0 audio courtesy block; back link) → header "ⓘ Credits" link (`credits.link` + i18n en/es/fr/ja) → `style.css` → `PUBLIC_ASSETS` in `build_static.py` + its test → + Playwright e2e (`tests/test_e2e_credits.py`). +5. **Verified:** node 28/28, pytest 315 passed / 2 skipped. Real build render: 41/41 + clips credited, all 7 CC-BY/BY-SA clips show required attribution, 0 missing. + Committed (`1c7f2b7`), ff-merged + pushed, removed the worktree, deleted the branch. + +## End state + +- `design/cloudflare-static-publish` @ `1c7f2b7`, clean, pushed (origin in sync). +- Public site now attribution-compliant: credits reachable from the work; altered-work + license declared. §9 is **exempt** for this project (static Cloudflare target), so + merged+pushed to the design branch is the completion state — no PPE/prod. + +## Deferred decisions + +- **Dropped my `r2-cors.json` reformat** rather than merging it — concluded from the + operator's `8cc472c` + runbook that the S3-array form is intentional. (Alternative: + keep both forms / ask. Chose to honor the documented two-file split.) +- **Audio credits as a static courtesy block** in `credits.html` rather than plumbing + `audio_license` through the manifest/API. Rationale: audio is all PD/CC0 (no legal + attribution duty) and not machine-readable; data-plumbing was out of scope. (Alternative: + add audio license fields — deferred, low value for non-commercial PD/CC0.) + +## Next /goal + +``` +/goal operator by-eye review of the credits colophon + Run-simulation button on design/cloudflare-static-publish, then the actual Cloudflare deploy (provision R2 human-experience-simulator-media + CORS, run tools.build_static, Pages deploy) per deploy/cloudflare/README.md +``` diff --git a/sessions/0030/SESSION-0030.0-TRANSCRIPT-2026-06-30T08-10--2026-06-30T08-50.md b/sessions/0030/SESSION-0030.0-TRANSCRIPT-2026-06-30T08-10--2026-06-30T08-50.md new file mode 100644 index 0000000..5a2e89a --- /dev/null +++ b/sessions/0030/SESSION-0030.0-TRANSCRIPT-2026-06-30T08-10--2026-06-30T08-50.md @@ -0,0 +1,128 @@ +# Session 0030.0 — Transcript + +> App: human-experience-filter-art +> Start: 2026-06-30T08-10 (PST) +> End: 2026-06-30T08-50 (PST) +> Type: planning-and-executing +> Posture: yolo +> Claude-Session: c4cec6c6-26d8-46f3-80ee-4ff4035a4f72 +> Checkout: /Users/benstull/git/benstull.org/benstull/human-experience-filter-art +> Date: 2026-06-30 +> Goal: Add an obvious "Run simulation" start button to the simulator's main +> screen (shown after the "Loading Universe…" preload); it turns Video on and +> sets Audio to level 2. Turning Video on directly should also start the +> experience, snap Audio to 2, and dismiss the button. Move the default +> first-Video-on audio coupling from 3/10 → 2/10. +> Outcome: Built + verified (303 pytest, 8 pytest-playwright incl. 3 new, 12 +> Playwright TS incl. 1 updated + 1 new, node unit tests green). Work committed +> as 3a45e33 and pushed to design/cloudflare-static-publish — **the commit was +> landed by a CONCURRENT session (0029)** that swept up this session's +> working-tree changes while doing the CC-credits/Cloudflare-publish work. + +## Plan + +1. Map the splash/loading flow and the Video/Audio toggle wiring (Explore agent + + direct reads of `simulator/static/{index.html,app.js,style.css,i18n.js}`). +2. Add a `#run-sim` button inside the stage `.screen`, hidden until media + preloads, styled to sit above the black cover (`z-index: 60`). +3. Add a `beginExperience()` helper: Video on + audio snapped to a + `START_AUDIO_LEVEL = "2"` + button dismissed + soundtrack played in-gesture + (Safari unlock). Wire it to both the button click and the first direct + Video-on (`!videoEverOn`). +4. Reveal the button after `hideLoading()`; change the old 3/10 coupling → 2/10. +5. Localize `run.button` in en/es/fr/ja (4-lang parity invariant). +6. Update E2E coverage (pytest-playwright + Playwright TS) from the old + "couples to 3" assertions to 2; add button-shown / button-starts / + direct-video-on tests. +7. Run the full suite + confirm a pre-existing failure is not mine. + +## Pre-session state + +- Branch `main` clean at `934f60c` (left-brain annotations merged). Simulator + boots SILENT (video off, audio 0) and waited for the operator to flip the + unlabelled **Video** toggle as the start gesture — not obvious to a first-time + viewer. First-Video-on coupled audio to **3/10**. +- No session-init gate was run at the top of this session — it was treated as a + small, fully-specified frontend change (see Deferred decisions). + +## Turn-by-turn arc + +1. **Explore + direct reads.** Dispatched an `Explore` subagent to map the + splash + AV-toggle code; in parallel read `index.html`, `app.js` + (`main()`/`hideLoading()`/`beginExperience` region, the audio dial, the + `videoEverOn` coupling), `style.css` (`#loading`, `.black z-index:50`, + `.hidden`), and `i18n.js` (UI_STRINGS shape, 4 languages). Confirmed the + stage `.screen` is `position: relative` and the black cover is `z-index: 50`, + so a start button needs `z-index > 50` inside the screen and the side panel + (Video toggle) stays reachable. +2. **Implement.** Added `#run-sim` to the stage; `.run-sim` CSS (centered pill, + `z-index: 60`); `run.button` i18n string (en/es/fr/ja); `beginExperience()` + unifying both entry paths; revealed the button after `hideLoading()`; + simplified the Video-toggle handler to call `beginExperience()` on first + on; changed coupling 3 → 2. +3. **Update tests.** Replaced the old `test_video_on_couples_audio_to_three…` + (pytest) and the "couples audio to 3/10" Playwright TS test with 2/10 + variants; added button-shown-after-load, button-starts-video+audio, and + direct-Video-on-dismisses-button cases on both harnesses. +4. **Verify.** `303 passed, 2 skipped` (non-E2E pytest); `8 passed` + pytest-playwright (incl. 3 new); `12 passed` Playwright `altitude-lock.spec` + (incl. updated + new). Node unit tests (i18n / index-i18n / scrub) green; the + i18n completeness invariant confirms `run.button` has all 4 langs. +5. **Isolate a failure.** `loop-recovery.spec.ts` failed; stashed only the + source files and re-ran on a clean baseline — it **fails identically without + my changes**, so it's pre-existing, not introduced here. (During that stash + round-trip a `test-results/.last-run.json` artifact briefly blocked + `git stash pop`; recovered by `git checkout`-ing the artifact and popping — + no source lost.) +6. **Handed the working tree back uncommitted** for an operator by-eye review + (the project's usual cadence — no Chrome on the box). Offered to branch + PR. + +## Cut state (end of session) + +| Item | State | +| --- | --- | +| Run-simulation button + audio-2 change | Committed `3a45e33` on `design/cloudflare-static-publish`, **pushed** | +| Committed by | Concurrent **session 0029** (swept up this session's working-tree changes) | +| Files | `simulator/static/{index.html,app.js,style.css,i18n.js}`, `simulator/e2e/tests/altitude-lock.spec.ts`, `tests/test_e2e_audio.py` | +| This session's working tree | Clean; nothing of mine left to commit/push/merge | +| Branch `design/cloudflare-static-publish` | Not merged to `main` — intentional; awaits operator review + Cloudflare deploy (session 0029's frontier) | +| Deploy pipeline (§9) | **N/A** — project is exempt (static Cloudflare target; see memory `project-exempt-from-wiggleverse-deploy`) | +| Verification | 303 pytest + 8 pytest-playwright + 12 Playwright TS + node units green; `loop-recovery.spec.ts` red **pre-existing** | + +## What lands on the operator's plate + +- **By-eye / by-ear review** of the Run-simulation button in a real browser — + especially the **in-gesture audio unlock on real Safari/iOS** (headless tests + relax autoplay, so it's wired-but-unconfirmed on a real device). +- The button work lives on `design/cloudflare-static-publish` alongside the + CC-credits + Cloudflare-publish work; it merges to `main` / ships when that + branch does (session 0029's frontier), not separately. +- Note the concurrency: this session authored the change; session 0029 committed + it. Two transcripts (0029, 0030) touch the same single commit `3a45e33` — + expected, not a duplicate of the commit. + +## Prompt the operator can paste into the next session + +``` +/goal operator eyeball review of the static build (incl. the new Run-simulation button) + execute the real Cloudflare deploy to benstull.art/human-experience-simulator, per the cloudflare-static-publish design on branch design/cloudflare-static-publish +``` + +## Deferred decisions + +_Autonomous-mode low-confidence calls; surfaced at finalize._ + +1. **No session-init gate at the top.** Treated the task as a small, + fully-specified frontend tweak and implemented directly without claiming a + transcript first. Consequence: the work landed on a shared checkout and was + committed by a concurrent session (0029) rather than carrying its own + end-to-end branch→PR. Alternative: claim a session + isolated worktree up + front. Flagged because shared-checkout work is what the worktree rule guards + against. +2. **`beginExperience()` snaps audio to 2 unconditionally** on first Video-on, + overriding a viewer who pre-set a higher level before pressing start / + flipping Video. Matched the operator's explicit "snap to audio level 2" + wording; alternative was to only raise from 0 (the prior 3/10 behavior). Easy + to soften to "only if currently 0" if undesired. +3. **Real-device audio autoplay unverified.** Headless Chromium ran with + `--autoplay-policy=no-user-gesture-required`, masking real Safari/iOS + behavior; the in-gesture unlock is wired but needs a by-ear check. diff --git a/sessions/0031/SESSION-0031.0-TRANSCRIPT-2026-06-30T09-06--2026-06-30T09-11.md b/sessions/0031/SESSION-0031.0-TRANSCRIPT-2026-06-30T09-06--2026-06-30T09-11.md new file mode 100644 index 0000000..8fa5494 --- /dev/null +++ b/sessions/0031/SESSION-0031.0-TRANSCRIPT-2026-06-30T09-06--2026-06-30T09-11.md @@ -0,0 +1,80 @@ +# Session 0031.0 — Transcript + +> App: human-experience-filter-art +> Start: 2026-06-30T09-06 (PST) +> End: 2026-06-30T09-11 (PST) +> Type: planning-and-executing +> Posture: yolo +> Claude-Session: c87a07d3-917c-44bc-82cf-c6d8edee952b +> Checkout: /Users/benstull/git/benstull.org/benstull/human-experience-filter-art +> Branch: design/cloudflare-static-publish +> Status: **FINALIZED** + +## Launch prompt + +Follow-up to session 0029's credits work. Operator's first ask was to rename the +credits URL → "about" (one page holding both about + credits) and add an +Accessibility table. Mid-clarification the operator redirected: **keep About and +Credits separate** (the About page is owned by a parallel session) and simply +**"Remove the 'About this work' from the credits page. I'll merge that into the +About page on the other session."** + +## What I found before acting + +- The Cloudflare site is now **LIVE** (`benstull.art/human-experience-simulator`); + the branch had advanced several commits since s0029 (live deploy, progressive + boot, an audio mediaBase fix), and moved again mid-session (`a68d0bc`→`d10ffca`). +- A **live concurrent session** owns `feat/accessibility-pass` with an + approved-pending design spec (`docs/superpowers/specs/2026-06-30-accessibility-and-about-page-design.md`): + a full WCAG 2.1 AA pass + a **separate `about.html`**. I surfaced the overlap with + the operator's original (one-page) ask; the operator resolved it by keeping the + pages separate and narrowing my task to the section removal. + +## Arc + +1. Surveyed git + the concurrent worktrees; read the a11y design spec. +2. Started to raise a coordination question; operator interrupted with the narrow + instruction (remove "About this work" from credits; they move it to About). +3. Claimed **session 0031**, isolated worktree off the live branch tip (`d10ffca`) + — only `credits.html` + its tests touched, so no overlap with the a11y session's + files (`index.html`/`style.css`/`app.js`/`about.html`). +4. Removed the `
` "About this work" block from + `credits.html`; rewrote the footage note to be self-contained ("All footage is + altered in real time in the experience" — keeps the per-clip modification cue, + drops the dangling "as described above"). +5. Updated tests to the new intent: `credits.test.js` and `tests/test_e2e_credits.py` + now assert the page notes footage is altered but the **CC BY-SA 4.0 declaration is + NOT** on credits (it moved to About). +6. Left the `.declaration` CSS rule in `style.css` (the About page reuses these styles). +7. Verified: node 28/28, pytest 315 passed / 2 skipped. Committed `8277417`, + ff-merged + pushed, removed the worktree, deleted the branch. + +## End state + +- `design/cloudflare-static-publish` @ `8277417`, clean, pushed. +- Credits page = per-clip attributions + "footage altered" note + audio courtesy + block. The CC BY-SA work-license declaration (D1) is **no longer on credits** — + it now belongs on the About page (operator + `feat/accessibility-pass` own it). +- Site is live; this change reaches `benstull.art` only after a **redeploy**. + +## Deferred decisions + +- **Kept a brief "footage is altered" note on the credits page** rather than + stripping all alteration mention. Rationale: CC BY/BY-SA attribution wants the + modification indicated alongside the credit; the full license declaration is what + moved to About. (Alternative: remove every alteration mention from credits — + judged worse for the per-clip attribution's "indicate changes" cue.) +- **Left `.declaration` CSS in `style.css`** though now unused on credits — the + About page (other session) will reuse it; removing it would break that page. + +## Compliance note + +D1 (the altered-work CC BY-SA declaration) now depends on the About page actually +carrying it. **Confirm it landed on about.html before considering D1 done** — it is +currently in neither place on the live site until the About page ships + a redeploy. + +## Next /goal + +``` +/goal confirm the About page (feat/accessibility-pass) carries the CC BY-SA 4.0 work-license declaration (D1, moved off credits in s0031), then redeploy design/cloudflare-static-publish to benstull.art per deploy/cloudflare/README.md +``` diff --git a/sessions/0032/SESSION-0032.0-TRANSCRIPT-2026-06-30T09-20--2026-06-30T09-24.md b/sessions/0032/SESSION-0032.0-TRANSCRIPT-2026-06-30T09-20--2026-06-30T09-24.md new file mode 100644 index 0000000..5bab796 --- /dev/null +++ b/sessions/0032/SESSION-0032.0-TRANSCRIPT-2026-06-30T09-20--2026-06-30T09-24.md @@ -0,0 +1,56 @@ +# Session 0032.0 — Transcript + +> App: human-experience-filter-art +> Start: 2026-06-30T09-20 (PST) +> End: 2026-06-30T09-24 (PST) +> Type: planning-and-executing +> Posture: yolo +> Claude-Session: c87a07d3-917c-44bc-82cf-c6d8edee952b +> Checkout: /Users/benstull/git/benstull.org/benstull/human-experience-filter-art +> Branch: design/cloudflare-static-publish +> Status: **FINALIZED** + +## Launch prompt + +After confirming that the "About this work" section removed in s0031 *was* the D1 +compliance (the CC BY-SA share-alike declaration, not the per-clip attribution), +the operator: "Ok let's add that content back but can we name the section something +other than 'About This Work' so it isn't confused with the about page?" + +## Arc + +1. Confirmed for the operator that "About this work" carried D1 specifically — the + ShareAlike license declaration for the BY-SA source clips — while the per-clip + attribution (the original goal) was untouched and stayed on credits. +2. Claimed **session 0032**, isolated worktree off the branch tip (`8277417`). +3. Re-added the CC BY-SA 4.0 declaration to `credits.html` under the heading + **"License & reuse"** (deliberately not "About this work" — that name is reserved + for the separate About page from `feat/accessibility-pass`). Restored the footage + note's "altered as described above" now that the section is back above it. Reused + the `.declaration` CSS left in place by s0031. +4. Reverted the s0031 test changes: `credits.test.js` + `tests/test_e2e_credits.py` + now assert the declaration IS present, plus pin the rename (heading ≠ "About this + work", contains "License & reuse"). +5. Verified: node 28/28, pytest 315 passed / 2 skipped (e2e confirms "CC BY-SA 4.0" + visible in-browser again). Committed `ee7c65a`, ff-merged + pushed, removed the + worktree, deleted the branch. + +## End state + +- `design/cloudflare-static-publish` @ `ee7c65a`, clean, pushed. +- Credits page now carries BOTH halves of CC compliance: per-clip CC-BY/BY-SA + attribution **and** the CC BY-SA 4.0 derivative declaration (under "License & + reuse"). The s0031 gap (live site missing the share-alike declaration) is closed. +- Site is live; reaches `benstull.art` only after a **redeploy**. + +## Deferred decisions + +- **Section heading "License & reuse"** chosen (operator delegated the name). It pairs + with the "Credits & licenses" page title and is unambiguous vs. the About page. + (Alternatives weighed: "This work's license", "License & alteration".) + +## Next /goal + +``` +/goal redeploy design/cloudflare-static-publish to benstull.art (CC-BY/BY-SA credits + "License & reuse" D1 declaration now both on the credits page) per deploy/cloudflare/README.md; the About page lands separately via the feat/accessibility-pass session +``` diff --git a/sessions/0033/SESSION-0033.0-TRANSCRIPT-2026-06-30T09-38--2026-06-30T09-43.md b/sessions/0033/SESSION-0033.0-TRANSCRIPT-2026-06-30T09-38--2026-06-30T09-43.md new file mode 100644 index 0000000..cd46b85 --- /dev/null +++ b/sessions/0033/SESSION-0033.0-TRANSCRIPT-2026-06-30T09-38--2026-06-30T09-43.md @@ -0,0 +1,56 @@ +# Session 0033.0 — Transcript + +> App: human-experience-filter-art +> Start: 2026-06-30T09-38 (PST) +> End: 2026-06-30T09-43 (PST) +> Type: planning-and-executing +> Posture: yolo +> Claude-Session: c87a07d3-917c-44bc-82cf-c6d8edee952b +> Checkout: /Users/benstull/git/benstull.org/benstull/human-experience-filter-art +> Branch: design/cloudflare-static-publish (canonical); merge performed on main via worktree +> Status: **FINALIZED** + +## Launch prompt + +Operator asked "Have you merged to main?" → no (all work was on +`design/cloudflare-static-publish`) → operator: "Yes" (merge it to main). + +## Arc + +1. Confirmed none of the credits work (nor the 17-commit static-publish line) was on + `main`; surfaced the considerations (live branch, in-flight a11y session, brings all + commits). Operator approved the merge. +2. Claimed **session 0033**. Surveyed divergence: `main` and the branch had diverged — + `main` carried real app work from the parallel labels/affect session (per-clip + right-brain feelings `bf1013b`, i18n re-extract `2d54023`, affect/label fix + `041fcde`), not just transcript publishes. +3. Found only **two** overlapping files (`app.js`, `altitude-lock.spec.ts`). + **Test-merged in a throwaway worktree** off `origin/main`: clean auto-merge, no + conflicts. Ran the FULL suite on the merged tree — **node 29, pytest 315/2-skip, + green** — before trusting the textual merge. +4. Performed the real `--no-ff` merge on `main` in a worktree (keeping the canonical + checkout on the live deploy branch), pushed `main` (`75961ea`→`87d605d`). +5. Verified credits commits + `credits.html` are on `origin/main`, branch now 0 ahead. + Removed the worktree; canonical checkout clean on `design/cloudflare-static-publish`. + +## End state + +- `origin/main` @ `87d605d` — now carries the entire Cloudflare static-publish line, + including the CC-BY/BY-SA credits page + "License & reuse" CC BY-SA declaration. +- `design/cloudflare-static-publish` is fully integrated (0 commits ahead of main). +- The live site still serves the pre-merge build; **a redeploy** ships the merged main. + +## Deferred decisions + +- **Merged via local `--no-ff` + push rather than a Gitea PR.** `gh` isn't wired (Gitea + host) and the operator approved directly in autonomous mode; the work was developed on + a branch and the merge produces the same merge-commit a PR would. (Alternative: open a + Gitea-API PR for a review record — skipped for speed; can add retroactively if wanted.) +- **Did not merge `main` back into `design/cloudflare-static-publish`.** The branch is 0 + ahead now; future static work can re-branch from main. Left as-is. + +## Next /goal + +``` +/goal redeploy benstull.art from main (now carries the CC-BY/BY-SA credits + "License & reuse" D1 declaration) per deploy/cloudflare/README.md; the About page / WCAG pass lands separately via the feat/accessibility-pass session +``` diff --git a/sessions/sessions.json b/sessions/sessions.json index 9645ab5..04fd4d1 100644 --- a/sessions/sessions.json +++ b/sessions/sessions.json @@ -79,5 +79,23 @@ }, "0027": { "title": "" + }, + "0028": { + "title": "" + }, + "0029": { + "title": "" + }, + "0030": { + "title": "" + }, + "0031": { + "title": "" + }, + "0032": { + "title": "" + }, + "0033": { + "title": "" } } diff --git a/simulator/build_pool_manifest.py b/simulator/build_pool_manifest.py index 690ba69..09789d4 100644 --- a/simulator/build_pool_manifest.py +++ b/simulator/build_pool_manifest.py @@ -233,6 +233,268 @@ AFFECT: dict[str, list[tuple]] = { ], } +# --- Per-CLIP affect override (feelings drawn from THAT specific footage) -------- +# When a clip is here, these feelings replace the scale's shared register for it — +# tailored to what the actual video evokes (mood, motion, light), keeping the +# scale's emotional family as a base. Reuses the scale `feel.*` keys where they fit +# (their es/fr/ja already exist) and adds new keys (with catalog translations) for +# nuances a clip needs. Same tuple shape: (key, [x,y], min_level, [4 tiers]). +AFFECT_CLIP: dict[str, list[tuple]] = { + "orbit_planetearth": [ + ("feel.wonder", [0.5, 0.44], 1, ["wow", "wonder", "awe", "transcendent awe"]), + ("feel.radiance", [0.22, 0.68], 2, ["bright", "radiance", "brilliance", "a jeweled brilliance"]), + ("feel.serenity", [0.66, 0.58], 3, ["calm", "serenity", "peace", "a quiet, weightless peace"]), + ("feel.fragility", [0.42, 0.82], 4, ["thin", "fragility", "vulnerability", "a tender fragility"]), + ], + "orbit_bluemarble": [ + ("feel.unity", [0.5, 0.44], 1, ["one", "unity", "belonging", "a borderless belonging"]), + ("feel.fragility", [0.22, 0.68], 2, ["thin", "fragility", "vulnerability", "a tender fragility"]), + ("feel.distance", [0.66, 0.58], 3, ["far", "distance", "remoteness", "an exquisite remoteness"]), + ("feel.vastness", [0.42, 0.82], 4, ["big", "vastness", "immensity", "a dizzying immensity"]), + ], + "orbit_aurora2025": [ + ("feel.wonder", [0.5, 0.44], 1, ["wow", "wonder", "awe", "transcendent awe"]), + ("feel.sublime", [0.22, 0.68], 2, ["grand", "the sublime", "grandeur", "a cathedral grandeur"]), + ("feel.eeriness", [0.66, 0.58], 3, ["strange", "eeriness", "an otherworldly charge", "an electric, otherworldly hush"]), + ("feel.serenity", [0.42, 0.82], 4, ["calm", "serenity", "peace", "a quiet, weightless peace"]), + ], + "orbit_citylights": [ + ("feel.tenderness", [0.5, 0.44], 1, ["soft", "tenderness", "warmth", "a cradle’s warmth"]), + ("feel.longing", [0.22, 0.68], 2, ["want", "longing", "yearning", "an aching yearning"]), + ("feel.fragility", [0.66, 0.58], 3, ["thin", "fragility", "vulnerability", "a tender fragility"]), + ("feel.unity", [0.42, 0.82], 4, ["one", "unity", "belonging", "a borderless belonging"]), + ], + "orbit_helene": [ + ("feel.sublime", [0.5, 0.44], 1, ["grand", "the sublime", "grandeur", "a cathedral grandeur"]), + ("feel.turbulence", [0.22, 0.68], 2, ["churn", "turbulence", "ferment", "a violent ferment"]), + ("feel.vastness", [0.66, 0.58], 3, ["big", "vastness", "immensity", "a dizzying immensity"]), + ("feel.fragility", [0.42, 0.82], 4, ["thin", "fragility", "vulnerability", "a tender fragility"]), + ], + "orbit_epic": [ + ("feel.distance", [0.5, 0.44], 1, ["far", "distance", "remoteness", "an exquisite remoteness"]), + ("feel.insignificance", [0.22, 0.68], 2, ["small", "smallness", "insignificance", "a humbling insignificance"]), + ("feel.unity", [0.66, 0.58], 3, ["one", "unity", "belonging", "a borderless belonging"]), + ("feel.serenity", [0.42, 0.82], 4, ["calm", "serenity", "peace", "a quiet, weightless peace"]), + ], + "sky_grca_templesa": [ + ("feel.wonder", [0.5, 0.44], 1, ["wow", "wonder", "awe", "transcendent awe"]), + ("feel.sublime", [0.22, 0.68], 2, ["grand", "the sublime", "grandeur", "a cathedral grandeur"]), + ("feel.vastness", [0.66, 0.58], 3, ["big", "vastness", "immensity", "a dizzying immensity"]), + ("feel.exhilaration", [0.42, 0.82], 4, ["whee", "exhilaration", "elation", "a soaring elation"]), + ], + "sky_greenland_landice": [ + ("feel.exhilaration", [0.5, 0.44], 1, ["whee", "exhilaration", "elation", "a soaring elation"]), + ("feel.vastness", [0.22, 0.68], 2, ["big", "vastness", "immensity", "a dizzying immensity"]), + ("feel.purity", [0.66, 0.58], 3, ["pure", "purity", "stillness", "a glacial hush"]), + ("feel.sublime", [0.42, 0.82], 4, ["grand", "the sublime", "grandeur", "a cathedral grandeur"]), + ], + "sky_greenland_suture": [ + ("feel.serenity", [0.5, 0.44], 1, ["calm", "serenity", "peace", "a quiet, weightless peace"]), + ("feel.vastness", [0.22, 0.68], 2, ["big", "vastness", "immensity", "a dizzying immensity"]), + ("feel.solitude", [0.66, 0.58], 3, ["alone", "solitude", "isolation", "a vast frozen solitude"]), + ("feel.lightness", [0.42, 0.82], 4, ["light", "lightness", "buoyancy", "a weightless buoyancy"]), + ], + "sky_jungle_amazon": [ + ("feel.freedom", [0.5, 0.44], 1, ["free", "freedom", "release", "a boundless release"]), + ("feel.verdancy", [0.22, 0.68], 2, ["lush", "verdancy", "abundance", "a teeming green abundance"]), + ("feel.exhilaration", [0.66, 0.58], 3, ["whee", "exhilaration", "elation", "a soaring elation"]), + ("feel.serenity", [0.42, 0.82], 4, ["calm", "serenity", "peace", "a quiet, weightless peace"]), + ], + "sky_jungle_waterfall": [ + ("feel.wonder", [0.5, 0.44], 1, ["wow", "wonder", "awe", "transcendent awe"]), + ("feel.vertigo", [0.22, 0.68], 2, ["whoa", "vertigo", "giddiness", "a giddy, falling vertigo"]), + ("feel.freshness", [0.66, 0.58], 3, ["cool", "freshness", "vitality", "a cool, cascading freshness"]), + ("feel.exhilaration", [0.42, 0.82], 4, ["whee", "exhilaration", "elation", "a soaring elation"]), + ], + "sky_coast_cliffspain": [ + ("feel.sublime", [0.5, 0.44], 1, ["grand", "the sublime", "grandeur", "a cathedral grandeur"]), + ("feel.exhilaration", [0.22, 0.68], 2, ["whee", "exhilaration", "elation", "a soaring elation"]), + ("feel.turbulence", [0.66, 0.58], 3, ["churn", "turbulence", "ferment", "a violent ferment"]), + ("feel.vastness", [0.42, 0.82], 4, ["big", "vastness", "immensity", "a dizzying immensity"]), + ], + "sky_mtn_castlecrags": [ + ("feel.freedom", [0.5, 0.44], 1, ["free", "freedom", "release", "a boundless release"]), + ("feel.serenity", [0.22, 0.68], 2, ["calm", "serenity", "peace", "a quiet, weightless peace"]), + ("feel.vastness", [0.66, 0.58], 3, ["big", "vastness", "immensity", "a dizzying immensity"]), + ("feel.lightness", [0.42, 0.82], 4, ["light", "lightness", "buoyancy", "a weightless buoyancy"]), + ], + "sky_mtn_rocky": [ + ("feel.sublime", [0.5, 0.44], 1, ["grand", "the sublime", "grandeur", "a cathedral grandeur"]), + ("feel.vertigo", [0.22, 0.68], 2, ["whoa", "vertigo", "giddiness", "a giddy, falling vertigo"]), + ("feel.exhilaration", [0.66, 0.58], 3, ["whee", "exhilaration", "elation", "a soaring elation"]), + ("feel.vastness", [0.42, 0.82], 4, ["big", "vastness", "immensity", "a dizzying immensity"]), + ], + "coast_birdrock": [ + ("feel.melancholy", [0.5, 0.44], 1, ["sad", "melancholy", "longing", "a soft seaward longing"]), + ("feel.fragility", [0.22, 0.68], 2, ["thin", "fragility", "vulnerability", "a tender fragility"]), + ("feel.nostalgia", [0.66, 0.58], 3, ["miss", "nostalgia", "wistfulness", "a salt-air wistfulness"]), + ("feel.serenity", [0.42, 0.82], 4, ["calm", "serenity", "peace", "a quiet, weightless peace"]), + ], + "coast_surfgrass": [ + ("feel.abundance", [0.5, 0.44], 1, ["full", "abundance", "richness", "a teeming richness"]), + ("feel.immersion", [0.22, 0.68], 2, ["in", "immersion", "absorption", "a held, breathless absorption"]), + ("feel.curiosity", [0.66, 0.58], 3, ["look", "curiosity", "fascination", "an absorbed fascination"]), + ("feel.ease", [0.42, 0.82], 4, ["nice", "ease", "calm", "an unhurried calm"]), + ], + "coast_kelp": [ + ("feel.immersion", [0.5, 0.44], 1, ["in", "immersion", "absorption", "a held, breathless absorption"]), + ("feel.wonder", [0.22, 0.68], 2, ["wow", "wonder", "awe", "transcendent awe"]), + ("feel.serenity", [0.66, 0.58], 3, ["calm", "serenity", "peace", "a quiet, weightless peace"]), + ("feel.freedom", [0.42, 0.82], 4, ["free", "freedom", "release", "a boundless release"]), + ], + "coast_otters": [ + ("feel.tenderness", [0.5, 0.44], 1, ["soft", "tenderness", "warmth", "a cradle’s warmth"]), + ("feel.delight", [0.22, 0.68], 2, ["fun", "delight", "joy", "a darting, bright joy"]), + ("feel.ease", [0.66, 0.58], 3, ["nice", "ease", "calm", "an unhurried calm"]), + ("feel.belonging", [0.42, 0.82], 4, ["home", "belonging", "rootedness", "a tidal rootedness"]), + ], + "coast_kalaloch": [ + ("feel.nostalgia", [0.5, 0.44], 1, ["miss", "nostalgia", "wistfulness", "a salt-air wistfulness"]), + ("feel.melancholy", [0.22, 0.68], 2, ["sad", "melancholy", "longing", "a soft seaward longing"]), + ("feel.serenity", [0.66, 0.58], 3, ["calm", "serenity", "peace", "a quiet, weightless peace"]), + ("feel.belonging", [0.42, 0.82], 4, ["home", "belonging", "rootedness", "a tidal rootedness"]), + ], + "coast_seals": [ + ("feel.tenderness", [0.5, 0.44], 1, ["soft", "tenderness", "warmth", "a cradle’s warmth"]), + ("feel.repose", [0.22, 0.68], 2, ["rest", "repose", "drowse", "a sun-warmed drowse"]), + ("feel.belonging", [0.66, 0.58], 3, ["home", "belonging", "rootedness", "a tidal rootedness"]), + ("feel.delight", [0.42, 0.82], 4, ["fun", "delight", "joy", "a darting, bright joy"]), + ], + "coast_mist": [ + ("feel.serenity", [0.5, 0.44], 1, ["calm", "serenity", "peace", "a quiet, weightless peace"]), + ("feel.wonder", [0.22, 0.68], 2, ["wow", "wonder", "awe", "transcendent awe"]), + ("feel.hush", [0.66, 0.58], 3, ["quiet", "hush", "stillness", "a breath-held hush"]), + ("feel.nostalgia", [0.42, 0.82], 4, ["miss", "nostalgia", "wistfulness", "a salt-air wistfulness"]), + ], + "reef_lionfish": [ + ("feel.curiosity", [0.5, 0.44], 1, ["look", "curiosity", "fascination", "an absorbed fascination"]), + ("feel.poise", [0.22, 0.68], 2, ["still", "poise", "grace", "a hovering, ornate poise"]), + ("feel.fragility", [0.66, 0.58], 3, ["thin", "fragility", "vulnerability", "a tender fragility"]), + ("feel.immersion", [0.42, 0.82], 4, ["in", "immersion", "absorption", "a held, breathless absorption"]), + ], + "reef_spawning": [ + ("feel.abundance", [0.5, 0.44], 1, ["full", "abundance", "richness", "a teeming richness"]), + ("feel.flow", [0.22, 0.68], 2, ["go", "flow", "streaming", "a sweeping, schooling flow"]), + ("feel.vastness", [0.66, 0.58], 3, ["big", "vastness", "immensity", "a dizzying immensity"]), + ("feel.immersion", [0.42, 0.82], 4, ["in", "immersion", "absorption", "a held, breathless absorption"]), + ], + "reef_hawkfish": [ + ("feel.radiance", [0.5, 0.44], 1, ["bright", "radiance", "brilliance", "a jeweled brilliance"]), + ("feel.curiosity", [0.22, 0.68], 2, ["look", "curiosity", "fascination", "an absorbed fascination"]), + ("feel.delight", [0.66, 0.58], 3, ["fun", "delight", "joy", "a darting, bright joy"]), + ("feel.immersion", [0.42, 0.82], 4, ["in", "immersion", "absorption", "a held, breathless absorption"]), + ], + "reef_coralspacific": [ + ("feel.intricacy", [0.5, 0.44], 1, ["fine", "intricacy", "detail", "an intricate, woven density"]), + ("feel.fragility", [0.22, 0.68], 2, ["thin", "fragility", "vulnerability", "a tender fragility"]), + ("feel.abundance", [0.66, 0.58], 3, ["full", "abundance", "richness", "a teeming richness"]), + ("feel.curiosity", [0.42, 0.82], 4, ["look", "curiosity", "fascination", "an absorbed fascination"]), + ], + "reef_redsea": [ + ("feel.serenity", [0.5, 0.44], 1, ["calm", "serenity", "peace", "a quiet, weightless peace"]), + ("feel.abundance", [0.22, 0.68], 2, ["full", "abundance", "richness", "a teeming richness"]), + ("feel.radiance", [0.66, 0.58], 3, ["bright", "radiance", "brilliance", "a jeweled brilliance"]), + ("feel.delight", [0.42, 0.82], 4, ["fun", "delight", "joy", "a darting, bright joy"]), + ], + "reef_flowergarden": [ + ("feel.delight", [0.5, 0.44], 1, ["fun", "delight", "joy", "a darting, bright joy"]), + ("feel.abundance", [0.22, 0.68], 2, ["full", "abundance", "richness", "a teeming richness"]), + ("feel.freedom", [0.66, 0.58], 3, ["free", "freedom", "release", "a boundless release"]), + ("feel.immersion", [0.42, 0.82], 4, ["in", "immersion", "absorption", "a held, breathless absorption"]), + ], + "abyss_wow": [ + ("feel.vastness", [0.5, 0.44], 1, ["big", "vastness", "immensity", "a dizzying immensity"]), + ("feel.isolation", [0.22, 0.68], 2, ["alone", "isolation", "solitude", "a crushing solitude"]), + ("feel.fascination", [0.66, 0.58], 3, ["ooh", "fascination", "wonder", "a forbidden wonder"]), + ("feel.unease", [0.42, 0.82], 4, ["uh", "unease", "disquiet", "a creeping disquiet"]), + ], + "abyss_midwaterexp": [ + ("feel.fragility", [0.5, 0.44], 1, ["thin", "fragility", "vulnerability", "a tender fragility"]), + ("feel.fascination", [0.22, 0.68], 2, ["ooh", "fascination", "wonder", "a forbidden wonder"]), + ("feel.poignancy", [0.66, 0.58], 3, ["ache", "poignancy", "bittersweetness", "a luminous farewell"]), + ("feel.isolation", [0.42, 0.82], 4, ["alone", "isolation", "solitude", "a crushing solitude"]), + ], + "abyss_hiding": [ + ("feel.spectral", [0.5, 0.44], 1, ["ghost", "the spectral", "hauntedness", "a ghost in the water"]), + ("feel.unease", [0.22, 0.68], 2, ["uh", "unease", "disquiet", "a creeping disquiet"]), + ("feel.fascination", [0.66, 0.58], 3, ["ooh", "fascination", "wonder", "a forbidden wonder"]), + ("feel.fragility", [0.42, 0.82], 4, ["thin", "fragility", "vulnerability", "a tender fragility"]), + ], + "abyss_bigfin": [ + ("feel.alienness", [0.5, 0.44], 1, ["odd", "alienness", "strangeness", "an alien grace"]), + ("feel.fascination", [0.22, 0.68], 2, ["ooh", "fascination", "wonder", "a forbidden wonder"]), + ("feel.unease", [0.66, 0.58], 3, ["uh", "unease", "disquiet", "a creeping disquiet"]), + ("feel.isolation", [0.42, 0.82], 4, ["alone", "isolation", "solitude", "a crushing solitude"]), + ], + "abyss_dandelion": [ + ("feel.radiance", [0.5, 0.44], 1, ["bright", "radiance", "brilliance", "a jeweled brilliance"]), + ("feel.wonder", [0.22, 0.68], 2, ["wow", "wonder", "awe", "transcendent awe"]), + ("feel.fascination", [0.66, 0.58], 3, ["ooh", "fascination", "wonder", "a forbidden wonder"]), + ("feel.fragility", [0.42, 0.82], 4, ["thin", "fragility", "vulnerability", "a tender fragility"]), + ], + "abyss_octopus": [ + ("feel.curiosity", [0.5, 0.44], 1, ["look", "curiosity", "fascination", "an absorbed fascination"]), + ("feel.isolation", [0.22, 0.68], 2, ["alone", "isolation", "solitude", "a crushing solitude"]), + ("feel.tenderness", [0.66, 0.58], 3, ["soft", "tenderness", "warmth", "a cradle’s warmth"]), + ("feel.unease", [0.42, 0.82], 4, ["uh", "unease", "disquiet", "a creeping disquiet"]), + ], + "abyss_seapig": [ + ("feel.strangeness", [0.5, 0.44], 1, ["weird", "strangeness", "the uncanny", "a fleshy strangeness"]), + ("feel.unease", [0.22, 0.68], 2, ["uh", "unease", "disquiet", "a creeping disquiet"]), + ("feel.fascination", [0.66, 0.58], 3, ["ooh", "fascination", "wonder", "a forbidden wonder"]), + ("feel.curiosity", [0.42, 0.82], 4, ["look", "curiosity", "fascination", "an absorbed fascination"]), + ], + # cosmos — Webb "Cosmic Cliffs": monumental golden ridges, cathedral-scale. + "cosmos": [ + ("feel.wonder", [0.50, 0.44], 1, ["wow", "wonder", "awe", "transcendent awe"]), + ("feel.sublime", [0.22, 0.68], 2, ["grand", "the sublime", "grandeur", "a cathedral grandeur"]), + ("feel.vastness", [0.66, 0.58], 3, ["big", "vastness", "immensity", "a dizzying immensity"]), + ("feel.insignificance", [0.42, 0.82], 4, ["small", "smallness", "insignificance", "a humbling insignificance"]), + ], + # cosmos_galaxies — drifting through a dark field of galaxies: lonely, remote. + "cosmos_galaxies": [ + ("feel.vastness", [0.50, 0.44], 1, ["big", "vastness", "immensity", "a dizzying immensity"]), + ("feel.distance", [0.22, 0.68], 2, ["far", "distance", "remoteness", "an exquisite remoteness"]), + ("feel.insignificance", [0.66, 0.58], 3, ["small", "smallness", "insignificance", "a humbling insignificance"]), + ("feel.longing", [0.42, 0.82], 4, ["want", "longing", "yearning", "an aching yearning"]), + ], + # cosmos_orion — soft rose-lit star nursery: tender, dreamy, warm. + "cosmos_orion": [ + ("feel.wonder", [0.50, 0.44], 1, ["wow", "wonder", "awe", "transcendent awe"]), + ("feel.tenderness", [0.22, 0.68], 2, ["soft", "tenderness", "warmth", "a cradle’s warmth"]), + ("feel.serenity", [0.66, 0.58], 3, ["calm", "serenity", "peace", "a quiet, weightless peace"]), + ("feel.longing", [0.42, 0.82], 4, ["want", "longing", "yearning", "an aching yearning"]), + ], + # cosmos_tarantula — chaotic, fierce star-forming nebula: turbulent, intense. + "cosmos_tarantula": [ + ("feel.wonder", [0.50, 0.44], 1, ["wow", "wonder", "awe", "transcendent awe"]), + ("feel.turbulence", [0.22, 0.68], 2, ["churn", "turbulence", "ferment", "a violent ferment"]), + ("feel.vastness", [0.66, 0.58], 3, ["big", "vastness", "immensity", "a dizzying immensity"]), + ("feel.insignificance", [0.42, 0.82], 4, ["small", "smallness", "insignificance", "a humbling insignificance"]), + ], + # cosmos_westerlund — sparkling jewel-box star cluster: dazzling, radiant. + "cosmos_westerlund": [ + ("feel.wonder", [0.50, 0.44], 1, ["wow", "wonder", "awe", "transcendent awe"]), + ("feel.radiance", [0.22, 0.68], 2, ["bright", "radiance", "brilliance", "a jeweled brilliance"]), + ("feel.exhilaration", [0.66, 0.58], 3, ["whee", "exhilaration", "elation", "a soaring elation"]), + ("feel.vastness", [0.42, 0.82], 4, ["big", "vastness", "immensity", "a dizzying immensity"]), + ], + # cosmos_southernring — gas shed by a dying star: elegiac, mortal, poignant. + "cosmos_southernring": [ + ("feel.wonder", [0.50, 0.44], 1, ["wow", "wonder", "awe", "transcendent awe"]), + ("feel.mortality", [0.22, 0.68], 2, ["end", "mortality", "impermanence", "a star’s slow dying"]), + ("feel.poignancy", [0.66, 0.58], 3, ["ache", "poignancy", "bittersweetness", "a luminous farewell"]), + ("feel.longing", [0.42, 0.82], 4, ["want", "longing", "yearning", "an aching yearning"]), + ], + # cosmos_carina_eso — wide teeming Milky Way star field: panoramic richness. + "cosmos_carina_eso": [ + ("feel.wonder", [0.50, 0.44], 1, ["wow", "wonder", "awe", "transcendent awe"]), + ("feel.vastness", [0.22, 0.68], 2, ["big", "vastness", "immensity", "a dizzying immensity"]), + ("feel.abundance", [0.66, 0.58], 3, ["full", "abundance", "richness", "a teeming richness"]), + ("feel.insignificance", [0.42, 0.82], 4, ["small", "smallness", "insignificance", "a humbling insignificance"]), + ], +} + def static_label(key, salience, tiers, box): """A fixed-box tiered label (always on-screen, salience-gated by Left).""" @@ -269,6 +531,7 @@ LABELS: dict[str, list[dict]] = { measure("measure.distance", "≈7,500 ly", [0.06, 0.06, 0.2, 0.08], 3), ], "cosmos_galaxies": [ + measure("measure.count", "~2T galaxies", [0.06, 0.16, 0.24, 0.08], 2), static_label("detected.galaxy", 4, ["galaxy", "spiral galaxy", "barred spiral", "barred spiral · ~10¹¹ stars"], [0.34, 0.30, 0.30, 0.34]), measure("measure.distance", "~Mly", [0.06, 0.06, 0.18, 0.08], 3), ], @@ -291,13 +554,19 @@ LABELS: dict[str, list[dict]] = { ], "orbit_bluemarble": [ static_label("detected.globe", 4, ["Earth", "the globe", "terrestrial planet", "terrestrial planet · 12,742 km across"], [0.28, 0.18, 0.44, 0.6]), + # Rotating full-disk globe: continents drift through frame, so label the + # PERSISTENT features (clouds, starfield) with static boxes, not a continent. + static_label("detected.cloud_band", 3, ["clouds", "weather systems", "cloud systems", "global cloud systems · clouds cover ~67% of Earth"], [0.34, 0.42, 0.34, 0.32]), + static_label("detected.starfield", 1, ["stars", "starfield", "background stars", "background starfield · a rendered backdrop, not to scale"], [0.74, 0.05, 0.22, 0.30]), ], # ---------- coast ---------- "coast_birdrock": [ + static_label("detected.seabirds", 2, ["birds", "seabirds", "nesting seabirds", "seabird colony · the rookery that names the rock"], [0.35, 0.18, 0.25, 0.2]), static_label("detected.surf", 4, ["waves", "surf", "breaking swell", "breaking swell · wind-driven, ~10 s period"], [0.20, 0.55, 0.6, 0.3]), static_label("detected.searock", 2, ["rock", "sea stack", "coastal sea stack", "sea stack · wave-cut residual rock"], [0.30, 0.25, 0.22, 0.3]), ], "coast_surfgrass": [ + static_label("detected.tidepool", 2, ["pool", "tidepool", "intertidal pool", "tidepool · a pocket sea bared at low tide"], [0.15, 0.6, 0.4, 0.25]), static_label("detected.surfgrass", 4, ["grass", "surfgrass", "Phyllospadix", "Phyllospadix · a marine seagrass, not algae"], [0.18, 0.40, 0.5, 0.4]), static_label("detected.coralline", 2, ["pink", "coralline algae", "crustose coralline", "crustose coralline · calcified red algae"], [0.6, 0.55, 0.2, 0.2]), ], @@ -336,6 +605,7 @@ LABELS: dict[str, list[dict]] = { measure("measure.depth", "−22 m", [0.06, 0.06, 0.16, 0.08], 3), ], "reef_hawkfish": [ + static_label("detected.coral", 2, ["coral", "reef coral", "hard coral", "hard coral · the reef this fish grazes into sand"], [0.1, 0.6, 0.55, 0.3]), tracked_label( "detected.parrotfish", 4, ["fish", "parrotfish", "Bolbometopon muricatum", "B. muricatum · humphead, grazes reef into sand"], @@ -353,6 +623,7 @@ LABELS: dict[str, list[dict]] = { ), ], "reef_coralspacific": [ + static_label("detected.polyp", 1, ["polyps", "coral polyps", "living polyps", "polyps · each a tiny animal, the colony’s builders"], [0.25, 0.4, 0.3, 0.3]), static_label("detected.coral", 4, ["coral", "coral colony", "Pacific scleractinian", "Pacific scleractinian · a symbiosis with algae"], [0.2, 0.4, 0.4, 0.4]), tracked_label( "detected.spotfish", 2, @@ -393,6 +664,7 @@ LABELS: dict[str, list[dict]] = { measure("measure.depth", "−1,600 m", [0.06, 0.06, 0.16, 0.08], 2), ], "abyss_hiding": [ + static_label("detected.marinesnow", 1, ["specks", "marine snow", "falling detritus", "marine snow · organic debris drifting down from above"], [0.1, 0.1, 0.8, 0.6]), tracked_label( "detected.jelly", 4, ["jelly", "crimson jelly", "Scyphozoa", "Scyphozoa · red is invisible in the lightless deep"], @@ -454,55 +726,68 @@ LABELS: dict[str, list[dict]] = { ], # ---------- sky ---------- "sky_grca_templesa": [ + static_label("detected.butte", 2, ["tower", "butte", "rock temple", "rock ‘temple’ · an erosional butte left standing"], [0.4, 0.3, 0.2, 0.35]), static_label("detected.canyon", 4, ["canyon", "gorge", "the Grand Canyon", "Grand Canyon · ~1.8 Gyr of rock, cut by the Colorado"], [0.10, 0.38, 0.8, 0.52]), static_label("detected.strata", 2, ["layers", "rock strata", "sedimentary beds", "strata · stacked epochs of deposition"], [0.15, 0.55, 0.6, 0.25]), ], "sky_greenland_landice": [ + static_label("detected.crevasse", 2, ["cracks", "crevasses", "glacial crevasses", "crevasses · the ice fracturing as it flows"], [0.2, 0.55, 0.5, 0.25]), static_label("detected.icesheet", 4, ["ice", "ice sheet", "the Greenland ice sheet", "ice sheet · up to ~3 km thick, flowing slowly seaward"], [0.08, 0.40, 0.84, 0.5]), static_label("detected.snow", 2, ["snow", "snowfield", "firn", "firn · old snow compacting toward glacial ice"], [0.20, 0.20, 0.6, 0.25]), ], "sky_greenland_suture": [ + static_label("detected.floe", 2, ["plates", "ice floes", "pack-ice floes", "pack-ice floes · drifting plates of frozen sea"], [0.15, 0.2, 0.3, 0.3]), static_label("detected.seaice", 4, ["ice", "sea ice", "drift ice", "drift ice · a frozen ocean skin, cracking and refreezing"], [0.08, 0.10, 0.84, 0.8]), static_label("detected.lead", 2, ["crack", "lead", "open lead", "lead · a fracture of open water between floes"], [0.30, 0.40, 0.4, 0.2]), ], "sky_jungle_amazon": [ + static_label("detected.mist", 1, ["haze", "canopy mist", "transpiration haze", "transpiration haze · the forest exhaling water vapor"], [0.06, 0.1, 0.88, 0.18]), static_label("detected.canopy", 4, ["trees", "forest canopy", "the Amazon canopy", "rainforest canopy · among the densest biodiversity on Earth"], [0.06, 0.30, 0.88, 0.6]), static_label("detected.emergent", 2, ["tree", "tall tree", "emergent tree", "emergent · a giant breaking above the canopy roof"], [0.42, 0.40, 0.16, 0.2]), ], "sky_jungle_waterfall": [ + static_label("detected.spray", 2, ["mist", "spray", "plunge spray", "plunge spray · the river aerosolized on impact"], [0.36, 0.62, 0.28, 0.25]), static_label("detected.waterfall", 4, ["falls", "waterfall", "cataract", "cataract · a river plunging off the canopy’s edge"], [0.34, 0.20, 0.3, 0.7]), static_label("detected.canopy", 2, ["trees", "jungle canopy", "rainforest canopy", "canopy · dense forest crowding the gorge"], [0.05, 0.30, 0.9, 0.5]), ], "sky_coast_cliffspain": [ + static_label("detected.headland", 1, ["point", "headland", "rock promontory", "promontory · a cliffed arm of land into the sea"], [0.1, 0.2, 0.3, 0.4]), static_label("detected.seacliff", 4, ["cliff", "sea cliff", "coastal headland", "sea cliff · Atlantic rock cut back by the surf"], [0.10, 0.25, 0.8, 0.55]), static_label("detected.surf", 2, ["waves", "surf", "breaking swell", "breaking swell · ocean meeting stone"], [0.15, 0.70, 0.7, 0.25]), ], "sky_mtn_castlecrags": [ + static_label("detected.talus", 2, ["scree", "talus", "talus slope", "talus · frost-shattered rock piled below the crags"], [0.3, 0.55, 0.4, 0.25]), static_label("detected.spire", 4, ["rock", "spire", "granite spire", "granite spire · a glacier-carved pluton, exhumed and weathered"], [0.30, 0.20, 0.4, 0.6]), static_label("detected.forest", 2, ["trees", "conifer forest", "montane forest", "montane forest · cloaking the slopes below the crags"], [0.05, 0.60, 0.9, 0.35]), ], "sky_mtn_rocky": [ + static_label("detected.snowfield", 2, ["snow", "snowfield", "alpine snowfield", "alpine snowfield · lingering high-elevation snow"], [0.3, 0.22, 0.3, 0.22]), static_label("detected.summit", 4, ["peak", "summit", "alpine summit", "alpine summit · above tree line, snow-streaked granite"], [0.25, 0.20, 0.5, 0.5]), static_label("detected.tundra", 2, ["meadow", "alpine tundra", "alpine tundra", "alpine tundra · low cushion plants above the trees"], [0.10, 0.62, 0.8, 0.3]), ], # ---------- coast ---------- "coast_kelp": [ + static_label("detected.pneumatocyst", 1, ["floats", "gas bladders", "pneumatocysts", "pneumatocysts · gas floats lifting the blades to light"], [0.4, 0.18, 0.2, 0.25]), static_label("detected.kelp", 4, ["kelp", "giant kelp", "Macrocystis pyrifera", "Macrocystis · can grow ~0.5 m a day toward the light"], [0.20, 0.10, 0.6, 0.8]), static_label("detected.frond", 2, ["leaf", "blade", "kelp frond", "frond · gas-filled floats hold it upright"], [0.40, 0.30, 0.2, 0.4]), ], "coast_otters": [ + static_label("detected.fur", 1, ["fur", "dense fur", "the densest fur", "densest fur on Earth · ~1M hairs/in², no blubber"], [0.34, 0.38, 0.3, 0.25]), static_label("detected.otter", 4, ["otter", "sea otter", "Enhydra lutris", "Enhydra lutris · eats ~25% of its weight a day to stay warm"], [0.30, 0.35, 0.4, 0.35]), static_label("detected.water", 2, ["water", "estuary", "tidal slough", "tidal slough · sheltered nursery water"], [0.05, 0.05, 0.9, 0.25]), ], "coast_kalaloch": [ + static_label("detected.sunset", 2, ["glow", "sunset", "golden hour", "golden hour · low sun reddened through more air"], [0.05, 0.05, 0.9, 0.22]), static_label("detected.surf", 4, ["waves", "surf", "breaking swell", "breaking swell · long-period Pacific swell"], [0.15, 0.50, 0.7, 0.35]), static_label("detected.searock", 2, ["rock", "sea stack", "coastal sea stack", "sea stack · wave-cut residual rock"], [0.30, 0.25, 0.3, 0.3]), ], "coast_seals": [ + static_label("detected.whiskers", 1, ["whiskers", "vibrissae", "sensing whiskers", "vibrissae · whiskers that feel prey in murky water"], [0.3, 0.42, 0.2, 0.15]), static_label("detected.seal", 4, ["seals", "harbor seals", "Phoca vitulina", "Phoca vitulina · hauls out on rock to rest and warm"], [0.20, 0.40, 0.6, 0.35]), static_label("detected.searock", 2, ["rock", "haul-out rock", "intertidal rock", "haul-out · a tide-washed resting ledge"], [0.05, 0.6, 0.9, 0.3]), ], "coast_mist": [ + static_label("detected.swell", 2, ["waves", "swell", "ocean swell", "ocean swell · wind-built waves from distant storms"], [0.1, 0.58, 0.8, 0.25]), static_label("detected.mist", 4, ["mist", "sea mist", "advection fog", "advection fog · warm air cooling over cold upwelling"], [0.05, 0.10, 0.9, 0.5]), static_label("detected.searock", 2, ["rock", "shore rock", "coastal rock", "coastal rock · the standing edge of the land"], [0.20, 0.55, 0.6, 0.35]), ], @@ -519,19 +804,43 @@ LABELS: dict[str, list[dict]] = { ], # ---------- abyss ---------- "abyss_bigfin": [ - static_label("detected.squid", 4, ["squid", "bigfin squid", "Magnapinna", "Magnapinna · elbowed arms trailing meters into the dark"], [0.30, 0.20, 0.4, 0.65]), + static_label("detected.arms", 2, ["arms", "elbowed arms", "trailing filaments", "elbowed arms · held out, then trailing meters of thread"], [0.35, 0.5, 0.3, 0.4]), + tracked_label( + "detected.squid", 4, + ["squid", "bigfin squid", "Magnapinna", "Magnapinna · elbowed arms trailing meters into the dark"], + 0.0, 1.0, + [(0.0, [0.3, 0.36, 0.28, 0.3]), (0.5, [0.42, 0.22, 0.26, 0.28]), (1.0, [0.55, 0.1, 0.26, 0.3])], + ), measure("measure.depth", "−2,000 m", [0.06, 0.06, 0.16, 0.08], 2), ], "abyss_dandelion": [ - static_label("detected.siphonophore", 4, ["orb", "siphonophore", "dandelion siphonophore", "Rhodaliidae · a colony of clones tethered to the seabed"], [0.32, 0.28, 0.36, 0.4]), + static_label("detected.tentacle", 2, ["threads", "tentacles", "feeding tentacles", "feeding tentacles · a drifting net for prey"], [0.3, 0.45, 0.4, 0.3]), + tracked_label( + "detected.siphonophore", 4, + ["orb", "siphonophore", "dandelion siphonophore", "Rhodaliidae · a colony of clones tethered to the seabed"], + 0.0, 1.0, + [(0.0, [0.38, 0.28, 0.26, 0.36]), (0.5, [0.3, 0.2, 0.34, 0.46]), (1.0, [0.18, 0.1, 0.45, 0.7])], + ), measure("measure.depth", "−2,500 m", [0.06, 0.06, 0.16, 0.08], 2), ], "abyss_octopus": [ - static_label("detected.octopus", 4, ["octopus", "deep-sea octopus", "Graneledone", "Graneledone boreopacifica · broods its eggs for ~4.5 years"], [0.25, 0.30, 0.5, 0.45]), + static_label("detected.arms", 2, ["arms", "eight arms", "sucker-lined arms", "eight arms · sucker-lined, tasting what they touch"], [0.25, 0.45, 0.5, 0.3]), + tracked_label( + "detected.octopus", 4, + ["octopus", "deep-sea octopus", "Graneledone", "Graneledone boreopacifica · broods its eggs for ~4.5 years"], + 0.0, 1.0, + [(0.0, [0.5, 0.1, 0.35, 0.55]), (0.5, [0.42, 0.16, 0.36, 0.52]), (1.0, [0.05, 0.02, 0.92, 0.95])], + ), measure("measure.depth", "−2,500 m", [0.06, 0.06, 0.16, 0.08], 2), ], "abyss_seapig": [ - static_label("detected.seacucumber", 4, ["blob", "sea cucumber", "Enypniastes eximia", "Enypniastes · a swimming sea cucumber, the “headless chicken”"], [0.30, 0.30, 0.4, 0.4]), + static_label("detected.veil", 2, ["veil", "oral veil", "swimming veil", "oral veil · sweeps sediment, and flaps to swim"], [0.3, 0.3, 0.35, 0.25]), + tracked_label( + "detected.seacucumber", 4, + ["blob", "sea cucumber", "Enypniastes eximia", "Enypniastes · a swimming sea cucumber, the “headless chicken”"], + 0.0, 1.0, + [(0.0, [0.58, 0.38, 0.18, 0.3]), (0.5, [0.46, 0.32, 0.19, 0.32]), (1.0, [0.38, 0.28, 0.2, 0.36])], + ), measure("measure.depth", "−2,700 m", [0.06, 0.06, 0.16, 0.08], 2), ], } @@ -540,10 +849,13 @@ LABELS: dict[str, list[dict]] = { # data above; this maps measurement keys to nothing extra (their value IS the string). -def _affect_for_clip(scale: str) -> tuple[list, dict]: - """Build the affect list + its strings for a scale's pool member.""" +def _affect_for_clip(scale: str, clip_id: str) -> tuple[list, dict]: + """Build the affect list + its strings for a clip. A per-clip override in + AFFECT_CLIP (feelings drawn from THAT footage) wins; otherwise the scale's + shared register applies.""" + source = AFFECT_CLIP.get(clip_id, AFFECT[scale]) entries, strings = [], {} - for key, at, min_level, tiers in AFFECT[scale]: + for key, at, min_level, tiers in source: entries.append({"key": key, "at": at, "min_level": min_level}) strings[key] = tiers return entries, strings @@ -562,7 +874,7 @@ def _labels_for_clip(clip_id: str) -> tuple[list, dict]: def _clip_entry(scale: str, clip_id: str) -> dict: title, license_, source = META[clip_id] anns, lab_strings = _labels_for_clip(clip_id) - affect, aff_strings = _affect_for_clip(scale) + affect, aff_strings = _affect_for_clip(scale, clip_id) return { "id": clip_id, "title": title, diff --git a/simulator/e2e/tests/altitude-lock.spec.ts b/simulator/e2e/tests/altitude-lock.spec.ts index 4cac281..b86c830 100644 --- a/simulator/e2e/tests/altitude-lock.spec.ts +++ b/simulator/e2e/tests/altitude-lock.spec.ts @@ -179,6 +179,38 @@ test("a landed clip loops from the morph-tail offset (no jump-back to frame 0)", expect(v.t).toBeGreaterThanOrEqual(2.5); // looping from ~3s, not 0 }); +test("ascending re-lands anchored at the clip head (no reverse-landing jump)", async ({ page }) => { + // D3: a morph spans src@0 (frac 0) -> dst@~3s (frac 1). Descending lands on dst at its + // tail (~3s); ASCENDING lands on src at its HEAD (~0s). The steady loop must continue + // from 0 there — seeking to the tail (~3s) was the ~3s reverse-landing jump. + await boot(page); + await enableVideo(page); // base loop only loads when video is shown + // Descend one altitude (cosmos -> orbit), then ascend back (orbit -> cosmos): the + // ascent is the reverse landing under test. + const start = (await page.locator("#scale-name").textContent())!; + await wheelOnStage(page, 60); // descend + await page.waitForFunction((s) => document.querySelector("#scale-name")?.textContent !== s, start, { timeout: 20000 }); + const mid = (await page.locator("#scale-name").textContent())!; + expect(mid).toContain("orbit"); + await wheelOnStage(page, -60); // ascend back + await page.waitForFunction((s) => document.querySelector("#scale-name")?.textContent !== s, mid, { timeout: 20000 }); + expect(await page.locator("#scale-name").textContent()).toContain("cosmos"); + // The loop element is now anchored at the HEAD (loopStart "0"), playing — not jumped to + // the ~3s tail the descending case uses. + await page.waitForFunction( + () => { const v = document.querySelector("#vid-loop") as HTMLVideoElement; return v.dataset.loopTail === "1" && v.dataset.loopStart === "0"; }, + null, + { timeout: 10000 }, + ); + const v = await page.evaluate(() => { + const el = document.querySelector("#vid-loop") as HTMLVideoElement; + return { loopStart: el.dataset.loopStart, loopTail: el.dataset.loopTail, paused: el.paused }; + }); + expect(v.loopTail).toBe("1"); // tail-loop machinery armed + expect(v.loopStart).toBe("0"); // anchored at the head, not the morph tail + expect(v.paused).toBe(false); // the loop is actually playing +}); + test("zoom in plays the matching morph, lands locked, and stays put while parked", async ({ page }) => { await boot(page); const start = (await page.locator("#scale-name").textContent())!; diff --git a/simulator/sample_media/manifest.json b/simulator/sample_media/manifest.json index c18335f..7aa612e 100644 --- a/simulator/sample_media/manifest.json +++ b/simulator/sample_media/manifest.json @@ -49,26 +49,26 @@ "min_level": 1 }, { - "key": "feel.vastness", + "key": "feel.sublime", "at": [ - 0.2, - 0.7 + 0.22, + 0.68 ], "min_level": 2 }, { - "key": "feel.insignificance", + "key": "feel.vastness", "at": [ 0.66, - 0.6 + 0.58 ], "min_level": 3 }, { - "key": "feel.longing", + "key": "feel.insignificance", "at": [ 0.42, - 0.84 + 0.82 ], "min_level": 4 } @@ -94,6 +94,12 @@ "awe", "transcendent awe" ], + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" + ], "feel.vastness": [ "big", "vastness", @@ -105,12 +111,6 @@ "smallness", "insignificance", "a humbling insignificance" - ], - "feel.longing": [ - "want", - "longing", - "yearning", - "an aching yearning" ] }, "es": { @@ -133,6 +133,12 @@ "sobrecogimiento", "sobrecogimiento trascendente" ], + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" + ], "feel.vastness": [ "grande", "vastedad", @@ -144,12 +150,6 @@ "pequeñez", "insignificancia", "una insignificancia que humilla" - ], - "feel.longing": [ - "querer", - "anhelo", - "añoranza", - "una añoranza punzante" ] }, "fr": { @@ -172,6 +172,12 @@ "saisissement", "un saisissement transcendant" ], + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" + ], "feel.vastness": [ "grand", "vastitude", @@ -183,12 +189,6 @@ "petitesse", "insignifiance", "une insignifiance qui rend humble" - ], - "feel.longing": [ - "envie", - "désir", - "aspiration", - "une aspiration douloureuse" ] }, "ja": { @@ -211,6 +211,12 @@ "畏敬", "超越的な畏敬" ], + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" + ], "feel.vastness": [ "大きい", "広大さ", @@ -222,12 +228,6 @@ "小ささ", "ちっぽけさ", "謙虚にさせるちっぽけさ" - ], - "feel.longing": [ - "欲しい", - "憧れ", - "切望", - "胸を締めつける切望" ] } } @@ -240,6 +240,16 @@ "source": "NASA SVS a014950 14950_Galaxies_FlyThrough_4k; trim 8–32s, crossfade-loop", "right_variants": {}, "annotations": [ + { + "key": "measure.count", + "box": [ + 0.06, + 0.16, + 0.24, + 0.08 + ], + "min_level": 2 + }, { "key": "detected.galaxy", "salience": 4, @@ -263,7 +273,7 @@ ], "affect": [ { - "key": "feel.wonder", + "key": "feel.vastness", "at": [ 0.5, 0.44 @@ -271,10 +281,10 @@ "min_level": 1 }, { - "key": "feel.vastness", + "key": "feel.distance", "at": [ - 0.2, - 0.7 + 0.22, + 0.68 ], "min_level": 2 }, @@ -282,7 +292,7 @@ "key": "feel.insignificance", "at": [ 0.66, - 0.6 + 0.58 ], "min_level": 3 }, @@ -290,13 +300,14 @@ "key": "feel.longing", "at": [ 0.42, - 0.84 + 0.82 ], "min_level": 4 } ], "strings": { "en": { + "measure.count": "~2T galaxies", "detected.galaxy": [ "galaxy", "spiral galaxy", @@ -304,18 +315,18 @@ "barred spiral · ~10¹¹ stars" ], "measure.distance": "~Mly", - "feel.wonder": [ - "wow", - "wonder", - "awe", - "transcendent awe" - ], "feel.vastness": [ "big", "vastness", "immensity", "a dizzying immensity" ], + "feel.distance": [ + "far", + "distance", + "remoteness", + "an exquisite remoteness" + ], "feel.insignificance": [ "small", "smallness", @@ -330,6 +341,7 @@ ] }, "es": { + "measure.count": "~2 billones de galaxias", "detected.galaxy": [ "galaxia", "galaxia espiral", @@ -337,18 +349,18 @@ "espiral barrada · ~10¹¹ estrellas" ], "measure.distance": "~Mal", - "feel.wonder": [ - "guau", - "asombro", - "sobrecogimiento", - "sobrecogimiento trascendente" - ], "feel.vastness": [ "grande", "vastedad", "inmensidad", "una inmensidad vertiginosa" ], + "feel.distance": [ + "lejos", + "distancia", + "lejanía", + "una lejanía exquisita" + ], "feel.insignificance": [ "pequeño", "pequeñez", @@ -363,6 +375,7 @@ ] }, "fr": { + "measure.count": "~2 000 milliards de galaxies", "detected.galaxy": [ "galaxie", "galaxie spirale", @@ -370,18 +383,18 @@ "spirale barrée · ~10¹¹ étoiles" ], "measure.distance": "~Mal", - "feel.wonder": [ - "ouah", - "émerveillement", - "saisissement", - "un saisissement transcendant" - ], "feel.vastness": [ "grand", "vastitude", "immensité", "une immensité vertigineuse" ], + "feel.distance": [ + "loin", + "distance", + "éloignement", + "un éloignement exquis" + ], "feel.insignificance": [ "petit", "petitesse", @@ -396,6 +409,7 @@ ] }, "ja": { + "measure.count": "約2兆個の銀河", "detected.galaxy": [ "銀河", "渦巻銀河", @@ -403,18 +417,18 @@ "棒渦巻銀河 · 約10¹¹個の星" ], "measure.distance": "~百万光年", - "feel.wonder": [ - "わあ", - "驚き", - "畏敬", - "超越的な畏敬" - ], "feel.vastness": [ "大きい", "広大さ", "無限の広がり", "めまいを誘う無限の広がり" ], + "feel.distance": [ + "遠い", + "隔たり", + "遥かさ", + "この上なく美しい遥かさ" + ], "feel.insignificance": [ "小さい", "小ささ", @@ -479,18 +493,18 @@ "min_level": 1 }, { - "key": "feel.vastness", + "key": "feel.tenderness", "at": [ - 0.2, - 0.7 + 0.22, + 0.68 ], "min_level": 2 }, { - "key": "feel.insignificance", + "key": "feel.serenity", "at": [ 0.66, - 0.6 + 0.58 ], "min_level": 3 }, @@ -498,7 +512,7 @@ "key": "feel.longing", "at": [ 0.42, - 0.84 + 0.82 ], "min_level": 4 } @@ -524,17 +538,17 @@ "awe", "transcendent awe" ], - "feel.vastness": [ - "big", - "vastness", - "immensity", - "a dizzying immensity" + "feel.tenderness": [ + "soft", + "tenderness", + "warmth", + "a cradle’s warmth" ], - "feel.insignificance": [ - "small", - "smallness", - "insignificance", - "a humbling insignificance" + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" ], "feel.longing": [ "want", @@ -563,17 +577,17 @@ "sobrecogimiento", "sobrecogimiento trascendente" ], - "feel.vastness": [ - "grande", - "vastedad", - "inmensidad", - "una inmensidad vertiginosa" + "feel.tenderness": [ + "suave", + "ternura", + "calidez", + "la calidez de una cuna" ], - "feel.insignificance": [ - "pequeño", - "pequeñez", - "insignificancia", - "una insignificancia que humilla" + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" ], "feel.longing": [ "querer", @@ -602,17 +616,17 @@ "saisissement", "un saisissement transcendant" ], - "feel.vastness": [ - "grand", - "vastitude", - "immensité", - "une immensité vertigineuse" + "feel.tenderness": [ + "doux", + "tendresse", + "chaleur", + "la chaleur d’un berceau" ], - "feel.insignificance": [ - "petit", - "petitesse", - "insignifiance", - "une insignifiance qui rend humble" + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" ], "feel.longing": [ "envie", @@ -641,17 +655,17 @@ "畏敬", "超越的な畏敬" ], - "feel.vastness": [ - "大きい", - "広大さ", - "無限の広がり", - "めまいを誘う無限の広がり" + "feel.tenderness": [ + "やさしい", + "優しさ", + "ぬくもり", + "ゆりかごのようなぬくもり" ], - "feel.insignificance": [ - "小さい", - "小ささ", - "ちっぽけさ", - "謙虚にさせるちっぽけさ" + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" ], "feel.longing": [ "欲しい", @@ -711,26 +725,26 @@ "min_level": 1 }, { - "key": "feel.vastness", + "key": "feel.turbulence", "at": [ - 0.2, - 0.7 + 0.22, + 0.68 ], "min_level": 2 }, { - "key": "feel.insignificance", + "key": "feel.vastness", "at": [ 0.66, - 0.6 + 0.58 ], "min_level": 3 }, { - "key": "feel.longing", + "key": "feel.insignificance", "at": [ 0.42, - 0.84 + 0.82 ], "min_level": 4 } @@ -756,6 +770,12 @@ "awe", "transcendent awe" ], + "feel.turbulence": [ + "churn", + "turbulence", + "ferment", + "a violent ferment" + ], "feel.vastness": [ "big", "vastness", @@ -767,12 +787,6 @@ "smallness", "insignificance", "a humbling insignificance" - ], - "feel.longing": [ - "want", - "longing", - "yearning", - "an aching yearning" ] }, "es": { @@ -795,6 +809,12 @@ "sobrecogimiento", "sobrecogimiento trascendente" ], + "feel.turbulence": [ + "agitación", + "turbulencia", + "fermento", + "un fermento violento" + ], "feel.vastness": [ "grande", "vastedad", @@ -806,12 +826,6 @@ "pequeñez", "insignificancia", "una insignificancia que humilla" - ], - "feel.longing": [ - "querer", - "anhelo", - "añoranza", - "una añoranza punzante" ] }, "fr": { @@ -834,6 +848,12 @@ "saisissement", "un saisissement transcendant" ], + "feel.turbulence": [ + "remous", + "turbulence", + "ferment", + "un ferment violent" + ], "feel.vastness": [ "grand", "vastitude", @@ -845,12 +865,6 @@ "petitesse", "insignifiance", "une insignifiance qui rend humble" - ], - "feel.longing": [ - "envie", - "désir", - "aspiration", - "une aspiration douloureuse" ] }, "ja": { @@ -873,6 +887,12 @@ "畏敬", "超越的な畏敬" ], + "feel.turbulence": [ + "渦巻き", + "乱流", + "胎動", + "激しい胎動" + ], "feel.vastness": [ "大きい", "広大さ", @@ -884,12 +904,6 @@ "小ささ", "ちっぽけさ", "謙虚にさせるちっぽけさ" - ], - "feel.longing": [ - "欲しい", - "憧れ", - "切望", - "胸を締めつける切望" ] } } @@ -943,26 +957,26 @@ "min_level": 1 }, { - "key": "feel.vastness", + "key": "feel.radiance", "at": [ - 0.2, - 0.7 + 0.22, + 0.68 ], "min_level": 2 }, { - "key": "feel.insignificance", + "key": "feel.exhilaration", "at": [ 0.66, - 0.6 + 0.58 ], "min_level": 3 }, { - "key": "feel.longing", + "key": "feel.vastness", "at": [ 0.42, - 0.84 + 0.82 ], "min_level": 4 } @@ -988,23 +1002,23 @@ "awe", "transcendent awe" ], + "feel.radiance": [ + "bright", + "radiance", + "brilliance", + "a jeweled brilliance" + ], + "feel.exhilaration": [ + "whee", + "exhilaration", + "elation", + "a soaring elation" + ], "feel.vastness": [ "big", "vastness", "immensity", "a dizzying immensity" - ], - "feel.insignificance": [ - "small", - "smallness", - "insignificance", - "a humbling insignificance" - ], - "feel.longing": [ - "want", - "longing", - "yearning", - "an aching yearning" ] }, "es": { @@ -1027,23 +1041,23 @@ "sobrecogimiento", "sobrecogimiento trascendente" ], + "feel.radiance": [ + "brillo", + "resplandor", + "fulgor", + "un fulgor de joyas" + ], + "feel.exhilaration": [ + "yupi", + "euforia", + "júbilo", + "un júbilo que se eleva" + ], "feel.vastness": [ "grande", "vastedad", "inmensidad", "una inmensidad vertiginosa" - ], - "feel.insignificance": [ - "pequeño", - "pequeñez", - "insignificancia", - "una insignificancia que humilla" - ], - "feel.longing": [ - "querer", - "anhelo", - "añoranza", - "una añoranza punzante" ] }, "fr": { @@ -1066,23 +1080,23 @@ "saisissement", "un saisissement transcendant" ], + "feel.radiance": [ + "éclat", + "rayonnement", + "scintillement", + "un scintillement de joyaux" + ], + "feel.exhilaration": [ + "youpi", + "exaltation", + "euphorie", + "une euphorie qui s'envole" + ], "feel.vastness": [ "grand", "vastitude", "immensité", "une immensité vertigineuse" - ], - "feel.insignificance": [ - "petit", - "petitesse", - "insignifiance", - "une insignifiance qui rend humble" - ], - "feel.longing": [ - "envie", - "désir", - "aspiration", - "une aspiration douloureuse" ] }, "ja": { @@ -1105,23 +1119,23 @@ "畏敬", "超越的な畏敬" ], + "feel.radiance": [ + "輝き", + "光輝", + "煌めき", + "宝石のような煌めき" + ], + "feel.exhilaration": [ + "わーい", + "高揚", + "歓喜", + "舞い上がる歓喜" + ], "feel.vastness": [ "大きい", "広大さ", "無限の広がり", "めまいを誘う無限の広がり" - ], - "feel.insignificance": [ - "小さい", - "小ささ", - "ちっぽけさ", - "謙虚にさせるちっぽけさ" - ], - "feel.longing": [ - "欲しい", - "憧れ", - "切望", - "胸を締めつける切望" ] } } @@ -1175,18 +1189,18 @@ "min_level": 1 }, { - "key": "feel.vastness", + "key": "feel.mortality", "at": [ - 0.2, - 0.7 + 0.22, + 0.68 ], "min_level": 2 }, { - "key": "feel.insignificance", + "key": "feel.poignancy", "at": [ 0.66, - 0.6 + 0.58 ], "min_level": 3 }, @@ -1194,7 +1208,7 @@ "key": "feel.longing", "at": [ 0.42, - 0.84 + 0.82 ], "min_level": 4 } @@ -1220,17 +1234,17 @@ "awe", "transcendent awe" ], - "feel.vastness": [ - "big", - "vastness", - "immensity", - "a dizzying immensity" + "feel.mortality": [ + "end", + "mortality", + "impermanence", + "a star’s slow dying" ], - "feel.insignificance": [ - "small", - "smallness", - "insignificance", - "a humbling insignificance" + "feel.poignancy": [ + "ache", + "poignancy", + "bittersweetness", + "a luminous farewell" ], "feel.longing": [ "want", @@ -1259,17 +1273,17 @@ "sobrecogimiento", "sobrecogimiento trascendente" ], - "feel.vastness": [ - "grande", - "vastedad", - "inmensidad", - "una inmensidad vertiginosa" + "feel.mortality": [ + "fin", + "mortalidad", + "fugacidad", + "la lenta muerte de una estrella" ], - "feel.insignificance": [ - "pequeño", - "pequeñez", - "insignificancia", - "una insignificancia que humilla" + "feel.poignancy": [ + "punzada", + "desgarro", + "melancolía dulce", + "una despedida luminosa" ], "feel.longing": [ "querer", @@ -1298,17 +1312,17 @@ "saisissement", "un saisissement transcendant" ], - "feel.vastness": [ - "grand", - "vastitude", - "immensité", - "une immensité vertigineuse" + "feel.mortality": [ + "fin", + "mortalité", + "impermanence", + "la lente mort d’une étoile" ], - "feel.insignificance": [ - "petit", - "petitesse", - "insignifiance", - "une insignifiance qui rend humble" + "feel.poignancy": [ + "pincement", + "émotion poignante", + "douceur amère", + "un adieu lumineux" ], "feel.longing": [ "envie", @@ -1337,17 +1351,17 @@ "畏敬", "超越的な畏敬" ], - "feel.vastness": [ - "大きい", - "広大さ", - "無限の広がり", - "めまいを誘う無限の広がり" + "feel.mortality": [ + "終わり", + "死", + "無常", + "星のゆるやかな死" ], - "feel.insignificance": [ - "小さい", - "小ささ", - "ちっぽけさ", - "謙虚にさせるちっぽけさ" + "feel.poignancy": [ + "切なさ", + "哀切", + "ほろ苦さ", + "光に満ちた別れ" ], "feel.longing": [ "欲しい", @@ -1409,24 +1423,24 @@ { "key": "feel.vastness", "at": [ - 0.2, - 0.7 + 0.22, + 0.68 ], "min_level": 2 }, { - "key": "feel.insignificance", + "key": "feel.abundance", "at": [ 0.66, - 0.6 + 0.58 ], "min_level": 3 }, { - "key": "feel.longing", + "key": "feel.insignificance", "at": [ 0.42, - 0.84 + 0.82 ], "min_level": 4 } @@ -1458,17 +1472,17 @@ "immensity", "a dizzying immensity" ], + "feel.abundance": [ + "full", + "abundance", + "richness", + "a teeming richness" + ], "feel.insignificance": [ "small", "smallness", "insignificance", "a humbling insignificance" - ], - "feel.longing": [ - "want", - "longing", - "yearning", - "an aching yearning" ] }, "es": { @@ -1497,17 +1511,17 @@ "inmensidad", "una inmensidad vertiginosa" ], + "feel.abundance": [ + "lleno", + "abundancia", + "riqueza", + "una riqueza rebosante" + ], "feel.insignificance": [ "pequeño", "pequeñez", "insignificancia", "una insignificancia que humilla" - ], - "feel.longing": [ - "querer", - "anhelo", - "añoranza", - "una añoranza punzante" ] }, "fr": { @@ -1536,17 +1550,17 @@ "immensité", "une immensité vertigineuse" ], + "feel.abundance": [ + "plein", + "abondance", + "richesse", + "une richesse grouillante" + ], "feel.insignificance": [ "petit", "petitesse", "insignifiance", "une insignifiance qui rend humble" - ], - "feel.longing": [ - "envie", - "désir", - "aspiration", - "une aspiration douloureuse" ] }, "ja": { @@ -1575,17 +1589,17 @@ "無限の広がり", "めまいを誘う無限の広がり" ], + "feel.abundance": [ + "いっぱい", + "豊かさ", + "充溢", + "あふれんばかりの充溢" + ], "feel.insignificance": [ "小さい", "小ささ", "ちっぽけさ", "謙虚にさせるちっぽけさ" - ], - "feel.longing": [ - "欲しい", - "憧れ", - "切望", - "胸を締めつける切望" ] } } @@ -1631,7 +1645,7 @@ ], "affect": [ { - "key": "feel.serenity", + "key": "feel.wonder", "at": [ 0.5, 0.44 @@ -1639,7 +1653,7 @@ "min_level": 1 }, { - "key": "feel.fragility", + "key": "feel.radiance", "at": [ 0.22, 0.68 @@ -1647,7 +1661,7 @@ "min_level": 2 }, { - "key": "feel.unity", + "key": "feel.serenity", "at": [ 0.66, 0.58 @@ -1655,7 +1669,7 @@ "min_level": 3 }, { - "key": "feel.distance", + "key": "feel.fragility", "at": [ 0.42, 0.82 @@ -1678,6 +1692,18 @@ "atmospheric limb · ~100 km of air" ], "measure.altitude": "~408 km", + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" + ], + "feel.radiance": [ + "bright", + "radiance", + "brilliance", + "a jeweled brilliance" + ], "feel.serenity": [ "calm", "serenity", @@ -1689,18 +1715,6 @@ "fragility", "vulnerability", "a tender fragility" - ], - "feel.unity": [ - "one", - "unity", - "belonging", - "a borderless belonging" - ], - "feel.distance": [ - "far", - "distance", - "remoteness", - "an exquisite remoteness" ] }, "es": { @@ -1717,6 +1731,18 @@ "limbo atmosférico · ~100 km de aire" ], "measure.altitude": "~408 km", + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" + ], + "feel.radiance": [ + "brillo", + "resplandor", + "fulgor", + "un fulgor de joyas" + ], "feel.serenity": [ "calma", "serenidad", @@ -1728,18 +1754,6 @@ "fragilidad", "vulnerabilidad", "una fragilidad tierna" - ], - "feel.unity": [ - "uno", - "unidad", - "pertenencia", - "una pertenencia sin fronteras" - ], - "feel.distance": [ - "lejos", - "distancia", - "lejanía", - "una lejanía exquisita" ] }, "fr": { @@ -1756,6 +1770,18 @@ "limbe atmosphérique · ~100 km d'air" ], "measure.altitude": "~408 km", + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" + ], + "feel.radiance": [ + "éclat", + "rayonnement", + "scintillement", + "un scintillement de joyaux" + ], "feel.serenity": [ "calme", "sérénité", @@ -1767,18 +1793,6 @@ "fragilité", "vulnérabilité", "une tendre fragilité" - ], - "feel.unity": [ - "un", - "unité", - "appartenance", - "une appartenance sans frontières" - ], - "feel.distance": [ - "loin", - "distance", - "éloignement", - "un éloignement exquis" ] }, "ja": { @@ -1795,6 +1809,18 @@ "大気の縁 · 約100 kmの大気層" ], "measure.altitude": "約408 km", + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" + ], + "feel.radiance": [ + "輝き", + "光輝", + "煌めき", + "宝石のような煌めき" + ], "feel.serenity": [ "穏やか", "静けさ", @@ -1806,18 +1832,6 @@ "儚さ", "脆さ", "いたわりたくなる儚さ" - ], - "feel.unity": [ - "一つ", - "一体感", - "つながり", - "国境のないつながり" - ], - "feel.distance": [ - "遠い", - "隔たり", - "遥かさ", - "この上なく美しい遥かさ" ] } } @@ -1839,11 +1853,31 @@ 0.44, 0.6 ] + }, + { + "key": "detected.cloud_band", + "salience": 3, + "box": [ + 0.34, + 0.42, + 0.34, + 0.32 + ] + }, + { + "key": "detected.starfield", + "salience": 1, + "box": [ + 0.74, + 0.05, + 0.22, + 0.3 + ] } ], "affect": [ { - "key": "feel.serenity", + "key": "feel.unity", "at": [ 0.5, 0.44 @@ -1859,7 +1893,7 @@ "min_level": 2 }, { - "key": "feel.unity", + "key": "feel.distance", "at": [ 0.66, 0.58 @@ -1867,7 +1901,7 @@ "min_level": 3 }, { - "key": "feel.distance", + "key": "feel.vastness", "at": [ 0.42, 0.82 @@ -1883,17 +1917,17 @@ "terrestrial planet", "terrestrial planet · 12,742 km across" ], - "feel.serenity": [ - "calm", - "serenity", - "peace", - "a quiet, weightless peace" + "detected.cloud_band": [ + "clouds", + "weather systems", + "cloud systems", + "global cloud systems · clouds cover ~67% of Earth" ], - "feel.fragility": [ - "thin", - "fragility", - "vulnerability", - "a tender fragility" + "detected.starfield": [ + "stars", + "starfield", + "background stars", + "background starfield · a rendered backdrop, not to scale" ], "feel.unity": [ "one", @@ -1901,11 +1935,23 @@ "belonging", "a borderless belonging" ], + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" + ], "feel.distance": [ "far", "distance", "remoteness", "an exquisite remoteness" + ], + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ] }, "es": { @@ -1915,17 +1961,17 @@ "planeta terrestre", "planeta terrestre · 12.742 km de diámetro" ], - "feel.serenity": [ - "calma", - "serenidad", - "paz", - "una paz serena e ingrávida" + "detected.cloud_band": [ + "nubes", + "sistemas meteorológicos", + "sistemas nubosos", + "sistemas nubosos globales · las nubes cubren ~67% de la Tierra" ], - "feel.fragility": [ - "fino", - "fragilidad", - "vulnerabilidad", - "una fragilidad tierna" + "detected.starfield": [ + "estrellas", + "campo estelar", + "estrellas de fondo", + "campo estelar de fondo · un telón renderizado, sin escala" ], "feel.unity": [ "uno", @@ -1933,11 +1979,23 @@ "pertenencia", "una pertenencia sin fronteras" ], + "feel.fragility": [ + "fino", + "fragilidad", + "vulnerabilidad", + "una fragilidad tierna" + ], "feel.distance": [ "lejos", "distancia", "lejanía", "una lejanía exquisita" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ] }, "fr": { @@ -1947,17 +2005,17 @@ "planète tellurique", "planète tellurique · 12 742 km de diamètre" ], - "feel.serenity": [ - "calme", - "sérénité", - "paix", - "une paix tranquille et sans pesanteur" + "detected.cloud_band": [ + "nuages", + "systèmes météo", + "systèmes nuageux", + "systèmes nuageux planétaires · les nuages couvrent ~67% de la Terre" ], - "feel.fragility": [ - "mince", - "fragilité", - "vulnérabilité", - "une tendre fragilité" + "detected.starfield": [ + "étoiles", + "champ d’étoiles", + "étoiles d’arrière-plan", + "champ d’étoiles de fond · un décor rendu, hors échelle" ], "feel.unity": [ "un", @@ -1965,11 +2023,23 @@ "appartenance", "une appartenance sans frontières" ], + "feel.fragility": [ + "mince", + "fragilité", + "vulnérabilité", + "une tendre fragilité" + ], "feel.distance": [ "loin", "distance", "éloignement", "un éloignement exquis" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ] }, "ja": { @@ -1979,17 +2049,17 @@ "岩石惑星", "岩石惑星 · 直径12,742 km" ], - "feel.serenity": [ - "穏やか", - "静けさ", - "安らぎ", - "静かで無重力の安らぎ" + "detected.cloud_band": [ + "雲", + "気象システム", + "雲システム", + "地球規模の雲システム · 雲は地表の約67%を覆う" ], - "feel.fragility": [ - "薄い", - "儚さ", - "脆さ", - "いたわりたくなる儚さ" + "detected.starfield": [ + "星", + "星野", + "背景の星", + "背景の星野 · 描画された背景で実寸ではない" ], "feel.unity": [ "一つ", @@ -1997,11 +2067,23 @@ "つながり", "国境のないつながり" ], + "feel.fragility": [ + "薄い", + "儚さ", + "脆さ", + "いたわりたくなる儚さ" + ], "feel.distance": [ "遠い", "隔たり", "遥かさ", "この上なく美しい遥かさ" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ] } } @@ -2047,7 +2129,7 @@ ], "affect": [ { - "key": "feel.serenity", + "key": "feel.wonder", "at": [ 0.5, 0.44 @@ -2055,7 +2137,7 @@ "min_level": 1 }, { - "key": "feel.fragility", + "key": "feel.sublime", "at": [ 0.22, 0.68 @@ -2063,7 +2145,7 @@ "min_level": 2 }, { - "key": "feel.unity", + "key": "feel.eeriness", "at": [ 0.66, 0.58 @@ -2071,7 +2153,7 @@ "min_level": 3 }, { - "key": "feel.distance", + "key": "feel.serenity", "at": [ 0.42, 0.82 @@ -2094,29 +2176,29 @@ "atmospheric limb · ~100 km of air, glowing on edge" ], "measure.altitude": "~408 km", + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" + ], + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" + ], + "feel.eeriness": [ + "strange", + "eeriness", + "an otherworldly charge", + "an electric, otherworldly hush" + ], "feel.serenity": [ "calm", "serenity", "peace", "a quiet, weightless peace" - ], - "feel.fragility": [ - "thin", - "fragility", - "vulnerability", - "a tender fragility" - ], - "feel.unity": [ - "one", - "unity", - "belonging", - "a borderless belonging" - ], - "feel.distance": [ - "far", - "distance", - "remoteness", - "an exquisite remoteness" ] }, "es": { @@ -2133,29 +2215,29 @@ "limbo atmosférico · ~100 km de aire, brillando de canto" ], "measure.altitude": "~408 km", + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" + ], + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" + ], + "feel.eeriness": [ + "extraño", + "inquietud", + "una carga sobrenatural", + "un susurro eléctrico y sobrenatural" + ], "feel.serenity": [ "calma", "serenidad", "paz", "una paz serena e ingrávida" - ], - "feel.fragility": [ - "fino", - "fragilidad", - "vulnerabilidad", - "una fragilidad tierna" - ], - "feel.unity": [ - "uno", - "unidad", - "pertenencia", - "una pertenencia sin fronteras" - ], - "feel.distance": [ - "lejos", - "distancia", - "lejanía", - "una lejanía exquisita" ] }, "fr": { @@ -2172,29 +2254,29 @@ "limbe atmosphérique · ~100 km d'air, brillant sur la tranche" ], "measure.altitude": "~408 km", + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" + ], + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" + ], + "feel.eeriness": [ + "étrange", + "étrangeté", + "une charge surnaturelle", + "un frisson électrique et surnaturel" + ], "feel.serenity": [ "calme", "sérénité", "paix", "une paix tranquille et sans pesanteur" - ], - "feel.fragility": [ - "mince", - "fragilité", - "vulnérabilité", - "une tendre fragilité" - ], - "feel.unity": [ - "un", - "unité", - "appartenance", - "une appartenance sans frontières" - ], - "feel.distance": [ - "loin", - "distance", - "éloignement", - "un éloignement exquis" ] }, "ja": { @@ -2211,29 +2293,29 @@ "大気の縁 · 約100 kmの大気層が縁で光る" ], "measure.altitude": "約408 km", + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" + ], + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" + ], + "feel.eeriness": [ + "異様", + "不気味さ", + "異世界の気配", + "電気を帯びた異世界の静けさ" + ], "feel.serenity": [ "穏やか", "静けさ", "安らぎ", "静かで無重力の安らぎ" - ], - "feel.fragility": [ - "薄い", - "儚さ", - "脆さ", - "いたわりたくなる儚さ" - ], - "feel.unity": [ - "一つ", - "一体感", - "つながり", - "国境のないつながり" - ], - "feel.distance": [ - "遠い", - "隔たり", - "遥かさ", - "この上なく美しい遥かさ" ] } } @@ -2279,7 +2361,7 @@ ], "affect": [ { - "key": "feel.serenity", + "key": "feel.tenderness", "at": [ 0.5, 0.44 @@ -2287,7 +2369,7 @@ "min_level": 1 }, { - "key": "feel.fragility", + "key": "feel.longing", "at": [ 0.22, 0.68 @@ -2295,7 +2377,7 @@ "min_level": 2 }, { - "key": "feel.unity", + "key": "feel.fragility", "at": [ 0.66, 0.58 @@ -2303,7 +2385,7 @@ "min_level": 3 }, { - "key": "feel.distance", + "key": "feel.unity", "at": [ 0.42, 0.82 @@ -2326,11 +2408,17 @@ "airglow · the faint nighttime emission of the upper air" ], "measure.altitude": "~408 km", - "feel.serenity": [ - "calm", - "serenity", - "peace", - "a quiet, weightless peace" + "feel.tenderness": [ + "soft", + "tenderness", + "warmth", + "a cradle’s warmth" + ], + "feel.longing": [ + "want", + "longing", + "yearning", + "an aching yearning" ], "feel.fragility": [ "thin", @@ -2343,12 +2431,6 @@ "unity", "belonging", "a borderless belonging" - ], - "feel.distance": [ - "far", - "distance", - "remoteness", - "an exquisite remoteness" ] }, "es": { @@ -2365,11 +2447,17 @@ "luminiscencia del aire · la débil emisión nocturna de la alta atmósfera" ], "measure.altitude": "~408 km", - "feel.serenity": [ - "calma", - "serenidad", - "paz", - "una paz serena e ingrávida" + "feel.tenderness": [ + "suave", + "ternura", + "calidez", + "la calidez de una cuna" + ], + "feel.longing": [ + "querer", + "anhelo", + "añoranza", + "una añoranza punzante" ], "feel.fragility": [ "fino", @@ -2382,12 +2470,6 @@ "unidad", "pertenencia", "una pertenencia sin fronteras" - ], - "feel.distance": [ - "lejos", - "distancia", - "lejanía", - "una lejanía exquisita" ] }, "fr": { @@ -2404,11 +2486,17 @@ "luminescence atmosphérique · la faible émission nocturne de la haute atmosphère" ], "measure.altitude": "~408 km", - "feel.serenity": [ - "calme", - "sérénité", - "paix", - "une paix tranquille et sans pesanteur" + "feel.tenderness": [ + "doux", + "tendresse", + "chaleur", + "la chaleur d’un berceau" + ], + "feel.longing": [ + "envie", + "désir", + "aspiration", + "une aspiration douloureuse" ], "feel.fragility": [ "mince", @@ -2421,12 +2509,6 @@ "unité", "appartenance", "une appartenance sans frontières" - ], - "feel.distance": [ - "loin", - "distance", - "éloignement", - "un éloignement exquis" ] }, "ja": { @@ -2443,11 +2525,17 @@ "大気光 · 高層大気がかすかに放つ夜間の光" ], "measure.altitude": "約408 km", - "feel.serenity": [ - "穏やか", - "静けさ", - "安らぎ", - "静かで無重力の安らぎ" + "feel.tenderness": [ + "やさしい", + "優しさ", + "ぬくもり", + "ゆりかごのようなぬくもり" + ], + "feel.longing": [ + "欲しい", + "憧れ", + "切望", + "胸を締めつける切望" ], "feel.fragility": [ "薄い", @@ -2460,12 +2548,6 @@ "一体感", "つながり", "国境のないつながり" - ], - "feel.distance": [ - "遠い", - "隔たり", - "遥かさ", - "この上なく美しい遥かさ" ] } } @@ -2511,7 +2593,7 @@ ], "affect": [ { - "key": "feel.serenity", + "key": "feel.sublime", "at": [ 0.5, 0.44 @@ -2519,7 +2601,7 @@ "min_level": 1 }, { - "key": "feel.fragility", + "key": "feel.turbulence", "at": [ 0.22, 0.68 @@ -2527,7 +2609,7 @@ "min_level": 2 }, { - "key": "feel.unity", + "key": "feel.vastness", "at": [ 0.66, 0.58 @@ -2535,7 +2617,7 @@ "min_level": 3 }, { - "key": "feel.distance", + "key": "feel.fragility", "at": [ 0.42, 0.82 @@ -2558,29 +2640,29 @@ "atmospheric limb · the thin shell weather lives in" ], "measure.altitude": "~408 km", - "feel.serenity": [ - "calm", - "serenity", - "peace", - "a quiet, weightless peace" + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" + ], + "feel.turbulence": [ + "churn", + "turbulence", + "ferment", + "a violent ferment" + ], + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ], "feel.fragility": [ "thin", "fragility", "vulnerability", "a tender fragility" - ], - "feel.unity": [ - "one", - "unity", - "belonging", - "a borderless belonging" - ], - "feel.distance": [ - "far", - "distance", - "remoteness", - "an exquisite remoteness" ] }, "es": { @@ -2597,29 +2679,29 @@ "limbo atmosférico · la fina capa donde vive el clima" ], "measure.altitude": "~408 km", - "feel.serenity": [ - "calma", - "serenidad", - "paz", - "una paz serena e ingrávida" + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" + ], + "feel.turbulence": [ + "agitación", + "turbulencia", + "fermento", + "un fermento violento" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ], "feel.fragility": [ "fino", "fragilidad", "vulnerabilidad", "una fragilidad tierna" - ], - "feel.unity": [ - "uno", - "unidad", - "pertenencia", - "una pertenencia sin fronteras" - ], - "feel.distance": [ - "lejos", - "distancia", - "lejanía", - "una lejanía exquisita" ] }, "fr": { @@ -2636,29 +2718,29 @@ "limbe atmosphérique · la fine pellicule où vit la météo" ], "measure.altitude": "~408 km", - "feel.serenity": [ - "calme", - "sérénité", - "paix", - "une paix tranquille et sans pesanteur" + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" + ], + "feel.turbulence": [ + "remous", + "turbulence", + "ferment", + "un ferment violent" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ], "feel.fragility": [ "mince", "fragilité", "vulnérabilité", "une tendre fragilité" - ], - "feel.unity": [ - "un", - "unité", - "appartenance", - "une appartenance sans frontières" - ], - "feel.distance": [ - "loin", - "distance", - "éloignement", - "un éloignement exquis" ] }, "ja": { @@ -2675,29 +2757,29 @@ "大気の縁 · 気象が宿る薄い層" ], "measure.altitude": "約408 km", - "feel.serenity": [ - "穏やか", - "静けさ", - "安らぎ", - "静かで無重力の安らぎ" + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" + ], + "feel.turbulence": [ + "渦巻き", + "乱流", + "胎動", + "激しい胎動" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ], "feel.fragility": [ "薄い", "儚さ", "脆さ", "いたわりたくなる儚さ" - ], - "feel.unity": [ - "一つ", - "一体感", - "つながり", - "国境のないつながり" - ], - "feel.distance": [ - "遠い", - "隔たり", - "遥かさ", - "この上なく美しい遥かさ" ] } } @@ -2743,7 +2825,7 @@ ], "affect": [ { - "key": "feel.serenity", + "key": "feel.distance", "at": [ 0.5, 0.44 @@ -2751,7 +2833,7 @@ "min_level": 1 }, { - "key": "feel.fragility", + "key": "feel.insignificance", "at": [ 0.22, 0.68 @@ -2767,7 +2849,7 @@ "min_level": 3 }, { - "key": "feel.distance", + "key": "feel.serenity", "at": [ 0.42, 0.82 @@ -2790,17 +2872,17 @@ "weather systems · swirling across a turning planet" ], "measure.distance": "~1.5M km", - "feel.serenity": [ - "calm", - "serenity", - "peace", - "a quiet, weightless peace" + "feel.distance": [ + "far", + "distance", + "remoteness", + "an exquisite remoteness" ], - "feel.fragility": [ - "thin", - "fragility", - "vulnerability", - "a tender fragility" + "feel.insignificance": [ + "small", + "smallness", + "insignificance", + "a humbling insignificance" ], "feel.unity": [ "one", @@ -2808,11 +2890,11 @@ "belonging", "a borderless belonging" ], - "feel.distance": [ - "far", - "distance", - "remoteness", - "an exquisite remoteness" + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" ] }, "es": { @@ -2829,17 +2911,17 @@ "sistemas meteorológicos · arremolinándose sobre un planeta que gira" ], "measure.distance": "~1,5 M km", - "feel.serenity": [ - "calma", - "serenidad", - "paz", - "una paz serena e ingrávida" + "feel.distance": [ + "lejos", + "distancia", + "lejanía", + "una lejanía exquisita" ], - "feel.fragility": [ - "fino", - "fragilidad", - "vulnerabilidad", - "una fragilidad tierna" + "feel.insignificance": [ + "pequeño", + "pequeñez", + "insignificancia", + "una insignificancia que humilla" ], "feel.unity": [ "uno", @@ -2847,11 +2929,11 @@ "pertenencia", "una pertenencia sin fronteras" ], - "feel.distance": [ - "lejos", - "distancia", - "lejanía", - "una lejanía exquisita" + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" ] }, "fr": { @@ -2868,17 +2950,17 @@ "systèmes météorologiques · tourbillonnant sur une planète qui tourne" ], "measure.distance": "~1,5 M km", - "feel.serenity": [ - "calme", - "sérénité", - "paix", - "une paix tranquille et sans pesanteur" + "feel.distance": [ + "loin", + "distance", + "éloignement", + "un éloignement exquis" ], - "feel.fragility": [ - "mince", - "fragilité", - "vulnérabilité", - "une tendre fragilité" + "feel.insignificance": [ + "petit", + "petitesse", + "insignifiance", + "une insignifiance qui rend humble" ], "feel.unity": [ "un", @@ -2886,11 +2968,11 @@ "appartenance", "une appartenance sans frontières" ], - "feel.distance": [ - "loin", - "distance", - "éloignement", - "un éloignement exquis" + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" ] }, "ja": { @@ -2907,17 +2989,17 @@ "気象系 · 回転する惑星の上を渦巻く" ], "measure.distance": "約150万 km", - "feel.serenity": [ - "穏やか", - "静けさ", - "安らぎ", - "静かで無重力の安らぎ" + "feel.distance": [ + "遠い", + "隔たり", + "遥かさ", + "この上なく美しい遥かさ" ], - "feel.fragility": [ - "薄い", - "儚さ", - "脆さ", - "いたわりたくなる儚さ" + "feel.insignificance": [ + "小さい", + "小ささ", + "ちっぽけさ", + "謙虚にさせるちっぽけさ" ], "feel.unity": [ "一つ", @@ -2925,11 +3007,11 @@ "つながり", "国境のないつながり" ], - "feel.distance": [ - "遠い", - "隔たり", - "遥かさ", - "この上なく美しい遥かさ" + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" ] } } @@ -2942,6 +3024,16 @@ "source": "NPS Grand Canyon b-roll hd10 0121cbe5; 1080p, trim 0–24s, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.butte", + "salience": 2, + "box": [ + 0.4, + 0.3, + 0.2, + 0.35 + ] + }, { "key": "detected.canyon", "salience": 4, @@ -2965,7 +3057,7 @@ ], "affect": [ { - "key": "feel.exhilaration", + "key": "feel.wonder", "at": [ 0.5, 0.44 @@ -2973,7 +3065,7 @@ "min_level": 1 }, { - "key": "feel.freedom", + "key": "feel.sublime", "at": [ 0.22, 0.68 @@ -2981,7 +3073,7 @@ "min_level": 2 }, { - "key": "feel.lightness", + "key": "feel.vastness", "at": [ 0.66, 0.58 @@ -2989,7 +3081,7 @@ "min_level": 3 }, { - "key": "feel.vertigo", + "key": "feel.exhilaration", "at": [ 0.42, 0.82 @@ -2999,6 +3091,12 @@ ], "strings": { "en": { + "detected.butte": [ + "tower", + "butte", + "rock temple", + "rock ‘temple’ · an erosional butte left standing" + ], "detected.canyon": [ "canyon", "gorge", @@ -3011,32 +3109,38 @@ "sedimentary beds", "strata · stacked epochs of deposition" ], + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" + ], + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" + ], + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" + ], "feel.exhilaration": [ "whee", "exhilaration", "elation", "a soaring elation" - ], - "feel.freedom": [ - "free", - "freedom", - "release", - "a boundless release" - ], - "feel.lightness": [ - "light", - "lightness", - "buoyancy", - "a weightless buoyancy" - ], - "feel.vertigo": [ - "whoa", - "vertigo", - "giddiness", - "a giddy, falling vertigo" ] }, "es": { + "detected.butte": [ + "torre", + "cerro testigo", + "templo de roca", + "‘templo’ de roca · un cerro testigo de la erosión" + ], "detected.canyon": [ "cañón", "garganta", @@ -3049,32 +3153,38 @@ "lechos sedimentarios", "estratos · épocas de sedimentación apiladas" ], + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" + ], + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" + ], "feel.exhilaration": [ "yupi", "euforia", "júbilo", "un júbilo que se eleva" - ], - "feel.freedom": [ - "libre", - "libertad", - "liberación", - "una liberación sin límites" - ], - "feel.lightness": [ - "ligero", - "ligereza", - "flotabilidad", - "una flotabilidad ingrávida" - ], - "feel.vertigo": [ - "huy", - "vértigo", - "mareo", - "un vértigo mareante de caída" ] }, "fr": { + "detected.butte": [ + "tour", + "butte-témoin", + "temple rocheux", + "‘temple’ rocheux · une butte-témoin laissée par l’érosion" + ], "detected.canyon": [ "canyon", "gorge", @@ -3087,32 +3197,38 @@ "bancs sédimentaires", "strates · des époques de dépôt empilées" ], + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" + ], + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" + ], "feel.exhilaration": [ "youpi", "exaltation", "euphorie", "une euphorie qui s'envole" - ], - "feel.freedom": [ - "libre", - "liberté", - "délivrance", - "une délivrance sans limites" - ], - "feel.lightness": [ - "léger", - "légèreté", - "flottabilité", - "une flottabilité en apesanteur" - ], - "feel.vertigo": [ - "oh là", - "vertige", - "étourdissement", - "un vertige étourdi, comme une chute" ] }, "ja": { + "detected.butte": [ + "塔", + "残丘", + "岩の神殿", + "岩の‘神殿’ · 浸食に取り残された残丘" + ], "detected.canyon": [ "峡谷", "渓谷", @@ -3125,29 +3241,29 @@ "堆積層", "地層 · 積み重なった堆積の時代" ], + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" + ], + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" + ], "feel.exhilaration": [ "わーい", "高揚", "歓喜", "舞い上がる歓喜" - ], - "feel.freedom": [ - "自由", - "自由さ", - "解放", - "果てしない解放" - ], - "feel.lightness": [ - "軽い", - "軽やかさ", - "浮遊感", - "無重力の浮遊感" - ], - "feel.vertigo": [ - "おっと", - "めまい", - "くらくら感", - "落ちるようなくらくらするめまい" ] } } @@ -3160,6 +3276,16 @@ "source": "NASA SVS 13472 Panasonic 2016 Airborne LandIce; trim 20–60s, vidstab-stabilized, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.crevasse", + "salience": 2, + "box": [ + 0.2, + 0.55, + 0.5, + 0.25 + ] + }, { "key": "detected.icesheet", "salience": 4, @@ -3191,7 +3317,7 @@ "min_level": 1 }, { - "key": "feel.freedom", + "key": "feel.vastness", "at": [ 0.22, 0.68 @@ -3199,7 +3325,7 @@ "min_level": 2 }, { - "key": "feel.lightness", + "key": "feel.purity", "at": [ 0.66, 0.58 @@ -3207,7 +3333,7 @@ "min_level": 3 }, { - "key": "feel.vertigo", + "key": "feel.sublime", "at": [ 0.42, 0.82 @@ -3217,6 +3343,12 @@ ], "strings": { "en": { + "detected.crevasse": [ + "cracks", + "crevasses", + "glacial crevasses", + "crevasses · the ice fracturing as it flows" + ], "detected.icesheet": [ "ice", "ice sheet", @@ -3235,26 +3367,32 @@ "elation", "a soaring elation" ], - "feel.freedom": [ - "free", - "freedom", - "release", - "a boundless release" + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ], - "feel.lightness": [ - "light", - "lightness", - "buoyancy", - "a weightless buoyancy" + "feel.purity": [ + "pure", + "purity", + "stillness", + "a glacial hush" ], - "feel.vertigo": [ - "whoa", - "vertigo", - "giddiness", - "a giddy, falling vertigo" + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" ] }, "es": { + "detected.crevasse": [ + "grietas", + "grietas", + "grietas glaciares", + "grietas · el hielo fracturándose al fluir" + ], "detected.icesheet": [ "hielo", "capa de hielo", @@ -3273,26 +3411,32 @@ "júbilo", "un júbilo que se eleva" ], - "feel.freedom": [ - "libre", - "libertad", - "liberación", - "una liberación sin límites" + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ], - "feel.lightness": [ - "ligero", - "ligereza", - "flotabilidad", - "una flotabilidad ingrávida" + "feel.purity": [ + "puro", + "pureza", + "quietud", + "un silencio glacial" ], - "feel.vertigo": [ - "huy", - "vértigo", - "mareo", - "un vértigo mareante de caída" + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" ] }, "fr": { + "detected.crevasse": [ + "fissures", + "crevasses", + "crevasses glaciaires", + "crevasses · la glace se fracture en s’écoulant" + ], "detected.icesheet": [ "glace", "calotte glaciaire", @@ -3311,26 +3455,32 @@ "euphorie", "une euphorie qui s'envole" ], - "feel.freedom": [ - "libre", - "liberté", - "délivrance", - "une délivrance sans limites" + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ], - "feel.lightness": [ - "léger", - "légèreté", - "flottabilité", - "une flottabilité en apesanteur" + "feel.purity": [ + "pur", + "pureté", + "quiétude", + "un silence glaciaire" ], - "feel.vertigo": [ - "oh là", - "vertige", - "étourdissement", - "un vertige étourdi, comme une chute" + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" ] }, "ja": { + "detected.crevasse": [ + "亀裂", + "クレバス", + "氷河の裂け目", + "クレバス · 流れる氷が割れてできた裂け目" + ], "detected.icesheet": [ "氷", "氷床", @@ -3349,23 +3499,23 @@ "歓喜", "舞い上がる歓喜" ], - "feel.freedom": [ - "自由", - "自由さ", - "解放", - "果てしない解放" + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ], - "feel.lightness": [ - "軽い", - "軽やかさ", - "浮遊感", - "無重力の浮遊感" + "feel.purity": [ + "清らか", + "純粋さ", + "静寂", + "氷河のような静寂" ], - "feel.vertigo": [ - "おっと", - "めまい", - "くらくら感", - "落ちるようなくらくらするめまい" + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" ] } } @@ -3378,6 +3528,16 @@ "source": "NASA SVS 13472 4K SeaIce 2017 ‘Suture’; trim 10–50s, vidstab-stabilized, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.floe", + "salience": 2, + "box": [ + 0.15, + 0.2, + 0.3, + 0.3 + ] + }, { "key": "detected.seaice", "salience": 4, @@ -3401,7 +3561,7 @@ ], "affect": [ { - "key": "feel.exhilaration", + "key": "feel.serenity", "at": [ 0.5, 0.44 @@ -3409,7 +3569,7 @@ "min_level": 1 }, { - "key": "feel.freedom", + "key": "feel.vastness", "at": [ 0.22, 0.68 @@ -3417,7 +3577,7 @@ "min_level": 2 }, { - "key": "feel.lightness", + "key": "feel.solitude", "at": [ 0.66, 0.58 @@ -3425,7 +3585,7 @@ "min_level": 3 }, { - "key": "feel.vertigo", + "key": "feel.lightness", "at": [ 0.42, 0.82 @@ -3435,6 +3595,12 @@ ], "strings": { "en": { + "detected.floe": [ + "plates", + "ice floes", + "pack-ice floes", + "pack-ice floes · drifting plates of frozen sea" + ], "detected.seaice": [ "ice", "sea ice", @@ -3447,32 +3613,38 @@ "open lead", "lead · a fracture of open water between floes" ], - "feel.exhilaration": [ - "whee", - "exhilaration", - "elation", - "a soaring elation" + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" ], - "feel.freedom": [ - "free", - "freedom", - "release", - "a boundless release" + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" + ], + "feel.solitude": [ + "alone", + "solitude", + "isolation", + "a vast frozen solitude" ], "feel.lightness": [ "light", "lightness", "buoyancy", "a weightless buoyancy" - ], - "feel.vertigo": [ - "whoa", - "vertigo", - "giddiness", - "a giddy, falling vertigo" ] }, "es": { + "detected.floe": [ + "placas", + "témpanos", + "témpanos de banquisa", + "témpanos · placas de mar congelado a la deriva" + ], "detected.seaice": [ "hielo", "hielo marino", @@ -3485,32 +3657,38 @@ "canal abierto", "canal · una fractura de agua abierta entre témpanos" ], - "feel.exhilaration": [ - "yupi", - "euforia", - "júbilo", - "un júbilo que se eleva" + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" ], - "feel.freedom": [ - "libre", - "libertad", - "liberación", - "una liberación sin límites" + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" + ], + "feel.solitude": [ + "solo", + "soledad", + "aislamiento", + "una vasta soledad helada" ], "feel.lightness": [ "ligero", "ligereza", "flotabilidad", "una flotabilidad ingrávida" - ], - "feel.vertigo": [ - "huy", - "vértigo", - "mareo", - "un vértigo mareante de caída" ] }, "fr": { + "detected.floe": [ + "plaques", + "floes", + "floes de banquise", + "floes · plaques de mer gelée à la dérive" + ], "detected.seaice": [ "glace", "glace de mer", @@ -3523,32 +3701,38 @@ "chenal libre", "chenal · une fracture d'eau libre entre les floes" ], - "feel.exhilaration": [ - "youpi", - "exaltation", - "euphorie", - "une euphorie qui s'envole" + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" ], - "feel.freedom": [ - "libre", - "liberté", - "délivrance", - "une délivrance sans limites" + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" + ], + "feel.solitude": [ + "seul", + "solitude", + "isolement", + "une vaste solitude gelée" ], "feel.lightness": [ "léger", "légèreté", "flottabilité", "une flottabilité en apesanteur" - ], - "feel.vertigo": [ - "oh là", - "vertige", - "étourdissement", - "un vertige étourdi, comme une chute" ] }, "ja": { + "detected.floe": [ + "板状氷", + "氷盤", + "流氷の氷盤", + "氷盤 · 漂う凍った海の板" + ], "detected.seaice": [ "氷", "海氷", @@ -3561,29 +3745,29 @@ "リード", "リード · 氷盤の間に開いた水の裂け目" ], - "feel.exhilaration": [ - "わーい", - "高揚", - "歓喜", - "舞い上がる歓喜" + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" ], - "feel.freedom": [ - "自由", - "自由さ", - "解放", - "果てしない解放" + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" + ], + "feel.solitude": [ + "ひとり", + "孤独", + "隔絶", + "凍てつく広大な孤独" ], "feel.lightness": [ "軽い", "軽やかさ", "浮遊感", "無重力の浮遊感" - ], - "feel.vertigo": [ - "おっと", - "めまい", - "くらくら感", - "落ちるようなくらくらするめまい" ] } } @@ -3596,6 +3780,16 @@ "source": "Pexels 31291128 (amazon canopy) → 29780524 (jungle canopy), 1s xfade splice; crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.mist", + "salience": 1, + "box": [ + 0.06, + 0.1, + 0.88, + 0.18 + ] + }, { "key": "detected.canopy", "salience": 4, @@ -3619,7 +3813,7 @@ ], "affect": [ { - "key": "feel.exhilaration", + "key": "feel.freedom", "at": [ 0.5, 0.44 @@ -3627,7 +3821,7 @@ "min_level": 1 }, { - "key": "feel.freedom", + "key": "feel.verdancy", "at": [ 0.22, 0.68 @@ -3635,7 +3829,7 @@ "min_level": 2 }, { - "key": "feel.lightness", + "key": "feel.exhilaration", "at": [ 0.66, 0.58 @@ -3643,7 +3837,7 @@ "min_level": 3 }, { - "key": "feel.vertigo", + "key": "feel.serenity", "at": [ 0.42, 0.82 @@ -3653,6 +3847,12 @@ ], "strings": { "en": { + "detected.mist": [ + "haze", + "canopy mist", + "transpiration haze", + "transpiration haze · the forest exhaling water vapor" + ], "detected.canopy": [ "trees", "forest canopy", @@ -3665,32 +3865,38 @@ "emergent tree", "emergent · a giant breaking above the canopy roof" ], - "feel.exhilaration": [ - "whee", - "exhilaration", - "elation", - "a soaring elation" - ], "feel.freedom": [ "free", "freedom", "release", "a boundless release" ], - "feel.lightness": [ - "light", - "lightness", - "buoyancy", - "a weightless buoyancy" + "feel.verdancy": [ + "lush", + "verdancy", + "abundance", + "a teeming green abundance" ], - "feel.vertigo": [ - "whoa", - "vertigo", - "giddiness", - "a giddy, falling vertigo" + "feel.exhilaration": [ + "whee", + "exhilaration", + "elation", + "a soaring elation" + ], + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" ] }, "es": { + "detected.mist": [ + "bruma", + "bruma del dosel", + "bruma de transpiración", + "bruma de transpiración · el bosque exhalando vapor" + ], "detected.canopy": [ "árboles", "dosel forestal", @@ -3703,32 +3909,38 @@ "árbol emergente", "emergente · un gigante que rompe sobre el techo del dosel" ], - "feel.exhilaration": [ - "yupi", - "euforia", - "júbilo", - "un júbilo que se eleva" - ], "feel.freedom": [ "libre", "libertad", "liberación", "una liberación sin límites" ], - "feel.lightness": [ - "ligero", - "ligereza", - "flotabilidad", - "una flotabilidad ingrávida" + "feel.verdancy": [ + "frondoso", + "verdor", + "exuberancia", + "una exuberancia verde y rebosante" ], - "feel.vertigo": [ - "huy", - "vértigo", - "mareo", - "un vértigo mareante de caída" + "feel.exhilaration": [ + "yupi", + "euforia", + "júbilo", + "un júbilo que se eleva" + ], + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" ] }, "fr": { + "detected.mist": [ + "brume", + "brume de canopée", + "brume de transpiration", + "brume de transpiration · la forêt exhalant sa vapeur" + ], "detected.canopy": [ "arbres", "canopée forestière", @@ -3741,32 +3953,38 @@ "arbre émergent", "émergent · un géant perçant au-dessus de la canopée" ], - "feel.exhilaration": [ - "youpi", - "exaltation", - "euphorie", - "une euphorie qui s'envole" - ], "feel.freedom": [ "libre", "liberté", "délivrance", "une délivrance sans limites" ], - "feel.lightness": [ - "léger", - "légèreté", - "flottabilité", - "une flottabilité en apesanteur" + "feel.verdancy": [ + "luxuriant", + "verdure", + "abondance", + "une abondance verte et grouillante" ], - "feel.vertigo": [ - "oh là", - "vertige", - "étourdissement", - "un vertige étourdi, comme une chute" + "feel.exhilaration": [ + "youpi", + "exaltation", + "euphorie", + "une euphorie qui s'envole" + ], + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" ] }, "ja": { + "detected.mist": [ + "もや", + "林冠のもや", + "蒸散のもや", + "蒸散のもや · 森が吐き出す水蒸気" + ], "detected.canopy": [ "木々", "森の樹冠", @@ -3779,29 +3997,29 @@ "突出木", "突出木 · 樹冠の天井を突き抜ける巨木" ], - "feel.exhilaration": [ - "わーい", - "高揚", - "歓喜", - "舞い上がる歓喜" - ], "feel.freedom": [ "自由", "自由さ", "解放", "果てしない解放" ], - "feel.lightness": [ - "軽い", - "軽やかさ", - "浮遊感", - "無重力の浮遊感" + "feel.verdancy": [ + "緑豊か", + "青々しさ", + "繁茂", + "生い茂る緑の豊かさ" ], - "feel.vertigo": [ - "おっと", - "めまい", - "くらくら感", - "落ちるようなくらくらするめまい" + "feel.exhilaration": [ + "わーい", + "高揚", + "歓喜", + "舞い上がる歓喜" + ], + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" ] } } @@ -3814,6 +4032,16 @@ "source": "Pexels 8334944; 4K source, trim 6–46s, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.spray", + "salience": 2, + "box": [ + 0.36, + 0.62, + 0.28, + 0.25 + ] + }, { "key": "detected.waterfall", "salience": 4, @@ -3837,7 +4065,7 @@ ], "affect": [ { - "key": "feel.exhilaration", + "key": "feel.wonder", "at": [ 0.5, 0.44 @@ -3845,7 +4073,7 @@ "min_level": 1 }, { - "key": "feel.freedom", + "key": "feel.vertigo", "at": [ 0.22, 0.68 @@ -3853,7 +4081,7 @@ "min_level": 2 }, { - "key": "feel.lightness", + "key": "feel.freshness", "at": [ 0.66, 0.58 @@ -3861,7 +4089,7 @@ "min_level": 3 }, { - "key": "feel.vertigo", + "key": "feel.exhilaration", "at": [ 0.42, 0.82 @@ -3871,6 +4099,12 @@ ], "strings": { "en": { + "detected.spray": [ + "mist", + "spray", + "plunge spray", + "plunge spray · the river aerosolized on impact" + ], "detected.waterfall": [ "falls", "waterfall", @@ -3883,32 +4117,38 @@ "rainforest canopy", "canopy · dense forest crowding the gorge" ], - "feel.exhilaration": [ - "whee", - "exhilaration", - "elation", - "a soaring elation" - ], - "feel.freedom": [ - "free", - "freedom", - "release", - "a boundless release" - ], - "feel.lightness": [ - "light", - "lightness", - "buoyancy", - "a weightless buoyancy" + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" ], "feel.vertigo": [ "whoa", "vertigo", "giddiness", "a giddy, falling vertigo" + ], + "feel.freshness": [ + "cool", + "freshness", + "vitality", + "a cool, cascading freshness" + ], + "feel.exhilaration": [ + "whee", + "exhilaration", + "elation", + "a soaring elation" ] }, "es": { + "detected.spray": [ + "rocío", + "aerosol", + "rocío de caída", + "rocío de caída · el río pulverizado al impactar" + ], "detected.waterfall": [ "salto", "cascada", @@ -3921,32 +4161,38 @@ "dosel selvático", "dosel · bosque denso que abarrota la garganta" ], - "feel.exhilaration": [ - "yupi", - "euforia", - "júbilo", - "un júbilo que se eleva" - ], - "feel.freedom": [ - "libre", - "libertad", - "liberación", - "una liberación sin límites" - ], - "feel.lightness": [ - "ligero", - "ligereza", - "flotabilidad", - "una flotabilidad ingrávida" + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" ], "feel.vertigo": [ "huy", "vértigo", "mareo", "un vértigo mareante de caída" + ], + "feel.freshness": [ + "fresco", + "frescura", + "vitalidad", + "una frescura que cae en cascada" + ], + "feel.exhilaration": [ + "yupi", + "euforia", + "júbilo", + "un júbilo que se eleva" ] }, "fr": { + "detected.spray": [ + "embruns", + "embruns", + "embruns de chute", + "embruns de chute · la rivière pulvérisée à l’impact" + ], "detected.waterfall": [ "chutes", "cascade", @@ -3959,32 +4205,38 @@ "canopée de forêt tropicale", "canopée · forêt dense pressée autour de la gorge" ], - "feel.exhilaration": [ - "youpi", - "exaltation", - "euphorie", - "une euphorie qui s'envole" - ], - "feel.freedom": [ - "libre", - "liberté", - "délivrance", - "une délivrance sans limites" - ], - "feel.lightness": [ - "léger", - "légèreté", - "flottabilité", - "une flottabilité en apesanteur" + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" ], "feel.vertigo": [ "oh là", "vertige", "étourdissement", "un vertige étourdi, comme une chute" + ], + "feel.freshness": [ + "frais", + "fraîcheur", + "vitalité", + "une fraîcheur en cascade" + ], + "feel.exhilaration": [ + "youpi", + "exaltation", + "euphorie", + "une euphorie qui s'envole" ] }, "ja": { + "detected.spray": [ + "水しぶき", + "しぶき", + "落下のしぶき", + "落下のしぶき · 衝突で霧化した川" + ], "detected.waterfall": [ "滝", "大滝", @@ -3997,29 +4249,29 @@ "熱帯雨林の樹冠", "樹冠 · 峡谷に密集する濃い森" ], - "feel.exhilaration": [ - "わーい", - "高揚", - "歓喜", - "舞い上がる歓喜" - ], - "feel.freedom": [ - "自由", - "自由さ", - "解放", - "果てしない解放" - ], - "feel.lightness": [ - "軽い", - "軽やかさ", - "浮遊感", - "無重力の浮遊感" + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" ], "feel.vertigo": [ "おっと", "めまい", "くらくら感", "落ちるようなくらくらするめまい" + ], + "feel.freshness": [ + "涼しい", + "清々しさ", + "生命力", + "滝のように降りそそぐ清涼" + ], + "feel.exhilaration": [ + "わーい", + "高揚", + "歓喜", + "舞い上がる歓喜" ] } } @@ -4032,6 +4284,16 @@ "source": "Pexels 36668415; 4K source, trim 1–25s, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.headland", + "salience": 1, + "box": [ + 0.1, + 0.2, + 0.3, + 0.4 + ] + }, { "key": "detected.seacliff", "salience": 4, @@ -4055,7 +4317,7 @@ ], "affect": [ { - "key": "feel.exhilaration", + "key": "feel.sublime", "at": [ 0.5, 0.44 @@ -4063,7 +4325,7 @@ "min_level": 1 }, { - "key": "feel.freedom", + "key": "feel.exhilaration", "at": [ 0.22, 0.68 @@ -4071,7 +4333,7 @@ "min_level": 2 }, { - "key": "feel.lightness", + "key": "feel.turbulence", "at": [ 0.66, 0.58 @@ -4079,7 +4341,7 @@ "min_level": 3 }, { - "key": "feel.vertigo", + "key": "feel.vastness", "at": [ 0.42, 0.82 @@ -4089,6 +4351,12 @@ ], "strings": { "en": { + "detected.headland": [ + "point", + "headland", + "rock promontory", + "promontory · a cliffed arm of land into the sea" + ], "detected.seacliff": [ "cliff", "sea cliff", @@ -4101,32 +4369,38 @@ "breaking swell", "breaking swell · ocean meeting stone" ], + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" + ], "feel.exhilaration": [ "whee", "exhilaration", "elation", "a soaring elation" ], - "feel.freedom": [ - "free", - "freedom", - "release", - "a boundless release" + "feel.turbulence": [ + "churn", + "turbulence", + "ferment", + "a violent ferment" ], - "feel.lightness": [ - "light", - "lightness", - "buoyancy", - "a weightless buoyancy" - ], - "feel.vertigo": [ - "whoa", - "vertigo", - "giddiness", - "a giddy, falling vertigo" + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ] }, "es": { + "detected.headland": [ + "punta", + "promontorio", + "promontorio rocoso", + "promontorio · un brazo de tierra acantilado en el mar" + ], "detected.seacliff": [ "acantilado", "acantilado marino", @@ -4139,32 +4413,38 @@ "oleaje rompiente", "oleaje rompiente · el océano que encuentra la piedra" ], + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" + ], "feel.exhilaration": [ "yupi", "euforia", "júbilo", "un júbilo que se eleva" ], - "feel.freedom": [ - "libre", - "libertad", - "liberación", - "una liberación sin límites" + "feel.turbulence": [ + "agitación", + "turbulencia", + "fermento", + "un fermento violento" ], - "feel.lightness": [ - "ligero", - "ligereza", - "flotabilidad", - "una flotabilidad ingrávida" - ], - "feel.vertigo": [ - "huy", - "vértigo", - "mareo", - "un vértigo mareante de caída" + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ] }, "fr": { + "detected.headland": [ + "pointe", + "promontoire", + "promontoire rocheux", + "promontoire · un bras de terre escarpé dans la mer" + ], "detected.seacliff": [ "falaise", "falaise maritime", @@ -4177,32 +4457,38 @@ "houle déferlante", "houle déferlante · l'océan à la rencontre de la pierre" ], + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" + ], "feel.exhilaration": [ "youpi", "exaltation", "euphorie", "une euphorie qui s'envole" ], - "feel.freedom": [ - "libre", - "liberté", - "délivrance", - "une délivrance sans limites" + "feel.turbulence": [ + "remous", + "turbulence", + "ferment", + "un ferment violent" ], - "feel.lightness": [ - "léger", - "légèreté", - "flottabilité", - "une flottabilité en apesanteur" - ], - "feel.vertigo": [ - "oh là", - "vertige", - "étourdissement", - "un vertige étourdi, comme une chute" + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ] }, "ja": { + "detected.headland": [ + "岬", + "岬", + "岩の岬", + "岬 · 海へ突き出す断崖の地" + ], "detected.seacliff": [ "崖", "海食崖", @@ -4215,29 +4501,29 @@ "砕けるうねり", "砕けるうねり · 海が岩に出会う" ], + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" + ], "feel.exhilaration": [ "わーい", "高揚", "歓喜", "舞い上がる歓喜" ], - "feel.freedom": [ - "自由", - "自由さ", - "解放", - "果てしない解放" + "feel.turbulence": [ + "渦巻き", + "乱流", + "胎動", + "激しい胎動" ], - "feel.lightness": [ - "軽い", - "軽やかさ", - "浮遊感", - "無重力の浮遊感" - ], - "feel.vertigo": [ - "おっと", - "めまい", - "くらくら感", - "落ちるようなくらくらするめまい" + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ] } } @@ -4250,6 +4536,16 @@ "source": "USFS/DVIDS 998726 DOD_111563303; trim 120–174s, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.talus", + "salience": 2, + "box": [ + 0.3, + 0.55, + 0.4, + 0.25 + ] + }, { "key": "detected.spire", "salience": 4, @@ -4273,7 +4569,7 @@ ], "affect": [ { - "key": "feel.exhilaration", + "key": "feel.freedom", "at": [ 0.5, 0.44 @@ -4281,7 +4577,7 @@ "min_level": 1 }, { - "key": "feel.freedom", + "key": "feel.serenity", "at": [ 0.22, 0.68 @@ -4289,7 +4585,7 @@ "min_level": 2 }, { - "key": "feel.lightness", + "key": "feel.vastness", "at": [ 0.66, 0.58 @@ -4297,7 +4593,7 @@ "min_level": 3 }, { - "key": "feel.vertigo", + "key": "feel.lightness", "at": [ 0.42, 0.82 @@ -4307,6 +4603,12 @@ ], "strings": { "en": { + "detected.talus": [ + "scree", + "talus", + "talus slope", + "talus · frost-shattered rock piled below the crags" + ], "detected.spire": [ "rock", "spire", @@ -4319,32 +4621,38 @@ "montane forest", "montane forest · cloaking the slopes below the crags" ], - "feel.exhilaration": [ - "whee", - "exhilaration", - "elation", - "a soaring elation" - ], "feel.freedom": [ "free", "freedom", "release", "a boundless release" ], + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" + ], + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" + ], "feel.lightness": [ "light", "lightness", "buoyancy", "a weightless buoyancy" - ], - "feel.vertigo": [ - "whoa", - "vertigo", - "giddiness", - "a giddy, falling vertigo" ] }, "es": { + "detected.talus": [ + "pedrera", + "talud", + "talud de derrubios", + "talud · roca rota por el hielo amontonada bajo los riscos" + ], "detected.spire": [ "roca", "aguja", @@ -4357,32 +4665,38 @@ "bosque montano", "bosque montano · cubriendo las laderas bajo los riscos" ], - "feel.exhilaration": [ - "yupi", - "euforia", - "júbilo", - "un júbilo que se eleva" - ], "feel.freedom": [ "libre", "libertad", "liberación", "una liberación sin límites" ], + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" + ], "feel.lightness": [ "ligero", "ligereza", "flotabilidad", "una flotabilidad ingrávida" - ], - "feel.vertigo": [ - "huy", - "vértigo", - "mareo", - "un vértigo mareante de caída" ] }, "fr": { + "detected.talus": [ + "éboulis", + "talus", + "talus d’éboulis", + "éboulis · roches gélifractées entassées sous les aiguilles" + ], "detected.spire": [ "roche", "aiguille", @@ -4395,32 +4709,38 @@ "forêt montagnarde", "forêt montagnarde · habillant les pentes sous les pics" ], - "feel.exhilaration": [ - "youpi", - "exaltation", - "euphorie", - "une euphorie qui s'envole" - ], "feel.freedom": [ "libre", "liberté", "délivrance", "une délivrance sans limites" ], + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" + ], "feel.lightness": [ "léger", "légèreté", "flottabilité", "une flottabilité en apesanteur" - ], - "feel.vertigo": [ - "oh là", - "vertige", - "étourdissement", - "un vertige étourdi, comme une chute" ] }, "ja": { + "detected.talus": [ + "岩屑", + "タルス", + "岩屑の斜面", + "タルス · 凍結破砕した岩が岩峰の下に堆積" + ], "detected.spire": [ "岩", "岩峰", @@ -4433,29 +4753,29 @@ "山地林", "山地林 · 岩峰の下の斜面を覆う" ], - "feel.exhilaration": [ - "わーい", - "高揚", - "歓喜", - "舞い上がる歓喜" - ], "feel.freedom": [ "自由", "自由さ", "解放", "果てしない解放" ], + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" + ], "feel.lightness": [ "軽い", "軽やかさ", "浮遊感", "無重力の浮遊感" - ], - "feel.vertigo": [ - "おっと", - "めまい", - "くらくら感", - "落ちるようなくらくらするめまい" ] } } @@ -4468,6 +4788,16 @@ "source": "NPS Rocky Mountain b-roll 188046ff; trim 60–110s, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.snowfield", + "salience": 2, + "box": [ + 0.3, + 0.22, + 0.3, + 0.22 + ] + }, { "key": "detected.summit", "salience": 4, @@ -4491,7 +4821,7 @@ ], "affect": [ { - "key": "feel.exhilaration", + "key": "feel.sublime", "at": [ 0.5, 0.44 @@ -4499,7 +4829,7 @@ "min_level": 1 }, { - "key": "feel.freedom", + "key": "feel.vertigo", "at": [ 0.22, 0.68 @@ -4507,7 +4837,7 @@ "min_level": 2 }, { - "key": "feel.lightness", + "key": "feel.exhilaration", "at": [ 0.66, 0.58 @@ -4515,7 +4845,7 @@ "min_level": 3 }, { - "key": "feel.vertigo", + "key": "feel.vastness", "at": [ 0.42, 0.82 @@ -4525,6 +4855,12 @@ ], "strings": { "en": { + "detected.snowfield": [ + "snow", + "snowfield", + "alpine snowfield", + "alpine snowfield · lingering high-elevation snow" + ], "detected.summit": [ "peak", "summit", @@ -4537,32 +4873,38 @@ "alpine tundra", "alpine tundra · low cushion plants above the trees" ], - "feel.exhilaration": [ - "whee", - "exhilaration", - "elation", - "a soaring elation" - ], - "feel.freedom": [ - "free", - "freedom", - "release", - "a boundless release" - ], - "feel.lightness": [ - "light", - "lightness", - "buoyancy", - "a weightless buoyancy" + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" ], "feel.vertigo": [ "whoa", "vertigo", "giddiness", "a giddy, falling vertigo" + ], + "feel.exhilaration": [ + "whee", + "exhilaration", + "elation", + "a soaring elation" + ], + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ] }, "es": { + "detected.snowfield": [ + "nieve", + "nevero", + "nevero alpino", + "nevero alpino · nieve persistente de gran altitud" + ], "detected.summit": [ "pico", "cumbre", @@ -4575,32 +4917,38 @@ "tundra alpina", "tundra alpina · plantas en cojín bajas sobre los árboles" ], - "feel.exhilaration": [ - "yupi", - "euforia", - "júbilo", - "un júbilo que se eleva" - ], - "feel.freedom": [ - "libre", - "libertad", - "liberación", - "una liberación sin límites" - ], - "feel.lightness": [ - "ligero", - "ligereza", - "flotabilidad", - "una flotabilidad ingrávida" + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" ], "feel.vertigo": [ "huy", "vértigo", "mareo", "un vértigo mareante de caída" + ], + "feel.exhilaration": [ + "yupi", + "euforia", + "júbilo", + "un júbilo que se eleva" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ] }, "fr": { + "detected.snowfield": [ + "neige", + "névé", + "névé alpin", + "névé alpin · neige persistante de haute altitude" + ], "detected.summit": [ "pic", "sommet", @@ -4613,32 +4961,38 @@ "toundra alpine", "toundra alpine · plantes en coussin basses au-dessus des arbres" ], - "feel.exhilaration": [ - "youpi", - "exaltation", - "euphorie", - "une euphorie qui s'envole" - ], - "feel.freedom": [ - "libre", - "liberté", - "délivrance", - "une délivrance sans limites" - ], - "feel.lightness": [ - "léger", - "légèreté", - "flottabilité", - "une flottabilité en apesanteur" + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" ], "feel.vertigo": [ "oh là", "vertige", "étourdissement", "un vertige étourdi, comme une chute" + ], + "feel.exhilaration": [ + "youpi", + "exaltation", + "euphorie", + "une euphorie qui s'envole" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ] }, "ja": { + "detected.snowfield": [ + "雪", + "雪原", + "高山の雪原", + "高山の雪原 · 標高の高い場所に残る雪" + ], "detected.summit": [ "峰", "頂", @@ -4651,29 +5005,29 @@ "高山ツンドラ", "高山ツンドラ · 樹林の上に育つ低いクッション状の植物" ], - "feel.exhilaration": [ - "わーい", - "高揚", - "歓喜", - "舞い上がる歓喜" - ], - "feel.freedom": [ - "自由", - "自由さ", - "解放", - "果てしない解放" - ], - "feel.lightness": [ - "軽い", - "軽やかさ", - "浮遊感", - "無重力の浮遊感" + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" ], "feel.vertigo": [ "おっと", "めまい", "くらくら感", "落ちるようなくらくらするめまい" + ], + "feel.exhilaration": [ + "わーい", + "高揚", + "歓喜", + "舞い上がる歓喜" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ] } } @@ -4686,6 +5040,16 @@ "source": "NPS Channel Islands AV 663a2f13; trim 3–27s, crossfade-loop", "right_variants": {}, "annotations": [ + { + "key": "detected.seabirds", + "salience": 2, + "box": [ + 0.35, + 0.18, + 0.25, + 0.2 + ] + }, { "key": "detected.surf", "salience": 4, @@ -4709,7 +5073,7 @@ ], "affect": [ { - "key": "feel.ease", + "key": "feel.melancholy", "at": [ 0.5, 0.44 @@ -4717,7 +5081,7 @@ "min_level": 1 }, { - "key": "feel.nostalgia", + "key": "feel.fragility", "at": [ 0.22, 0.68 @@ -4725,7 +5089,7 @@ "min_level": 2 }, { - "key": "feel.belonging", + "key": "feel.nostalgia", "at": [ 0.66, 0.58 @@ -4733,7 +5097,7 @@ "min_level": 3 }, { - "key": "feel.melancholy", + "key": "feel.serenity", "at": [ 0.42, 0.82 @@ -4743,6 +5107,12 @@ ], "strings": { "en": { + "detected.seabirds": [ + "birds", + "seabirds", + "nesting seabirds", + "seabird colony · the rookery that names the rock" + ], "detected.surf": [ "waves", "surf", @@ -4755,11 +5125,17 @@ "coastal sea stack", "sea stack · wave-cut residual rock" ], - "feel.ease": [ - "nice", - "ease", - "calm", - "an unhurried calm" + "feel.melancholy": [ + "sad", + "melancholy", + "longing", + "a soft seaward longing" + ], + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" ], "feel.nostalgia": [ "miss", @@ -4767,20 +5143,20 @@ "wistfulness", "a salt-air wistfulness" ], - "feel.belonging": [ - "home", - "belonging", - "rootedness", - "a tidal rootedness" - ], - "feel.melancholy": [ - "sad", - "melancholy", - "longing", - "a soft seaward longing" + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" ] }, "es": { + "detected.seabirds": [ + "aves", + "aves marinas", + "aves marinas anidando", + "colonia de aves marinas · el criadero que da nombre a la roca" + ], "detected.surf": [ "olas", "rompiente", @@ -4793,11 +5169,17 @@ "farallón costero", "farallón · roca residual tallada por las olas" ], - "feel.ease": [ - "bien", - "sosiego", - "calma", - "una calma sin prisa" + "feel.melancholy": [ + "triste", + "melancolía", + "anhelo", + "un suave anhelo hacia el mar" + ], + "feel.fragility": [ + "fino", + "fragilidad", + "vulnerabilidad", + "una fragilidad tierna" ], "feel.nostalgia": [ "echo de menos", @@ -4805,20 +5187,20 @@ "añoranza", "una añoranza de aire salino" ], - "feel.belonging": [ - "hogar", - "pertenencia", - "arraigo", - "un arraigo de marea" - ], - "feel.melancholy": [ - "triste", - "melancolía", - "anhelo", - "un suave anhelo hacia el mar" + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" ] }, "fr": { + "detected.seabirds": [ + "oiseaux", + "oiseaux marins", + "oiseaux marins nicheurs", + "colonie d’oiseaux marins · la rookerie qui nomme le rocher" + ], "detected.surf": [ "vagues", "ressac", @@ -4831,11 +5213,17 @@ "aiguille côtière", "aiguille marine · roche résiduelle taillée par les vagues" ], - "feel.ease": [ - "agréable", - "aisance", - "calme", - "un calme sans hâte" + "feel.melancholy": [ + "triste", + "mélancolie", + "langueur", + "une douce langueur tournée vers le large" + ], + "feel.fragility": [ + "mince", + "fragilité", + "vulnérabilité", + "une tendre fragilité" ], "feel.nostalgia": [ "manque", @@ -4843,20 +5231,20 @@ "vague à l'âme", "un vague à l'âme d'air salin" ], - "feel.belonging": [ - "chez-soi", - "appartenance", - "enracinement", - "un enracinement au rythme des marées" - ], - "feel.melancholy": [ - "triste", - "mélancolie", - "langueur", - "une douce langueur tournée vers le large" + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" ] }, "ja": { + "detected.seabirds": [ + "鳥", + "海鳥", + "営巣する海鳥", + "海鳥のコロニー · 岩の名の由来となる集団繁殖地" + ], "detected.surf": [ "波", "打ち寄せる波", @@ -4869,11 +5257,17 @@ "海岸の海食柱", "海食柱 · 波に削り残された岩" ], - "feel.ease": [ - "いい感じ", - "くつろぎ", - "穏やかさ", - "急がない穏やかさ" + "feel.melancholy": [ + "悲しい", + "憂い", + "恋しさ", + "海へと向かう柔らかな恋しさ" + ], + "feel.fragility": [ + "薄い", + "儚さ", + "脆さ", + "いたわりたくなる儚さ" ], "feel.nostalgia": [ "恋しい", @@ -4881,17 +5275,11 @@ "切なさ", "潮風の切なさ" ], - "feel.belonging": [ - "故郷", - "居場所", - "根づき", - "潮のように根を張る感覚" - ], - "feel.melancholy": [ - "悲しい", - "憂い", - "恋しさ", - "海へと向かう柔らかな恋しさ" + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" ] } } @@ -4904,6 +5292,16 @@ "source": "NPS Cabrillo AV de7d1cf2; trim 2–26s, crossfade-loop", "right_variants": {}, "annotations": [ + { + "key": "detected.tidepool", + "salience": 2, + "box": [ + 0.15, + 0.6, + 0.4, + 0.25 + ] + }, { "key": "detected.surfgrass", "salience": 4, @@ -4927,7 +5325,7 @@ ], "affect": [ { - "key": "feel.ease", + "key": "feel.abundance", "at": [ 0.5, 0.44 @@ -4935,7 +5333,7 @@ "min_level": 1 }, { - "key": "feel.nostalgia", + "key": "feel.immersion", "at": [ 0.22, 0.68 @@ -4943,7 +5341,7 @@ "min_level": 2 }, { - "key": "feel.belonging", + "key": "feel.curiosity", "at": [ 0.66, 0.58 @@ -4951,7 +5349,7 @@ "min_level": 3 }, { - "key": "feel.melancholy", + "key": "feel.ease", "at": [ 0.42, 0.82 @@ -4961,6 +5359,12 @@ ], "strings": { "en": { + "detected.tidepool": [ + "pool", + "tidepool", + "intertidal pool", + "tidepool · a pocket sea bared at low tide" + ], "detected.surfgrass": [ "grass", "surfgrass", @@ -4973,32 +5377,38 @@ "crustose coralline", "crustose coralline · calcified red algae" ], + "feel.abundance": [ + "full", + "abundance", + "richness", + "a teeming richness" + ], + "feel.immersion": [ + "in", + "immersion", + "absorption", + "a held, breathless absorption" + ], + "feel.curiosity": [ + "look", + "curiosity", + "fascination", + "an absorbed fascination" + ], "feel.ease": [ "nice", "ease", "calm", "an unhurried calm" - ], - "feel.nostalgia": [ - "miss", - "nostalgia", - "wistfulness", - "a salt-air wistfulness" - ], - "feel.belonging": [ - "home", - "belonging", - "rootedness", - "a tidal rootedness" - ], - "feel.melancholy": [ - "sad", - "melancholy", - "longing", - "a soft seaward longing" ] }, "es": { + "detected.tidepool": [ + "charca", + "poza de marea", + "poza intermareal", + "poza de marea · un mar en miniatura al bajar la marea" + ], "detected.surfgrass": [ "hierba", "hierba marina", @@ -5011,32 +5421,38 @@ "coralina costrosa", "coralina costrosa · alga roja calcificada" ], + "feel.abundance": [ + "lleno", + "abundancia", + "riqueza", + "una riqueza rebosante" + ], + "feel.immersion": [ + "dentro", + "inmersión", + "absorción", + "una absorción contenida y sin aliento" + ], + "feel.curiosity": [ + "mira", + "curiosidad", + "fascinación", + "una fascinación absorta" + ], "feel.ease": [ "bien", "sosiego", "calma", "una calma sin prisa" - ], - "feel.nostalgia": [ - "echo de menos", - "nostalgia", - "añoranza", - "una añoranza de aire salino" - ], - "feel.belonging": [ - "hogar", - "pertenencia", - "arraigo", - "un arraigo de marea" - ], - "feel.melancholy": [ - "triste", - "melancolía", - "anhelo", - "un suave anhelo hacia el mar" ] }, "fr": { + "detected.tidepool": [ + "mare", + "cuvette de marée", + "mare intertidale", + "cuvette de marée · une mer de poche découverte à marée basse" + ], "detected.surfgrass": [ "herbe", "herbe marine", @@ -5049,32 +5465,38 @@ "corallinale encroûtante", "corallinale encroûtante · algue rouge calcifiée" ], + "feel.abundance": [ + "plein", + "abondance", + "richesse", + "une richesse grouillante" + ], + "feel.immersion": [ + "dedans", + "immersion", + "absorption", + "une absorption retenue, à couper le souffle" + ], + "feel.curiosity": [ + "regarde", + "curiosité", + "fascination", + "une fascination absorbée" + ], "feel.ease": [ "agréable", "aisance", "calme", "un calme sans hâte" - ], - "feel.nostalgia": [ - "manque", - "nostalgie", - "vague à l'âme", - "un vague à l'âme d'air salin" - ], - "feel.belonging": [ - "chez-soi", - "appartenance", - "enracinement", - "un enracinement au rythme des marées" - ], - "feel.melancholy": [ - "triste", - "mélancolie", - "langueur", - "une douce langueur tournée vers le large" ] }, "ja": { + "detected.tidepool": [ + "潮だまり", + "タイドプール", + "潮間帯の池", + "潮だまり · 干潮で現れる小さな海" + ], "detected.surfgrass": [ "草", "スガモ", @@ -5087,29 +5509,29 @@ "固着性サンゴモ", "固着性サンゴモ · 石灰化した紅藻" ], + "feel.abundance": [ + "いっぱい", + "豊かさ", + "充溢", + "あふれんばかりの充溢" + ], + "feel.immersion": [ + "中へ", + "没入", + "没頭", + "息を呑む没頭" + ], + "feel.curiosity": [ + "見て", + "好奇心", + "魅了", + "のめり込む魅了" + ], "feel.ease": [ "いい感じ", "くつろぎ", "穏やかさ", "急がない穏やかさ" - ], - "feel.nostalgia": [ - "恋しい", - "郷愁", - "切なさ", - "潮風の切なさ" - ], - "feel.belonging": [ - "故郷", - "居場所", - "根づき", - "潮のように根を張る感覚" - ], - "feel.melancholy": [ - "悲しい", - "憂い", - "恋しさ", - "海へと向かう柔らかな恋しさ" ] } } @@ -5122,6 +5544,16 @@ "source": "Pexels 30285973; 4K source, trim 0–46s, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.pneumatocyst", + "salience": 1, + "box": [ + 0.4, + 0.18, + 0.2, + 0.25 + ] + }, { "key": "detected.kelp", "salience": 4, @@ -5145,7 +5577,7 @@ ], "affect": [ { - "key": "feel.ease", + "key": "feel.immersion", "at": [ 0.5, 0.44 @@ -5153,7 +5585,7 @@ "min_level": 1 }, { - "key": "feel.nostalgia", + "key": "feel.wonder", "at": [ 0.22, 0.68 @@ -5161,7 +5593,7 @@ "min_level": 2 }, { - "key": "feel.belonging", + "key": "feel.serenity", "at": [ 0.66, 0.58 @@ -5169,7 +5601,7 @@ "min_level": 3 }, { - "key": "feel.melancholy", + "key": "feel.freedom", "at": [ 0.42, 0.82 @@ -5179,6 +5611,12 @@ ], "strings": { "en": { + "detected.pneumatocyst": [ + "floats", + "gas bladders", + "pneumatocysts", + "pneumatocysts · gas floats lifting the blades to light" + ], "detected.kelp": [ "kelp", "giant kelp", @@ -5191,32 +5629,38 @@ "kelp frond", "frond · gas-filled floats hold it upright" ], - "feel.ease": [ - "nice", - "ease", + "feel.immersion": [ + "in", + "immersion", + "absorption", + "a held, breathless absorption" + ], + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" + ], + "feel.serenity": [ "calm", - "an unhurried calm" + "serenity", + "peace", + "a quiet, weightless peace" ], - "feel.nostalgia": [ - "miss", - "nostalgia", - "wistfulness", - "a salt-air wistfulness" - ], - "feel.belonging": [ - "home", - "belonging", - "rootedness", - "a tidal rootedness" - ], - "feel.melancholy": [ - "sad", - "melancholy", - "longing", - "a soft seaward longing" + "feel.freedom": [ + "free", + "freedom", + "release", + "a boundless release" ] }, "es": { + "detected.pneumatocyst": [ + "flotadores", + "vejigas de gas", + "neumatocistos", + "neumatocistos · flotadores de gas que alzan las hojas a la luz" + ], "detected.kelp": [ "alga", "alga parda gigante", @@ -5229,32 +5673,38 @@ "fronda de alga", "fronda · flotadores llenos de gas la mantienen erguida" ], - "feel.ease": [ - "bien", - "sosiego", + "feel.immersion": [ + "dentro", + "inmersión", + "absorción", + "una absorción contenida y sin aliento" + ], + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" + ], + "feel.serenity": [ "calma", - "una calma sin prisa" + "serenidad", + "paz", + "una paz serena e ingrávida" ], - "feel.nostalgia": [ - "echo de menos", - "nostalgia", - "añoranza", - "una añoranza de aire salino" - ], - "feel.belonging": [ - "hogar", - "pertenencia", - "arraigo", - "un arraigo de marea" - ], - "feel.melancholy": [ - "triste", - "melancolía", - "anhelo", - "un suave anhelo hacia el mar" + "feel.freedom": [ + "libre", + "libertad", + "liberación", + "una liberación sin límites" ] }, "fr": { + "detected.pneumatocyst": [ + "flotteurs", + "vésicules à gaz", + "pneumatocystes", + "pneumatocystes · des flotteurs à gaz qui hissent les lames vers la lumière" + ], "detected.kelp": [ "varech", "varech géant", @@ -5267,32 +5717,38 @@ "fronde de varech", "fronde · des flotteurs remplis de gaz la maintiennent droite" ], - "feel.ease": [ - "agréable", - "aisance", + "feel.immersion": [ + "dedans", + "immersion", + "absorption", + "une absorption retenue, à couper le souffle" + ], + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" + ], + "feel.serenity": [ "calme", - "un calme sans hâte" + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" ], - "feel.nostalgia": [ - "manque", - "nostalgie", - "vague à l'âme", - "un vague à l'âme d'air salin" - ], - "feel.belonging": [ - "chez-soi", - "appartenance", - "enracinement", - "un enracinement au rythme des marées" - ], - "feel.melancholy": [ - "triste", - "mélancolie", - "langueur", - "une douce langueur tournée vers le large" + "feel.freedom": [ + "libre", + "liberté", + "délivrance", + "une délivrance sans limites" ] }, "ja": { + "detected.pneumatocyst": [ + "浮き", + "気胞", + "気胞(ニューマトシスト)", + "気胞 · 葉を光へ持ち上げるガスの浮き" + ], "detected.kelp": [ "海藻", "巨大ケルプ", @@ -5305,29 +5761,29 @@ "ケルプの葉", "葉状部 · ガスを含んだ浮き袋が直立させる" ], - "feel.ease": [ - "いい感じ", - "くつろぎ", - "穏やかさ", - "急がない穏やかさ" + "feel.immersion": [ + "中へ", + "没入", + "没頭", + "息を呑む没頭" ], - "feel.nostalgia": [ - "恋しい", - "郷愁", - "切なさ", - "潮風の切なさ" + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" ], - "feel.belonging": [ - "故郷", - "居場所", - "根づき", - "潮のように根を張る感覚" + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" ], - "feel.melancholy": [ - "悲しい", - "憂い", - "恋しさ", - "海へと向かう柔らかな恋しさ" + "feel.freedom": [ + "自由", + "自由さ", + "解放", + "果てしない解放" ] } } @@ -5340,6 +5796,16 @@ "source": "USFWS Pacific Southwest b-roll (Wikimedia 28833083527); trim 0–48s, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.fur", + "salience": 1, + "box": [ + 0.34, + 0.38, + 0.3, + 0.25 + ] + }, { "key": "detected.otter", "salience": 4, @@ -5363,7 +5829,7 @@ ], "affect": [ { - "key": "feel.ease", + "key": "feel.tenderness", "at": [ 0.5, 0.44 @@ -5371,7 +5837,7 @@ "min_level": 1 }, { - "key": "feel.nostalgia", + "key": "feel.delight", "at": [ 0.22, 0.68 @@ -5379,7 +5845,7 @@ "min_level": 2 }, { - "key": "feel.belonging", + "key": "feel.ease", "at": [ 0.66, 0.58 @@ -5387,7 +5853,7 @@ "min_level": 3 }, { - "key": "feel.melancholy", + "key": "feel.belonging", "at": [ 0.42, 0.82 @@ -5397,6 +5863,12 @@ ], "strings": { "en": { + "detected.fur": [ + "fur", + "dense fur", + "the densest fur", + "densest fur on Earth · ~1M hairs/in², no blubber" + ], "detected.otter": [ "otter", "sea otter", @@ -5409,32 +5881,38 @@ "tidal slough", "tidal slough · sheltered nursery water" ], + "feel.tenderness": [ + "soft", + "tenderness", + "warmth", + "a cradle’s warmth" + ], + "feel.delight": [ + "fun", + "delight", + "joy", + "a darting, bright joy" + ], "feel.ease": [ "nice", "ease", "calm", "an unhurried calm" ], - "feel.nostalgia": [ - "miss", - "nostalgia", - "wistfulness", - "a salt-air wistfulness" - ], "feel.belonging": [ "home", "belonging", "rootedness", "a tidal rootedness" - ], - "feel.melancholy": [ - "sad", - "melancholy", - "longing", - "a soft seaward longing" ] }, "es": { + "detected.fur": [ + "pelaje", + "pelaje denso", + "el pelaje más denso", + "el pelaje más denso de la Tierra · ~1 M de pelos/in², sin grasa" + ], "detected.otter": [ "nutria", "nutria marina", @@ -5447,32 +5925,38 @@ "estero de marea", "estero de marea · aguas resguardadas de crianza" ], + "feel.tenderness": [ + "suave", + "ternura", + "calidez", + "la calidez de una cuna" + ], + "feel.delight": [ + "divertido", + "deleite", + "alegría", + "una alegría viva y centelleante" + ], "feel.ease": [ "bien", "sosiego", "calma", "una calma sin prisa" ], - "feel.nostalgia": [ - "echo de menos", - "nostalgia", - "añoranza", - "una añoranza de aire salino" - ], "feel.belonging": [ "hogar", "pertenencia", "arraigo", "un arraigo de marea" - ], - "feel.melancholy": [ - "triste", - "melancolía", - "anhelo", - "un suave anhelo hacia el mar" ] }, "fr": { + "detected.fur": [ + "fourrure", + "fourrure dense", + "la fourrure la plus dense", + "la fourrure la plus dense au monde · ~1 M de poils/in², sans graisse" + ], "detected.otter": [ "loutre", "loutre de mer", @@ -5485,32 +5969,38 @@ "chenal de marée", "chenal de marée · eaux de nourricerie abritées" ], + "feel.tenderness": [ + "doux", + "tendresse", + "chaleur", + "la chaleur d’un berceau" + ], + "feel.delight": [ + "amusant", + "ravissement", + "joie", + "une joie vive et frétillante" + ], "feel.ease": [ "agréable", "aisance", "calme", "un calme sans hâte" ], - "feel.nostalgia": [ - "manque", - "nostalgie", - "vague à l'âme", - "un vague à l'âme d'air salin" - ], "feel.belonging": [ "chez-soi", "appartenance", "enracinement", "un enracinement au rythme des marées" - ], - "feel.melancholy": [ - "triste", - "mélancolie", - "langueur", - "une douce langueur tournée vers le large" ] }, "ja": { + "detected.fur": [ + "毛皮", + "密な毛皮", + "世界一密な毛皮", + "世界一密な毛皮 · 約100万本/in²、脂肪層なし" + ], "detected.otter": [ "カワウソ", "ラッコ", @@ -5523,29 +6013,29 @@ "潮汐の入り江", "潮の入り江 · 守られた育成の水域" ], + "feel.tenderness": [ + "やさしい", + "優しさ", + "ぬくもり", + "ゆりかごのようなぬくもり" + ], + "feel.delight": [ + "楽しい", + "喜び", + "歓び", + "ちらちらと輝く歓び" + ], "feel.ease": [ "いい感じ", "くつろぎ", "穏やかさ", "急がない穏やかさ" ], - "feel.nostalgia": [ - "恋しい", - "郷愁", - "切なさ", - "潮風の切なさ" - ], "feel.belonging": [ "故郷", "居場所", "根づき", "潮のように根を張る感覚" - ], - "feel.melancholy": [ - "悲しい", - "憂い", - "恋しさ", - "海へと向かう柔らかな恋しさ" ] } } @@ -5558,6 +6048,16 @@ "source": "Wikimedia ‘Waves crashing on rocks off Beach 4, Kalaloch’; trim 0–46s, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.sunset", + "salience": 2, + "box": [ + 0.05, + 0.05, + 0.9, + 0.22 + ] + }, { "key": "detected.surf", "salience": 4, @@ -5581,7 +6081,7 @@ ], "affect": [ { - "key": "feel.ease", + "key": "feel.nostalgia", "at": [ 0.5, 0.44 @@ -5589,7 +6089,7 @@ "min_level": 1 }, { - "key": "feel.nostalgia", + "key": "feel.melancholy", "at": [ 0.22, 0.68 @@ -5597,7 +6097,7 @@ "min_level": 2 }, { - "key": "feel.belonging", + "key": "feel.serenity", "at": [ 0.66, 0.58 @@ -5605,7 +6105,7 @@ "min_level": 3 }, { - "key": "feel.melancholy", + "key": "feel.belonging", "at": [ 0.42, 0.82 @@ -5615,6 +6115,12 @@ ], "strings": { "en": { + "detected.sunset": [ + "glow", + "sunset", + "golden hour", + "golden hour · low sun reddened through more air" + ], "detected.surf": [ "waves", "surf", @@ -5627,32 +6133,38 @@ "coastal sea stack", "sea stack · wave-cut residual rock" ], - "feel.ease": [ - "nice", - "ease", - "calm", - "an unhurried calm" - ], "feel.nostalgia": [ "miss", "nostalgia", "wistfulness", "a salt-air wistfulness" ], - "feel.belonging": [ - "home", - "belonging", - "rootedness", - "a tidal rootedness" - ], "feel.melancholy": [ "sad", "melancholy", "longing", "a soft seaward longing" + ], + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" + ], + "feel.belonging": [ + "home", + "belonging", + "rootedness", + "a tidal rootedness" ] }, "es": { + "detected.sunset": [ + "resplandor", + "atardecer", + "hora dorada", + "hora dorada · el sol bajo enrojecido por más atmósfera" + ], "detected.surf": [ "olas", "rompiente", @@ -5665,32 +6177,38 @@ "farallón costero", "farallón · roca residual tallada por las olas" ], - "feel.ease": [ - "bien", - "sosiego", - "calma", - "una calma sin prisa" - ], "feel.nostalgia": [ "echo de menos", "nostalgia", "añoranza", "una añoranza de aire salino" ], - "feel.belonging": [ - "hogar", - "pertenencia", - "arraigo", - "un arraigo de marea" - ], "feel.melancholy": [ "triste", "melancolía", "anhelo", "un suave anhelo hacia el mar" + ], + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" + ], + "feel.belonging": [ + "hogar", + "pertenencia", + "arraigo", + "un arraigo de marea" ] }, "fr": { + "detected.sunset": [ + "lueur", + "coucher de soleil", + "heure dorée", + "heure dorée · le soleil bas rougi par plus d’atmosphère" + ], "detected.surf": [ "vagues", "ressac", @@ -5703,32 +6221,38 @@ "aiguille côtière", "aiguille marine · roche résiduelle taillée par les vagues" ], - "feel.ease": [ - "agréable", - "aisance", - "calme", - "un calme sans hâte" - ], "feel.nostalgia": [ "manque", "nostalgie", "vague à l'âme", "un vague à l'âme d'air salin" ], - "feel.belonging": [ - "chez-soi", - "appartenance", - "enracinement", - "un enracinement au rythme des marées" - ], "feel.melancholy": [ "triste", "mélancolie", "langueur", "une douce langueur tournée vers le large" + ], + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" + ], + "feel.belonging": [ + "chez-soi", + "appartenance", + "enracinement", + "un enracinement au rythme des marées" ] }, "ja": { + "detected.sunset": [ + "輝き", + "夕焼け", + "ゴールデンアワー", + "ゴールデンアワー · 大気を長く通り赤らむ低い太陽" + ], "detected.surf": [ "波", "打ち寄せる波", @@ -5741,29 +6265,29 @@ "海岸の海食柱", "海食柱 · 波に削り残された岩" ], - "feel.ease": [ - "いい感じ", - "くつろぎ", - "穏やかさ", - "急がない穏やかさ" - ], "feel.nostalgia": [ "恋しい", "郷愁", "切なさ", "潮風の切なさ" ], - "feel.belonging": [ - "故郷", - "居場所", - "根づき", - "潮のように根を張る感覚" - ], "feel.melancholy": [ "悲しい", "憂い", "恋しさ", "海へと向かう柔らかな恋しさ" + ], + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" + ], + "feel.belonging": [ + "故郷", + "居場所", + "根づき", + "潮のように根を張る感覚" ] } } @@ -5776,6 +6300,16 @@ "source": "Pexels 6497564; 4K source, trim 8–54s, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.whiskers", + "salience": 1, + "box": [ + 0.3, + 0.42, + 0.2, + 0.15 + ] + }, { "key": "detected.seal", "salience": 4, @@ -5799,7 +6333,7 @@ ], "affect": [ { - "key": "feel.ease", + "key": "feel.tenderness", "at": [ 0.5, 0.44 @@ -5807,7 +6341,7 @@ "min_level": 1 }, { - "key": "feel.nostalgia", + "key": "feel.repose", "at": [ 0.22, 0.68 @@ -5823,7 +6357,7 @@ "min_level": 3 }, { - "key": "feel.melancholy", + "key": "feel.delight", "at": [ 0.42, 0.82 @@ -5833,6 +6367,12 @@ ], "strings": { "en": { + "detected.whiskers": [ + "whiskers", + "vibrissae", + "sensing whiskers", + "vibrissae · whiskers that feel prey in murky water" + ], "detected.seal": [ "seals", "harbor seals", @@ -5845,17 +6385,17 @@ "intertidal rock", "haul-out · a tide-washed resting ledge" ], - "feel.ease": [ - "nice", - "ease", - "calm", - "an unhurried calm" + "feel.tenderness": [ + "soft", + "tenderness", + "warmth", + "a cradle’s warmth" ], - "feel.nostalgia": [ - "miss", - "nostalgia", - "wistfulness", - "a salt-air wistfulness" + "feel.repose": [ + "rest", + "repose", + "drowse", + "a sun-warmed drowse" ], "feel.belonging": [ "home", @@ -5863,14 +6403,20 @@ "rootedness", "a tidal rootedness" ], - "feel.melancholy": [ - "sad", - "melancholy", - "longing", - "a soft seaward longing" + "feel.delight": [ + "fun", + "delight", + "joy", + "a darting, bright joy" ] }, "es": { + "detected.whiskers": [ + "bigotes", + "vibrisas", + "bigotes sensores", + "vibrisas · bigotes que detectan presas en agua turbia" + ], "detected.seal": [ "focas", "focas comunes", @@ -5883,17 +6429,17 @@ "roca intermareal", "descansadero · una repisa de descanso bañada por la marea" ], - "feel.ease": [ - "bien", - "sosiego", - "calma", - "una calma sin prisa" + "feel.tenderness": [ + "suave", + "ternura", + "calidez", + "la calidez de una cuna" ], - "feel.nostalgia": [ - "echo de menos", - "nostalgia", - "añoranza", - "una añoranza de aire salino" + "feel.repose": [ + "descanso", + "reposo", + "sopor", + "un sopor entibiado por el sol" ], "feel.belonging": [ "hogar", @@ -5901,14 +6447,20 @@ "arraigo", "un arraigo de marea" ], - "feel.melancholy": [ - "triste", - "melancolía", - "anhelo", - "un suave anhelo hacia el mar" + "feel.delight": [ + "divertido", + "deleite", + "alegría", + "una alegría viva y centelleante" ] }, "fr": { + "detected.whiskers": [ + "moustaches", + "vibrisses", + "moustaches sensorielles", + "vibrisses · des moustaches qui sentent les proies en eau trouble" + ], "detected.seal": [ "phoques", "phoques communs", @@ -5921,17 +6473,17 @@ "rocher intertidal", "reposoir · une corniche de repos balayée par la marée" ], - "feel.ease": [ - "agréable", - "aisance", - "calme", - "un calme sans hâte" + "feel.tenderness": [ + "doux", + "tendresse", + "chaleur", + "la chaleur d’un berceau" ], - "feel.nostalgia": [ - "manque", - "nostalgie", - "vague à l'âme", - "un vague à l'âme d'air salin" + "feel.repose": [ + "repos", + "quiétude", + "somnolence", + "une somnolence réchauffée de soleil" ], "feel.belonging": [ "chez-soi", @@ -5939,14 +6491,20 @@ "enracinement", "un enracinement au rythme des marées" ], - "feel.melancholy": [ - "triste", - "mélancolie", - "langueur", - "une douce langueur tournée vers le large" + "feel.delight": [ + "amusant", + "ravissement", + "joie", + "une joie vive et frétillante" ] }, "ja": { + "detected.whiskers": [ + "ひげ", + "触毛", + "感覚のひげ", + "触毛 · 濁った水中で獲物を感じ取るひげ" + ], "detected.seal": [ "アザラシ", "ゼニガタアザラシ", @@ -5959,17 +6517,17 @@ "潮間帯の岩", "上陸地 · 潮に洗われる休息の岩棚" ], - "feel.ease": [ - "いい感じ", - "くつろぎ", - "穏やかさ", - "急がない穏やかさ" + "feel.tenderness": [ + "やさしい", + "優しさ", + "ぬくもり", + "ゆりかごのようなぬくもり" ], - "feel.nostalgia": [ - "恋しい", - "郷愁", - "切なさ", - "潮風の切なさ" + "feel.repose": [ + "休息", + "安らぎ", + "まどろみ", + "陽だまりのまどろみ" ], "feel.belonging": [ "故郷", @@ -5977,11 +6535,11 @@ "根づき", "潮のように根を張る感覚" ], - "feel.melancholy": [ - "悲しい", - "憂い", - "恋しさ", - "海へと向かう柔らかな恋しさ" + "feel.delight": [ + "楽しい", + "喜び", + "歓び", + "ちらちらと輝く歓び" ] } } @@ -5994,6 +6552,16 @@ "source": "Pexels 31036891; 4K source, trim 3–57s, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.swell", + "salience": 2, + "box": [ + 0.1, + 0.58, + 0.8, + 0.25 + ] + }, { "key": "detected.mist", "salience": 4, @@ -6017,7 +6585,7 @@ ], "affect": [ { - "key": "feel.ease", + "key": "feel.serenity", "at": [ 0.5, 0.44 @@ -6025,7 +6593,7 @@ "min_level": 1 }, { - "key": "feel.nostalgia", + "key": "feel.wonder", "at": [ 0.22, 0.68 @@ -6033,7 +6601,7 @@ "min_level": 2 }, { - "key": "feel.belonging", + "key": "feel.hush", "at": [ 0.66, 0.58 @@ -6041,7 +6609,7 @@ "min_level": 3 }, { - "key": "feel.melancholy", + "key": "feel.nostalgia", "at": [ 0.42, 0.82 @@ -6051,6 +6619,12 @@ ], "strings": { "en": { + "detected.swell": [ + "waves", + "swell", + "ocean swell", + "ocean swell · wind-built waves from distant storms" + ], "detected.mist": [ "mist", "sea mist", @@ -6063,32 +6637,38 @@ "coastal rock", "coastal rock · the standing edge of the land" ], - "feel.ease": [ - "nice", - "ease", + "feel.serenity": [ "calm", - "an unhurried calm" + "serenity", + "peace", + "a quiet, weightless peace" + ], + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" + ], + "feel.hush": [ + "quiet", + "hush", + "stillness", + "a breath-held hush" ], "feel.nostalgia": [ "miss", "nostalgia", "wistfulness", "a salt-air wistfulness" - ], - "feel.belonging": [ - "home", - "belonging", - "rootedness", - "a tidal rootedness" - ], - "feel.melancholy": [ - "sad", - "melancholy", - "longing", - "a soft seaward longing" ] }, "es": { + "detected.swell": [ + "olas", + "mar de fondo", + "oleaje de fondo", + "mar de fondo · olas formadas por tormentas lejanas" + ], "detected.mist": [ "bruma", "bruma marina", @@ -6101,32 +6681,38 @@ "roca costera", "roca costera · el borde firme de la tierra" ], - "feel.ease": [ - "bien", - "sosiego", + "feel.serenity": [ "calma", - "una calma sin prisa" + "serenidad", + "paz", + "una paz serena e ingrávida" + ], + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" + ], + "feel.hush": [ + "silencio", + "quietud", + "sosiego", + "un silencio contenido" ], "feel.nostalgia": [ "echo de menos", "nostalgia", "añoranza", "una añoranza de aire salino" - ], - "feel.belonging": [ - "hogar", - "pertenencia", - "arraigo", - "un arraigo de marea" - ], - "feel.melancholy": [ - "triste", - "melancolía", - "anhelo", - "un suave anhelo hacia el mar" ] }, "fr": { + "detected.swell": [ + "vagues", + "houle", + "houle océanique", + "houle · des vagues nées de tempêtes lointaines" + ], "detected.mist": [ "brume", "brume de mer", @@ -6139,32 +6725,38 @@ "rocher côtier", "rocher côtier · le bord dressé de la terre" ], - "feel.ease": [ - "agréable", - "aisance", + "feel.serenity": [ "calme", - "un calme sans hâte" + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" + ], + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" + ], + "feel.hush": [ + "silence", + "calme", + "quiétude", + "un silence retenu" ], "feel.nostalgia": [ "manque", "nostalgie", "vague à l'âme", "un vague à l'âme d'air salin" - ], - "feel.belonging": [ - "chez-soi", - "appartenance", - "enracinement", - "un enracinement au rythme des marées" - ], - "feel.melancholy": [ - "triste", - "mélancolie", - "langueur", - "une douce langueur tournée vers le large" ] }, "ja": { + "detected.swell": [ + "波", + "うねり", + "海のうねり", + "うねり · 遠くの嵐が生んだ波" + ], "detected.mist": [ "霧", "海霧", @@ -6177,29 +6769,29 @@ "海岸の岩", "海岸の岩 · 陸の立つ縁" ], - "feel.ease": [ - "いい感じ", - "くつろぎ", - "穏やかさ", - "急がない穏やかさ" + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" + ], + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" + ], + "feel.hush": [ + "静か", + "静けさ", + "沈黙", + "息をひそめた静けさ" ], "feel.nostalgia": [ "恋しい", "郷愁", "切なさ", "潮風の切なさ" - ], - "feel.belonging": [ - "故郷", - "居場所", - "根づき", - "潮のように根を張る感覚" - ], - "feel.melancholy": [ - "悲しい", - "憂い", - "恋しさ", - "海へと向かう柔らかな恋しさ" ] } } @@ -6295,7 +6887,7 @@ ], "affect": [ { - "key": "feel.delight", + "key": "feel.curiosity", "at": [ 0.5, 0.44 @@ -6303,7 +6895,7 @@ "min_level": 1 }, { - "key": "feel.abundance", + "key": "feel.poise", "at": [ 0.22, 0.68 @@ -6311,7 +6903,7 @@ "min_level": 2 }, { - "key": "feel.curiosity", + "key": "feel.fragility", "at": [ 0.66, 0.58 @@ -6342,24 +6934,24 @@ "Lutjanus · schools over reef structure" ], "measure.depth": "−18 m", - "feel.delight": [ - "fun", - "delight", - "joy", - "a darting, bright joy" - ], - "feel.abundance": [ - "full", - "abundance", - "richness", - "a teeming richness" - ], "feel.curiosity": [ "look", "curiosity", "fascination", "an absorbed fascination" ], + "feel.poise": [ + "still", + "poise", + "grace", + "a hovering, ornate poise" + ], + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" + ], "feel.immersion": [ "in", "immersion", @@ -6381,24 +6973,24 @@ "Lutjanus · forma bancos sobre la estructura del arrecife" ], "measure.depth": "−18 m", - "feel.delight": [ - "divertido", - "deleite", - "alegría", - "una alegría viva y centelleante" - ], - "feel.abundance": [ - "lleno", - "abundancia", - "riqueza", - "una riqueza rebosante" - ], "feel.curiosity": [ "mira", "curiosidad", "fascinación", "una fascinación absorta" ], + "feel.poise": [ + "quieto", + "aplomo", + "gracia", + "un aplomo suspendido y ornado" + ], + "feel.fragility": [ + "fino", + "fragilidad", + "vulnerabilidad", + "una fragilidad tierna" + ], "feel.immersion": [ "dentro", "inmersión", @@ -6420,24 +7012,24 @@ "Lutjanus · forme des bancs au-dessus du récif" ], "measure.depth": "−18 m", - "feel.delight": [ - "amusant", - "ravissement", - "joie", - "une joie vive et frétillante" - ], - "feel.abundance": [ - "plein", - "abondance", - "richesse", - "une richesse grouillante" - ], "feel.curiosity": [ "regarde", "curiosité", "fascination", "une fascination absorbée" ], + "feel.poise": [ + "immobile", + "aplomb", + "grâce", + "un aplomb suspendu et ouvragé" + ], + "feel.fragility": [ + "mince", + "fragilité", + "vulnérabilité", + "une tendre fragilité" + ], "feel.immersion": [ "dedans", "immersion", @@ -6459,24 +7051,24 @@ "Lutjanus · サンゴ礁の地形上で群れをなす" ], "measure.depth": "−18 m", - "feel.delight": [ - "楽しい", - "喜び", - "歓び", - "ちらちらと輝く歓び" - ], - "feel.abundance": [ - "いっぱい", - "豊かさ", - "充溢", - "あふれんばかりの充溢" - ], "feel.curiosity": [ "見て", "好奇心", "魅了", "のめり込む魅了" ], + "feel.poise": [ + "静止", + "気品", + "優雅", + "宙に浮く華麗な気品" + ], + "feel.fragility": [ + "薄い", + "儚さ", + "脆さ", + "いたわりたくなる儚さ" + ], "feel.immersion": [ "中へ", "没入", @@ -6552,7 +7144,7 @@ ], "affect": [ { - "key": "feel.delight", + "key": "feel.abundance", "at": [ 0.5, 0.44 @@ -6560,7 +7152,7 @@ "min_level": 1 }, { - "key": "feel.abundance", + "key": "feel.flow", "at": [ 0.22, 0.68 @@ -6568,7 +7160,7 @@ "min_level": 2 }, { - "key": "feel.curiosity", + "key": "feel.vastness", "at": [ 0.66, 0.58 @@ -6599,23 +7191,23 @@ "scleractinian · reef-building stony coral" ], "measure.depth": "−22 m", - "feel.delight": [ - "fun", - "delight", - "joy", - "a darting, bright joy" - ], "feel.abundance": [ "full", "abundance", "richness", "a teeming richness" ], - "feel.curiosity": [ - "look", - "curiosity", - "fascination", - "an absorbed fascination" + "feel.flow": [ + "go", + "flow", + "streaming", + "a sweeping, schooling flow" + ], + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ], "feel.immersion": [ "in", @@ -6638,23 +7230,23 @@ "escleractinio · coral pétreo constructor de arrecifes" ], "measure.depth": "−22 m", - "feel.delight": [ - "divertido", - "deleite", - "alegría", - "una alegría viva y centelleante" - ], "feel.abundance": [ "lleno", "abundancia", "riqueza", "una riqueza rebosante" ], - "feel.curiosity": [ - "mira", - "curiosidad", - "fascinación", - "una fascinación absorta" + "feel.flow": [ + "fluir", + "flujo", + "corriente", + "un flujo de cardumen que barre" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ], "feel.immersion": [ "dentro", @@ -6677,23 +7269,23 @@ "scléractiniaire · corail dur bâtisseur de récifs" ], "measure.depth": "−22 m", - "feel.delight": [ - "amusant", - "ravissement", - "joie", - "une joie vive et frétillante" - ], "feel.abundance": [ "plein", "abondance", "richesse", "une richesse grouillante" ], - "feel.curiosity": [ - "regarde", - "curiosité", - "fascination", - "une fascination absorbée" + "feel.flow": [ + "aller", + "flux", + "courant", + "un flux de banc qui ondule" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ], "feel.immersion": [ "dedans", @@ -6716,23 +7308,23 @@ "イシサンゴ目 · 礁を造る石サンゴ" ], "measure.depth": "−22 m", - "feel.delight": [ - "楽しい", - "喜び", - "歓び", - "ちらちらと輝く歓び" - ], "feel.abundance": [ "いっぱい", "豊かさ", "充溢", "あふれんばかりの充溢" ], - "feel.curiosity": [ - "見て", - "好奇心", - "魅了", - "のめり込む魅了" + "feel.flow": [ + "流れ", + "フロー", + "奔流", + "群れが織りなすうねり" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ], "feel.immersion": [ "中へ", @@ -6751,6 +7343,16 @@ "source": "NOAA Fisheries b-roll VIDEO_ID 6039896460001; trim 250–274s, crossfade-loop", "right_variants": {}, "annotations": [ + { + "key": "detected.coral", + "salience": 2, + "box": [ + 0.1, + 0.6, + 0.55, + 0.3 + ] + }, { "key": "detected.parrotfish", "salience": 4, @@ -6799,7 +7401,7 @@ ], "affect": [ { - "key": "feel.delight", + "key": "feel.radiance", "at": [ 0.5, 0.44 @@ -6807,7 +7409,7 @@ "min_level": 1 }, { - "key": "feel.abundance", + "key": "feel.curiosity", "at": [ 0.22, 0.68 @@ -6815,7 +7417,7 @@ "min_level": 2 }, { - "key": "feel.curiosity", + "key": "feel.delight", "at": [ 0.66, 0.58 @@ -6833,6 +7435,12 @@ ], "strings": { "en": { + "detected.coral": [ + "coral", + "reef coral", + "hard coral", + "hard coral · the reef this fish grazes into sand" + ], "detected.parrotfish": [ "fish", "parrotfish", @@ -6840,17 +7448,11 @@ "B. muricatum · humphead, grazes reef into sand" ], "measure.depth": "−12 m", - "feel.delight": [ - "fun", - "delight", - "joy", - "a darting, bright joy" - ], - "feel.abundance": [ - "full", - "abundance", - "richness", - "a teeming richness" + "feel.radiance": [ + "bright", + "radiance", + "brilliance", + "a jeweled brilliance" ], "feel.curiosity": [ "look", @@ -6858,6 +7460,12 @@ "fascination", "an absorbed fascination" ], + "feel.delight": [ + "fun", + "delight", + "joy", + "a darting, bright joy" + ], "feel.immersion": [ "in", "immersion", @@ -6866,6 +7474,12 @@ ] }, "es": { + "detected.coral": [ + "coral", + "coral de arrecife", + "coral duro", + "coral duro · el arrecife que este pez muele en arena" + ], "detected.parrotfish": [ "pez", "pez loro", @@ -6873,17 +7487,11 @@ "B. muricatum · de cabeza jorobada, muele el arrecife hasta convertirlo en arena" ], "measure.depth": "−12 m", - "feel.delight": [ - "divertido", - "deleite", - "alegría", - "una alegría viva y centelleante" - ], - "feel.abundance": [ - "lleno", - "abundancia", - "riqueza", - "una riqueza rebosante" + "feel.radiance": [ + "brillo", + "resplandor", + "fulgor", + "un fulgor de joyas" ], "feel.curiosity": [ "mira", @@ -6891,6 +7499,12 @@ "fascinación", "una fascinación absorta" ], + "feel.delight": [ + "divertido", + "deleite", + "alegría", + "una alegría viva y centelleante" + ], "feel.immersion": [ "dentro", "inmersión", @@ -6899,6 +7513,12 @@ ] }, "fr": { + "detected.coral": [ + "corail", + "corail récifal", + "corail dur", + "corail dur · le récif que ce poisson broie en sable" + ], "detected.parrotfish": [ "poisson", "poisson-perroquet", @@ -6906,17 +7526,11 @@ "B. muricatum · à bosse, broie le récif en sable" ], "measure.depth": "−12 m", - "feel.delight": [ - "amusant", - "ravissement", - "joie", - "une joie vive et frétillante" - ], - "feel.abundance": [ - "plein", - "abondance", - "richesse", - "une richesse grouillante" + "feel.radiance": [ + "éclat", + "rayonnement", + "scintillement", + "un scintillement de joyaux" ], "feel.curiosity": [ "regarde", @@ -6924,6 +7538,12 @@ "fascination", "une fascination absorbée" ], + "feel.delight": [ + "amusant", + "ravissement", + "joie", + "une joie vive et frétillante" + ], "feel.immersion": [ "dedans", "immersion", @@ -6932,6 +7552,12 @@ ] }, "ja": { + "detected.coral": [ + "サンゴ", + "礁サンゴ", + "造礁サンゴ", + "造礁サンゴ · この魚が削って砂にする礁" + ], "detected.parrotfish": [ "魚", "ブダイ", @@ -6939,17 +7565,11 @@ "B. muricatum · カンムリブダイ、サンゴを削って砂にする" ], "measure.depth": "−12 m", - "feel.delight": [ - "楽しい", - "喜び", - "歓び", - "ちらちらと輝く歓び" - ], - "feel.abundance": [ - "いっぱい", - "豊かさ", - "充溢", - "あふれんばかりの充溢" + "feel.radiance": [ + "輝き", + "光輝", + "煌めき", + "宝石のような煌めき" ], "feel.curiosity": [ "見て", @@ -6957,6 +7577,12 @@ "魅了", "のめり込む魅了" ], + "feel.delight": [ + "楽しい", + "喜び", + "歓び", + "ちらちらと輝く歓び" + ], "feel.immersion": [ "中へ", "没入", @@ -6974,6 +7600,16 @@ "source": "NOAA Fisheries b-roll VIDEO_ID 5231464663001; trim 30–54s, crossfade-loop", "right_variants": {}, "annotations": [ + { + "key": "detected.polyp", + "salience": 1, + "box": [ + 0.25, + 0.4, + 0.3, + 0.3 + ] + }, { "key": "detected.coral", "salience": 4, @@ -7022,7 +7658,7 @@ ], "affect": [ { - "key": "feel.delight", + "key": "feel.intricacy", "at": [ 0.5, 0.44 @@ -7030,7 +7666,7 @@ "min_level": 1 }, { - "key": "feel.abundance", + "key": "feel.fragility", "at": [ 0.22, 0.68 @@ -7038,7 +7674,7 @@ "min_level": 2 }, { - "key": "feel.curiosity", + "key": "feel.abundance", "at": [ 0.66, 0.58 @@ -7046,7 +7682,7 @@ "min_level": 3 }, { - "key": "feel.immersion", + "key": "feel.curiosity", "at": [ 0.42, 0.82 @@ -7056,6 +7692,12 @@ ], "strings": { "en": { + "detected.polyp": [ + "polyps", + "coral polyps", + "living polyps", + "polyps · each a tiny animal, the colony’s builders" + ], "detected.coral": [ "coral", "coral colony", @@ -7068,11 +7710,17 @@ "reef damselfish", "reef damselfish · territorial over its coral" ], - "feel.delight": [ - "fun", - "delight", - "joy", - "a darting, bright joy" + "feel.intricacy": [ + "fine", + "intricacy", + "detail", + "an intricate, woven density" + ], + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" ], "feel.abundance": [ "full", @@ -7085,15 +7733,15 @@ "curiosity", "fascination", "an absorbed fascination" - ], - "feel.immersion": [ - "in", - "immersion", - "absorption", - "a held, breathless absorption" ] }, "es": { + "detected.polyp": [ + "pólipos", + "pólipos de coral", + "pólipos vivos", + "pólipos · cada uno un animal diminuto, constructores de la colonia" + ], "detected.coral": [ "coral", "colonia de coral", @@ -7106,11 +7754,17 @@ "damisela de arrecife", "damisela de arrecife · territorial con su coral" ], - "feel.delight": [ - "divertido", - "deleite", - "alegría", - "una alegría viva y centelleante" + "feel.intricacy": [ + "fino", + "complejidad", + "detalle", + "una densidad intrincada y tejida" + ], + "feel.fragility": [ + "fino", + "fragilidad", + "vulnerabilidad", + "una fragilidad tierna" ], "feel.abundance": [ "lleno", @@ -7123,15 +7777,15 @@ "curiosidad", "fascinación", "una fascinación absorta" - ], - "feel.immersion": [ - "dentro", - "inmersión", - "absorción", - "una absorción contenida y sin aliento" ] }, "fr": { + "detected.polyp": [ + "polypes", + "polypes coralliens", + "polypes vivants", + "polypes · chacun un animal minuscule, bâtisseurs de la colonie" + ], "detected.coral": [ "corail", "colonie de corail", @@ -7144,11 +7798,17 @@ "demoiselle de récif", "demoiselle de récif · territoriale autour de son corail" ], - "feel.delight": [ - "amusant", - "ravissement", - "joie", - "une joie vive et frétillante" + "feel.intricacy": [ + "fin", + "complexité", + "détail", + "une densité tissée et complexe" + ], + "feel.fragility": [ + "mince", + "fragilité", + "vulnérabilité", + "une tendre fragilité" ], "feel.abundance": [ "plein", @@ -7161,15 +7821,15 @@ "curiosité", "fascination", "une fascination absorbée" - ], - "feel.immersion": [ - "dedans", - "immersion", - "absorption", - "une absorption retenue, à couper le souffle" ] }, "ja": { + "detected.polyp": [ + "ポリプ", + "サンゴのポリプ", + "生きたポリプ", + "ポリプ · 一つ一つが小さな動物、群体の建設者" + ], "detected.coral": [ "サンゴ", "サンゴの群体", @@ -7182,11 +7842,17 @@ "スズメダイ", "スズメダイ · 自分のサンゴをめぐって縄張りを張る" ], - "feel.delight": [ - "楽しい", - "喜び", - "歓び", - "ちらちらと輝く歓び" + "feel.intricacy": [ + "精緻", + "複雑さ", + "細部", + "織り込まれた緻密さ" + ], + "feel.fragility": [ + "薄い", + "儚さ", + "脆さ", + "いたわりたくなる儚さ" ], "feel.abundance": [ "いっぱい", @@ -7199,12 +7865,6 @@ "好奇心", "魅了", "のめり込む魅了" - ], - "feel.immersion": [ - "中へ", - "没入", - "没頭", - "息を呑む没頭" ] } } @@ -7250,7 +7910,7 @@ ], "affect": [ { - "key": "feel.delight", + "key": "feel.serenity", "at": [ 0.5, 0.44 @@ -7266,7 +7926,7 @@ "min_level": 2 }, { - "key": "feel.curiosity", + "key": "feel.radiance", "at": [ 0.66, 0.58 @@ -7274,7 +7934,7 @@ "min_level": 3 }, { - "key": "feel.immersion", + "key": "feel.delight", "at": [ 0.42, 0.82 @@ -7297,11 +7957,11 @@ "anthias · orange clouds of plankton-pickers over the reef" ], "measure.depth": "−10 m", - "feel.delight": [ - "fun", - "delight", - "joy", - "a darting, bright joy" + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" ], "feel.abundance": [ "full", @@ -7309,17 +7969,17 @@ "richness", "a teeming richness" ], - "feel.curiosity": [ - "look", - "curiosity", - "fascination", - "an absorbed fascination" + "feel.radiance": [ + "bright", + "radiance", + "brilliance", + "a jeweled brilliance" ], - "feel.immersion": [ - "in", - "immersion", - "absorption", - "a held, breathless absorption" + "feel.delight": [ + "fun", + "delight", + "joy", + "a darting, bright joy" ] }, "es": { @@ -7336,11 +7996,11 @@ "antias · nubes naranjas de comeplancton sobre el arrecife" ], "measure.depth": "−10 m", - "feel.delight": [ - "divertido", - "deleite", - "alegría", - "una alegría viva y centelleante" + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" ], "feel.abundance": [ "lleno", @@ -7348,17 +8008,17 @@ "riqueza", "una riqueza rebosante" ], - "feel.curiosity": [ - "mira", - "curiosidad", - "fascinación", - "una fascinación absorta" + "feel.radiance": [ + "brillo", + "resplandor", + "fulgor", + "un fulgor de joyas" ], - "feel.immersion": [ - "dentro", - "inmersión", - "absorción", - "una absorción contenida y sin aliento" + "feel.delight": [ + "divertido", + "deleite", + "alegría", + "una alegría viva y centelleante" ] }, "fr": { @@ -7375,11 +8035,11 @@ "anthias · nuages orange de mangeurs de plancton au-dessus du récif" ], "measure.depth": "−10 m", - "feel.delight": [ - "amusant", - "ravissement", - "joie", - "une joie vive et frétillante" + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" ], "feel.abundance": [ "plein", @@ -7387,17 +8047,17 @@ "richesse", "une richesse grouillante" ], - "feel.curiosity": [ - "regarde", - "curiosité", - "fascination", - "une fascination absorbée" + "feel.radiance": [ + "éclat", + "rayonnement", + "scintillement", + "un scintillement de joyaux" ], - "feel.immersion": [ - "dedans", - "immersion", - "absorption", - "une absorption retenue, à couper le souffle" + "feel.delight": [ + "amusant", + "ravissement", + "joie", + "une joie vive et frétillante" ] }, "ja": { @@ -7414,11 +8074,11 @@ "ハナダイ · 礁の上を漂う、プランクトンを食むオレンジの群れ" ], "measure.depth": "−10 m", - "feel.delight": [ - "楽しい", - "喜び", - "歓び", - "ちらちらと輝く歓び" + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" ], "feel.abundance": [ "いっぱい", @@ -7426,17 +8086,17 @@ "充溢", "あふれんばかりの充溢" ], - "feel.curiosity": [ - "見て", - "好奇心", - "魅了", - "のめり込む魅了" + "feel.radiance": [ + "輝き", + "光輝", + "煌めき", + "宝石のような煌めき" ], - "feel.immersion": [ - "中へ", - "没入", - "没頭", - "息を呑む没頭" + "feel.delight": [ + "楽しい", + "喜び", + "歓び", + "ちらちらと輝く歓び" ] } } @@ -7498,7 +8158,7 @@ "min_level": 2 }, { - "key": "feel.curiosity", + "key": "feel.freedom", "at": [ 0.66, 0.58 @@ -7541,11 +8201,11 @@ "richness", "a teeming richness" ], - "feel.curiosity": [ - "look", - "curiosity", - "fascination", - "an absorbed fascination" + "feel.freedom": [ + "free", + "freedom", + "release", + "a boundless release" ], "feel.immersion": [ "in", @@ -7580,11 +8240,11 @@ "riqueza", "una riqueza rebosante" ], - "feel.curiosity": [ - "mira", - "curiosidad", - "fascinación", - "una fascinación absorta" + "feel.freedom": [ + "libre", + "libertad", + "liberación", + "una liberación sin límites" ], "feel.immersion": [ "dentro", @@ -7619,11 +8279,11 @@ "richesse", "une richesse grouillante" ], - "feel.curiosity": [ - "regarde", - "curiosité", - "fascination", - "une fascination absorbée" + "feel.freedom": [ + "libre", + "liberté", + "délivrance", + "une délivrance sans limites" ], "feel.immersion": [ "dedans", @@ -7658,11 +8318,11 @@ "充溢", "あふれんばかりの充溢" ], - "feel.curiosity": [ - "見て", - "好奇心", - "魅了", - "のめり込む魅了" + "feel.freedom": [ + "自由", + "自由さ", + "解放", + "果てしない解放" ], "feel.immersion": [ "中へ", @@ -7764,7 +8424,7 @@ ], "affect": [ { - "key": "feel.unease", + "key": "feel.vastness", "at": [ 0.5, 0.44 @@ -7772,7 +8432,7 @@ "min_level": 1 }, { - "key": "feel.fascination", + "key": "feel.isolation", "at": [ 0.22, 0.68 @@ -7780,7 +8440,7 @@ "min_level": 2 }, { - "key": "feel.isolation", + "key": "feel.fascination", "at": [ 0.66, 0.58 @@ -7788,7 +8448,7 @@ "min_level": 3 }, { - "key": "feel.dread", + "key": "feel.unease", "at": [ 0.42, 0.82 @@ -7811,17 +8471,11 @@ "Siphonophorae · a colony of clones, can exceed 40 m" ], "measure.depth": "−1,200 m", - "feel.unease": [ - "uh", - "unease", - "disquiet", - "a creeping disquiet" - ], - "feel.fascination": [ - "ooh", - "fascination", - "wonder", - "a forbidden wonder" + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ], "feel.isolation": [ "alone", @@ -7829,11 +8483,17 @@ "solitude", "a crushing solitude" ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" + "feel.fascination": [ + "ooh", + "fascination", + "wonder", + "a forbidden wonder" + ], + "feel.unease": [ + "uh", + "unease", + "disquiet", + "a creeping disquiet" ] }, "es": { @@ -7850,17 +8510,11 @@ "Siphonophorae · una colonia de clones, puede superar los 40 m" ], "measure.depth": "−1.200 m", - "feel.unease": [ - "eh", - "inquietud", - "desasosiego", - "un desasosiego que se cuela" - ], - "feel.fascination": [ - "oh", - "fascinación", - "asombro", - "un asombro prohibido" + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ], "feel.isolation": [ "solo", @@ -7868,11 +8522,17 @@ "soledad", "una soledad aplastante" ], - "feel.dread": [ - "miedo", - "pavor", - "presagio", - "un presagio lento y frío" + "feel.fascination": [ + "oh", + "fascinación", + "asombro", + "un asombro prohibido" + ], + "feel.unease": [ + "eh", + "inquietud", + "desasosiego", + "un desasosiego que se cuela" ] }, "fr": { @@ -7889,17 +8549,11 @@ "Siphonophorae · une colonie de clones, pouvant dépasser 40 m" ], "measure.depth": "−1 200 m", - "feel.unease": [ - "oh", - "malaise", - "inquiétude", - "une inquiétude rampante" - ], - "feel.fascination": [ - "ooh", - "fascination", - "émerveillement", - "un émerveillement interdit" + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ], "feel.isolation": [ "seul", @@ -7907,11 +8561,17 @@ "solitude", "une solitude écrasante" ], - "feel.dread": [ - "peur", - "effroi", - "pressentiment", - "un pressentiment lent et glacé" + "feel.fascination": [ + "ooh", + "fascination", + "émerveillement", + "un émerveillement interdit" + ], + "feel.unease": [ + "oh", + "malaise", + "inquiétude", + "une inquiétude rampante" ] }, "ja": { @@ -7928,17 +8588,11 @@ "Siphonophorae · クローンの群体、40 mを超えることも" ], "measure.depth": "−1,200 m", - "feel.unease": [ - "うっ", - "不安", - "落ち着かなさ", - "忍び寄る落ち着かなさ" - ], - "feel.fascination": [ - "おお", - "魅了", - "驚異", - "禁じられた驚異" + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ], "feel.isolation": [ "ひとり", @@ -7946,11 +8600,17 @@ "孤独", "押しつぶすような孤独" ], - "feel.dread": [ - "怖い", - "恐れ", - "胸騒ぎ", - "ゆっくりと冷たい胸騒ぎ" + "feel.fascination": [ + "おお", + "魅了", + "驚異", + "禁じられた驚異" + ], + "feel.unease": [ + "うっ", + "不安", + "落ち着かなさ", + "忍び寄る落ち着かなさ" ] } } @@ -8046,7 +8706,7 @@ ], "affect": [ { - "key": "feel.unease", + "key": "feel.fragility", "at": [ 0.5, 0.44 @@ -8062,7 +8722,7 @@ "min_level": 2 }, { - "key": "feel.isolation", + "key": "feel.poignancy", "at": [ 0.66, 0.58 @@ -8070,7 +8730,7 @@ "min_level": 3 }, { - "key": "feel.dread", + "key": "feel.isolation", "at": [ 0.42, 0.82 @@ -8093,11 +8753,11 @@ "polychaete · a free-swimming bristle worm" ], "measure.depth": "−1,600 m", - "feel.unease": [ - "uh", - "unease", - "disquiet", - "a creeping disquiet" + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" ], "feel.fascination": [ "ooh", @@ -8105,17 +8765,17 @@ "wonder", "a forbidden wonder" ], + "feel.poignancy": [ + "ache", + "poignancy", + "bittersweetness", + "a luminous farewell" + ], "feel.isolation": [ "alone", "isolation", "solitude", "a crushing solitude" - ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" ] }, "es": { @@ -8132,11 +8792,11 @@ "poliqueto · un gusano de cerdas de natación libre" ], "measure.depth": "−1.600 m", - "feel.unease": [ - "eh", - "inquietud", - "desasosiego", - "un desasosiego que se cuela" + "feel.fragility": [ + "fino", + "fragilidad", + "vulnerabilidad", + "una fragilidad tierna" ], "feel.fascination": [ "oh", @@ -8144,17 +8804,17 @@ "asombro", "un asombro prohibido" ], + "feel.poignancy": [ + "punzada", + "desgarro", + "melancolía dulce", + "una despedida luminosa" + ], "feel.isolation": [ "solo", "aislamiento", "soledad", "una soledad aplastante" - ], - "feel.dread": [ - "miedo", - "pavor", - "presagio", - "un presagio lento y frío" ] }, "fr": { @@ -8171,11 +8831,11 @@ "polychète · un ver à soies nageur libre" ], "measure.depth": "−1 600 m", - "feel.unease": [ - "oh", - "malaise", - "inquiétude", - "une inquiétude rampante" + "feel.fragility": [ + "mince", + "fragilité", + "vulnérabilité", + "une tendre fragilité" ], "feel.fascination": [ "ooh", @@ -8183,17 +8843,17 @@ "émerveillement", "un émerveillement interdit" ], + "feel.poignancy": [ + "pincement", + "émotion poignante", + "douceur amère", + "un adieu lumineux" + ], "feel.isolation": [ "seul", "isolement", "solitude", "une solitude écrasante" - ], - "feel.dread": [ - "peur", - "effroi", - "pressentiment", - "un pressentiment lent et glacé" ] }, "ja": { @@ -8210,11 +8870,11 @@ "多毛類 · 自由に泳ぐ剛毛のある虫" ], "measure.depth": "−1,600 m", - "feel.unease": [ - "うっ", - "不安", - "落ち着かなさ", - "忍び寄る落ち着かなさ" + "feel.fragility": [ + "薄い", + "儚さ", + "脆さ", + "いたわりたくなる儚さ" ], "feel.fascination": [ "おお", @@ -8222,17 +8882,17 @@ "驚異", "禁じられた驚異" ], + "feel.poignancy": [ + "切なさ", + "哀切", + "ほろ苦さ", + "光に満ちた別れ" + ], "feel.isolation": [ "ひとり", "孤立", "孤独", "押しつぶすような孤独" - ], - "feel.dread": [ - "怖い", - "恐れ", - "胸騒ぎ", - "ゆっくりと冷たい胸騒ぎ" ] } } @@ -8245,6 +8905,16 @@ "source": "NOAA Ocean Exploration dark-1280x720-1; trim 20–44s, crossfade-loop", "right_variants": {}, "annotations": [ + { + "key": "detected.marinesnow", + "salience": 1, + "box": [ + 0.1, + 0.1, + 0.8, + 0.6 + ] + }, { "key": "detected.jelly", "salience": 4, @@ -8293,7 +8963,7 @@ ], "affect": [ { - "key": "feel.unease", + "key": "feel.spectral", "at": [ 0.5, 0.44 @@ -8301,7 +8971,7 @@ "min_level": 1 }, { - "key": "feel.fascination", + "key": "feel.unease", "at": [ 0.22, 0.68 @@ -8309,7 +8979,7 @@ "min_level": 2 }, { - "key": "feel.isolation", + "key": "feel.fascination", "at": [ 0.66, 0.58 @@ -8317,7 +8987,7 @@ "min_level": 3 }, { - "key": "feel.dread", + "key": "feel.fragility", "at": [ 0.42, 0.82 @@ -8327,6 +8997,12 @@ ], "strings": { "en": { + "detected.marinesnow": [ + "specks", + "marine snow", + "falling detritus", + "marine snow · organic debris drifting down from above" + ], "detected.jelly": [ "jelly", "crimson jelly", @@ -8334,6 +9010,12 @@ "Scyphozoa · red is invisible in the lightless deep" ], "measure.depth": "−2,140 m", + "feel.spectral": [ + "ghost", + "the spectral", + "hauntedness", + "a ghost in the water" + ], "feel.unease": [ "uh", "unease", @@ -8346,20 +9028,20 @@ "wonder", "a forbidden wonder" ], - "feel.isolation": [ - "alone", - "isolation", - "solitude", - "a crushing solitude" - ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" ] }, "es": { + "detected.marinesnow": [ + "motas", + "nieve marina", + "detrito que cae", + "nieve marina · restos orgánicos que descienden desde arriba" + ], "detected.jelly": [ "medusa", "medusa carmesí", @@ -8367,6 +9049,12 @@ "Scyphozoa · el rojo es invisible en las profundidades sin luz" ], "measure.depth": "−2.140 m", + "feel.spectral": [ + "fantasma", + "lo espectral", + "lo fantasmal", + "un fantasma en el agua" + ], "feel.unease": [ "eh", "inquietud", @@ -8379,20 +9067,20 @@ "asombro", "un asombro prohibido" ], - "feel.isolation": [ - "solo", - "aislamiento", - "soledad", - "una soledad aplastante" - ], - "feel.dread": [ - "miedo", - "pavor", - "presagio", - "un presagio lento y frío" + "feel.fragility": [ + "fino", + "fragilidad", + "vulnerabilidad", + "una fragilidad tierna" ] }, "fr": { + "detected.marinesnow": [ + "points", + "neige marine", + "détritus tombants", + "neige marine · débris organiques descendant des couches supérieures" + ], "detected.jelly": [ "méduse", "méduse cramoisie", @@ -8400,6 +9088,12 @@ "Scyphozoa · le rouge est invisible dans les abysses sans lumière" ], "measure.depth": "−2 140 m", + "feel.spectral": [ + "fantôme", + "le spectral", + "hantise", + "un fantôme dans l’eau" + ], "feel.unease": [ "oh", "malaise", @@ -8412,20 +9106,20 @@ "émerveillement", "un émerveillement interdit" ], - "feel.isolation": [ - "seul", - "isolement", - "solitude", - "une solitude écrasante" - ], - "feel.dread": [ - "peur", - "effroi", - "pressentiment", - "un pressentiment lent et glacé" + "feel.fragility": [ + "mince", + "fragilité", + "vulnérabilité", + "une tendre fragilité" ] }, "ja": { + "detected.marinesnow": [ + "粒子", + "マリンスノー", + "落下する有機物", + "マリンスノー · 上層から沈む有機物の屑" + ], "detected.jelly": [ "クラゲ", "深紅のクラゲ", @@ -8433,6 +9127,12 @@ "Scyphozoa · 光のない深海では赤は見えない" ], "measure.depth": "−2,140 m", + "feel.spectral": [ + "亡霊", + "幽玄", + "亡霊めいた気配", + "水中の亡霊" + ], "feel.unease": [ "うっ", "不安", @@ -8445,17 +9145,11 @@ "驚異", "禁じられた驚異" ], - "feel.isolation": [ - "ひとり", - "孤立", - "孤独", - "押しつぶすような孤独" - ], - "feel.dread": [ - "怖い", - "恐れ", - "胸騒ぎ", - "ゆっくりと冷たい胸騒ぎ" + "feel.fragility": [ + "薄い", + "儚さ", + "脆さ", + "いたわりたくなる儚さ" ] } } @@ -8468,14 +9162,49 @@ "source": "NOAA OER Windows to the Deep 2021 dive10-bigfin-squid; trim 34–76s, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.arms", + "salience": 2, + "box": [ + 0.35, + 0.5, + 0.3, + 0.4 + ] + }, { "key": "detected.squid", "salience": 4, - "box": [ - 0.3, - 0.2, - 0.4, - 0.65 + "appear": 0.0, + "disappear": 1.0, + "track": [ + { + "t": 0.0, + "box": [ + 0.3, + 0.36, + 0.28, + 0.3 + ] + }, + { + "t": 0.5, + "box": [ + 0.42, + 0.22, + 0.26, + 0.28 + ] + }, + { + "t": 1.0, + "box": [ + 0.55, + 0.1, + 0.26, + 0.3 + ] + } ] }, { @@ -8491,7 +9220,7 @@ ], "affect": [ { - "key": "feel.unease", + "key": "feel.alienness", "at": [ 0.5, 0.44 @@ -8507,7 +9236,7 @@ "min_level": 2 }, { - "key": "feel.isolation", + "key": "feel.unease", "at": [ 0.66, 0.58 @@ -8515,7 +9244,7 @@ "min_level": 3 }, { - "key": "feel.dread", + "key": "feel.isolation", "at": [ 0.42, 0.82 @@ -8525,6 +9254,12 @@ ], "strings": { "en": { + "detected.arms": [ + "arms", + "elbowed arms", + "trailing filaments", + "elbowed arms · held out, then trailing meters of thread" + ], "detected.squid": [ "squid", "bigfin squid", @@ -8532,11 +9267,11 @@ "Magnapinna · elbowed arms trailing meters into the dark" ], "measure.depth": "−2,000 m", - "feel.unease": [ - "uh", - "unease", - "disquiet", - "a creeping disquiet" + "feel.alienness": [ + "odd", + "alienness", + "strangeness", + "an alien grace" ], "feel.fascination": [ "ooh", @@ -8544,20 +9279,26 @@ "wonder", "a forbidden wonder" ], + "feel.unease": [ + "uh", + "unease", + "disquiet", + "a creeping disquiet" + ], "feel.isolation": [ "alone", "isolation", "solitude", "a crushing solitude" - ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" ] }, "es": { + "detected.arms": [ + "brazos", + "brazos acodados", + "filamentos colgantes", + "brazos acodados · extendidos y luego colgando metros de hilo" + ], "detected.squid": [ "calamar", "calamar de aletas grandes", @@ -8565,11 +9306,11 @@ "Magnapinna · brazos acodados que se extienden metros en la oscuridad" ], "measure.depth": "−2.000 m", - "feel.unease": [ - "eh", - "inquietud", - "desasosiego", - "un desasosiego que se cuela" + "feel.alienness": [ + "raro", + "lo alienígena", + "extrañeza", + "una gracia alienígena" ], "feel.fascination": [ "oh", @@ -8577,20 +9318,26 @@ "asombro", "un asombro prohibido" ], + "feel.unease": [ + "eh", + "inquietud", + "desasosiego", + "un desasosiego que se cuela" + ], "feel.isolation": [ "solo", "aislamiento", "soledad", "una soledad aplastante" - ], - "feel.dread": [ - "miedo", - "pavor", - "presagio", - "un presagio lento y frío" ] }, "fr": { + "detected.arms": [ + "bras", + "bras coudés", + "filaments traînants", + "bras coudés · tendus puis traînant des mètres de fil" + ], "detected.squid": [ "calmar", "calmar à grandes nageoires", @@ -8598,11 +9345,11 @@ "Magnapinna · des bras coudés traînant sur des mètres dans l'obscurité" ], "measure.depth": "−2 000 m", - "feel.unease": [ - "oh", - "malaise", - "inquiétude", - "une inquiétude rampante" + "feel.alienness": [ + "bizarre", + "l’étrangeté", + "altérité", + "une grâce extraterrestre" ], "feel.fascination": [ "ooh", @@ -8610,20 +9357,26 @@ "émerveillement", "un émerveillement interdit" ], + "feel.unease": [ + "oh", + "malaise", + "inquiétude", + "une inquiétude rampante" + ], "feel.isolation": [ "seul", "isolement", "solitude", "une solitude écrasante" - ], - "feel.dread": [ - "peur", - "effroi", - "pressentiment", - "un pressentiment lent et glacé" ] }, "ja": { + "detected.arms": [ + "腕", + "肘状の腕", + "垂れ下がる糸", + "肘状の腕 · 横に張り出し、数メートルの糸を引く" + ], "detected.squid": [ "イカ", "大きなヒレのイカ", @@ -8631,11 +9384,11 @@ "Magnapinna · 肘のように曲がる腕を闇へ何メートルも垂らす" ], "measure.depth": "−2,000 m", - "feel.unease": [ - "うっ", - "不安", - "落ち着かなさ", - "忍び寄る落ち着かなさ" + "feel.alienness": [ + "奇妙", + "異質さ", + "異形", + "異形の優雅さ" ], "feel.fascination": [ "おお", @@ -8643,17 +9396,17 @@ "驚異", "禁じられた驚異" ], + "feel.unease": [ + "うっ", + "不安", + "落ち着かなさ", + "忍び寄る落ち着かなさ" + ], "feel.isolation": [ "ひとり", "孤立", "孤独", "押しつぶすような孤独" - ], - "feel.dread": [ - "怖い", - "恐れ", - "胸騒ぎ", - "ゆっくりと冷たい胸騒ぎ" ] } } @@ -8666,14 +9419,49 @@ "source": "NOAA OER 2021 North Atlantic Stepping Stones dive13-dandelion; trim 12–70s, crossfade-loop.", "right_variants": {}, "annotations": [ + { + "key": "detected.tentacle", + "salience": 2, + "box": [ + 0.3, + 0.45, + 0.4, + 0.3 + ] + }, { "key": "detected.siphonophore", "salience": 4, - "box": [ - 0.32, - 0.28, - 0.36, - 0.4 + "appear": 0.0, + "disappear": 1.0, + "track": [ + { + "t": 0.0, + "box": [ + 0.38, + 0.28, + 0.26, + 0.36 + ] + }, + { + "t": 0.5, + "box": [ + 0.3, + 0.2, + 0.34, + 0.46 + ] + }, + { + "t": 1.0, + "box": [ + 0.18, + 0.1, + 0.45, + 0.7 + ] + } ] }, { @@ -8689,7 +9477,7 @@ ], "affect": [ { - "key": "feel.unease", + "key": "feel.radiance", "at": [ 0.5, 0.44 @@ -8697,7 +9485,7 @@ "min_level": 1 }, { - "key": "feel.fascination", + "key": "feel.wonder", "at": [ 0.22, 0.68 @@ -8705,7 +9493,7 @@ "min_level": 2 }, { - "key": "feel.isolation", + "key": "feel.fascination", "at": [ 0.66, 0.58 @@ -8713,7 +9501,7 @@ "min_level": 3 }, { - "key": "feel.dread", + "key": "feel.fragility", "at": [ 0.42, 0.82 @@ -8723,6 +9511,12 @@ ], "strings": { "en": { + "detected.tentacle": [ + "threads", + "tentacles", + "feeding tentacles", + "feeding tentacles · a drifting net for prey" + ], "detected.siphonophore": [ "orb", "siphonophore", @@ -8730,11 +9524,17 @@ "Rhodaliidae · a colony of clones tethered to the seabed" ], "measure.depth": "−2,500 m", - "feel.unease": [ - "uh", - "unease", - "disquiet", - "a creeping disquiet" + "feel.radiance": [ + "bright", + "radiance", + "brilliance", + "a jeweled brilliance" + ], + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" ], "feel.fascination": [ "ooh", @@ -8742,20 +9542,20 @@ "wonder", "a forbidden wonder" ], - "feel.isolation": [ - "alone", - "isolation", - "solitude", - "a crushing solitude" - ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" ] }, "es": { + "detected.tentacle": [ + "hilos", + "tentáculos", + "tentáculos de caza", + "tentáculos de caza · una red a la deriva para atrapar presas" + ], "detected.siphonophore": [ "orbe", "sifonóforo", @@ -8763,11 +9563,17 @@ "Rhodaliidae · una colonia de clones anclada al lecho marino" ], "measure.depth": "−2.500 m", - "feel.unease": [ - "eh", - "inquietud", - "desasosiego", - "un desasosiego que se cuela" + "feel.radiance": [ + "brillo", + "resplandor", + "fulgor", + "un fulgor de joyas" + ], + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" ], "feel.fascination": [ "oh", @@ -8775,20 +9581,20 @@ "asombro", "un asombro prohibido" ], - "feel.isolation": [ - "solo", - "aislamiento", - "soledad", - "una soledad aplastante" - ], - "feel.dread": [ - "miedo", - "pavor", - "presagio", - "un presagio lento y frío" + "feel.fragility": [ + "fino", + "fragilidad", + "vulnerabilidad", + "una fragilidad tierna" ] }, "fr": { + "detected.tentacle": [ + "fils", + "tentacules", + "tentacules de capture", + "tentacules de capture · un filet dérivant pour les proies" + ], "detected.siphonophore": [ "sphère", "siphonophore", @@ -8796,11 +9602,17 @@ "Rhodaliidae · une colonie de clones amarrée au fond marin" ], "measure.depth": "−2 500 m", - "feel.unease": [ - "oh", - "malaise", - "inquiétude", - "une inquiétude rampante" + "feel.radiance": [ + "éclat", + "rayonnement", + "scintillement", + "un scintillement de joyaux" + ], + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" ], "feel.fascination": [ "ooh", @@ -8808,20 +9620,20 @@ "émerveillement", "un émerveillement interdit" ], - "feel.isolation": [ - "seul", - "isolement", - "solitude", - "une solitude écrasante" - ], - "feel.dread": [ - "peur", - "effroi", - "pressentiment", - "un pressentiment lent et glacé" + "feel.fragility": [ + "mince", + "fragilité", + "vulnérabilité", + "une tendre fragilité" ] }, "ja": { + "detected.tentacle": [ + "糸", + "触手", + "捕食の触手", + "捕食の触手 · 獲物を捕らえる漂う網" + ], "detected.siphonophore": [ "球", "クダクラゲ", @@ -8829,11 +9641,17 @@ "Rhodaliidae · 海底につながれたクローンの群体" ], "measure.depth": "−2,500 m", - "feel.unease": [ - "うっ", - "不安", - "落ち着かなさ", - "忍び寄る落ち着かなさ" + "feel.radiance": [ + "輝き", + "光輝", + "煌めき", + "宝石のような煌めき" + ], + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" ], "feel.fascination": [ "おお", @@ -8841,17 +9659,11 @@ "驚異", "禁じられた驚異" ], - "feel.isolation": [ - "ひとり", - "孤立", - "孤独", - "押しつぶすような孤独" - ], - "feel.dread": [ - "怖い", - "恐れ", - "胸騒ぎ", - "ゆっくりと冷たい胸騒ぎ" + "feel.fragility": [ + "薄い", + "儚さ", + "脆さ", + "いたわりたくなる儚さ" ] } } @@ -8865,13 +9677,48 @@ "right_variants": {}, "annotations": [ { - "key": "detected.octopus", - "salience": 4, + "key": "detected.arms", + "salience": 2, "box": [ 0.25, - 0.3, + 0.45, 0.5, - 0.45 + 0.3 + ] + }, + { + "key": "detected.octopus", + "salience": 4, + "appear": 0.0, + "disappear": 1.0, + "track": [ + { + "t": 0.0, + "box": [ + 0.5, + 0.1, + 0.35, + 0.55 + ] + }, + { + "t": 0.5, + "box": [ + 0.42, + 0.16, + 0.36, + 0.52 + ] + }, + { + "t": 1.0, + "box": [ + 0.05, + 0.02, + 0.92, + 0.95 + ] + } ] }, { @@ -8887,7 +9734,7 @@ ], "affect": [ { - "key": "feel.unease", + "key": "feel.curiosity", "at": [ 0.5, 0.44 @@ -8895,7 +9742,7 @@ "min_level": 1 }, { - "key": "feel.fascination", + "key": "feel.isolation", "at": [ 0.22, 0.68 @@ -8903,7 +9750,7 @@ "min_level": 2 }, { - "key": "feel.isolation", + "key": "feel.tenderness", "at": [ 0.66, 0.58 @@ -8911,7 +9758,7 @@ "min_level": 3 }, { - "key": "feel.dread", + "key": "feel.unease", "at": [ 0.42, 0.82 @@ -8921,6 +9768,12 @@ ], "strings": { "en": { + "detected.arms": [ + "arms", + "eight arms", + "sucker-lined arms", + "eight arms · sucker-lined, tasting what they touch" + ], "detected.octopus": [ "octopus", "deep-sea octopus", @@ -8928,17 +9781,11 @@ "Graneledone boreopacifica · broods its eggs for ~4.5 years" ], "measure.depth": "−2,500 m", - "feel.unease": [ - "uh", - "unease", - "disquiet", - "a creeping disquiet" - ], - "feel.fascination": [ - "ooh", + "feel.curiosity": [ + "look", + "curiosity", "fascination", - "wonder", - "a forbidden wonder" + "an absorbed fascination" ], "feel.isolation": [ "alone", @@ -8946,14 +9793,26 @@ "solitude", "a crushing solitude" ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" + "feel.tenderness": [ + "soft", + "tenderness", + "warmth", + "a cradle’s warmth" + ], + "feel.unease": [ + "uh", + "unease", + "disquiet", + "a creeping disquiet" ] }, "es": { + "detected.arms": [ + "brazos", + "ocho brazos", + "brazos con ventosas", + "ocho brazos · con ventosas que saborean lo que tocan" + ], "detected.octopus": [ "pulpo", "pulpo abisal", @@ -8961,17 +9820,11 @@ "Graneledone boreopacifica · incuba sus huevos durante ~4,5 años" ], "measure.depth": "−2.500 m", - "feel.unease": [ - "eh", - "inquietud", - "desasosiego", - "un desasosiego que se cuela" - ], - "feel.fascination": [ - "oh", + "feel.curiosity": [ + "mira", + "curiosidad", "fascinación", - "asombro", - "un asombro prohibido" + "una fascinación absorta" ], "feel.isolation": [ "solo", @@ -8979,14 +9832,26 @@ "soledad", "una soledad aplastante" ], - "feel.dread": [ - "miedo", - "pavor", - "presagio", - "un presagio lento y frío" + "feel.tenderness": [ + "suave", + "ternura", + "calidez", + "la calidez de una cuna" + ], + "feel.unease": [ + "eh", + "inquietud", + "desasosiego", + "un desasosiego que se cuela" ] }, "fr": { + "detected.arms": [ + "bras", + "huit bras", + "bras à ventouses", + "huit bras · garnis de ventouses qui goûtent ce qu’elles touchent" + ], "detected.octopus": [ "pieuvre", "pieuvre des abysses", @@ -8994,17 +9859,11 @@ "Graneledone boreopacifica · couve ses œufs pendant ~4,5 ans" ], "measure.depth": "−2 500 m", - "feel.unease": [ - "oh", - "malaise", - "inquiétude", - "une inquiétude rampante" - ], - "feel.fascination": [ - "ooh", + "feel.curiosity": [ + "regarde", + "curiosité", "fascination", - "émerveillement", - "un émerveillement interdit" + "une fascination absorbée" ], "feel.isolation": [ "seul", @@ -9012,14 +9871,26 @@ "solitude", "une solitude écrasante" ], - "feel.dread": [ - "peur", - "effroi", - "pressentiment", - "un pressentiment lent et glacé" + "feel.tenderness": [ + "doux", + "tendresse", + "chaleur", + "la chaleur d’un berceau" + ], + "feel.unease": [ + "oh", + "malaise", + "inquiétude", + "une inquiétude rampante" ] }, "ja": { + "detected.arms": [ + "腕", + "八本の腕", + "吸盤の並ぶ腕", + "八本の腕 · 触れたものを味わう吸盤付き" + ], "detected.octopus": [ "タコ", "深海のタコ", @@ -9027,17 +9898,11 @@ "Graneledone boreopacifica · 卵を約4.5年抱き続ける" ], "measure.depth": "−2,500 m", - "feel.unease": [ - "うっ", - "不安", - "落ち着かなさ", - "忍び寄る落ち着かなさ" - ], - "feel.fascination": [ - "おお", + "feel.curiosity": [ + "見て", + "好奇心", "魅了", - "驚異", - "禁じられた驚異" + "のめり込む魅了" ], "feel.isolation": [ "ひとり", @@ -9045,11 +9910,17 @@ "孤独", "押しつぶすような孤独" ], - "feel.dread": [ - "怖い", - "恐れ", - "胸騒ぎ", - "ゆっくりと冷たい胸騒ぎ" + "feel.tenderness": [ + "やさしい", + "優しさ", + "ぬくもり", + "ゆりかごのようなぬくもり" + ], + "feel.unease": [ + "うっ", + "不安", + "落ち着かなさ", + "忍び寄る落ち着かなさ" ] } } @@ -9063,13 +9934,48 @@ "right_variants": {}, "annotations": [ { - "key": "detected.seacucumber", - "salience": 4, + "key": "detected.veil", + "salience": 2, "box": [ 0.3, 0.3, - 0.4, - 0.4 + 0.35, + 0.25 + ] + }, + { + "key": "detected.seacucumber", + "salience": 4, + "appear": 0.0, + "disappear": 1.0, + "track": [ + { + "t": 0.0, + "box": [ + 0.58, + 0.38, + 0.18, + 0.3 + ] + }, + { + "t": 0.5, + "box": [ + 0.46, + 0.32, + 0.19, + 0.32 + ] + }, + { + "t": 1.0, + "box": [ + 0.38, + 0.28, + 0.2, + 0.36 + ] + } ] }, { @@ -9085,7 +9991,7 @@ ], "affect": [ { - "key": "feel.unease", + "key": "feel.strangeness", "at": [ 0.5, 0.44 @@ -9093,7 +9999,7 @@ "min_level": 1 }, { - "key": "feel.fascination", + "key": "feel.unease", "at": [ 0.22, 0.68 @@ -9101,7 +10007,7 @@ "min_level": 2 }, { - "key": "feel.isolation", + "key": "feel.fascination", "at": [ 0.66, 0.58 @@ -9109,7 +10015,7 @@ "min_level": 3 }, { - "key": "feel.dread", + "key": "feel.curiosity", "at": [ 0.42, 0.82 @@ -9119,6 +10025,12 @@ ], "strings": { "en": { + "detected.veil": [ + "veil", + "oral veil", + "swimming veil", + "oral veil · sweeps sediment, and flaps to swim" + ], "detected.seacucumber": [ "blob", "sea cucumber", @@ -9126,6 +10038,12 @@ "Enypniastes · a swimming sea cucumber, the “headless chicken”" ], "measure.depth": "−2,700 m", + "feel.strangeness": [ + "weird", + "strangeness", + "the uncanny", + "a fleshy strangeness" + ], "feel.unease": [ "uh", "unease", @@ -9138,20 +10056,20 @@ "wonder", "a forbidden wonder" ], - "feel.isolation": [ - "alone", - "isolation", - "solitude", - "a crushing solitude" - ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" + "feel.curiosity": [ + "look", + "curiosity", + "fascination", + "an absorbed fascination" ] }, "es": { + "detected.veil": [ + "velo", + "velo oral", + "velo natatorio", + "velo oral · barre el sedimento y aletea para nadar" + ], "detected.seacucumber": [ "mancha", "pepino de mar", @@ -9159,6 +10077,12 @@ "Enypniastes · un pepino de mar nadador, el “pollo sin cabeza”" ], "measure.depth": "−2.700 m", + "feel.strangeness": [ + "raro", + "rareza", + "lo inquietante", + "una rareza carnosa" + ], "feel.unease": [ "eh", "inquietud", @@ -9171,20 +10095,20 @@ "asombro", "un asombro prohibido" ], - "feel.isolation": [ - "solo", - "aislamiento", - "soledad", - "una soledad aplastante" - ], - "feel.dread": [ - "miedo", - "pavor", - "presagio", - "un presagio lento y frío" + "feel.curiosity": [ + "mira", + "curiosidad", + "fascinación", + "una fascinación absorta" ] }, "fr": { + "detected.veil": [ + "voile", + "voile oral", + "voile natatoire", + "voile oral · balaie le sédiment et bat pour nager" + ], "detected.seacucumber": [ "masse", "concombre de mer", @@ -9192,6 +10116,12 @@ "Enypniastes · un concombre de mer nageur, le “poulet sans tête”" ], "measure.depth": "−2 700 m", + "feel.strangeness": [ + "étrange", + "bizarrerie", + "l’inquiétant", + "une étrangeté charnue" + ], "feel.unease": [ "oh", "malaise", @@ -9204,20 +10134,20 @@ "émerveillement", "un émerveillement interdit" ], - "feel.isolation": [ - "seul", - "isolement", - "solitude", - "une solitude écrasante" - ], - "feel.dread": [ - "peur", - "effroi", - "pressentiment", - "un pressentiment lent et glacé" + "feel.curiosity": [ + "regarde", + "curiosité", + "fascination", + "une fascination absorbée" ] }, "ja": { + "detected.veil": [ + "ヴェール", + "口前のヴェール", + "遊泳用のヴェール", + "口前のヴェール · 堆積物を掃き、羽ばたいて泳ぐ" + ], "detected.seacucumber": [ "塊", "ナマコ", @@ -9225,6 +10155,12 @@ "Enypniastes · 泳ぐナマコ、「頭のない鶏」" ], "measure.depth": "−2,700 m", + "feel.strangeness": [ + "変", + "奇妙さ", + "不気味", + "肉感的な奇妙さ" + ], "feel.unease": [ "うっ", "不安", @@ -9237,17 +10173,11 @@ "驚異", "禁じられた驚異" ], - "feel.isolation": [ - "ひとり", - "孤立", - "孤独", - "押しつぶすような孤独" - ], - "feel.dread": [ - "怖い", - "恐れ", - "胸騒ぎ", - "ゆっくりと冷たい胸騒ぎ" + "feel.curiosity": [ + "見て", + "好奇心", + "魅了", + "のめり込む魅了" ] } } diff --git a/simulator/static/app.js b/simulator/static/app.js index 9ebc064..72203cb 100644 --- a/simulator/static/app.js +++ b/simulator/static/app.js @@ -171,7 +171,12 @@ function preloadOrder() { } } for (const f of reachableMorphFiles()) add(f); - for (const f of preloadList()) add(f); // sweep up anything not on the ring + for (const f of preloadList()) add(f); // sweep up every base not already on the ring + // ALL morphs last: preloading every transition before interaction guarantees a + // smooth knob turn anywhere (any random pool re-roll lands on an already-cached + // morph). They're ordered last so the first scenes + nearest transitions cache + // first and the loading bar fills meaningfully. + for (const f of Object.values(morphByPair)) add(f); return ordered; } @@ -241,20 +246,42 @@ function preloadChip() { // to the loop's first frame, and the morph-covered intro never re-shows at rest. const LOOP_TAIL_S = 3.0; -// Load a clip's base into the LOOP element (#vid-loop), seeked to the tail and PAUSED -// on that exact frame. Idempotent per clip. Called during a scrub to PRELOAD the clip -// we're about to land on, so settle just plays an already-decoded element at the morph's -// last frame — no reload, no seek, no stall. `playLoop()` starts it at landing. -function loadLoop(clip) { - if (!clip || loopVid.dataset.clip === clip.id) return; +// The frame the current loop both LANDS on and WRAPS back to — stored per load so the +// wrap handlers honor a direction-aware landing (forward=LOOP_TAIL_S, reverse=0). +function loopStartFrame() { + const s = parseFloat(loopVid.dataset.loopStart); + return Number.isFinite(s) ? s : LOOP_TAIL_S; +} + +// Load a clip's base into the LOOP element (#vid-loop), seeked to `landFrame` and PAUSED +// on that exact frame. `landFrame` is the frame the morph last showed for THIS landing: +// LOOP_TAIL_S when descending (lands on the morph's dst-tail), 0 when ascending (lands on +// the morph's src-head — fixes the D3 reverse-landing jump). Omitted → LOOP_TAIL_S, the +// forward default for non-scrub paths (initial load, knob changes). Idempotent per clip; +// an explicit `landFrame` re-seeks the already-loaded clip if the travel direction flipped +// the landing phase, but a bare call (ensureClipMedia) never clobbers a phase a scrub set. +// Called during a scrub to PRELOAD the clip we're about to land on, so settle just plays +// an already-decoded element at the right frame — no reload, no seek, no stall. +function loadLoop(clip, landFrame) { + if (!clip) return; + const seekTo = (t) => { try { loopVid.currentTime = t; } catch (e) { /* not seekable yet */ } }; + if (loopVid.dataset.clip === clip.id) { + if (landFrame != null && loopVid.dataset.loopStart !== String(landFrame)) { + loopVid.dataset.loopStart = String(landFrame); + if (loopVid.readyState >= 1) seekTo(landFrame); + else loopVid.addEventListener("loadedmetadata", () => seekTo(landFrame), { once: true }); + } + return; + } + const lf = landFrame == null ? LOOP_TAIL_S : landFrame; loopVid.dataset.clip = clip.id; - loopVid.dataset.loopTail = "1"; // arm the [LOOP_TAIL_S, duration] wrap handler + loopVid.dataset.loopTail = "1"; // arm the [loopStart, duration] wrap handler + loopVid.dataset.loopStart = String(lf); loopVid.src = mediaUrl(clip.base_file); - loopVid.loop = false; // native loop restarts at 0; we loop from the tail instead + loopVid.loop = false; // native loop restarts at 0; we loop from loopStart loopVid.muted = true; - const seek = () => { try { loopVid.currentTime = LOOP_TAIL_S; } catch (e) { /* not seekable yet */ } }; - if (loopVid.readyState >= 1) seek(); - else loopVid.addEventListener("loadedmetadata", seek, { once: true }); + if (loopVid.readyState >= 1) seekTo(lf); + else loopVid.addEventListener("loadedmetadata", () => seekTo(lf), { once: true }); } function playLoop() { @@ -271,21 +298,22 @@ function ensureClipMedia() { } // The custom loop on the LOOP element: when a base loop reaches the end, jump back to -// the tail offset (not 0). The morph element (#vid) is driven directly by the scrub. +// its landing offset (LOOP_TAIL_S forward, 0 reverse — see loopStartFrame), not a fixed +// tail. The morph element (#vid) is driven directly by the scrub. loopVid.addEventListener("timeupdate", () => { if (loopVid.dataset.loopTail === "1" && loopVid.duration && loopVid.currentTime >= loopVid.duration - 0.08) { - try { loopVid.currentTime = LOOP_TAIL_S; } catch (e) { /* not seekable */ } + try { loopVid.currentTime = loopStartFrame(); } catch (e) { /* not seekable */ } } }); // Safety net: the timeupdate wrap above is a narrow window (the last 0.08 s). Under // real-browser decode/GPU load a `timeupdate` can skip past it, the clip fires // `ended`, and — with native loop off — freezes on its last frame ("not looping"). -// `ended` GUARANTEES recovery: seek back to the tail and resume. Headless rarely -// hits this; loaded real machines do. +// `ended` GUARANTEES recovery: seek back to the landing offset and resume. Headless +// rarely hits this; loaded real machines do. loopVid.addEventListener("ended", () => { if (loopVid.dataset.loopTail !== "1") return; - try { loopVid.currentTime = LOOP_TAIL_S; } catch (e) { /* not seekable */ } + try { loopVid.currentTime = loopStartFrame(); } catch (e) { /* not seekable */ } loopVid.play().catch(() => {}); }); @@ -564,6 +592,49 @@ function renderOverlay(level, intensity) { // knob no longer gates them). `intensity` is the layer opacity. Words are placed at authored // scene points (no boxes — feelings are scene-level) and read softer than the // clinical reticles — feeling, not measurement. +// --- Keep Feel (affect) words clear of Think (label) chips ------------------- +// Feelings are scene-level (soft position), so we nudge THEM off the analytical +// chip plates rather than move a chip off its subject. Obstacles are computed +// from the manifest (not the DOM) so the clearance holds for the WHOLE loop: a +// tracked chip's drift is sampled, so the per-frame track re-render never slides +// a chip under an already-placed word. Mirrors chip()'s plate geometry. +const FS_CHIP = 2.4, PAD_CHIP = 0.6; +function chipPlateRect(bx, by, textLen) { + const w = textLen * FS_CHIP * 0.6 + PAD_CHIP * 2; + const h = FS_CHIP + PAD_CHIP * 1.4; + const cy = Math.max(by - h - 0.6, 0.4); // plate sits just above the box top + return { x: bx, y: cy, w, h }; +} +function rectsOverlap(a, b, pad) { + pad = pad || 0; + return a.x < b.x + b.w + pad && a.x + a.w + pad > b.x && + a.y < b.y + b.h + pad && a.y + a.h + pad > b.y; +} +// Plate rects for every left label visible at `level`; a tracked label's path is +// sampled across the loop so its whole drift envelope is treated as occupied. +function leftLabelPlates(clip, level) { + const out = []; + if (!clip || !clip.annotations || level <= 0) return out; + const strings = HEFi18n.resolveStrings(clip.strings, activeLang); + for (const a of clip.annotations) { + if (level < firstLevel(a)) continue; + const measure = a.key.startsWith("measure."); + const raw = strings[a.key]; + const tier = measure ? 1 : clamp(level - firstLevel(a) + 1, 1, tierCount(raw)); + const label = String(pickTier(raw !== undefined ? raw : a.key, tier) || ""); + const len = label.length + (measure ? 0 : 5); // detections append " 0.xx" + const ts = (a.track && a.track.length) ? [0, 0.2, 0.4, 0.6, 0.8, 1] : [0]; + for (const tt of ts) { + const b = boxAt(a, tt); + out.push(chipPlateRect(b[0] * 100, b[1] * 100, len)); + } + } + // The global "◉ ANALYSIS · L… · … OBJ" status tag (top-right) shows whenever any + // label does — reserve its corner so feelings don't collide with it either. + if (out.length) out.push({ x: 64, y: 2, w: 34, h: 6 }); + return out; +} + function renderAffect(strength, intensity, right) { lastAffect = { strength, intensity, right }; const clip = activeClip(); @@ -572,14 +643,36 @@ function renderAffect(strength, intensity, right) { if (!clip || !clip.affect || strength <= 0) { affectLayer.style.opacity = "0"; return; } affectLayer.style.opacity = String(intensity); const strings = HEFi18n.resolveStrings(clip.strings, activeLang); + // Chip plates to avoid (left labels visible at the current Left level), plus the + // words placed so far so feelings don't stack on each other either. + const obstacles = leftLabelPlates(clip, lastOverlay ? lastOverlay.level : 0); + const placed = []; for (const f of clip.affect) { if (f.min_level > strength) continue; - const [x, y] = f.at.map((n) => n * 100); - const t = svg("text", { x, y, "text-anchor": "middle", class: "hud-affect" }, affectLayer); + const [x, y0] = f.at.map((n) => n * 100); + const t = svg("text", { x, y: y0, "text-anchor": "middle", class: "hud-affect" }, affectLayer); // RIGHT emotion tier: the vocabulary escalates basic -> compound as the Right // knob rises (appearance is gated by the Right knob via `strength` above). const raw = strings[f.key]; t.textContent = pickTier(raw !== undefined ? raw : f.key, clamp(right || 0, 1, tierCount(raw))); + // Nudge vertically off any chip plate / already-placed word, staying on-screen; + // keep the least-overlapping spot if nothing is fully clear. + const bb0 = t.getBBox(); + // Diagnostic seam (sibling of window.__hefState): disable nudging to A/B the + // overlap-avoidance in tests. + const deconflict = !(typeof window !== "undefined" && window.__hefNoDeconflict); + if (deconflict && bb0.width) { + let bestY = y0, bestHits = Infinity; + for (const dy of [0, 4, -4, 8, -8, 12, -12, 16, -16, 20, -20]) { + const yy = clamp(y0 + dy, 4, 96); + const r = { x: bb0.x, y: bb0.y + (yy - y0), w: bb0.width, h: bb0.height }; + const hits = obstacles.concat(placed).filter((o) => rectsOverlap(r, o, 0.4)).length; + if (hits < bestHits) { bestHits = hits; bestY = yy; if (hits === 0) break; } + } + if (bestY !== y0) t.setAttribute("y", bestY); + } + const bb = t.getBBox(); + placed.push({ x: bb.x, y: bb.y, w: bb.width, h: bb.height }); } } @@ -891,6 +984,11 @@ function setPos(next) { busy = false; delete vid.dataset.morph; // clear so re-entering the same segment reloads the morph (not the base) currentClipId = null; // force ensureClipMedia to reload + loop the locked clip + // Land the loop on the frame the morph last showed for THIS travel direction: + // descending lands on the morph's dst-tail (LOOP_TAIL_S), ascending on its src-head + // (0). Explicit (not relying on the scrub's preload) so a reverse landing never + // jumps even if the heading clip wasn't warmed in time. (D3 fix.) + loadLoop(activeClip(), HEFScrub.loopLandFrame(scrubDir, LOOP_TAIL_S)); if (!isReduced()) playLoop(); // reduced motion holds the landing frame; else run the base loop else { vid.pause(); loopVid.pause(); } showActiveSource(); @@ -903,10 +1001,11 @@ function setPos(next) { } busy = true; // mid-morph: block update() from reloading the base clip under us if (!activeSeg || activeSeg.lo !== lo) rebuildSegment(lo, ringIndex); - // Preload the clip we're heading toward into the LOOP element (paused @ tail) so the - // landing is a swap, not a reload+seek. dir>0 lands on clipHi, dir<0 on clipLo. + // Preload the clip we're heading toward into the LOOP element (paused on its landing + // frame) so the landing is a swap, not a reload+seek. dir>0 lands on clipHi at the + // morph's dst-tail (LOOP_TAIL_S); dir<0 lands on clipLo at the morph's src-head (0). const headingId = dir > 0 ? activeSeg.clipHi : activeSeg.clipLo; - loadLoop(clipsById[headingId]); + loadLoop(clipsById[headingId], HEFScrub.loopLandFrame(dir, LOOP_TAIL_S)); showActiveSource(); // morph element is the live source while scrubbing setNeedle(pos * dialStep()); blendAudio(lo, frac); @@ -1275,7 +1374,10 @@ function scaleAudioUrl(index) { if (!ring || !ring.scales.length) return null; const s = ring.scales[HEFScrub.wrapIndex(index, ring.scales.length)]; const a = s.audio || SCALE_AUDIO_FALLBACK[s.id]; - return a ? "/media/audio/" + a : null; + // Route through mediaBase() so audio loads from R2 in the static build (and the + // local /media mount in dev) — NOT a hardcoded /media path, which 404s on the + // static site. mediaUrl() then passes this absolute url straight through. + return a ? mediaBase() + "audio/" + a : null; } // The current resting altitude's soundtrack url (kept for the status readout). function soundtrackUrl() { return scaleAudioUrl(ringIndex); } @@ -1413,7 +1515,10 @@ async function main() { dial.addEventListener("keydown", onDialKey); // arrows/Home/End + Enter/Space on labels $("stage").addEventListener("wheel", onWheel, { passive: false }); update(); // render the initial state (both toggles off → black, silent) - await preloadAllMedia(); // download all media, updating the loading bar + // Preload BEFORE interaction: a base for every altitude + all related morphs, so + // turning the knob is always smooth (no on-demand stall, no blank next scene). The + // "Loading Universe…" bar tracks this; the universe stays gated until it's ready. + await preloadAllMedia(); hideLoading(); // experience is ready — boots SILENT (video off, audio 0) $("run-sim").classList.remove("hidden"); // reveal the obvious starting point over the black stage maybeShowMotionWarning(); // first-visit photosensitivity notice, above the button @@ -1459,3 +1564,31 @@ function setLanguage(lang) { } main(); + +// Temporary ?debug overlay: an on-screen readout of media/render state, for +// diagnosing real-browser playback that headless can't reproduce. Add ?debug to the +// URL to show it. Harmless/no-op without the flag; safe to remove once resolved. +(function debugOverlay() { + if (!/[?&]debug\b/.test(location.search)) return; + const box = document.createElement("div"); + box.style.cssText = "position:fixed;left:6px;bottom:6px;z-index:99999;max-width:96vw;" + + "background:rgba(0,0,0,.82);color:#0f0;font:11px/1.35 monospace;padding:8px 10px;" + + "white-space:pre-wrap;border:1px solid #0a0;border-radius:4px;"; + document.body.appendChild(box); + let webgl = "?"; + try { const c = document.createElement("canvas"); webgl = c.getContext("webgl2") ? "webgl2" : (c.getContext("webgl") ? "webgl1" : "NONE"); } + catch (e) { webgl = "throw:" + e.message; } + const errs = []; + window.addEventListener("error", (e) => { errs.push((e.message || e.error || "err").toString().slice(0, 80)); }); + const m = (el) => el ? `rs=${el.readyState} ${el.paused ? "PAUSED" : "play"} t=${(el.currentTime || 0).toFixed(1)} err=${el.error ? el.error.code : "-"} ${(el.currentSrc || el.src || "(no src)").slice(0, 46)}` : "absent"; + setInterval(() => { + const cfg = window.HEF_CONFIG || {}; + box.textContent = + `cfg: static=${cfg.static} base=${cfg.mediaBase}\n` + + `webgl=${webgl} visual=${(document.getElementById("visual") || {}).checked}\n` + + `loop : ${m(document.getElementById("vid-loop"))}\n` + + `morph: ${m(document.getElementById("vid"))}\n` + + `aud : ${m(document.getElementById("aud"))}\n` + + `errs : ${errs.slice(-3).join(" | ") || "none"}`; + }, 400); +})(); diff --git a/simulator/static/credits.html b/simulator/static/credits.html index 95cd2d5..4168485 100644 --- a/simulator/static/credits.html +++ b/simulator/static/credits.html @@ -14,9 +14,10 @@ + CC BY / CC BY-SA attribution requires. Heading deliberately NOT "About" — the + separate About page covers the project's intent. -->
-

About this work

+

License & reuse

The Human Experience Filter alters its source footage in real time (overlays, an emotion/affect channel, and a WebGL “dream” shader), so every diff --git a/simulator/static/scrub.js b/simulator/static/scrub.js index f7f19cb..171de04 100644 --- a/simulator/static/scrub.js +++ b/simulator/static/scrub.js @@ -29,6 +29,18 @@ return { from: 1 - f, to: f }; } + // The base-loop frame a landing must continue from so the steady loop picks up + // the EXACT frame the morph last showed — no jump. A morph spans src@0 (frac 0) + // -> dst@loopTailS (frac 1), scrubbed bidirectionally. Descending (dir>0) lands + // on dst at frac 1, whose frame is dst@loopTailS, so the loop resumes at loopTailS + // (and the morph-covered intro never re-shows). Ascending (dir<0) lands on src at + // frac 0, whose frame is src@0, so the loop must resume at 0 — seeking to loopTailS + // there is the ~3s reverse-landing jump (D3). dir 0 defaults to the forward/tail + // case (matches the loadLoop default used by non-scrub paths). + function loopLandFrame(dir, loopTailS) { + return dir < 0 ? 0 : loopTailS; + } + // Integers strictly crossed moving prevPos -> pos, in travel order. Landing // exactly on an integer counts as crossing it (it commits that altitude). function integerCrossings(prevPos, pos) { @@ -41,5 +53,5 @@ return out; } - return { clamp01, wrapIndex, segmentOf, accumToPos, fracToTime, crossfadeGains, integerCrossings }; + return { clamp01, wrapIndex, segmentOf, accumToPos, fracToTime, crossfadeGains, loopLandFrame, integerCrossings }; }); diff --git a/simulator/unit/credits.test.js b/simulator/unit/credits.test.js index 9d9cf9e..8ae831f 100644 --- a/simulator/unit/credits.test.js +++ b/simulator/unit/credits.test.js @@ -59,4 +59,8 @@ test("credits.html carries the CC BY-SA derivative declaration (Option D1)", () const html = fs.readFileSync(path.join(__dirname, "../static/credits.html"), "utf8"); assert.match(html, /CC BY-SA 4\.0/); // the altered work's own license assert.match(html, /altered/i); // states the footage is modified + // The section is NOT titled "About this work" — that name belongs to the separate + // About page; here the declaration lives under "License & reuse". + assert.doesNotMatch(html, /About this work/i); + assert.match(html, /License & reuse/); }); diff --git a/simulator/unit/scrub.test.js b/simulator/unit/scrub.test.js index 039120d..709c5f5 100644 --- a/simulator/unit/scrub.test.js +++ b/simulator/unit/scrub.test.js @@ -58,3 +58,17 @@ test("integerCrossings: multiple crossings in travel order", () => { assert.deepEqual(S.integerCrossings(2.4, 4.1), [{ index: 3, dir: 1 }, { index: 4, dir: 1 }]); assert.deepEqual(S.integerCrossings(3.2, 1.8), [{ index: 3, dir: -1 }, { index: 2, dir: -1 }]); }); + +test("loopLandFrame: descend lands on the morph's tail frame, ascend on its head", () => { + // A morph spans src@0 (frac 0) -> dst@loopTailS (frac 1). Descending (dir>0) lands + // on dst at frac 1 -> the base loop must continue from loopTailS. Ascending (dir<0) + // lands on src at frac 0 -> the loop must continue from 0 (NOT loopTailS — that was + // the D3 reverse-landing jump). + assert.equal(S.loopLandFrame(1, 3), 3); // descend -> tail + assert.equal(S.loopLandFrame(-1, 3), 0); // ascend -> head + // dir 0 (no travel) is treated as a forward/tail landing (the default everywhere else). + assert.equal(S.loopLandFrame(0, 3), 3); + // honors any tail value + assert.equal(S.loopLandFrame(1, 2.5), 2.5); + assert.equal(S.loopLandFrame(-1, 2.5), 0); +}); diff --git a/tests/test_e2e_credits.py b/tests/test_e2e_credits.py index fa97338..3023039 100644 --- a/tests/test_e2e_credits.py +++ b/tests/test_e2e_credits.py @@ -68,7 +68,7 @@ def test_credits_page_lists_video_attributions(browser_page): body = page.inner_text("body") assert "NASA, ESA, CSA, STScI" in body assert "Joe Mabel" in body # a CC BY-SA clip's required author credit - assert "CC BY-SA 4.0" in body # the Option-D1 derivative declaration + assert "CC BY-SA 4.0" in body # the Option-D1 derivative declaration ("License & reuse") def test_experience_links_to_credits(browser_page): diff --git a/tools/build_static.py b/tools/build_static.py index 34972f3..bf3cfb8 100644 --- a/tools/build_static.py +++ b/tools/build_static.py @@ -25,6 +25,7 @@ sibling tools/http.py shadows the stdlib `http` that fastapi/starlette import: """ from __future__ import annotations +import hashlib import json import shutil from pathlib import Path @@ -67,6 +68,38 @@ def _write_redirects(out: Path, seg: str) -> None: ) +def _write_headers(out: Path, seg: str) -> None: + # The app shell (html/js/json) must NOT be browser-cached — otherwise a deploy is + # invisible to returning visitors for hours (Pages' default is max-age=14400). + # `no-cache` = store but revalidate every load (cheap 304 via etag). The media is + # on R2 (immutable + content-hash), unaffected. Cloudflare Pages `_headers` syntax. + (out / "_headers").write_text( + f"/{seg}/*\n" + " Cache-Control: no-cache\n" + ) + + +def _version_assets(app_dir: Path) -> None: + # Content-version the app-shell asset URLs in the HTML so a new build = a new URL + # = guaranteed-fresh fetch on a normal reload. The HTML itself is served no-cache + # (_headers), but Cloudflare Pages caches .js/.css by type (max-age=14400) and + # ignores _headers for them — so without this, returning visitors run stale JS. + assets = ["app.js", "scrub.js", "i18n.js", "alteration.js", "style.css", "credits.js", "config.js"] + tok = {} + for a in assets: + p = app_dir / a + if p.exists(): + tok[a] = hashlib.sha1(p.read_bytes()).hexdigest()[:12] + for html in ("index.html", "credits.html"): + hp = app_dir / html + if not hp.exists(): + continue + s = hp.read_text() + for a, h in tok.items(): + s = s.replace(f'src="{a}"', f'src="{a}?v={h}"').replace(f'href="{a}"', f'href="{a}?v={h}"') + hp.write_text(s) + + def build_static(out_dir, media_out, *, media_base: str, app_path: str) -> dict: out = Path(out_dir) media = Path(media_out) @@ -85,7 +118,9 @@ def build_static(out_dir, media_out, *, media_base: str, app_path: str) -> dict: versions = _bake_api(app_dir) _write_config(app_dir, media_base) + _version_assets(app_dir) # after config.js exists, so it gets hashed too _write_redirects(out, seg) + _write_headers(out, seg) # Sync ONLY referenced media: `versions` covers clip bases + transition morphs; # add each scale's audio explicitly. Never the master/mezzanine pipeline sources. diff --git a/tools/i18n/catalogs/en.json b/tools/i18n/catalogs/en.json index ebd9cb6..a83c183 100644 --- a/tools/i18n/catalogs/en.json +++ b/tools/i18n/catalogs/en.json @@ -19,6 +19,12 @@ "awe", "transcendent awe" ], + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" + ], "feel.vastness": [ "big", "vastness", @@ -30,15 +36,10 @@ "smallness", "insignificance", "a humbling insignificance" - ], - "feel.longing": [ - "want", - "longing", - "yearning", - "an aching yearning" ] }, "cosmos_galaxies": { + "measure.count": "~2T galaxies", "detected.galaxy": [ "galaxy", "spiral galaxy", @@ -46,18 +47,18 @@ "barred spiral · ~10¹¹ stars" ], "measure.distance": "~Mly", - "feel.wonder": [ - "wow", - "wonder", - "awe", - "transcendent awe" - ], "feel.vastness": [ "big", "vastness", "immensity", "a dizzying immensity" ], + "feel.distance": [ + "far", + "distance", + "remoteness", + "an exquisite remoteness" + ], "feel.insignificance": [ "small", "smallness", @@ -91,17 +92,17 @@ "awe", "transcendent awe" ], - "feel.vastness": [ - "big", - "vastness", - "immensity", - "a dizzying immensity" + "feel.tenderness": [ + "soft", + "tenderness", + "warmth", + "a cradle’s warmth" ], - "feel.insignificance": [ - "small", - "smallness", - "insignificance", - "a humbling insignificance" + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" ], "feel.longing": [ "want", @@ -130,6 +131,12 @@ "awe", "transcendent awe" ], + "feel.turbulence": [ + "churn", + "turbulence", + "ferment", + "a violent ferment" + ], "feel.vastness": [ "big", "vastness", @@ -141,12 +148,6 @@ "smallness", "insignificance", "a humbling insignificance" - ], - "feel.longing": [ - "want", - "longing", - "yearning", - "an aching yearning" ] }, "cosmos_westerlund": { @@ -169,23 +170,23 @@ "awe", "transcendent awe" ], + "feel.radiance": [ + "bright", + "radiance", + "brilliance", + "a jeweled brilliance" + ], + "feel.exhilaration": [ + "whee", + "exhilaration", + "elation", + "a soaring elation" + ], "feel.vastness": [ "big", "vastness", "immensity", "a dizzying immensity" - ], - "feel.insignificance": [ - "small", - "smallness", - "insignificance", - "a humbling insignificance" - ], - "feel.longing": [ - "want", - "longing", - "yearning", - "an aching yearning" ] }, "cosmos_southernring": { @@ -208,17 +209,17 @@ "awe", "transcendent awe" ], - "feel.vastness": [ - "big", - "vastness", - "immensity", - "a dizzying immensity" + "feel.mortality": [ + "end", + "mortality", + "impermanence", + "a star’s slow dying" ], - "feel.insignificance": [ - "small", - "smallness", - "insignificance", - "a humbling insignificance" + "feel.poignancy": [ + "ache", + "poignancy", + "bittersweetness", + "a luminous farewell" ], "feel.longing": [ "want", @@ -253,17 +254,17 @@ "immensity", "a dizzying immensity" ], + "feel.abundance": [ + "full", + "abundance", + "richness", + "a teeming richness" + ], "feel.insignificance": [ "small", "smallness", "insignificance", "a humbling insignificance" - ], - "feel.longing": [ - "want", - "longing", - "yearning", - "an aching yearning" ] }, "orbit_planetearth": { @@ -280,6 +281,18 @@ "atmospheric limb · ~100 km of air" ], "measure.altitude": "~408 km", + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" + ], + "feel.radiance": [ + "bright", + "radiance", + "brilliance", + "a jeweled brilliance" + ], "feel.serenity": [ "calm", "serenity", @@ -291,18 +304,6 @@ "fragility", "vulnerability", "a tender fragility" - ], - "feel.unity": [ - "one", - "unity", - "belonging", - "a borderless belonging" - ], - "feel.distance": [ - "far", - "distance", - "remoteness", - "an exquisite remoteness" ] }, "orbit_bluemarble": { @@ -312,17 +313,17 @@ "terrestrial planet", "terrestrial planet · 12,742 km across" ], - "feel.serenity": [ - "calm", - "serenity", - "peace", - "a quiet, weightless peace" + "detected.cloud_band": [ + "clouds", + "weather systems", + "cloud systems", + "global cloud systems · clouds cover ~67% of Earth" ], - "feel.fragility": [ - "thin", - "fragility", - "vulnerability", - "a tender fragility" + "detected.starfield": [ + "stars", + "starfield", + "background stars", + "background starfield · a rendered backdrop, not to scale" ], "feel.unity": [ "one", @@ -330,11 +331,23 @@ "belonging", "a borderless belonging" ], + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" + ], "feel.distance": [ "far", "distance", "remoteness", "an exquisite remoteness" + ], + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ] }, "orbit_aurora2025": { @@ -351,29 +364,29 @@ "atmospheric limb · ~100 km of air, glowing on edge" ], "measure.altitude": "~408 km", + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" + ], + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" + ], + "feel.eeriness": [ + "strange", + "eeriness", + "an otherworldly charge", + "an electric, otherworldly hush" + ], "feel.serenity": [ "calm", "serenity", "peace", "a quiet, weightless peace" - ], - "feel.fragility": [ - "thin", - "fragility", - "vulnerability", - "a tender fragility" - ], - "feel.unity": [ - "one", - "unity", - "belonging", - "a borderless belonging" - ], - "feel.distance": [ - "far", - "distance", - "remoteness", - "an exquisite remoteness" ] }, "orbit_citylights": { @@ -390,11 +403,17 @@ "airglow · the faint nighttime emission of the upper air" ], "measure.altitude": "~408 km", - "feel.serenity": [ - "calm", - "serenity", - "peace", - "a quiet, weightless peace" + "feel.tenderness": [ + "soft", + "tenderness", + "warmth", + "a cradle’s warmth" + ], + "feel.longing": [ + "want", + "longing", + "yearning", + "an aching yearning" ], "feel.fragility": [ "thin", @@ -407,12 +426,6 @@ "unity", "belonging", "a borderless belonging" - ], - "feel.distance": [ - "far", - "distance", - "remoteness", - "an exquisite remoteness" ] }, "orbit_helene": { @@ -429,29 +442,29 @@ "atmospheric limb · the thin shell weather lives in" ], "measure.altitude": "~408 km", - "feel.serenity": [ - "calm", - "serenity", - "peace", - "a quiet, weightless peace" + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" + ], + "feel.turbulence": [ + "churn", + "turbulence", + "ferment", + "a violent ferment" + ], + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ], "feel.fragility": [ "thin", "fragility", "vulnerability", "a tender fragility" - ], - "feel.unity": [ - "one", - "unity", - "belonging", - "a borderless belonging" - ], - "feel.distance": [ - "far", - "distance", - "remoteness", - "an exquisite remoteness" ] }, "orbit_epic": { @@ -468,17 +481,17 @@ "weather systems · swirling across a turning planet" ], "measure.distance": "~1.5M km", - "feel.serenity": [ - "calm", - "serenity", - "peace", - "a quiet, weightless peace" + "feel.distance": [ + "far", + "distance", + "remoteness", + "an exquisite remoteness" ], - "feel.fragility": [ - "thin", - "fragility", - "vulnerability", - "a tender fragility" + "feel.insignificance": [ + "small", + "smallness", + "insignificance", + "a humbling insignificance" ], "feel.unity": [ "one", @@ -486,14 +499,20 @@ "belonging", "a borderless belonging" ], - "feel.distance": [ - "far", - "distance", - "remoteness", - "an exquisite remoteness" + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" ] }, "sky_grca_templesa": { + "detected.butte": [ + "tower", + "butte", + "rock temple", + "rock ‘temple’ · an erosional butte left standing" + ], "detected.canyon": [ "canyon", "gorge", @@ -506,32 +525,38 @@ "sedimentary beds", "strata · stacked epochs of deposition" ], + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" + ], + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" + ], + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" + ], "feel.exhilaration": [ "whee", "exhilaration", "elation", "a soaring elation" - ], - "feel.freedom": [ - "free", - "freedom", - "release", - "a boundless release" - ], - "feel.lightness": [ - "light", - "lightness", - "buoyancy", - "a weightless buoyancy" - ], - "feel.vertigo": [ - "whoa", - "vertigo", - "giddiness", - "a giddy, falling vertigo" ] }, "sky_greenland_landice": { + "detected.crevasse": [ + "cracks", + "crevasses", + "glacial crevasses", + "crevasses · the ice fracturing as it flows" + ], "detected.icesheet": [ "ice", "ice sheet", @@ -550,26 +575,32 @@ "elation", "a soaring elation" ], - "feel.freedom": [ - "free", - "freedom", - "release", - "a boundless release" + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ], - "feel.lightness": [ - "light", - "lightness", - "buoyancy", - "a weightless buoyancy" + "feel.purity": [ + "pure", + "purity", + "stillness", + "a glacial hush" ], - "feel.vertigo": [ - "whoa", - "vertigo", - "giddiness", - "a giddy, falling vertigo" + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" ] }, "sky_greenland_suture": { + "detected.floe": [ + "plates", + "ice floes", + "pack-ice floes", + "pack-ice floes · drifting plates of frozen sea" + ], "detected.seaice": [ "ice", "sea ice", @@ -582,32 +613,38 @@ "open lead", "lead · a fracture of open water between floes" ], - "feel.exhilaration": [ - "whee", - "exhilaration", - "elation", - "a soaring elation" + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" ], - "feel.freedom": [ - "free", - "freedom", - "release", - "a boundless release" + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" + ], + "feel.solitude": [ + "alone", + "solitude", + "isolation", + "a vast frozen solitude" ], "feel.lightness": [ "light", "lightness", "buoyancy", "a weightless buoyancy" - ], - "feel.vertigo": [ - "whoa", - "vertigo", - "giddiness", - "a giddy, falling vertigo" ] }, "sky_jungle_amazon": { + "detected.mist": [ + "haze", + "canopy mist", + "transpiration haze", + "transpiration haze · the forest exhaling water vapor" + ], "detected.canopy": [ "trees", "forest canopy", @@ -620,32 +657,38 @@ "emergent tree", "emergent · a giant breaking above the canopy roof" ], - "feel.exhilaration": [ - "whee", - "exhilaration", - "elation", - "a soaring elation" - ], "feel.freedom": [ "free", "freedom", "release", "a boundless release" ], - "feel.lightness": [ - "light", - "lightness", - "buoyancy", - "a weightless buoyancy" + "feel.verdancy": [ + "lush", + "verdancy", + "abundance", + "a teeming green abundance" ], - "feel.vertigo": [ - "whoa", - "vertigo", - "giddiness", - "a giddy, falling vertigo" + "feel.exhilaration": [ + "whee", + "exhilaration", + "elation", + "a soaring elation" + ], + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" ] }, "sky_jungle_waterfall": { + "detected.spray": [ + "mist", + "spray", + "plunge spray", + "plunge spray · the river aerosolized on impact" + ], "detected.waterfall": [ "falls", "waterfall", @@ -658,32 +701,38 @@ "rainforest canopy", "canopy · dense forest crowding the gorge" ], - "feel.exhilaration": [ - "whee", - "exhilaration", - "elation", - "a soaring elation" - ], - "feel.freedom": [ - "free", - "freedom", - "release", - "a boundless release" - ], - "feel.lightness": [ - "light", - "lightness", - "buoyancy", - "a weightless buoyancy" + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" ], "feel.vertigo": [ "whoa", "vertigo", "giddiness", "a giddy, falling vertigo" + ], + "feel.freshness": [ + "cool", + "freshness", + "vitality", + "a cool, cascading freshness" + ], + "feel.exhilaration": [ + "whee", + "exhilaration", + "elation", + "a soaring elation" ] }, "sky_coast_cliffspain": { + "detected.headland": [ + "point", + "headland", + "rock promontory", + "promontory · a cliffed arm of land into the sea" + ], "detected.seacliff": [ "cliff", "sea cliff", @@ -696,32 +745,38 @@ "breaking swell", "breaking swell · ocean meeting stone" ], + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" + ], "feel.exhilaration": [ "whee", "exhilaration", "elation", "a soaring elation" ], - "feel.freedom": [ - "free", - "freedom", - "release", - "a boundless release" + "feel.turbulence": [ + "churn", + "turbulence", + "ferment", + "a violent ferment" ], - "feel.lightness": [ - "light", - "lightness", - "buoyancy", - "a weightless buoyancy" - ], - "feel.vertigo": [ - "whoa", - "vertigo", - "giddiness", - "a giddy, falling vertigo" + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ] }, "sky_mtn_castlecrags": { + "detected.talus": [ + "scree", + "talus", + "talus slope", + "talus · frost-shattered rock piled below the crags" + ], "detected.spire": [ "rock", "spire", @@ -734,32 +789,38 @@ "montane forest", "montane forest · cloaking the slopes below the crags" ], - "feel.exhilaration": [ - "whee", - "exhilaration", - "elation", - "a soaring elation" - ], "feel.freedom": [ "free", "freedom", "release", "a boundless release" ], + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" + ], + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" + ], "feel.lightness": [ "light", "lightness", "buoyancy", "a weightless buoyancy" - ], - "feel.vertigo": [ - "whoa", - "vertigo", - "giddiness", - "a giddy, falling vertigo" ] }, "sky_mtn_rocky": { + "detected.snowfield": [ + "snow", + "snowfield", + "alpine snowfield", + "alpine snowfield · lingering high-elevation snow" + ], "detected.summit": [ "peak", "summit", @@ -772,32 +833,38 @@ "alpine tundra", "alpine tundra · low cushion plants above the trees" ], - "feel.exhilaration": [ - "whee", - "exhilaration", - "elation", - "a soaring elation" - ], - "feel.freedom": [ - "free", - "freedom", - "release", - "a boundless release" - ], - "feel.lightness": [ - "light", - "lightness", - "buoyancy", - "a weightless buoyancy" + "feel.sublime": [ + "grand", + "the sublime", + "grandeur", + "a cathedral grandeur" ], "feel.vertigo": [ "whoa", "vertigo", "giddiness", "a giddy, falling vertigo" + ], + "feel.exhilaration": [ + "whee", + "exhilaration", + "elation", + "a soaring elation" + ], + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ] }, "coast_birdrock": { + "detected.seabirds": [ + "birds", + "seabirds", + "nesting seabirds", + "seabird colony · the rookery that names the rock" + ], "detected.surf": [ "waves", "surf", @@ -810,11 +877,17 @@ "coastal sea stack", "sea stack · wave-cut residual rock" ], - "feel.ease": [ - "nice", - "ease", - "calm", - "an unhurried calm" + "feel.melancholy": [ + "sad", + "melancholy", + "longing", + "a soft seaward longing" + ], + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" ], "feel.nostalgia": [ "miss", @@ -822,20 +895,20 @@ "wistfulness", "a salt-air wistfulness" ], - "feel.belonging": [ - "home", - "belonging", - "rootedness", - "a tidal rootedness" - ], - "feel.melancholy": [ - "sad", - "melancholy", - "longing", - "a soft seaward longing" + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" ] }, "coast_surfgrass": { + "detected.tidepool": [ + "pool", + "tidepool", + "intertidal pool", + "tidepool · a pocket sea bared at low tide" + ], "detected.surfgrass": [ "grass", "surfgrass", @@ -848,32 +921,38 @@ "crustose coralline", "crustose coralline · calcified red algae" ], + "feel.abundance": [ + "full", + "abundance", + "richness", + "a teeming richness" + ], + "feel.immersion": [ + "in", + "immersion", + "absorption", + "a held, breathless absorption" + ], + "feel.curiosity": [ + "look", + "curiosity", + "fascination", + "an absorbed fascination" + ], "feel.ease": [ "nice", "ease", "calm", "an unhurried calm" - ], - "feel.nostalgia": [ - "miss", - "nostalgia", - "wistfulness", - "a salt-air wistfulness" - ], - "feel.belonging": [ - "home", - "belonging", - "rootedness", - "a tidal rootedness" - ], - "feel.melancholy": [ - "sad", - "melancholy", - "longing", - "a soft seaward longing" ] }, "coast_kelp": { + "detected.pneumatocyst": [ + "floats", + "gas bladders", + "pneumatocysts", + "pneumatocysts · gas floats lifting the blades to light" + ], "detected.kelp": [ "kelp", "giant kelp", @@ -886,32 +965,38 @@ "kelp frond", "frond · gas-filled floats hold it upright" ], - "feel.ease": [ - "nice", - "ease", + "feel.immersion": [ + "in", + "immersion", + "absorption", + "a held, breathless absorption" + ], + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" + ], + "feel.serenity": [ "calm", - "an unhurried calm" + "serenity", + "peace", + "a quiet, weightless peace" ], - "feel.nostalgia": [ - "miss", - "nostalgia", - "wistfulness", - "a salt-air wistfulness" - ], - "feel.belonging": [ - "home", - "belonging", - "rootedness", - "a tidal rootedness" - ], - "feel.melancholy": [ - "sad", - "melancholy", - "longing", - "a soft seaward longing" + "feel.freedom": [ + "free", + "freedom", + "release", + "a boundless release" ] }, "coast_otters": { + "detected.fur": [ + "fur", + "dense fur", + "the densest fur", + "densest fur on Earth · ~1M hairs/in², no blubber" + ], "detected.otter": [ "otter", "sea otter", @@ -924,32 +1009,38 @@ "tidal slough", "tidal slough · sheltered nursery water" ], + "feel.tenderness": [ + "soft", + "tenderness", + "warmth", + "a cradle’s warmth" + ], + "feel.delight": [ + "fun", + "delight", + "joy", + "a darting, bright joy" + ], "feel.ease": [ "nice", "ease", "calm", "an unhurried calm" ], - "feel.nostalgia": [ - "miss", - "nostalgia", - "wistfulness", - "a salt-air wistfulness" - ], "feel.belonging": [ "home", "belonging", "rootedness", "a tidal rootedness" - ], - "feel.melancholy": [ - "sad", - "melancholy", - "longing", - "a soft seaward longing" ] }, "coast_kalaloch": { + "detected.sunset": [ + "glow", + "sunset", + "golden hour", + "golden hour · low sun reddened through more air" + ], "detected.surf": [ "waves", "surf", @@ -962,32 +1053,38 @@ "coastal sea stack", "sea stack · wave-cut residual rock" ], - "feel.ease": [ - "nice", - "ease", - "calm", - "an unhurried calm" - ], "feel.nostalgia": [ "miss", "nostalgia", "wistfulness", "a salt-air wistfulness" ], - "feel.belonging": [ - "home", - "belonging", - "rootedness", - "a tidal rootedness" - ], "feel.melancholy": [ "sad", "melancholy", "longing", "a soft seaward longing" + ], + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" + ], + "feel.belonging": [ + "home", + "belonging", + "rootedness", + "a tidal rootedness" ] }, "coast_seals": { + "detected.whiskers": [ + "whiskers", + "vibrissae", + "sensing whiskers", + "vibrissae · whiskers that feel prey in murky water" + ], "detected.seal": [ "seals", "harbor seals", @@ -1000,17 +1097,17 @@ "intertidal rock", "haul-out · a tide-washed resting ledge" ], - "feel.ease": [ - "nice", - "ease", - "calm", - "an unhurried calm" + "feel.tenderness": [ + "soft", + "tenderness", + "warmth", + "a cradle’s warmth" ], - "feel.nostalgia": [ - "miss", - "nostalgia", - "wistfulness", - "a salt-air wistfulness" + "feel.repose": [ + "rest", + "repose", + "drowse", + "a sun-warmed drowse" ], "feel.belonging": [ "home", @@ -1018,14 +1115,20 @@ "rootedness", "a tidal rootedness" ], - "feel.melancholy": [ - "sad", - "melancholy", - "longing", - "a soft seaward longing" + "feel.delight": [ + "fun", + "delight", + "joy", + "a darting, bright joy" ] }, "coast_mist": { + "detected.swell": [ + "waves", + "swell", + "ocean swell", + "ocean swell · wind-built waves from distant storms" + ], "detected.mist": [ "mist", "sea mist", @@ -1038,29 +1141,29 @@ "coastal rock", "coastal rock · the standing edge of the land" ], - "feel.ease": [ - "nice", - "ease", + "feel.serenity": [ "calm", - "an unhurried calm" + "serenity", + "peace", + "a quiet, weightless peace" + ], + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" + ], + "feel.hush": [ + "quiet", + "hush", + "stillness", + "a breath-held hush" ], "feel.nostalgia": [ "miss", "nostalgia", "wistfulness", "a salt-air wistfulness" - ], - "feel.belonging": [ - "home", - "belonging", - "rootedness", - "a tidal rootedness" - ], - "feel.melancholy": [ - "sad", - "melancholy", - "longing", - "a soft seaward longing" ] }, "reef_lionfish": { @@ -1077,24 +1180,24 @@ "Lutjanus · schools over reef structure" ], "measure.depth": "−18 m", - "feel.delight": [ - "fun", - "delight", - "joy", - "a darting, bright joy" - ], - "feel.abundance": [ - "full", - "abundance", - "richness", - "a teeming richness" - ], "feel.curiosity": [ "look", "curiosity", "fascination", "an absorbed fascination" ], + "feel.poise": [ + "still", + "poise", + "grace", + "a hovering, ornate poise" + ], + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" + ], "feel.immersion": [ "in", "immersion", @@ -1116,23 +1219,23 @@ "scleractinian · reef-building stony coral" ], "measure.depth": "−22 m", - "feel.delight": [ - "fun", - "delight", - "joy", - "a darting, bright joy" - ], "feel.abundance": [ "full", "abundance", "richness", "a teeming richness" ], - "feel.curiosity": [ - "look", - "curiosity", - "fascination", - "an absorbed fascination" + "feel.flow": [ + "go", + "flow", + "streaming", + "a sweeping, schooling flow" + ], + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ], "feel.immersion": [ "in", @@ -1142,6 +1245,12 @@ ] }, "reef_hawkfish": { + "detected.coral": [ + "coral", + "reef coral", + "hard coral", + "hard coral · the reef this fish grazes into sand" + ], "detected.parrotfish": [ "fish", "parrotfish", @@ -1149,17 +1258,11 @@ "B. muricatum · humphead, grazes reef into sand" ], "measure.depth": "−12 m", - "feel.delight": [ - "fun", - "delight", - "joy", - "a darting, bright joy" - ], - "feel.abundance": [ - "full", - "abundance", - "richness", - "a teeming richness" + "feel.radiance": [ + "bright", + "radiance", + "brilliance", + "a jeweled brilliance" ], "feel.curiosity": [ "look", @@ -1167,6 +1270,12 @@ "fascination", "an absorbed fascination" ], + "feel.delight": [ + "fun", + "delight", + "joy", + "a darting, bright joy" + ], "feel.immersion": [ "in", "immersion", @@ -1175,6 +1284,12 @@ ] }, "reef_coralspacific": { + "detected.polyp": [ + "polyps", + "coral polyps", + "living polyps", + "polyps · each a tiny animal, the colony’s builders" + ], "detected.coral": [ "coral", "coral colony", @@ -1187,11 +1302,17 @@ "reef damselfish", "reef damselfish · territorial over its coral" ], - "feel.delight": [ - "fun", - "delight", - "joy", - "a darting, bright joy" + "feel.intricacy": [ + "fine", + "intricacy", + "detail", + "an intricate, woven density" + ], + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" ], "feel.abundance": [ "full", @@ -1204,12 +1325,6 @@ "curiosity", "fascination", "an absorbed fascination" - ], - "feel.immersion": [ - "in", - "immersion", - "absorption", - "a held, breathless absorption" ] }, "reef_redsea": { @@ -1226,11 +1341,11 @@ "anthias · orange clouds of plankton-pickers over the reef" ], "measure.depth": "−10 m", - "feel.delight": [ - "fun", - "delight", - "joy", - "a darting, bright joy" + "feel.serenity": [ + "calm", + "serenity", + "peace", + "a quiet, weightless peace" ], "feel.abundance": [ "full", @@ -1238,17 +1353,17 @@ "richness", "a teeming richness" ], - "feel.curiosity": [ - "look", - "curiosity", - "fascination", - "an absorbed fascination" + "feel.radiance": [ + "bright", + "radiance", + "brilliance", + "a jeweled brilliance" ], - "feel.immersion": [ - "in", - "immersion", - "absorption", - "a held, breathless absorption" + "feel.delight": [ + "fun", + "delight", + "joy", + "a darting, bright joy" ] }, "reef_flowergarden": { @@ -1277,11 +1392,11 @@ "richness", "a teeming richness" ], - "feel.curiosity": [ - "look", - "curiosity", - "fascination", - "an absorbed fascination" + "feel.freedom": [ + "free", + "freedom", + "release", + "a boundless release" ], "feel.immersion": [ "in", @@ -1304,17 +1419,11 @@ "Siphonophorae · a colony of clones, can exceed 40 m" ], "measure.depth": "−1,200 m", - "feel.unease": [ - "uh", - "unease", - "disquiet", - "a creeping disquiet" - ], - "feel.fascination": [ - "ooh", - "fascination", - "wonder", - "a forbidden wonder" + "feel.vastness": [ + "big", + "vastness", + "immensity", + "a dizzying immensity" ], "feel.isolation": [ "alone", @@ -1322,11 +1431,17 @@ "solitude", "a crushing solitude" ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" + "feel.fascination": [ + "ooh", + "fascination", + "wonder", + "a forbidden wonder" + ], + "feel.unease": [ + "uh", + "unease", + "disquiet", + "a creeping disquiet" ] }, "abyss_midwaterexp": { @@ -1343,11 +1458,11 @@ "polychaete · a free-swimming bristle worm" ], "measure.depth": "−1,600 m", - "feel.unease": [ - "uh", - "unease", - "disquiet", - "a creeping disquiet" + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" ], "feel.fascination": [ "ooh", @@ -1355,20 +1470,26 @@ "wonder", "a forbidden wonder" ], + "feel.poignancy": [ + "ache", + "poignancy", + "bittersweetness", + "a luminous farewell" + ], "feel.isolation": [ "alone", "isolation", "solitude", "a crushing solitude" - ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" ] }, "abyss_hiding": { + "detected.marinesnow": [ + "specks", + "marine snow", + "falling detritus", + "marine snow · organic debris drifting down from above" + ], "detected.jelly": [ "jelly", "crimson jelly", @@ -1376,6 +1497,12 @@ "Scyphozoa · red is invisible in the lightless deep" ], "measure.depth": "−2,140 m", + "feel.spectral": [ + "ghost", + "the spectral", + "hauntedness", + "a ghost in the water" + ], "feel.unease": [ "uh", "unease", @@ -1388,20 +1515,20 @@ "wonder", "a forbidden wonder" ], - "feel.isolation": [ - "alone", - "isolation", - "solitude", - "a crushing solitude" - ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" ] }, "abyss_bigfin": { + "detected.arms": [ + "arms", + "elbowed arms", + "trailing filaments", + "elbowed arms · held out, then trailing meters of thread" + ], "detected.squid": [ "squid", "bigfin squid", @@ -1409,11 +1536,11 @@ "Magnapinna · elbowed arms trailing meters into the dark" ], "measure.depth": "−2,000 m", - "feel.unease": [ - "uh", - "unease", - "disquiet", - "a creeping disquiet" + "feel.alienness": [ + "odd", + "alienness", + "strangeness", + "an alien grace" ], "feel.fascination": [ "ooh", @@ -1421,20 +1548,26 @@ "wonder", "a forbidden wonder" ], + "feel.unease": [ + "uh", + "unease", + "disquiet", + "a creeping disquiet" + ], "feel.isolation": [ "alone", "isolation", "solitude", "a crushing solitude" - ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" ] }, "abyss_dandelion": { + "detected.tentacle": [ + "threads", + "tentacles", + "feeding tentacles", + "feeding tentacles · a drifting net for prey" + ], "detected.siphonophore": [ "orb", "siphonophore", @@ -1442,11 +1575,17 @@ "Rhodaliidae · a colony of clones tethered to the seabed" ], "measure.depth": "−2,500 m", - "feel.unease": [ - "uh", - "unease", - "disquiet", - "a creeping disquiet" + "feel.radiance": [ + "bright", + "radiance", + "brilliance", + "a jeweled brilliance" + ], + "feel.wonder": [ + "wow", + "wonder", + "awe", + "transcendent awe" ], "feel.fascination": [ "ooh", @@ -1454,20 +1593,20 @@ "wonder", "a forbidden wonder" ], - "feel.isolation": [ - "alone", - "isolation", - "solitude", - "a crushing solitude" - ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" + "feel.fragility": [ + "thin", + "fragility", + "vulnerability", + "a tender fragility" ] }, "abyss_octopus": { + "detected.arms": [ + "arms", + "eight arms", + "sucker-lined arms", + "eight arms · sucker-lined, tasting what they touch" + ], "detected.octopus": [ "octopus", "deep-sea octopus", @@ -1475,17 +1614,11 @@ "Graneledone boreopacifica · broods its eggs for ~4.5 years" ], "measure.depth": "−2,500 m", - "feel.unease": [ - "uh", - "unease", - "disquiet", - "a creeping disquiet" - ], - "feel.fascination": [ - "ooh", + "feel.curiosity": [ + "look", + "curiosity", "fascination", - "wonder", - "a forbidden wonder" + "an absorbed fascination" ], "feel.isolation": [ "alone", @@ -1493,14 +1626,26 @@ "solitude", "a crushing solitude" ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" + "feel.tenderness": [ + "soft", + "tenderness", + "warmth", + "a cradle’s warmth" + ], + "feel.unease": [ + "uh", + "unease", + "disquiet", + "a creeping disquiet" ] }, "abyss_seapig": { + "detected.veil": [ + "veil", + "oral veil", + "swimming veil", + "oral veil · sweeps sediment, and flaps to swim" + ], "detected.seacucumber": [ "blob", "sea cucumber", @@ -1508,6 +1653,12 @@ "Enypniastes · a swimming sea cucumber, the “headless chicken”" ], "measure.depth": "−2,700 m", + "feel.strangeness": [ + "weird", + "strangeness", + "the uncanny", + "a fleshy strangeness" + ], "feel.unease": [ "uh", "unease", @@ -1520,17 +1671,11 @@ "wonder", "a forbidden wonder" ], - "feel.isolation": [ - "alone", - "isolation", - "solitude", - "a crushing solitude" - ], - "feel.dread": [ - "fear", - "dread", - "foreboding", - "a slow, cold foreboding" + "feel.curiosity": [ + "look", + "curiosity", + "fascination", + "an absorbed fascination" ] } } diff --git a/tools/i18n/catalogs/es.json b/tools/i18n/catalogs/es.json index 11157e5..82e6a1d 100644 --- a/tools/i18n/catalogs/es.json +++ b/tools/i18n/catalogs/es.json @@ -36,6 +36,12 @@ "anhelo", "añoranza", "una añoranza punzante" + ], + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" ] }, "cosmos_galaxies": { @@ -69,6 +75,13 @@ "anhelo", "añoranza", "una añoranza punzante" + ], + "measure.count": "~2 billones de galaxias", + "feel.distance": [ + "lejos", + "distancia", + "lejanía", + "una lejanía exquisita" ] }, "cosmos_orion": { @@ -108,7 +121,19 @@ "estrella del Trapecio", "Trapecio · cálidas estrellas O que iluminan la nebulosa" ], - "measure.distance": "≈1.344 al" + "measure.distance": "≈1.344 al", + "feel.tenderness": [ + "suave", + "ternura", + "calidez", + "la calidez de una cuna" + ], + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" + ] }, "cosmos_tarantula": { "feel.wonder": [ @@ -147,7 +172,13 @@ "R136", "R136 · reúne algunas de las estrellas más masivas conocidas" ], - "measure.distance": "≈160.000 al" + "measure.distance": "≈160.000 al", + "feel.turbulence": [ + "agitación", + "turbulencia", + "fermento", + "un fermento violento" + ] }, "cosmos_westerlund": { "feel.wonder": [ @@ -186,7 +217,19 @@ "estrella O-type", "O-type · blanca azulada, decenas de masas solares" ], - "measure.distance": "≈20.000 al" + "measure.distance": "≈20.000 al", + "feel.radiance": [ + "brillo", + "resplandor", + "fulgor", + "un fulgor de joyas" + ], + "feel.exhilaration": [ + "yupi", + "euforia", + "júbilo", + "un júbilo que se eleva" + ] }, "cosmos_southernring": { "feel.wonder": [ @@ -225,7 +268,19 @@ "enana blanca", "enana blanca · el núcleo estelar caliente que queda" ], - "measure.distance": "≈2.500 al" + "measure.distance": "≈2.500 al", + "feel.mortality": [ + "fin", + "mortalidad", + "fugacidad", + "la lenta muerte de una estrella" + ], + "feel.poignancy": [ + "punzada", + "desgarro", + "melancolía dulce", + "una despedida luminosa" + ] }, "cosmos_carina_eso": { "feel.wonder": [ @@ -264,7 +319,13 @@ "estrella masiva", "estrella masiva · la que esculpe los acantilados de Carina" ], - "measure.distance": "≈7.500 al" + "measure.distance": "≈7.500 al", + "feel.abundance": [ + "lleno", + "abundancia", + "riqueza", + "una riqueza rebosante" + ] }, "orbit_planetearth": { "detected.cloud_band": [ @@ -303,6 +364,18 @@ "distancia", "lejanía", "una lejanía exquisita" + ], + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" + ], + "feel.radiance": [ + "brillo", + "resplandor", + "fulgor", + "un fulgor de joyas" ] }, "orbit_bluemarble": { @@ -312,6 +385,18 @@ "planeta terrestre", "planeta terrestre · 12.742 km de diámetro" ], + "detected.cloud_band": [ + "nubes", + "sistemas meteorológicos", + "sistemas nubosos", + "sistemas nubosos globales · las nubes cubren ~67% de la Tierra" + ], + "detected.starfield": [ + "estrellas", + "campo estelar", + "estrellas de fondo", + "campo estelar de fondo · un telón renderizado, sin escala" + ], "feel.serenity": [ "calma", "serenidad", @@ -335,6 +420,12 @@ "distancia", "lejanía", "una lejanía exquisita" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ] }, "orbit_aurora2025": { @@ -374,7 +465,25 @@ "limbo atmosférico", "limbo atmosférico · ~100 km de aire, brillando de canto" ], - "measure.altitude": "~408 km" + "measure.altitude": "~408 km", + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" + ], + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" + ], + "feel.eeriness": [ + "extraño", + "inquietud", + "una carga sobrenatural", + "un susurro eléctrico y sobrenatural" + ] }, "orbit_citylights": { "feel.serenity": [ @@ -413,7 +522,19 @@ "luminiscencia atmosférica", "luminiscencia del aire · la débil emisión nocturna de la alta atmósfera" ], - "measure.altitude": "~408 km" + "measure.altitude": "~408 km", + "feel.tenderness": [ + "suave", + "ternura", + "calidez", + "la calidez de una cuna" + ], + "feel.longing": [ + "querer", + "anhelo", + "añoranza", + "una añoranza punzante" + ] }, "orbit_helene": { "feel.serenity": [ @@ -452,7 +573,25 @@ "limbo atmosférico", "limbo atmosférico · la fina capa donde vive el clima" ], - "measure.altitude": "~408 km" + "measure.altitude": "~408 km", + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" + ], + "feel.turbulence": [ + "agitación", + "turbulencia", + "fermento", + "un fermento violento" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" + ] }, "orbit_epic": { "feel.serenity": [ @@ -491,7 +630,13 @@ "sistemas meteorológicos", "sistemas meteorológicos · arremolinándose sobre un planeta que gira" ], - "measure.distance": "~1,5 M km" + "measure.distance": "~1,5 M km", + "feel.insignificance": [ + "pequeño", + "pequeñez", + "insignificancia", + "una insignificancia que humilla" + ] }, "sky_grca_templesa": { "feel.exhilaration": [ @@ -529,6 +674,30 @@ "estratos de roca", "lechos sedimentarios", "estratos · épocas de sedimentación apiladas" + ], + "detected.butte": [ + "torre", + "cerro testigo", + "templo de roca", + "‘templo’ de roca · un cerro testigo de la erosión" + ], + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" + ], + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ] }, "sky_greenland_landice": { @@ -567,6 +736,30 @@ "nevero", "neviza", "neviza · nieve vieja que se compacta hacia hielo glaciar" + ], + "detected.crevasse": [ + "grietas", + "grietas", + "grietas glaciares", + "grietas · el hielo fracturándose al fluir" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" + ], + "feel.purity": [ + "puro", + "pureza", + "quietud", + "un silencio glacial" + ], + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" ] }, "sky_greenland_suture": { @@ -605,6 +798,30 @@ "canal", "canal abierto", "canal · una fractura de agua abierta entre témpanos" + ], + "detected.floe": [ + "placas", + "témpanos", + "témpanos de banquisa", + "témpanos · placas de mar congelado a la deriva" + ], + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" + ], + "feel.solitude": [ + "solo", + "soledad", + "aislamiento", + "una vasta soledad helada" ] }, "sky_jungle_amazon": { @@ -643,6 +860,24 @@ "árbol alto", "árbol emergente", "emergente · un gigante que rompe sobre el techo del dosel" + ], + "detected.mist": [ + "bruma", + "bruma del dosel", + "bruma de transpiración", + "bruma de transpiración · el bosque exhalando vapor" + ], + "feel.verdancy": [ + "frondoso", + "verdor", + "exuberancia", + "una exuberancia verde y rebosante" + ], + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" ] }, "sky_jungle_waterfall": { @@ -681,6 +916,24 @@ "dosel de la jungla", "dosel selvático", "dosel · bosque denso que abarrota la garganta" + ], + "detected.spray": [ + "rocío", + "aerosol", + "rocío de caída", + "rocío de caída · el río pulverizado al impactar" + ], + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" + ], + "feel.freshness": [ + "fresco", + "frescura", + "vitalidad", + "una frescura que cae en cascada" ] }, "sky_coast_cliffspain": { @@ -719,6 +972,30 @@ "rompiente", "oleaje rompiente", "oleaje rompiente · el océano que encuentra la piedra" + ], + "detected.headland": [ + "punta", + "promontorio", + "promontorio rocoso", + "promontorio · un brazo de tierra acantilado en el mar" + ], + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" + ], + "feel.turbulence": [ + "agitación", + "turbulencia", + "fermento", + "un fermento violento" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ] }, "sky_mtn_castlecrags": { @@ -757,6 +1034,24 @@ "bosque de coníferas", "bosque montano", "bosque montano · cubriendo las laderas bajo los riscos" + ], + "detected.talus": [ + "pedrera", + "talud", + "talud de derrubios", + "talud · roca rota por el hielo amontonada bajo los riscos" + ], + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ] }, "sky_mtn_rocky": { @@ -795,6 +1090,24 @@ "tundra alpina", "tundra alpina", "tundra alpina · plantas en cojín bajas sobre los árboles" + ], + "detected.snowfield": [ + "nieve", + "nevero", + "nevero alpino", + "nevero alpino · nieve persistente de gran altitud" + ], + "feel.sublime": [ + "grandioso", + "lo sublime", + "grandeza", + "una grandeza catedralicia" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ] }, "coast_birdrock": { @@ -833,6 +1146,24 @@ "melancolía", "anhelo", "un suave anhelo hacia el mar" + ], + "detected.seabirds": [ + "aves", + "aves marinas", + "aves marinas anidando", + "colonia de aves marinas · el criadero que da nombre a la roca" + ], + "feel.fragility": [ + "fino", + "fragilidad", + "vulnerabilidad", + "una fragilidad tierna" + ], + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" ] }, "coast_surfgrass": { @@ -871,6 +1202,30 @@ "melancolía", "anhelo", "un suave anhelo hacia el mar" + ], + "detected.tidepool": [ + "charca", + "poza de marea", + "poza intermareal", + "poza de marea · un mar en miniatura al bajar la marea" + ], + "feel.abundance": [ + "lleno", + "abundancia", + "riqueza", + "una riqueza rebosante" + ], + "feel.immersion": [ + "dentro", + "inmersión", + "absorción", + "una absorción contenida y sin aliento" + ], + "feel.curiosity": [ + "mira", + "curiosidad", + "fascinación", + "una fascinación absorta" ] }, "coast_kelp": { @@ -909,6 +1264,36 @@ "lámina", "fronda de alga", "fronda · flotadores llenos de gas la mantienen erguida" + ], + "detected.pneumatocyst": [ + "flotadores", + "vejigas de gas", + "neumatocistos", + "neumatocistos · flotadores de gas que alzan las hojas a la luz" + ], + "feel.immersion": [ + "dentro", + "inmersión", + "absorción", + "una absorción contenida y sin aliento" + ], + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" + ], + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" + ], + "feel.freedom": [ + "libre", + "libertad", + "liberación", + "una liberación sin límites" ] }, "coast_otters": { @@ -947,6 +1332,24 @@ "estuario", "estero de marea", "estero de marea · aguas resguardadas de crianza" + ], + "detected.fur": [ + "pelaje", + "pelaje denso", + "el pelaje más denso", + "el pelaje más denso de la Tierra · ~1 M de pelos/in², sin grasa" + ], + "feel.tenderness": [ + "suave", + "ternura", + "calidez", + "la calidez de una cuna" + ], + "feel.delight": [ + "divertido", + "deleite", + "alegría", + "una alegría viva y centelleante" ] }, "coast_kalaloch": { @@ -985,6 +1388,18 @@ "farallón", "farallón costero", "farallón · roca residual tallada por las olas" + ], + "detected.sunset": [ + "resplandor", + "atardecer", + "hora dorada", + "hora dorada · el sol bajo enrojecido por más atmósfera" + ], + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" ] }, "coast_seals": { @@ -1023,6 +1438,30 @@ "roca de descanso", "roca intermareal", "descansadero · una repisa de descanso bañada por la marea" + ], + "detected.whiskers": [ + "bigotes", + "vibrisas", + "bigotes sensores", + "vibrisas · bigotes que detectan presas en agua turbia" + ], + "feel.tenderness": [ + "suave", + "ternura", + "calidez", + "la calidez de una cuna" + ], + "feel.repose": [ + "descanso", + "reposo", + "sopor", + "un sopor entibiado por el sol" + ], + "feel.delight": [ + "divertido", + "deleite", + "alegría", + "una alegría viva y centelleante" ] }, "coast_mist": { @@ -1061,6 +1500,30 @@ "roca de orilla", "roca costera", "roca costera · el borde firme de la tierra" + ], + "detected.swell": [ + "olas", + "mar de fondo", + "oleaje de fondo", + "mar de fondo · olas formadas por tormentas lejanas" + ], + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" + ], + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" + ], + "feel.hush": [ + "silencio", + "quietud", + "sosiego", + "un silencio contenido" ] }, "reef_lionfish": { @@ -1100,6 +1563,18 @@ "inmersión", "absorción", "una absorción contenida y sin aliento" + ], + "feel.poise": [ + "quieto", + "aplomo", + "gracia", + "un aplomo suspendido y ornado" + ], + "feel.fragility": [ + "fino", + "fragilidad", + "vulnerabilidad", + "una fragilidad tierna" ] }, "reef_spawning": { @@ -1139,6 +1614,18 @@ "inmersión", "absorción", "una absorción contenida y sin aliento" + ], + "feel.flow": [ + "fluir", + "flujo", + "corriente", + "un flujo de cardumen que barre" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ] }, "reef_hawkfish": { @@ -1172,6 +1659,18 @@ "inmersión", "absorción", "una absorción contenida y sin aliento" + ], + "detected.coral": [ + "coral", + "coral de arrecife", + "coral duro", + "coral duro · el arrecife que este pez muele en arena" + ], + "feel.radiance": [ + "brillo", + "resplandor", + "fulgor", + "un fulgor de joyas" ] }, "reef_coralspacific": { @@ -1210,6 +1709,24 @@ "inmersión", "absorción", "una absorción contenida y sin aliento" + ], + "detected.polyp": [ + "pólipos", + "pólipos de coral", + "pólipos vivos", + "pólipos · cada uno un animal diminuto, constructores de la colonia" + ], + "feel.intricacy": [ + "fino", + "complejidad", + "detalle", + "una densidad intrincada y tejida" + ], + "feel.fragility": [ + "fino", + "fragilidad", + "vulnerabilidad", + "una fragilidad tierna" ] }, "reef_redsea": { @@ -1249,7 +1766,19 @@ "antias", "antias · nubes naranjas de comeplancton sobre el arrecife" ], - "measure.depth": "−10 m" + "measure.depth": "−10 m", + "feel.serenity": [ + "calma", + "serenidad", + "paz", + "una paz serena e ingrávida" + ], + "feel.radiance": [ + "brillo", + "resplandor", + "fulgor", + "un fulgor de joyas" + ] }, "reef_flowergarden": { "feel.delight": [ @@ -1288,7 +1817,13 @@ "Abudefduf saxatilis", "Abudefduf · la damisela rayada “sargento mayor”" ], - "measure.depth": "−20 m" + "measure.depth": "−20 m", + "feel.freedom": [ + "libre", + "libertad", + "liberación", + "una liberación sin límites" + ] }, "abyss_wow": { "detected.jelly": [ @@ -1327,6 +1862,12 @@ "pavor", "presagio", "un presagio lento y frío" + ], + "feel.vastness": [ + "grande", + "vastedad", + "inmensidad", + "una inmensidad vertiginosa" ] }, "abyss_midwaterexp": { @@ -1366,6 +1907,18 @@ "pavor", "presagio", "un presagio lento y frío" + ], + "feel.fragility": [ + "fino", + "fragilidad", + "vulnerabilidad", + "una fragilidad tierna" + ], + "feel.poignancy": [ + "punzada", + "desgarro", + "melancolía dulce", + "una despedida luminosa" ] }, "abyss_hiding": { @@ -1399,6 +1952,24 @@ "pavor", "presagio", "un presagio lento y frío" + ], + "detected.marinesnow": [ + "motas", + "nieve marina", + "detrito que cae", + "nieve marina · restos orgánicos que descienden desde arriba" + ], + "feel.spectral": [ + "fantasma", + "lo espectral", + "lo fantasmal", + "un fantasma en el agua" + ], + "feel.fragility": [ + "fino", + "fragilidad", + "vulnerabilidad", + "una fragilidad tierna" ] }, "abyss_bigfin": { @@ -1432,7 +2003,19 @@ "Magnapinna", "Magnapinna · brazos acodados que se extienden metros en la oscuridad" ], - "measure.depth": "−2.000 m" + "measure.depth": "−2.000 m", + "detected.arms": [ + "brazos", + "brazos acodados", + "filamentos colgantes", + "brazos acodados · extendidos y luego colgando metros de hilo" + ], + "feel.alienness": [ + "raro", + "lo alienígena", + "extrañeza", + "una gracia alienígena" + ] }, "abyss_dandelion": { "feel.unease": [ @@ -1465,7 +2048,31 @@ "sifonóforo diente de león", "Rhodaliidae · una colonia de clones anclada al lecho marino" ], - "measure.depth": "−2.500 m" + "measure.depth": "−2.500 m", + "detected.tentacle": [ + "hilos", + "tentáculos", + "tentáculos de caza", + "tentáculos de caza · una red a la deriva para atrapar presas" + ], + "feel.radiance": [ + "brillo", + "resplandor", + "fulgor", + "un fulgor de joyas" + ], + "feel.wonder": [ + "guau", + "asombro", + "sobrecogimiento", + "sobrecogimiento trascendente" + ], + "feel.fragility": [ + "fino", + "fragilidad", + "vulnerabilidad", + "una fragilidad tierna" + ] }, "abyss_octopus": { "feel.unease": [ @@ -1498,7 +2105,25 @@ "Graneledone", "Graneledone boreopacifica · incuba sus huevos durante ~4,5 años" ], - "measure.depth": "−2.500 m" + "measure.depth": "−2.500 m", + "detected.arms": [ + "brazos", + "ocho brazos", + "brazos con ventosas", + "ocho brazos · con ventosas que saborean lo que tocan" + ], + "feel.curiosity": [ + "mira", + "curiosidad", + "fascinación", + "una fascinación absorta" + ], + "feel.tenderness": [ + "suave", + "ternura", + "calidez", + "la calidez de una cuna" + ] }, "abyss_seapig": { "feel.unease": [ @@ -1531,6 +2156,24 @@ "Enypniastes eximia", "Enypniastes · un pepino de mar nadador, el “pollo sin cabeza”" ], - "measure.depth": "−2.700 m" + "measure.depth": "−2.700 m", + "detected.veil": [ + "velo", + "velo oral", + "velo natatorio", + "velo oral · barre el sedimento y aletea para nadar" + ], + "feel.strangeness": [ + "raro", + "rareza", + "lo inquietante", + "una rareza carnosa" + ], + "feel.curiosity": [ + "mira", + "curiosidad", + "fascinación", + "una fascinación absorta" + ] } } diff --git a/tools/i18n/catalogs/fr.json b/tools/i18n/catalogs/fr.json index cf877be..29dd903 100644 --- a/tools/i18n/catalogs/fr.json +++ b/tools/i18n/catalogs/fr.json @@ -36,6 +36,12 @@ "désir", "aspiration", "une aspiration douloureuse" + ], + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" ] }, "cosmos_galaxies": { @@ -69,6 +75,13 @@ "désir", "aspiration", "une aspiration douloureuse" + ], + "measure.count": "~2 000 milliards de galaxies", + "feel.distance": [ + "loin", + "distance", + "éloignement", + "un éloignement exquis" ] }, "cosmos_orion": { @@ -108,7 +121,19 @@ "étoile du Trapèze", "Trapèze · étoiles O chaudes illuminant la nébuleuse" ], - "measure.distance": "≈1 344 al" + "measure.distance": "≈1 344 al", + "feel.tenderness": [ + "doux", + "tendresse", + "chaleur", + "la chaleur d’un berceau" + ], + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" + ] }, "cosmos_tarantula": { "feel.wonder": [ @@ -147,7 +172,13 @@ "R136", "R136 · concentre certaines des étoiles les plus massives connues" ], - "measure.distance": "≈160 000 al" + "measure.distance": "≈160 000 al", + "feel.turbulence": [ + "remous", + "turbulence", + "ferment", + "un ferment violent" + ] }, "cosmos_westerlund": { "feel.wonder": [ @@ -186,7 +217,19 @@ "étoile de type O", "O-type · blanc-bleu, des dizaines de masses solaires" ], - "measure.distance": "≈20 000 al" + "measure.distance": "≈20 000 al", + "feel.radiance": [ + "éclat", + "rayonnement", + "scintillement", + "un scintillement de joyaux" + ], + "feel.exhilaration": [ + "youpi", + "exaltation", + "euphorie", + "une euphorie qui s'envole" + ] }, "cosmos_southernring": { "feel.wonder": [ @@ -225,7 +268,19 @@ "naine blanche", "naine blanche · le cœur stellaire chaud laissé derrière" ], - "measure.distance": "≈2 500 al" + "measure.distance": "≈2 500 al", + "feel.mortality": [ + "fin", + "mortalité", + "impermanence", + "la lente mort d’une étoile" + ], + "feel.poignancy": [ + "pincement", + "émotion poignante", + "douceur amère", + "un adieu lumineux" + ] }, "cosmos_carina_eso": { "feel.wonder": [ @@ -264,7 +319,13 @@ "étoile massive", "étoile massive · celles qui sculptent les falaises de la Carène" ], - "measure.distance": "≈7 500 al" + "measure.distance": "≈7 500 al", + "feel.abundance": [ + "plein", + "abondance", + "richesse", + "une richesse grouillante" + ] }, "orbit_planetearth": { "detected.cloud_band": [ @@ -303,6 +364,18 @@ "distance", "éloignement", "un éloignement exquis" + ], + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" + ], + "feel.radiance": [ + "éclat", + "rayonnement", + "scintillement", + "un scintillement de joyaux" ] }, "orbit_bluemarble": { @@ -312,6 +385,18 @@ "planète tellurique", "planète tellurique · 12 742 km de diamètre" ], + "detected.cloud_band": [ + "nuages", + "systèmes météo", + "systèmes nuageux", + "systèmes nuageux planétaires · les nuages couvrent ~67% de la Terre" + ], + "detected.starfield": [ + "étoiles", + "champ d’étoiles", + "étoiles d’arrière-plan", + "champ d’étoiles de fond · un décor rendu, hors échelle" + ], "feel.serenity": [ "calme", "sérénité", @@ -335,6 +420,12 @@ "distance", "éloignement", "un éloignement exquis" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ] }, "orbit_aurora2025": { @@ -374,7 +465,25 @@ "limbe atmosphérique", "limbe atmosphérique · ~100 km d'air, brillant sur la tranche" ], - "measure.altitude": "~408 km" + "measure.altitude": "~408 km", + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" + ], + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" + ], + "feel.eeriness": [ + "étrange", + "étrangeté", + "une charge surnaturelle", + "un frisson électrique et surnaturel" + ] }, "orbit_citylights": { "feel.serenity": [ @@ -413,7 +522,19 @@ "luminescence atmosphérique", "luminescence atmosphérique · la faible émission nocturne de la haute atmosphère" ], - "measure.altitude": "~408 km" + "measure.altitude": "~408 km", + "feel.tenderness": [ + "doux", + "tendresse", + "chaleur", + "la chaleur d’un berceau" + ], + "feel.longing": [ + "envie", + "désir", + "aspiration", + "une aspiration douloureuse" + ] }, "orbit_helene": { "feel.serenity": [ @@ -452,7 +573,25 @@ "limbe atmosphérique", "limbe atmosphérique · la fine pellicule où vit la météo" ], - "measure.altitude": "~408 km" + "measure.altitude": "~408 km", + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" + ], + "feel.turbulence": [ + "remous", + "turbulence", + "ferment", + "un ferment violent" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" + ] }, "orbit_epic": { "feel.serenity": [ @@ -491,7 +630,13 @@ "systèmes météorologiques", "systèmes météorologiques · tourbillonnant sur une planète qui tourne" ], - "measure.distance": "~1,5 M km" + "measure.distance": "~1,5 M km", + "feel.insignificance": [ + "petit", + "petitesse", + "insignifiance", + "une insignifiance qui rend humble" + ] }, "sky_grca_templesa": { "feel.exhilaration": [ @@ -529,6 +674,30 @@ "strates rocheuses", "bancs sédimentaires", "strates · des époques de dépôt empilées" + ], + "detected.butte": [ + "tour", + "butte-témoin", + "temple rocheux", + "‘temple’ rocheux · une butte-témoin laissée par l’érosion" + ], + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" + ], + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ] }, "sky_greenland_landice": { @@ -567,6 +736,30 @@ "champ de neige", "névé", "névé · vieille neige se compactant en glace glaciaire" + ], + "detected.crevasse": [ + "fissures", + "crevasses", + "crevasses glaciaires", + "crevasses · la glace se fracture en s’écoulant" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" + ], + "feel.purity": [ + "pur", + "pureté", + "quiétude", + "un silence glaciaire" + ], + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" ] }, "sky_greenland_suture": { @@ -605,6 +798,30 @@ "chenal", "chenal libre", "chenal · une fracture d'eau libre entre les floes" + ], + "detected.floe": [ + "plaques", + "floes", + "floes de banquise", + "floes · plaques de mer gelée à la dérive" + ], + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" + ], + "feel.solitude": [ + "seul", + "solitude", + "isolement", + "une vaste solitude gelée" ] }, "sky_jungle_amazon": { @@ -643,6 +860,24 @@ "grand arbre", "arbre émergent", "émergent · un géant perçant au-dessus de la canopée" + ], + "detected.mist": [ + "brume", + "brume de canopée", + "brume de transpiration", + "brume de transpiration · la forêt exhalant sa vapeur" + ], + "feel.verdancy": [ + "luxuriant", + "verdure", + "abondance", + "une abondance verte et grouillante" + ], + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" ] }, "sky_jungle_waterfall": { @@ -681,6 +916,24 @@ "canopée de jungle", "canopée de forêt tropicale", "canopée · forêt dense pressée autour de la gorge" + ], + "detected.spray": [ + "embruns", + "embruns", + "embruns de chute", + "embruns de chute · la rivière pulvérisée à l’impact" + ], + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" + ], + "feel.freshness": [ + "frais", + "fraîcheur", + "vitalité", + "une fraîcheur en cascade" ] }, "sky_coast_cliffspain": { @@ -719,6 +972,30 @@ "ressac", "houle déferlante", "houle déferlante · l'océan à la rencontre de la pierre" + ], + "detected.headland": [ + "pointe", + "promontoire", + "promontoire rocheux", + "promontoire · un bras de terre escarpé dans la mer" + ], + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" + ], + "feel.turbulence": [ + "remous", + "turbulence", + "ferment", + "un ferment violent" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ] }, "sky_mtn_castlecrags": { @@ -757,6 +1034,24 @@ "forêt de conifères", "forêt montagnarde", "forêt montagnarde · habillant les pentes sous les pics" + ], + "detected.talus": [ + "éboulis", + "talus", + "talus d’éboulis", + "éboulis · roches gélifractées entassées sous les aiguilles" + ], + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ] }, "sky_mtn_rocky": { @@ -795,6 +1090,24 @@ "toundra alpine", "toundra alpine", "toundra alpine · plantes en coussin basses au-dessus des arbres" + ], + "detected.snowfield": [ + "neige", + "névé", + "névé alpin", + "névé alpin · neige persistante de haute altitude" + ], + "feel.sublime": [ + "grandiose", + "le sublime", + "grandeur", + "une grandeur de cathédrale" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ] }, "coast_birdrock": { @@ -833,6 +1146,24 @@ "mélancolie", "langueur", "une douce langueur tournée vers le large" + ], + "detected.seabirds": [ + "oiseaux", + "oiseaux marins", + "oiseaux marins nicheurs", + "colonie d’oiseaux marins · la rookerie qui nomme le rocher" + ], + "feel.fragility": [ + "mince", + "fragilité", + "vulnérabilité", + "une tendre fragilité" + ], + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" ] }, "coast_surfgrass": { @@ -871,6 +1202,30 @@ "mélancolie", "langueur", "une douce langueur tournée vers le large" + ], + "detected.tidepool": [ + "mare", + "cuvette de marée", + "mare intertidale", + "cuvette de marée · une mer de poche découverte à marée basse" + ], + "feel.abundance": [ + "plein", + "abondance", + "richesse", + "une richesse grouillante" + ], + "feel.immersion": [ + "dedans", + "immersion", + "absorption", + "une absorption retenue, à couper le souffle" + ], + "feel.curiosity": [ + "regarde", + "curiosité", + "fascination", + "une fascination absorbée" ] }, "coast_kelp": { @@ -909,6 +1264,36 @@ "lame", "fronde de varech", "fronde · des flotteurs remplis de gaz la maintiennent droite" + ], + "detected.pneumatocyst": [ + "flotteurs", + "vésicules à gaz", + "pneumatocystes", + "pneumatocystes · des flotteurs à gaz qui hissent les lames vers la lumière" + ], + "feel.immersion": [ + "dedans", + "immersion", + "absorption", + "une absorption retenue, à couper le souffle" + ], + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" + ], + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" + ], + "feel.freedom": [ + "libre", + "liberté", + "délivrance", + "une délivrance sans limites" ] }, "coast_otters": { @@ -947,6 +1332,24 @@ "estuaire", "chenal de marée", "chenal de marée · eaux de nourricerie abritées" + ], + "detected.fur": [ + "fourrure", + "fourrure dense", + "la fourrure la plus dense", + "la fourrure la plus dense au monde · ~1 M de poils/in², sans graisse" + ], + "feel.tenderness": [ + "doux", + "tendresse", + "chaleur", + "la chaleur d’un berceau" + ], + "feel.delight": [ + "amusant", + "ravissement", + "joie", + "une joie vive et frétillante" ] }, "coast_kalaloch": { @@ -985,6 +1388,18 @@ "aiguille marine", "aiguille côtière", "aiguille marine · roche résiduelle taillée par les vagues" + ], + "detected.sunset": [ + "lueur", + "coucher de soleil", + "heure dorée", + "heure dorée · le soleil bas rougi par plus d’atmosphère" + ], + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" ] }, "coast_seals": { @@ -1023,6 +1438,30 @@ "rocher reposoir", "rocher intertidal", "reposoir · une corniche de repos balayée par la marée" + ], + "detected.whiskers": [ + "moustaches", + "vibrisses", + "moustaches sensorielles", + "vibrisses · des moustaches qui sentent les proies en eau trouble" + ], + "feel.tenderness": [ + "doux", + "tendresse", + "chaleur", + "la chaleur d’un berceau" + ], + "feel.repose": [ + "repos", + "quiétude", + "somnolence", + "une somnolence réchauffée de soleil" + ], + "feel.delight": [ + "amusant", + "ravissement", + "joie", + "une joie vive et frétillante" ] }, "coast_mist": { @@ -1061,6 +1500,30 @@ "rocher de rivage", "rocher côtier", "rocher côtier · le bord dressé de la terre" + ], + "detected.swell": [ + "vagues", + "houle", + "houle océanique", + "houle · des vagues nées de tempêtes lointaines" + ], + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" + ], + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" + ], + "feel.hush": [ + "silence", + "calme", + "quiétude", + "un silence retenu" ] }, "reef_lionfish": { @@ -1100,6 +1563,18 @@ "immersion", "absorption", "une absorption retenue, à couper le souffle" + ], + "feel.poise": [ + "immobile", + "aplomb", + "grâce", + "un aplomb suspendu et ouvragé" + ], + "feel.fragility": [ + "mince", + "fragilité", + "vulnérabilité", + "une tendre fragilité" ] }, "reef_spawning": { @@ -1139,6 +1614,18 @@ "immersion", "absorption", "une absorption retenue, à couper le souffle" + ], + "feel.flow": [ + "aller", + "flux", + "courant", + "un flux de banc qui ondule" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ] }, "reef_hawkfish": { @@ -1172,6 +1659,18 @@ "immersion", "absorption", "une absorption retenue, à couper le souffle" + ], + "detected.coral": [ + "corail", + "corail récifal", + "corail dur", + "corail dur · le récif que ce poisson broie en sable" + ], + "feel.radiance": [ + "éclat", + "rayonnement", + "scintillement", + "un scintillement de joyaux" ] }, "reef_coralspacific": { @@ -1210,6 +1709,24 @@ "immersion", "absorption", "une absorption retenue, à couper le souffle" + ], + "detected.polyp": [ + "polypes", + "polypes coralliens", + "polypes vivants", + "polypes · chacun un animal minuscule, bâtisseurs de la colonie" + ], + "feel.intricacy": [ + "fin", + "complexité", + "détail", + "une densité tissée et complexe" + ], + "feel.fragility": [ + "mince", + "fragilité", + "vulnérabilité", + "une tendre fragilité" ] }, "reef_redsea": { @@ -1249,7 +1766,19 @@ "anthias", "anthias · nuages orange de mangeurs de plancton au-dessus du récif" ], - "measure.depth": "−10 m" + "measure.depth": "−10 m", + "feel.serenity": [ + "calme", + "sérénité", + "paix", + "une paix tranquille et sans pesanteur" + ], + "feel.radiance": [ + "éclat", + "rayonnement", + "scintillement", + "un scintillement de joyaux" + ] }, "reef_flowergarden": { "feel.delight": [ @@ -1288,7 +1817,13 @@ "Abudefduf saxatilis", "Abudefduf · la demoiselle rayée “sergent-major”" ], - "measure.depth": "−20 m" + "measure.depth": "−20 m", + "feel.freedom": [ + "libre", + "liberté", + "délivrance", + "une délivrance sans limites" + ] }, "abyss_wow": { "detected.jelly": [ @@ -1327,6 +1862,12 @@ "effroi", "pressentiment", "un pressentiment lent et glacé" + ], + "feel.vastness": [ + "grand", + "vastitude", + "immensité", + "une immensité vertigineuse" ] }, "abyss_midwaterexp": { @@ -1366,6 +1907,18 @@ "effroi", "pressentiment", "un pressentiment lent et glacé" + ], + "feel.fragility": [ + "mince", + "fragilité", + "vulnérabilité", + "une tendre fragilité" + ], + "feel.poignancy": [ + "pincement", + "émotion poignante", + "douceur amère", + "un adieu lumineux" ] }, "abyss_hiding": { @@ -1399,6 +1952,24 @@ "effroi", "pressentiment", "un pressentiment lent et glacé" + ], + "detected.marinesnow": [ + "points", + "neige marine", + "détritus tombants", + "neige marine · débris organiques descendant des couches supérieures" + ], + "feel.spectral": [ + "fantôme", + "le spectral", + "hantise", + "un fantôme dans l’eau" + ], + "feel.fragility": [ + "mince", + "fragilité", + "vulnérabilité", + "une tendre fragilité" ] }, "abyss_bigfin": { @@ -1432,7 +2003,19 @@ "Magnapinna", "Magnapinna · des bras coudés traînant sur des mètres dans l'obscurité" ], - "measure.depth": "−2 000 m" + "measure.depth": "−2 000 m", + "detected.arms": [ + "bras", + "bras coudés", + "filaments traînants", + "bras coudés · tendus puis traînant des mètres de fil" + ], + "feel.alienness": [ + "bizarre", + "l’étrangeté", + "altérité", + "une grâce extraterrestre" + ] }, "abyss_dandelion": { "feel.unease": [ @@ -1465,7 +2048,31 @@ "siphonophore pissenlit", "Rhodaliidae · une colonie de clones amarrée au fond marin" ], - "measure.depth": "−2 500 m" + "measure.depth": "−2 500 m", + "detected.tentacle": [ + "fils", + "tentacules", + "tentacules de capture", + "tentacules de capture · un filet dérivant pour les proies" + ], + "feel.radiance": [ + "éclat", + "rayonnement", + "scintillement", + "un scintillement de joyaux" + ], + "feel.wonder": [ + "ouah", + "émerveillement", + "saisissement", + "un saisissement transcendant" + ], + "feel.fragility": [ + "mince", + "fragilité", + "vulnérabilité", + "une tendre fragilité" + ] }, "abyss_octopus": { "feel.unease": [ @@ -1498,7 +2105,25 @@ "Graneledone", "Graneledone boreopacifica · couve ses œufs pendant ~4,5 ans" ], - "measure.depth": "−2 500 m" + "measure.depth": "−2 500 m", + "detected.arms": [ + "bras", + "huit bras", + "bras à ventouses", + "huit bras · garnis de ventouses qui goûtent ce qu’elles touchent" + ], + "feel.curiosity": [ + "regarde", + "curiosité", + "fascination", + "une fascination absorbée" + ], + "feel.tenderness": [ + "doux", + "tendresse", + "chaleur", + "la chaleur d’un berceau" + ] }, "abyss_seapig": { "feel.unease": [ @@ -1531,6 +2156,24 @@ "Enypniastes eximia", "Enypniastes · un concombre de mer nageur, le “poulet sans tête”" ], - "measure.depth": "−2 700 m" + "measure.depth": "−2 700 m", + "detected.veil": [ + "voile", + "voile oral", + "voile natatoire", + "voile oral · balaie le sédiment et bat pour nager" + ], + "feel.strangeness": [ + "étrange", + "bizarrerie", + "l’inquiétant", + "une étrangeté charnue" + ], + "feel.curiosity": [ + "regarde", + "curiosité", + "fascination", + "une fascination absorbée" + ] } } diff --git a/tools/i18n/catalogs/ja.json b/tools/i18n/catalogs/ja.json index 971def4..16b74cf 100644 --- a/tools/i18n/catalogs/ja.json +++ b/tools/i18n/catalogs/ja.json @@ -36,6 +36,12 @@ "憧れ", "切望", "胸を締めつける切望" + ], + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" ] }, "cosmos_galaxies": { @@ -69,6 +75,13 @@ "憧れ", "切望", "胸を締めつける切望" + ], + "measure.count": "約2兆個の銀河", + "feel.distance": [ + "遠い", + "隔たり", + "遥かさ", + "この上なく美しい遥かさ" ] }, "cosmos_orion": { @@ -108,7 +121,19 @@ "Trapezium星", "Trapezium · 星雲を照らす高温のO-type星" ], - "measure.distance": "≈1,344 光年" + "measure.distance": "≈1,344 光年", + "feel.tenderness": [ + "やさしい", + "優しさ", + "ぬくもり", + "ゆりかごのようなぬくもり" + ], + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" + ] }, "cosmos_tarantula": { "feel.wonder": [ @@ -147,7 +172,13 @@ "R136", "R136 · 知られている中で最も重い部類の星々を抱える" ], - "measure.distance": "≈160,000 光年" + "measure.distance": "≈160,000 光年", + "feel.turbulence": [ + "渦巻き", + "乱流", + "胎動", + "激しい胎動" + ] }, "cosmos_westerlund": { "feel.wonder": [ @@ -186,7 +217,19 @@ "O-type星", "O-type · 青白い、太陽の数十倍の質量" ], - "measure.distance": "≈20,000 光年" + "measure.distance": "≈20,000 光年", + "feel.radiance": [ + "輝き", + "光輝", + "煌めき", + "宝石のような煌めき" + ], + "feel.exhilaration": [ + "わーい", + "高揚", + "歓喜", + "舞い上がる歓喜" + ] }, "cosmos_southernring": { "feel.wonder": [ @@ -225,7 +268,19 @@ "白色矮星", "白色矮星 · 残された高温の星の中心核" ], - "measure.distance": "≈2,500 光年" + "measure.distance": "≈2,500 光年", + "feel.mortality": [ + "終わり", + "死", + "無常", + "星のゆるやかな死" + ], + "feel.poignancy": [ + "切なさ", + "哀切", + "ほろ苦さ", + "光に満ちた別れ" + ] }, "cosmos_carina_eso": { "feel.wonder": [ @@ -264,7 +319,13 @@ "重い星", "重い星 · カリーナの崖を彫り出すたぐいの星" ], - "measure.distance": "≈7,500 光年" + "measure.distance": "≈7,500 光年", + "feel.abundance": [ + "いっぱい", + "豊かさ", + "充溢", + "あふれんばかりの充溢" + ] }, "orbit_planetearth": { "detected.cloud_band": [ @@ -303,6 +364,18 @@ "隔たり", "遥かさ", "この上なく美しい遥かさ" + ], + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" + ], + "feel.radiance": [ + "輝き", + "光輝", + "煌めき", + "宝石のような煌めき" ] }, "orbit_bluemarble": { @@ -312,6 +385,18 @@ "岩石惑星", "岩石惑星 · 直径12,742 km" ], + "detected.cloud_band": [ + "雲", + "気象システム", + "雲システム", + "地球規模の雲システム · 雲は地表の約67%を覆う" + ], + "detected.starfield": [ + "星", + "星野", + "背景の星", + "背景の星野 · 描画された背景で実寸ではない" + ], "feel.serenity": [ "穏やか", "静けさ", @@ -335,6 +420,12 @@ "隔たり", "遥かさ", "この上なく美しい遥かさ" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ] }, "orbit_aurora2025": { @@ -374,7 +465,25 @@ "大気の縁", "大気の縁 · 約100 kmの大気層が縁で光る" ], - "measure.altitude": "約408 km" + "measure.altitude": "約408 km", + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" + ], + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" + ], + "feel.eeriness": [ + "異様", + "不気味さ", + "異世界の気配", + "電気を帯びた異世界の静けさ" + ] }, "orbit_citylights": { "feel.serenity": [ @@ -413,7 +522,19 @@ "超高層の大気光", "大気光 · 高層大気がかすかに放つ夜間の光" ], - "measure.altitude": "約408 km" + "measure.altitude": "約408 km", + "feel.tenderness": [ + "やさしい", + "優しさ", + "ぬくもり", + "ゆりかごのようなぬくもり" + ], + "feel.longing": [ + "欲しい", + "憧れ", + "切望", + "胸を締めつける切望" + ] }, "orbit_helene": { "feel.serenity": [ @@ -452,7 +573,25 @@ "大気の縁", "大気の縁 · 気象が宿る薄い層" ], - "measure.altitude": "約408 km" + "measure.altitude": "約408 km", + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" + ], + "feel.turbulence": [ + "渦巻き", + "乱流", + "胎動", + "激しい胎動" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" + ] }, "orbit_epic": { "feel.serenity": [ @@ -491,7 +630,13 @@ "気象系", "気象系 · 回転する惑星の上を渦巻く" ], - "measure.distance": "約150万 km" + "measure.distance": "約150万 km", + "feel.insignificance": [ + "小さい", + "小ささ", + "ちっぽけさ", + "謙虚にさせるちっぽけさ" + ] }, "sky_grca_templesa": { "feel.exhilaration": [ @@ -529,6 +674,30 @@ "岩層", "堆積層", "地層 · 積み重なった堆積の時代" + ], + "detected.butte": [ + "塔", + "残丘", + "岩の神殿", + "岩の‘神殿’ · 浸食に取り残された残丘" + ], + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" + ], + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ] }, "sky_greenland_landice": { @@ -567,6 +736,30 @@ "雪原", "フィルン", "フィルン · 氷河の氷へと締まっていく古い雪" + ], + "detected.crevasse": [ + "亀裂", + "クレバス", + "氷河の裂け目", + "クレバス · 流れる氷が割れてできた裂け目" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" + ], + "feel.purity": [ + "清らか", + "純粋さ", + "静寂", + "氷河のような静寂" + ], + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" ] }, "sky_greenland_suture": { @@ -605,6 +798,30 @@ "水路", "リード", "リード · 氷盤の間に開いた水の裂け目" + ], + "detected.floe": [ + "板状氷", + "氷盤", + "流氷の氷盤", + "氷盤 · 漂う凍った海の板" + ], + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" + ], + "feel.solitude": [ + "ひとり", + "孤独", + "隔絶", + "凍てつく広大な孤独" ] }, "sky_jungle_amazon": { @@ -643,6 +860,24 @@ "高い木", "突出木", "突出木 · 樹冠の天井を突き抜ける巨木" + ], + "detected.mist": [ + "もや", + "林冠のもや", + "蒸散のもや", + "蒸散のもや · 森が吐き出す水蒸気" + ], + "feel.verdancy": [ + "緑豊か", + "青々しさ", + "繁茂", + "生い茂る緑の豊かさ" + ], + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" ] }, "sky_jungle_waterfall": { @@ -681,6 +916,24 @@ "ジャングルの樹冠", "熱帯雨林の樹冠", "樹冠 · 峡谷に密集する濃い森" + ], + "detected.spray": [ + "水しぶき", + "しぶき", + "落下のしぶき", + "落下のしぶき · 衝突で霧化した川" + ], + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" + ], + "feel.freshness": [ + "涼しい", + "清々しさ", + "生命力", + "滝のように降りそそぐ清涼" ] }, "sky_coast_cliffspain": { @@ -719,6 +972,30 @@ "打ち寄せる波", "砕けるうねり", "砕けるうねり · 海が岩に出会う" + ], + "detected.headland": [ + "岬", + "岬", + "岩の岬", + "岬 · 海へ突き出す断崖の地" + ], + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" + ], + "feel.turbulence": [ + "渦巻き", + "乱流", + "胎動", + "激しい胎動" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ] }, "sky_mtn_castlecrags": { @@ -757,6 +1034,24 @@ "針葉樹林", "山地林", "山地林 · 岩峰の下の斜面を覆う" + ], + "detected.talus": [ + "岩屑", + "タルス", + "岩屑の斜面", + "タルス · 凍結破砕した岩が岩峰の下に堆積" + ], + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ] }, "sky_mtn_rocky": { @@ -795,6 +1090,24 @@ "ツンドラ", "高山ツンドラ", "高山ツンドラ · 樹林の上に育つ低いクッション状の植物" + ], + "detected.snowfield": [ + "雪", + "雪原", + "高山の雪原", + "高山の雪原 · 標高の高い場所に残る雪" + ], + "feel.sublime": [ + "雄大", + "崇高", + "荘厳", + "大聖堂のような荘厳さ" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ] }, "coast_birdrock": { @@ -833,6 +1146,24 @@ "憂い", "恋しさ", "海へと向かう柔らかな恋しさ" + ], + "detected.seabirds": [ + "鳥", + "海鳥", + "営巣する海鳥", + "海鳥のコロニー · 岩の名の由来となる集団繁殖地" + ], + "feel.fragility": [ + "薄い", + "儚さ", + "脆さ", + "いたわりたくなる儚さ" + ], + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" ] }, "coast_surfgrass": { @@ -871,6 +1202,30 @@ "憂い", "恋しさ", "海へと向かう柔らかな恋しさ" + ], + "detected.tidepool": [ + "潮だまり", + "タイドプール", + "潮間帯の池", + "潮だまり · 干潮で現れる小さな海" + ], + "feel.abundance": [ + "いっぱい", + "豊かさ", + "充溢", + "あふれんばかりの充溢" + ], + "feel.immersion": [ + "中へ", + "没入", + "没頭", + "息を呑む没頭" + ], + "feel.curiosity": [ + "見て", + "好奇心", + "魅了", + "のめり込む魅了" ] }, "coast_kelp": { @@ -909,6 +1264,36 @@ "葉状体", "ケルプの葉", "葉状部 · ガスを含んだ浮き袋が直立させる" + ], + "detected.pneumatocyst": [ + "浮き", + "気胞", + "気胞(ニューマトシスト)", + "気胞 · 葉を光へ持ち上げるガスの浮き" + ], + "feel.immersion": [ + "中へ", + "没入", + "没頭", + "息を呑む没頭" + ], + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" + ], + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" + ], + "feel.freedom": [ + "自由", + "自由さ", + "解放", + "果てしない解放" ] }, "coast_otters": { @@ -947,6 +1332,24 @@ "河口", "潮汐の入り江", "潮の入り江 · 守られた育成の水域" + ], + "detected.fur": [ + "毛皮", + "密な毛皮", + "世界一密な毛皮", + "世界一密な毛皮 · 約100万本/in²、脂肪層なし" + ], + "feel.tenderness": [ + "やさしい", + "優しさ", + "ぬくもり", + "ゆりかごのようなぬくもり" + ], + "feel.delight": [ + "楽しい", + "喜び", + "歓び", + "ちらちらと輝く歓び" ] }, "coast_kalaloch": { @@ -985,6 +1388,18 @@ "海食柱", "海岸の海食柱", "海食柱 · 波に削り残された岩" + ], + "detected.sunset": [ + "輝き", + "夕焼け", + "ゴールデンアワー", + "ゴールデンアワー · 大気を長く通り赤らむ低い太陽" + ], + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" ] }, "coast_seals": { @@ -1023,6 +1438,30 @@ "上陸岩", "潮間帯の岩", "上陸地 · 潮に洗われる休息の岩棚" + ], + "detected.whiskers": [ + "ひげ", + "触毛", + "感覚のひげ", + "触毛 · 濁った水中で獲物を感じ取るひげ" + ], + "feel.tenderness": [ + "やさしい", + "優しさ", + "ぬくもり", + "ゆりかごのようなぬくもり" + ], + "feel.repose": [ + "休息", + "安らぎ", + "まどろみ", + "陽だまりのまどろみ" + ], + "feel.delight": [ + "楽しい", + "喜び", + "歓び", + "ちらちらと輝く歓び" ] }, "coast_mist": { @@ -1061,6 +1500,30 @@ "岸の岩", "海岸の岩", "海岸の岩 · 陸の立つ縁" + ], + "detected.swell": [ + "波", + "うねり", + "海のうねり", + "うねり · 遠くの嵐が生んだ波" + ], + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" + ], + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" + ], + "feel.hush": [ + "静か", + "静けさ", + "沈黙", + "息をひそめた静けさ" ] }, "reef_lionfish": { @@ -1100,6 +1563,18 @@ "没入", "没頭", "息を呑む没頭" + ], + "feel.poise": [ + "静止", + "気品", + "優雅", + "宙に浮く華麗な気品" + ], + "feel.fragility": [ + "薄い", + "儚さ", + "脆さ", + "いたわりたくなる儚さ" ] }, "reef_spawning": { @@ -1139,6 +1614,18 @@ "没入", "没頭", "息を呑む没頭" + ], + "feel.flow": [ + "流れ", + "フロー", + "奔流", + "群れが織りなすうねり" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ] }, "reef_hawkfish": { @@ -1172,6 +1659,18 @@ "没入", "没頭", "息を呑む没頭" + ], + "detected.coral": [ + "サンゴ", + "礁サンゴ", + "造礁サンゴ", + "造礁サンゴ · この魚が削って砂にする礁" + ], + "feel.radiance": [ + "輝き", + "光輝", + "煌めき", + "宝石のような煌めき" ] }, "reef_coralspacific": { @@ -1210,6 +1709,24 @@ "没入", "没頭", "息を呑む没頭" + ], + "detected.polyp": [ + "ポリプ", + "サンゴのポリプ", + "生きたポリプ", + "ポリプ · 一つ一つが小さな動物、群体の建設者" + ], + "feel.intricacy": [ + "精緻", + "複雑さ", + "細部", + "織り込まれた緻密さ" + ], + "feel.fragility": [ + "薄い", + "儚さ", + "脆さ", + "いたわりたくなる儚さ" ] }, "reef_redsea": { @@ -1249,7 +1766,19 @@ "ハナダイ", "ハナダイ · 礁の上を漂う、プランクトンを食むオレンジの群れ" ], - "measure.depth": "−10 m" + "measure.depth": "−10 m", + "feel.serenity": [ + "穏やか", + "静けさ", + "安らぎ", + "静かで無重力の安らぎ" + ], + "feel.radiance": [ + "輝き", + "光輝", + "煌めき", + "宝石のような煌めき" + ] }, "reef_flowergarden": { "feel.delight": [ @@ -1288,7 +1817,13 @@ "Abudefduf saxatilis", "Abudefduf · 縞模様の「sergeant major」スズメダイ" ], - "measure.depth": "−20 m" + "measure.depth": "−20 m", + "feel.freedom": [ + "自由", + "自由さ", + "解放", + "果てしない解放" + ] }, "abyss_wow": { "detected.jelly": [ @@ -1327,6 +1862,12 @@ "恐れ", "胸騒ぎ", "ゆっくりと冷たい胸騒ぎ" + ], + "feel.vastness": [ + "大きい", + "広大さ", + "無限の広がり", + "めまいを誘う無限の広がり" ] }, "abyss_midwaterexp": { @@ -1366,6 +1907,18 @@ "恐れ", "胸騒ぎ", "ゆっくりと冷たい胸騒ぎ" + ], + "feel.fragility": [ + "薄い", + "儚さ", + "脆さ", + "いたわりたくなる儚さ" + ], + "feel.poignancy": [ + "切なさ", + "哀切", + "ほろ苦さ", + "光に満ちた別れ" ] }, "abyss_hiding": { @@ -1399,6 +1952,24 @@ "恐れ", "胸騒ぎ", "ゆっくりと冷たい胸騒ぎ" + ], + "detected.marinesnow": [ + "粒子", + "マリンスノー", + "落下する有機物", + "マリンスノー · 上層から沈む有機物の屑" + ], + "feel.spectral": [ + "亡霊", + "幽玄", + "亡霊めいた気配", + "水中の亡霊" + ], + "feel.fragility": [ + "薄い", + "儚さ", + "脆さ", + "いたわりたくなる儚さ" ] }, "abyss_bigfin": { @@ -1432,7 +2003,19 @@ "Magnapinna", "Magnapinna · 肘のように曲がる腕を闇へ何メートルも垂らす" ], - "measure.depth": "−2,000 m" + "measure.depth": "−2,000 m", + "detected.arms": [ + "腕", + "肘状の腕", + "垂れ下がる糸", + "肘状の腕 · 横に張り出し、数メートルの糸を引く" + ], + "feel.alienness": [ + "奇妙", + "異質さ", + "異形", + "異形の優雅さ" + ] }, "abyss_dandelion": { "feel.unease": [ @@ -1465,7 +2048,31 @@ "タンポポクダクラゲ", "Rhodaliidae · 海底につながれたクローンの群体" ], - "measure.depth": "−2,500 m" + "measure.depth": "−2,500 m", + "detected.tentacle": [ + "糸", + "触手", + "捕食の触手", + "捕食の触手 · 獲物を捕らえる漂う網" + ], + "feel.radiance": [ + "輝き", + "光輝", + "煌めき", + "宝石のような煌めき" + ], + "feel.wonder": [ + "わあ", + "驚き", + "畏敬", + "超越的な畏敬" + ], + "feel.fragility": [ + "薄い", + "儚さ", + "脆さ", + "いたわりたくなる儚さ" + ] }, "abyss_octopus": { "feel.unease": [ @@ -1498,7 +2105,25 @@ "Graneledone", "Graneledone boreopacifica · 卵を約4.5年抱き続ける" ], - "measure.depth": "−2,500 m" + "measure.depth": "−2,500 m", + "detected.arms": [ + "腕", + "八本の腕", + "吸盤の並ぶ腕", + "八本の腕 · 触れたものを味わう吸盤付き" + ], + "feel.curiosity": [ + "見て", + "好奇心", + "魅了", + "のめり込む魅了" + ], + "feel.tenderness": [ + "やさしい", + "優しさ", + "ぬくもり", + "ゆりかごのようなぬくもり" + ] }, "abyss_seapig": { "feel.unease": [ @@ -1531,6 +2156,24 @@ "Enypniastes eximia", "Enypniastes · 泳ぐナマコ、「頭のない鶏」" ], - "measure.depth": "−2,700 m" + "measure.depth": "−2,700 m", + "detected.veil": [ + "ヴェール", + "口前のヴェール", + "遊泳用のヴェール", + "口前のヴェール · 堆積物を掃き、羽ばたいて泳ぐ" + ], + "feel.strangeness": [ + "変", + "奇妙さ", + "不気味", + "肉感的な奇妙さ" + ], + "feel.curiosity": [ + "見て", + "好奇心", + "魅了", + "のめり込む魅了" + ] } }