Home / All Skills / Content & Media Creation / map-animation
Content & Media Creation · iart-ai/map-animation-skills

map-animation

This skill should be used when the user asks to "make a Vox-style map animation", "animate a map zoom", "draw a route on a map", "highlight a country/region", "use Google Earth Studio", "drop pins on a map and animate them", "pan/orbit a camera over a map", or "add map graphics to an explainer video". Covers Earth Studio→After Effects camera import, GeoJSON/SVG vector map motion, pins/routes/highlights/labels, the 12fps stutter cadence, and data-driven Remotion renders.

L4 High-Privilege · Graded auth & full auditV1 Commit-PinnedExecute CommandNetwork AccessWrite FileDual-pass Audit
Author iart-aiGitHub iart-ai/map-animation-skills ↗Stars 13License MIT(仓库根 LICENSE:MIT License / Copyright (c) 2026 iart.ai;.claude-plugin/plugin.json 声明 "license": "MIT",GitHub API license.spdx_id = MIT)Commit 390ca98bbc
Control levels describe skill capabilities and suggested control measures; they do not represent quality or safety certifications, nor do they dictate usability. Usage decisions rest entirely with users and administrators. Different agent hosts apply varying constraints; do not assume hosts provide automatic protection. Third-party skill copyrights belong to their original authors. Use at your own risk.

1How It Works & Mechanism

The signature style is a quantifiable timing contract: graphic overlay layers step at 12fps (holding the same value for every 2 frames) within a 24fps final render, while base map footage and audio remain smooth at 24fps—stuttering only the overlays, not the base.

skills/map-animation/SKILL.md
The single most recognizable trait of this style is **animating the map graphics at 12fps inside a 24fps edit**.
Translating "make it look like Vox" into a frame rate ratio is the most reusable abstraction of this skill.

Frame stutter is implemented by "quantizing the frame number first, then calculating all graphic metrics using the quantized value," with step size derived from fps (Math.round(fps/12)) rather than hardcoding 2, ensuring the style remains intact across frame rates.

skills/map-animation/SKILL.md
const f = Math.floor(frame / STEP) * STEP; // use `f`, not `frame`, for graphic motion
Placing the quantization point on the consumer side (before computing any animated value) rather than the render layer enables frame-by-frame reproducibility in Remotion.

Two production pipelines are routed based on requirements: for photorealistic terrain/true 3D buildings/cinematic camera moves → Google Earth Studio outputs image sequences + camera .jsx to reconstruct the camera in After Effects and attach overlays to track nulls; for sketch/editorial style, total control, and data-driven workflows → GeoJSON/SVG is projected and rendered via code.

skills/map-animation/SKILL.md
| Photoreal terrain, real satellite/3D buildings, cinematic camera | **Google Earth Studio → After Effects** | Image sequence + camera `.jsx`, composited in AE |
The dispatch table asks "what final output do you want" before selecting the toolchain—avoiding the pitfalls of brute-forcing everything in code or delegating everything to AE.

Vector paths are locked via a shared projection: base maps, pins, routes, and labels all pass through the same projection([lng,lat]), and the camera merely scales/translates the entire group, preventing elements from drifting relative to the shot.

skills/map-animation/SKILL.md
The same `projection([lng,lat])` converts every pin coordinate to a screen position, so pins, routes, and labels all share one coordinate space
"Pin drift" is the most common flaw in map motion graphics; here it is systematically eliminated by using a shared coordinate space rather than manual visual inspection.

The overlay toolkit has dedicated mechanics: pin drops (spring overshoot followed by settling + optional pulse), route tracing (pathLength=1 normalization + dashoffset), regional highlights (focus + context: target brightened while the rest dims), and label guide lines (anchored to projected points, remaining horizontal).

skills/map-animation/SKILL.md
`pathLength="1"` normalizes any route length so one progress value (0→1) draws it.
Great circle routes are densified with geoInterpolate to prevent Mercator straight lines from incorrectly rendering flight paths.

Orchestration is data-driven: a single beats array simultaneously dictates camera targets, pin sequences, route segments, and labels, while total duration is computed by calculateMetadata summing holds—enabling new videos by simply changing data without manual re-keyframing.

skills/map-animation/SKILL.md
One array → camera targets, pin order, route segments, and labels stay in sync.
Parameterizing "map narrative" into an array is what enables batch production and reusability.

Verification is geographic fidelity-driven: every pin must land on accurate coordinates, routes must connect correct cities, highlighted areas must match target regions, and labels must be spelled correctly; it also requires sampling "two adjacent frames" to verify that overlays hold across two frames while the base camera advances frame-by-frame.

