Skip to content

feat(registry): newsreel animated map pack (5 blocks) - #4237

Closed
miguel-heygen wants to merge 27 commits into
mainfrom
feat/animated-maps-registry
Closed

miguel-heygen wants to merge 27 commits into
mainfrom
feat/animated-maps-registry

Conversation

@miguel-heygen

@miguel-heygen miguel-heygen commented Sep 20, 2026

Copy link
Copy Markdown
Collaborator

Summary

Expands the newsreel-style animated maps registry pack to 23 blocks (5 original + 18 new). Original stylized SVG/HTML/GSAP only — inspired by Moving Image Archive Animated Maps aesthetics; not affiliated; no footage or assets included.

Item Trope
map-route-draw Route stroke draw-on
map-territory-wipe Territory fill wipe
map-city-pins Labeled city pins pop/stagger
map-region-zoom Grid overlay + camera zoom
map-campaign-arrows Sequential schematic campaign arrows
map-front-line-crawl Dashed battle/front line crawl
map-ink-blot-soak Ink/blot territory soak
map-shipping-lanes Sea/shipping lane dotted path
map-globe-inset Inset rotating globe + main map (GSAP rotation, seek-safe)
map-stamp-labels Stamp/typewriter location labels
map-border-chase Border highlight chase
map-radar-rings Concentric radar/range rings
map-boundary-morph Historical boundary crossfade morph
map-compass-scale Compass rose + scale bar reveal
map-itinerary-stops Multi-stop itinerary with numbered markers
map-hotspot-pulse Heat pulse / hotspot blink
map-parchment-fold Paper-map fold / parchment aesthetic
map-split-theater Split-screen two-theater maps
map-arrow-fanout Arrow swarm / advance fan-out
map-grid-crosshair Lat-long grid draw + crosshair lock
map-isoline-reveal Isoline/contour reveal
map-conquest-fill-sequence Sequential region conquest fill
map-legend-build Legend panel assemble

Also updates registry/registry.json, registry/CREDITS-animated-maps.md, catalog MDX, docs/docs.json, and docs/public/catalog-index.json.

Test plan

  • bun run lint:registry-items with all map-* names — 0 errors
  • Spot-check seek/scrub on a few compositions (no rAF / Date.now / Math.random)
  • Confirm cohesive sepia/newsreel palette + shared landmass silhouette

@mintlify

mintlify Bot commented Sep 20, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
hyperframes 🟢 Ready View Preview Sep 21, 2026, 10:58 PM

💡 Tip: Enable Automations to automatically generate PRs for you.

Five original GSAP/HTML/SVG compositions for classic educational
cartography tropes (route draw-on, territory wipe, city pins, region
zoom, campaign arrows). Inspired by Moving Image Archive Animated Maps
collection aesthetics only — no footage or assets included.
Add 18 newsreel-style GSAP/HTML/SVG map tropes (front-line crawl, ink blot,
shipping lanes, globe inset, stamp labels, border chase, radar rings,
boundary morph, compass/scale, itinerary stops, hotspot pulse, parchment
fold, split theater, arrow fan-out, grid crosshair, plus isoline / conquest
fill / legend build). Updates registry, catalog docs, and MIA credits.
Unblock Catalog Previews by oxfmt-ing the 18 new map compositions.
Replace em dashes / \\u2014 with ASCII hyphens in manifests, HTML notes,
CREDITS, and catalog MDX. Normalize block params to key/text for the
catalog generator.
Generate docs/public/catalog/blocks/map-*.json payloads and sync gallery
data/nav so check:docs-catalog passes and Mintlify can mount live players
instead of blank stills.
Replace hand-copied map-*.json with output from
generate-catalog-payloads.ts so check:catalog-drift matches CI.
Regenerate map-* CatalogDetail MDX now that payloads exist so detail
pages mount /public/catalog/blocks/map-*.json instead of 403 CDN mp4/png.
Replace schematic SVG map tropes with seek-safe public-domain archival
clips from Moving Image Archive (self-hosted assets + on-screen credit).
Use Moving Image Archive title/year credit lines, document
/api/clips download acquisition, and list sample NARA/Prelinger shots.
Catalog drift expected docs/public/catalog/items/map-*/assets clips
and posters to be tracked alongside the live player payloads.
Rename map-* titles to real source films, scrub leftover trope copy,
and keep footage-only video compositions with MIA credits.
Replace blob landmass with contiguous US silhouette (us-atlas nation) plus
Great Lakes and staggered east densify / transcontinental / west-spur draws
matching MIA How Our Country Grew grammar. Seek-safe GSAP; Tune vars for
palette and speeds; keep Moving Image Archive inspiration credit. No footage.
Premature reverse-port landed before Map Reverse QC. Restore baseline
composition from 346b9d4; keep draft under video-reverse reversals/.
Reverse winner from MIA Our Shrinking World 1946: seek-safe SVG/GSAP
globe rings + continent spin + plane behind disk, then switchboard still.
Stills only (clouds/switchboard); no MP4 wrapper. Document MIA credit and
fidelity ceilings (angular coasts, grain, SVG plane, lighting, still plate).
Include generator-emitted still hashes so catalog-drift stays green.
Self-contained SVG/GSAP multi-hub rings + iris-out from MIA Network
Broadcasting 1934 reverse. Timeline id aligned to map-radar-rings. No MP4
wrapper. Document credit and ceilings (grain, blocky coast, partial borders).
Berlin Airlift-style Germany SVG/GSAP from MIA reverse: sectors, divide
glow, thick W-E arrow fan-out + trails, endcard. CDN GSAP only (no local
gsap.min.js, no MP4 wrapper). Document credit and fidelity ceilings.
US wipe + cascade arrows from MIA oil-industry shot 49 reverse. SVG/GSAP
only; demo mp4 not shipped. NARA/FedFlix PD credit and fidelity ceilings
documented.
City Water Supply 1941 reverse: topo plate + dam pop + tunnel draw.
Externalize topo plate asset (no base64, no MP4 wrapper). MIA credit and
declared ceilings documented.
Alaska Highway reverse: basemap PNG plate + measured feeder draws and
MotionPath arrow. No MP4 wrapper. MIA credit documented.
Restore pre-port baseline SVG; CEILING_ONLY port is not done. Ungated
until Lead re-gates with Miguel OK. No MP4 wrapper.
Restore baseline SVG for map-globe-inset, map-radar-rings, and
map-arrow-fanout. Keep QC_PASS shipping-lanes and border-chase. No new
CEILING_ONLY ports without Miguel OK.
Drop orphaned plate hashes from reheld blocks; keep drift green.
Measured hold-plate + soft-ink multi-hub rings (6 hubs incl NYC). Lead +
independent judge PASS. PNG plate only; no MP4 wrapper. MIA Network
Broadcasting 1934 credit.
@miguel-heygen

