by Leonxlnx
A golden-hour Japanese temple built entirely in code with three.js. No models, no textures, no HDRIs. Rendered offline into a 70s 1080p60 film
# Add to your Claude Code skills
git clone https://github.com/Leonxlnx/golden-templeGuides for using ai agents skills like golden-temple.
See how golden-temple compares with popular alternatives.
golden-temple is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by Leonxlnx. A golden-hour Japanese temple built entirely in code with three.js. No models, no textures, no HDRIs. Rendered offline into a 70s 1080p60 film. It has 53 GitHub stars.
golden-temple's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/Leonxlnx/golden-temple" and add it to your Claude Code skills directory (see the Installation section above).
golden-temple is primarily written in JavaScript. It is open-source under Leonxlnx on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh golden-temple against similar tools.
No comments yet. Be the first to share your thoughts!
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
A golden-hour Japanese temple complex built entirely in code with three.js, rendered offline into a 70-second 1080p60 film.
golden-temple-1080p60.mp4 is attached to the latest release: 70 seconds, 1920×1080, 60 fps, H.264, with music. The video is not stored in the repository.
Everything you see is code. The repository contains no 3D models, no texture files, no HDRIs and no image assets. The buildings, roof tiles, bracket sets, gold fittings, statues, trees, lotus, koi, water, terrain, clouds and sky are all generated by JavaScript when the page loads, and every surface is procedural GLSL injected into three.js's physically based materials. The few textures the scene uses, such as foliage atlases and terrain masks, are computed or drawn onto canvases at load time. The only third-party runtime library is three.js (r186).
All stills are single frames from the finished film.
Requirements:
CHROME environment variable to the executable.PATH for contact sheets, the film and the musicgit clone https://github.com/Leonxlnx/golden-temple.git
cd golden-temple
npm install
npm run dev
Open http://localhost:5173/. The first load builds the whole world and compiles its shaders, which can take a few minutes on an integrated GPU the first time (shaders are cached afterwards). The status line in the top-left corner shows progress.
The page is controlled by URL parameters:
| Parameter | Effect |
|---|---|
| (none) | Interactive preview at preview quality. Drag to orbit. Keys 1–9 and 0 play shots 1–10, space pauses, f returns to the free camera, and c copies the current camera as a cam=…&look=… query. |
shot=N&t=sec |
One still frame of the film: shot N (zero-based, 0–9) at t seconds into the shot (0–7). Renders at final quality with 4 sub-frames. |
w=1920&h=1080 |
Canvas size. The default is 1280×720. |
spp=8 |
Sub-frames per frame (anti-aliasing, motion blur, soft shadows). |
q=preview or q=final |
Quality preset. preview uses a 2048² shadow map, 10 AO samples, no depth of field and sky-only ambient light. final uses an 8192² shadow map, 16 AO samples, depth of field and ambient light captured from the built scene. |
modules=pagoda,terrain |
Builds only the listed world modules: terrain, pond, hall, interior, pagoda, bridge, buildings, props, vegetation. Without terrain, a plain ground disc is used. |
cam=x,y,z&look=x,y,z&focal=35 |
An explicit camera, in metres. The focal length is in millimetres for a 36 mm-wide sensor. |
exp, fstop, focus, dof=1, ao, bloom, fog, vol |
Post-processing overrides, for example &exp=1.2&dof=1&fstop=2.8. |
For example, http://localhost:5173/?shot=0&t=5&w=1920&h=1080&spp=8 renders the frame at the top of this page.
tools/snap.mjs drives headless Chrome on your GPU. It loads the page once, builds the world once, then renders any number of views and saves each one as a PNG. Keep npm run dev running in another terminal.
# one still
node tools/snap.mjs "shot=0&t=5&w=1920&h=1080&spp=8" out/shot1.png
# several views from one page load
node tools/snap.mjs "w=1920&h=1080&spp=8" --view "shot=3&t=0.5" out/bell.png --view "shot=6&t=6.9" out/sanctum.png
# contact sheet of all 10 shots at three moments each -> out/sheets/review.jpg
node tools/sheet.mjs --t 0.5,3.5,6.5 --tag review
sheet.mjs also takes --shots 0,4,9, --w, --h, --spp and --extra "<query>" for post overrides. A lock file in out/ serialises GPU use, so tools started at the same time wait for each other.
Environment variables for the headless tools: CHROME sets the browser executable, ANGLE sets the ANGLE backend (d3d11 by default on Windows, the browser's default elsewhere), and VITE_PORT sets the dev-server port if you run Vite on a port other than 5173.
npm run dev # terminal 1
node tools/render.mjs --w 1920 --h 1080 --fps 60 --spp 8 --out out/temple.mp4 # terminal 2
The page renders each frame, reads the pixels back and posts them to the Node process, which pipes raw RGBA into ffmpeg (libx264, CRF 14, preset slow, BT.709). Nothing is written to disk between the GPU and the encoder.
Measured on the machine that made the film, a laptop with an AMD Radeon 780M integrated GPU:
out/.chrome-profile;The renderer idles 60 ms after every frame and rests for 15 s every 250 frames, so an integrated GPU does not run flat out for hours. These pauses add about 8 minutes to the full film. To change them, pass page parameters through --extra, for example --extra "cool=0&restEvery=0".
Useful options:
--from N --to M renders only frames N to M−1. tools/splice.mjs puts a re-rendered segment back into a finished film, frame-accurate.--spp 2 --w 960 --h 540 makes a quick draft.--crf and --preset set the x264 quality.The track is not redistributed in this repository. Download it, then edit it to the 70-second cut and mux it onto your render:
npm run fetch-music
node tools/score.mjs --video out/temple.mp4 --out out/temple_final.mp4
fetch-music downloads the MP3 from incompetech.com into assets_audio/, which git ignores, and checks it against the file the edit was timed with. score.mjs joins two sections of the track with a crossfade so that the string crescendo lands on the cut at 0:28 and the biggest hit lands on the cut to the Buddha at 0:42. It then normalises loudness to −16 LUFS and muxes the result as AAC. The video stream is copied, not re-encoded.
If you share a film made with this music, credit it as shown in Credits.
| # | Time | Opens on | Reveals |
|---|---|---|---|
| 1 | 0:00 | A glowing openwork lantern at the pond pavilion | Pulls back across the pond to the pagoda, the arched bridge and the main hall |
| 2 | 0:07 | A lotus in full bloom: stamens, seed pod and dew | Glides low through the lotus bed toward the bridge and the hall |
| 3 | 0:14 | A gilt gibo |