skills/map-animation/SKILL.md
Two adjacent overlay frames are identical (12fps step holds) while the base camera advanced
"Adjacent frames identical" serves as a rare, machine-verifiable stylistic assertion—turning an aesthetic trait into a testable condition.

The critical step in the Earth Studio pipeline is checking 3D Camera Export during export: only then are the camera .jsx and track-point data generated alongside the image sequence; missing it leaves only raw footage, preventing camera reconstruction in AE and breaking overlay tracking.

skills/map-animation/references/earth-studio-to-ae.md
**CRITICAL — enable the After Effects / 3D Camera Export option**
The documentation turns the most common failure mode (forgetting to check the box → missing .jsx) into an explicit warning with a "re-export" remedy.

2Core Capabilities

0112fps stutter quantization (code-side frame number quantization; AE-side Posterize Time(12) or 12fps nested precomp)
02Vector projection: d3-geo (Mercator / EqualEarth / Orthographic) + fitSize auto-framing, GeoJSON feature → SVG path
03Vector camera: transform translate + scale to target lat/lng, with labels counter-scaled by 1/scale to maintain legibility
04Pin drop (spring overshoot settling, staggered and quantized to 12fps steps) + optional pulse ring
05Route tracing: point-by-point projection to SVG path + pathLength normalization + dashoffset; great-circle densification via geoInterpolate, with optional progress tracker
06Region highlight: focus + context (target feature illuminated with stroke, background dimmed), or clip-path wipe / stroke pulse
07Labels & leader lines: anchored to px([lng,lat]), appearing after pin arrival, remaining upright without map rotation, counter-scaled when necessary
08Earth Studio → AE camera import workflow (export with 3D Camera Export checked → run .jsx to rebuild 3D camera and track nulls → parent overlay to track null → apply 12fps only to the overlay precomp)
09Data-driven beats orchestration: zod schema + calculateMetadata summing holds for total duration, swapping data to generate new videos

3External Dependencies

KindDependency / Endpoint
clinpx remotion still / render(矢量路径的帧验证与编码)
packaged3-geo(geoMercator / geoPath / geoInterpolate 等投影与球面插值)
network底图数据源:Natural Earth(国家/州界 GeoJSON)或 world-atlas TopoJSON(用 topojson.feature 转换)
apiGoogle Earth Studio(浏览器工具,需 Google 账号;产出图像序列 + 相机 .jsx + track 数据)
packagezod(beats schema 校验)
cliffmpeg / ffprobe(contact-sheet.sh 拼图与 probe-mp4.sh 规格断言)

4Recommended Governance & Evidence

Suggested Controls for Safe Operation
For Agent Runtime
Graded/per-use authorization, sandbox recommended
For Administrators
Approval workflow, rollback support, full audit
Evidence & Triggers (File Paths & Excerpts)
  • scripts/: Executes local scripts or commands: npx remotion still / render (SKILL.md Verify loop): fetches and runs Remotion CLI on demand from npm
  • 网络端点: Declares external network access: Google Earth Studio (earth.google.com/studio): Path A camera keyframing and user interaction in Google's web app
  • 本地工作目录: File I/O and artifact output: out/*.mp4, out/demo.gif, out/f-*.png (final renders and frame-by-frame stills), sheet.png (spritesheet/contact sheet)
Audit Notes: Evaluation target is the skill's own directory (skills/map-animation/: SKILL.md + two files in references/ + 0-byte README.md; no scripts, no credential access, no disk writes inside directory). The Amber rating is triggered by the execution chain and external attack surface: ① The output contract requires using `npx remotion still/render` to render vector maps, where npx fetches and executes Remotion CLI and @remotion/* packages from the npm registry, running project code locally in a bundle + headless Chromium (matching author's precedent: remotion-video rated Amber for the same reason); ② Relies on third-party packages d3-geo, zod, and map datasets (Natural Earth / world-atlas / topojson); ③ Path A depends on Google's Earth Studio service (requires Google account; reference notes Google imagery usage and attribution terms). The skill itself does not read credentials/env, invoke business APIs, scrape, or bypass security, avoiding Red. Trigger conditions: code path only fetches remotely during actual rendering; Earth Studio path is operated manually by the user in-browser without agent-mediated login.

5Second-Pass Verification

  • [ok] 外部依赖调用点复核(npx remotion / d3-geo / zod / Earth Studio / 底图数据) — SKILL.md 确有 `npx remotion still MapSeq out/f-start.png ...` 与 `npx remotion render MapSeq out/map.mp4`;SKILL.md 代码块确有 `import { geoMercator, geoPath } from "d3-geo";`;vector-maps 确有 `export const schema = z.object({` 与 Natural Earth/world-atlas 建议;earth-studio-to-ae 确有 earth.google.com/studio 与 3D Camera Export 告警。全部落地。
  • [ok] Earth Studio 路径是否引入 agent 侧凭证行为 — 文档措辞是「Keyframe in Earth Studio (browser)」「In After Effects: … Run Script File…」——由人操作;skill 未要求 agent 登录 Google、未涉及任何 cookie/token 读取。故不计入 credential_reads,只作为外部服务依赖记入 external_deps 并在 reason 中标注账号前提。
  • [ok] 12fps 量化实现与描述一致性 — SKILL.md 的代码块 `const STEP = Math.round(fps / 12); const f = Math.floor(frame / STEP) * STEP;` 与文字「at 24fps, hold each graphic-layer value for 2 frames (update on even frames only)」一致;vector-maps 用同一写法并额外给出 `Math.max(1, …)` 的 30fps 保护;AE 侧给了 posterizeTime(12) 与 12fps 嵌套 precomp 两种等价做法。三处口径一致。
  • [ok] 「共享坐标空间」主张的成立性 — 矢量路径中底图用 `toPath(feat)`、pin/route/label 用 `px([lng,lat])`(同 projection),相机是对同一 group 的 transform;AE 路径则用 track null + `toComp([0,0,0])` 表达式。两条路都确实把「元素锁定」交给共享坐标系,而非逐元素手调关键帧。
  • [ok] 坐标序与投影边界的风险是否明示 — vector-maps 的 Gotchas 明示两点:GeoJSON 与 projection() 都是 [lng, lat] 而非 [lat, lng](写反会把每个 pin 送错位置);Mercator 在高纬/跨 ±180° 会截断或撕裂,建议世界视图改用 geoEqualEarth/geoNaturalEarth1 或旋转投影。均为操作级警告,非泛泛提醒。
  • [discrepancy] 跨目录 / 跨 skill 引用可解析性 — 正文引用的 `scripts/contact-sheet.sh`、`scripts/probe-mp4.sh` 位于仓库根,单装本 skill 目录会悬空(需装整个 repo);另外 SKILL.md 把矢量路径定位为「Remotion 或 D3」,但 D3 网页变体只给要点(?t 冻结),完整网页交付契约与同 pack 其他 skill 相比更薄——属能力边界,非错误。
  • [ok] 功能声明 vs 实际能力 — frontmatter 宣称覆盖 Earth Studio→AE 相机导入、GeoJSON/SVG 矢量地图动效、pin/route/highlight/label、12fps 顿帧与数据驱动 Remotion 渲染;正文两条路径与两份 reference 逐项兑现。未夸大——AE 侧的产出被明确定义为「AE 工程 + 渲染素材,由人工 scrubbing 验收」,而非声称 agent 能自动完成 AE 合成。

6Verdict & Scenarios

  • Breaks down the "Vox style" into a computable frame rate contract (12fps in 24fps, STEP derived from fps), making the aesthetic reproducible and assertable
  • Systematically eliminates pin drift via a shared coordinate space instead of post-render visual inspection
  • Provides a machine-verifiable style assertion: adjacent frames of overlays must be identical while base map camera advances
  • Data-driven orchestration (single beats array + calculateMetadata summation) makes "swapping geographic data = producing a new video" possible
  • Explicitly warns against the error most likely to break the entire AE workflow (forgetting to check 3D Camera Export)
  • Best for: Ideal for documentary/explainer sequences that require establishing a sense of place: zooming from globe to city, orbiting landmarks, or panning along borders. Also fits showing geographic movement (routes, supply chains, migrations, flight paths) and step-by-step geographic breakdowns by highlighting countries/regions with labels. Use Earth Studio + AE for photorealistic bases, and GeoJSON/SVG + Remotion for sketch/editorial styles and automated batch production.
    Not for: Not suitable for applications requiring accurate metric/geodetic representation (surveying, true area comparison)—Mercator introduces distortion, requiring equal-area projections instead. Not suitable for interactive map apps (outputs video/motion assets, not interactive maps). Not suitable for fully automated pipelines that cannot accommodate manual GUI steps (Path A inherently requires manual operations).
    Install Agent-Ready
    ① Verified Mirror 2026-09-28
    Option A · Direct DownloadDownload map-animation.tar.gz
    sha256: 8f12ba8c5bbce5eb…
    Option B · Copy Guide for Agent
    install.json
    Agents automatically download and verify mirrors from this JSON guide.
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 390ca98bbc.