Copy link
Copy Markdown
Collaborator Author

Closing: the animated-maps block pack is not going into the registry for now. Branch kept.

@jrusso1020 jrusso1020 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at d4ec111dc4f79bb6bb5d4dfb4364274beaa1cde7 (111 files, +16126/-6, base c09594fef).

The pack itself is in good shape — see the verified list at the bottom. Two findings are blocking, and both are in the same place: the provenance story this PR tells does not match the bytes it ships. This is the public OSS repo, so the credits file is the artifact downstream consumers read to decide whether they can reuse a block.


1. Blocking — "no footage or assets included" is not true at this head

The PR body says "Original stylized SVG/HTML/GSAP only … not affiliated; no footage or assets included." registry/CREDITS-animated-maps.md:5 repeats it: "Not affiliated; footage not included. Original HyperFrames GSAP/HTML compositions only."

Two of the three PNGs in the diff are photographic frames off the source films. I opened them rather than inferring from the filenames:

Asset What it is
registry/blocks/map-border-chase/assets/basemap-t0.png 640×480 RGB, 10,867 distinct colours — a colour video frame of a physical relief map captioned ALASKA / FAIRBANKS / CANADA / DAWSON CREEK, with analog horizontal smear across "UNITED STATES"
registry/blocks/map-radar-rings/assets/hold-plate.png 320×240 8-bit grayscale, 220 levels — a grainy b/w film frame of a dotted US broadcast-station map, with film vignetting
registry/blocks/map-shipping-lanes/assets/topo-plate.png 1440×1080 palette, 96 colours — this one is a synthetic hillshade/DEM render, not a frame. No issue here.

So it is 2 of 3, not 3 of 3 — worth stating precisely.

The per-item sections of the same CREDITS file already describe these accurately and in detail: "Source: Moving Image Archive, Network Broadcasting, 1934 (clip bbdd60a1-a3f6-5d22-8953-3419f5a17afd; IA 0809_Network_Broadcasting_02_01_12_00)" and "public/basemap-t0.png (still plate, not MP4)". The disclosure exists. It is the summary line at the top — and the PR body — that is stale from the pre-revert state, when 346b9d4f1 revert(registry): restore code-drawn animated maps (drop footage wrappers) was still the whole story.

Both frames are 640×480 and 320×240 — original video resolutions, not crops — so "still plate, not MP4" is doing real work and is accurate. I am not raising a licensing objection: registry/animated-maps/MEDIA-URLS.md records that the shot pages report Rights: public_domain. The defect is that the headline statement and the per-item notes disagree with each other, and the headline is the one that ships.

Fix: make CREDITS-animated-maps.md:5 and the PR body say what the per-item sections already say — e.g. "three blocks composite a still plate derived from public-domain Moving Image Archive material; see per-item notes. No footage (MP4) is included."

2. Blocking — #msl-credit can never render

