DEV Community

JANCTION Render
JANCTION Render

Posted on Fully Autonomous

Claude Code wrote a Blender scene from one sentence, saw its own mistake in the preview, and fixed it before rendering

I work on JANCTION Render at JasmyLab, and this run was done by Claude Code itself: it wrote the bpy script, called the MCP tools, looked at the images and changed the script. I only typed the sentence. Numbers are from the production service on 2026-11-02.

The sentence:

Three stacked books and a pencil on a wooden desk, soft window light from the left, the camera pushes in slowly over 48 frames.

Site: https://render.janction.jp

Setup

claude mcp add --transport http janction-render https://render.janction.jp/mcp
Enter fullscreen mode Exit fullscreen mode

That is the remote server; the first tool call opens an OAuth page that creates a free key. For this run I used the stdio package instead, because it sends local files and saves results locally:

claude mcp add janction-render -e JANCTION_RENDER_SERVER=https://render.janction.jp -- uvx --from janction-render janction-render-mcp
Enter fullscreen mode Exit fullscreen mode

Either way Claude Code sees 13 tools. The ones that matter here are render_preview, render_estimate and render_final.

Round 1: the script, and a preview that looked wrong

Claude Code wrote about 80 lines of bpy: a desk, three cubes as books with lighter blocks for pages, a six-sided cylinder as a pencil, two area lights, a camera keyed from frame 1 to 48. Then it called render_preview with frames="1,16,32,48".

First preview: four frames tiled, desk blown out, black void behind it

3.46 GPU-seconds, back in 5 seconds, free. The built-in critic said ok with a score of 100. Claude Code disagreed with it, which is the point of this post: the desk was blown out by a 250 W area light, and the desk was only 1.6 m wide, so the camera saw a black void behind it (the scene had no world).

Round 2: three edits, one more free preview

The changes Claude Code made to its own script:

  • window light 250 W → 90 W, fill 40 W → 15 W
  • desk 1.6 × 1.0 m → 4.0 × 3.0 m so no edge is in the frame
  • a world background, warm grey at strength 0.6, instead of nothing

Second preview: even light, no void

Another 3.46 GPU-seconds, free. Previews stay free up to 2 GPU-minutes a day, so looking twice costs nothing.

Round 3: a 12-frame test, then the estimate

The estimate before any final said 271 GPU-seconds for 12 frames with confidence: low and asked for a short contiguous test first. The key's recent finals were a heavy 50 MB scene, so the guess was far too high this time. The test:

render_final(scene_id=..., frame_start=1, frame_end=12, width=1920, height=1080, samples=128, output="png", max_yen=60)
Enter fullscreen mode Exit fullscreen mode

46.96 GPU-seconds for 12 frames (3.9 GPU-seconds a frame at 1080p, 128 samples, denoised), 24 seconds of wall time on 4 workers, 12 of 12 frames present, charged 5 JPY.

render_estimate for frames 1–48 after the test: 169 GPU-seconds, about 40 seconds of wall time, about 17 JPY, basis: scene, confidence: high. That is the number to show a user before the full render.

Round 4: the final

render_final(scene_id=..., frame_start=1, frame_end=48, width=1920, height=1080, samples=128, output="mp4", fps=24, max_yen=40)
Enter fullscreen mode Exit fullscreen mode

186.65 GPU-seconds, 64 seconds of wall time, 48 of 48 frames, 0 black frames (checked with ffmpeg), MP4 at 1920x1080 and 24 fps. Charged 19 JPY.

Frame 40 of the final render

The whole run in numbers

Step GPU-seconds Wall time Cost
Preview 1 (4 frames) 3.46 5 s free
Preview 2 (4 frames) 3.46 5 s free
Test, frames 1–12 at 1080p 46.96 24 s 5 JPY
Final, frames 1–48 at 1080p, MP4 186.65 64 s 19 JPY

From one sentence to a 48-frame 1080p Cycles clip: about 2 minutes of waiting and 24 JPY, with the agent catching its own lighting mistake on the way. A new key starts with 100 JPY of GPU time with no card (14 days) and 400 JPY more after saving a card that is not charged; this whole run fits inside the first 100 JPY. Current prices: https://render.janction.jp/pricing

What I would tell other people running this

  • Make the agent look at the preview image itself. The critic catches framing and exposure problems, but "ok" is not the same as "what you asked for".
  • Run a short contiguous test before trusting the estimate. Both runs I did today had a first estimate that was off by about 6x in opposite directions, and both were right after the test.
  • Pass max_yen. The service holds at most that amount and charges only the GPU time used.

The script Claude Code wrote is short enough to paste; ask it for the same sentence and compare. Docs for agents: https://render.janction.jp/llms.txt · Source (MCP server, CLI, client): https://github.com/JasmyLab-JANCTION/janction-render

Top comments (0)