Three.js Earth Render
Workflow
- Use
scripts/render_threejs_earth.pyfrom this skill. - Pass
--workspacewhen the user specifies where the source checkout should live; otherwise use the current directory. - Pass
--outputwhen the user specifies a GIF/MP4 path; otherwise useout/threejs-earth.gif. - For customized routes, edit
threejs-earth/src/routeConfig.jsfirst and render with--skip-updateso local edits are preserved. - Run the script and wait for completion.
- Return the final absolute output path printed by the script.
Command
Installed Skill Resolution
Use the installed skill copy, not the source repo checkout:
Behavior
- Repository source is fixed to
https://github.com/vibe-motion/threejs-earth.gitby default. - Reuse
workspace/threejs-earthif it exists; otherwise clone it. - If the repo already exists, fetch and fast-forward the target branch unless
--skip-updateis passed. - Serve the Three.js app through a local HTTP server; do not open it with
file://. - Use Puppeteer, not Remotion, because this is a browser-based 3D scene.
- Seek each frame through
window.__SCENE_3D_EXPORT__.setFrame(frame)so frames are independently reproducible. - Capture a PNG frame sequence, then encode
.gifor.mp4withffmpeg. - Default render is a 30 fps GIF at 448 px wide. Use
--output-width 0to keep the native 2048 x 1152 capture.
Project Notes
- Default route is Hangzhou to Paris in
src/routeConfig.js. - The app exports a 16:9 scene at 2048 x 1152 for
--render-scale 1and 4096 x 2304 for--render-scale 2. - The scene uses CDN imports for Three.js and local high-resolution Earth texture assets, so network access is required on first load.
Requirements
gitnodenpmffmpeg- network access for clone/update, CDN imports, and Puppeteer installation