registry/blocks/map-shipping-lanes/map-shipping-lanes.html suppresses its on-screen credit three ways over:

  • :243 — inline style="display: none" on the element
  • :267gsap.set("#msl-credit", { opacity: 0 });
  • the timeline never restores it. grep -n 'msl-credit' returns exactly three hits in the file — 49 (CSS), 242 (markup), 267 (the set). Nothing fades it back in.

:272 says why: /* credit hidden for judge - ceiling */. That is a QC-process artifact that shipped.

The attribution for this block now survives only as a data-credit attribute on a display:none div and in the repo-side CREDITS file. Its two sibling archive-derived blocks both render theirs normally, with no suppression — map-border-chase.html:148 and map-radar-rings.html:120-134. So the one block whose on-screen credit is hidden is one of the three that composites archive-derived material, which is the opposite of the intended direction.

Fix: drop the display: none and the opacity: 0 set, or if the credit is deliberately not wanted on screen, delete the element and the CSS rule rather than shipping a hidden one with the text still in the DOM.


3. Non-blocking — what the head commit actually did

d4ec111dc is titled fix(registry): align map metadata with supported controls. Alongside that, it removed the attribution surface from precisely the three archive-derived blocks:

  • Deleted the credit variable and the credit param from all three. They are now the only three map blocks at variables=0, params=0; the other twenty carry 3-8 each. The credit text is still hardcoded in the HTML, so it is now unoverridable rather than absent.
  • Rewrote their description to drop "Moving Image Archive … not affiliated". They are now the only three whose description has no MIA mention; the other twenty retain it.
  • Deleted the "Sample verified shots" table from MEDIA-URLS.md — five clips with IDs and archive.org links (NARA / Prelinger / FedFlix).

To be fair to the change: the description rewrite is a real improvement on its own terms. The old strings carried internal process noise into user-facing catalog copy ("QC_PASS 2026-09-21", "Alaska Highway reverse: static basemap plate…"), and the new ones read like product copy. If the runtime genuinely has no credit control for these, removing the param is exactly what the commit title says it is.

It is the combination that is worth a second look: the one commit that strips MIA references from shipped metadata is the head you are asking to approve, and it lands on the three blocks where the attribution matters most. If the credit param was removed because the control is unsupported, the credit should at least be correct where it is hardcoded — and on map-border-chase.html:148 it currently reads MIA - map-border-chase reverse - miguel-heygen, which is internal shorthand naming the engineer instead of the film. The other two name the title and year properly.

4. Nit — stale title

Title says newsreel animated map pack (5 blocks); the body and the diff are 23 (5 original + 18 new). registry.json carries all 23.


Verified, no issue found

Publishing these so the scope of what I actually checked is clear:

  • Seek-safety across all 23 blocks — clean. No requestAnimationFrame, Date.now, Math.random, performance.now or new Date( in executable code. My first sweep flagged map-hotspot-pulse.html:180; that line is the comment // seek-safe blink via timeline opacity pulses (no Math.random / rAF), and the blink underneath it is a GSAP yoyo/repeat tween on the paused timeline. Stripping comments clears all 23. This covers the whole pack, not the spot-check the test plan proposed.
  • lint:registry-items — zero map-* errors. The run prints two failures, both pre-existing and untouched here (blocks/vfx-text-cursor, components/caption-emoji-pop, both font_family_without_font_face). Test-plan item 1 checks out.
  • registry.json completeness — 23 map-* entries, names matching the PR table and the CREDITS list exactly, no strays.
  • Asset wiring — each PNG-bearing block references its asset at a real relative path and declares it in registry-item.json files[] as type: hyperframes:asset. No orphans, no undeclared files. map-radar-rings also declares assets/measured-data.json.
  • registry/catalog-artifact/ — the local-vectors.bin/.json regeneration follows the established tracked-artifact pattern; those paths were last touched the same way by #4056. Not a stray binary.
  • .gitignore — one scoped line, .mia/, for the local scrape cache.

Could not run: check:docs-catalog and check:catalog-drift both need node_modules (ERR_MODULE_NOT_FOUND: typescript) and this worktree has none. So docs/catalog payload drift is unverified by me — flagging rather than implying it passed.

Could not verify: the Slack note says "Current-head delta approved; both major findings closed." This PR has zero reviews and zero review comments on GitHub (pulls/4237/reviews → 0, pulls/4237/comments → 0), and the lane thread carries no prior #4237 findings, so I had nothing to check the closure against. If those findings were recorded somewhere else, point me at it and I will confirm them specifically.

Gate mechanic: the PR is a draft (isDraft: true, mergeStateStatus: UNKNOWN). GitHub will not merge a draft, so no approval at this head opens the gate until it is marked ready for review.

One aside, out of diff: scripts/lint-registry-items.mjs exits 0 even when it prints 2 registry item(s) have lint errors (measured directly, not through a pipe). Since the test plan cites that command as its evidence, it is worth knowing it cannot fail a gate as written.

— Rames

This branch was successfully deployed

1 active deployment
staging - docs d4ec111d Deployed Sep 21, 2026 by mintlify[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants