Skip to content
Aman SinghWorkshop

The castle

Playground no. 1: one castle shot, rebuilt seven times by prompting Anthropic and OpenAI models.

Watch the final cut
Version 7: a castle with a twin-towered gatehouse, red banners and crowned corner towers above a villageVersion 1 of the same shot: a plain castle on a bare hill
Version 1, inset, and version 7 behind it. The same shot, a week apart.
Me
Direction, prompts and the final calls.
Opus 5.5
Anthropic, in Claude Code. The scene scripts, the camera and every render.
gpt-6.1-sol
OpenAI, in Codex. The rival first castle, the mills, ground work and castle details.
gpt-6-astra
OpenAI, in Codex. A ground pass and the gatehouse.

It started with WLOP

A caped figure with antlers stands on a skyscraper above a dusk city, with jets and smoke trails
My study of DeadDreams, rebuilt in Blender. The original is WLOP's.

I've followed WLOP for years. He's self-taught, his pictures are dark with a few precious highlights, and since 2019 he builds many of his scenes in Blender before painting over them. He has no Blender tutorial, only silent timelapses.

So I asked Opus 5.5, in Claude Code, to study him: his ArtStation, YouTube, Patreon and Reddit threads about how he works. It came back with a long breakdown: light and value first, muted colour pushed warm against cool, detail spent only where you look.

Then I asked it to rebuild DeadDreams (2020) from nothing. It solved the camera from the horizon line (a 15 mm lens, 230 m up), generated about 24,000 buildings and cloth-simulated the cloak. Average brightness: 0.383, against the original's 0.384.

Before the castle, I looked for a good way to work with Blender through Claude Code. I'm still figuring out what's best, but what worked well for me was having the model write Python scripts that rebuild the whole scene from scratch on every change, then render it headless and check the result, rather than clicking around a live scene through an MCP server.

The other half is taste, so I had Opus 5.5 research how good Blender artists work and turn it into notes it reads before every scene: 15 core principles, 17 reasons CG looks fake with a fix for each, 17 places where Blender 5.2's Python API differs from older tutorials, and 11 tested scripts. My favourite fact from it: grass reflects about 12% of the light that hits it, concrete about 51%. Paint grass from memory and it comes out far too bright.

Seven versions

1.3 s4.2 s9.5 s12.5 s
v1v1 at 1.3 sv1 at 4.2 sv1 at 9.5 s
No frame
v2v2 at 1.3 sv2 at 4.2 sv2 at 9.5 sv2 at 12.5 s
v3v3 at 1.3 sv3 at 4.2 sv3 at 9.5 sv3 at 12.5 s
v4v4 at 1.3 sv4 at 4.2 sv4 at 9.5 sv4 at 12.5 s
v5v5 at 1.3 sv5 at 4.2 sv5 at 9.5 sv5 at 12.5 s
v6Drafts only, of the mountains, sky and ground.
v7v7 at 1.3 sv7 at 4.2 sv7 at 9.5 sv7 at 12.5 s
Four moments from every version. v1 ran 11 seconds, and v6 only ever existed as draft frames.
  1. v1: Two first flights

    I asked Opus 5.5 and gpt-6.1-sol for the same thing: a realistic medieval castle, with only the camera moving. Opus 5.5 wrote the cathedral, terrain, lake and camera path as one Python file and pulled trees, rocks and textures from Poly Haven. It looked like a render: the mountains were white blobs and nothing had ever been rained on. The gpt-6.1-sol castle was all towers and tracery, but it sat on its cliff like something on a plinth. I liked the Opus 5.5 version as a place, and gpt-6.1-sol built the better castle.

    Opus 5.5: one long move over a lake and a forest, rising to the castle.
    gpt-6.1-sol: three moves around a castle floating on mist, about an hour from prompt to video.
  2. v2: Too perfect

    It looked too perfect, so I asked for wear and clutter. Moss on ledges, rain streaks, damp near the ground, chimney smoke bending in the wind, scaffolding on one tower and a few fallen battlements. This did more for realism than any lighting change. It also took 2.5 hours to render.

    Four stills: the castle across the lake, above the forest, on its hill, and the cathedral close up with chimney smoke
  3. v3: Best of both

    I kept the Opus 5.5 camera, terrain and light and asked for the gpt-6.1-sol detailing on top. It came over as witch-hat roofs with brass seams, lancet windows and six slender turrets. The hill also stopped looking like a sand dune.

    Four stills of the merged castle with taller cone roofs and a greener hill
  4. v4: Director's pass

    I asked Opus 5.5 to look at the scene the way an animation director would. It handed the windmill and waterwheel to gpt-6.1-sol in Codex (you can turn them yourself further down), added reed beds, a rolling ship, a sunset sky and a dove burst at the 9.5 s reveal, then cut the music so its swell lands on that reveal. It turned down three of its own ideas: a branch sweeping past the lens (the camera never gets within 16 m of a tree), god rays (the sun is out of frame) and a moving cart (no horse).

  5. v5: The bird at nine seconds

    A low-poly dove flew right past the lens. My first idea was to fix it with Google's video model, Gemini Omni Flash, in AI Studio, but editing a video needs a paid API key, so I dropped it. Opus 5.5 rerouted the flock up and out of frame instead and re-rendered only frames 192 to 240: 20 minutes instead of 2.3 hours. After that I asked for cheap draft renders before every full one.

    v4
    v5
    v5 at frame 238: the same view with the doves gone, only small specks left near the spires
    v4 at frame 238: two blocky white doves fill the right of the frame, one wing cutting across the castle
    v4v5
    Frame 238, where the dove was 335 px wide.
  6. v6: Mountains, sky, ground

    This is where Opus 5.5 started handing work to Codex instead of building everything itself. The mountains got rock, scree and erosion gullies, and I picked a cloud sky from three options. Two Codex sessions built the ground in parallel, one on gpt-6-astra and one on gpt-6.1-sol. One road came out red: the mud texture read as red asphalt, and its wet ruts reflected the sky like white lane markings. Opus 5.5 cut it.

    v6: the same view with cumulus cloud, and rocky ridges with snow on the mountains
    v5: the castle across the lake under a plain hazy sky, with smooth grey mountains behind
    v5v6
    v6: the same approach with a broken dry-stone wall across the hill and a stone road through it
    v5: a plain mud track running up the grass to the castle gate
    v5v6
    Flagstones, a rim wall and footpaths.
    Three sky panoramas stacked: a hazy sunset, scattered cumulus, and high streaky cloud
    Three skies. I picked the middle one.
  7. v7: A grander castle

    I asked for a grander castle and left Opus 5.5 to split the work. It worked out that the camera ends 108 to 165 m from the front, where only silhouette and height read, and the front was a plain wall with four squat towers. Three Codex sessions, one on gpt-6-astra and two on gpt-6.1-sol, built a gatehouse, crowned corner towers, banners and braziers, all without seeing them. The gatehouse now hides the rose window. The final render took 2 hours 27 minutes.

    v7 at 13.3 s: tall crowned towers around a twin-towered gatehouse with red banners and lit lanterns
    v5 at 13.3 s: the castle front, a plain wall between two squat cone towers, the rose window showing
    v5v7
    At 13.3 s, where the camera ends up.
    Eight half-resolution draft frames: across the lake, over the forest, up the rocky hill, and closing on the twin-spired castle front
    Eight frames from the v7 draft pass, which I checked before the full render.
    How Opus 5.5 handed the castle to Codex
    1. Me. Asked for a grander castle, with the pieces going to Codex.
    2. Opus 5.5 in Claude Code. Brainstormed, exported the scene's layout as JSON and wrote a brief for each piece.
    3. gpt-6-astra and gpt-6.1-sol in Codex. Each wrote one Python module without being able to render it.gpt-6-astra gatehouse.pygpt-6.1-sol tower_crowns.pygpt-6.1-sol castle_details.py
    4. Opus 5.5 in Claude Code. Built them in, rendered frames 250, 300 and 320, and fixed two crashes.
    5. Me. Looked at the drafts and started the 2 h 27 min render.

    Opus 5.5 exported the scene's layout (the road, the 46 houses, the gate gap, the camera path) to a JSON file, wrote a brief for each piece and launched the Codex sessions in parallel from the terminal. Every module had the same contract, build(coll, ctx, mats), so Opus 5.5 could drop it into the scene and render three test frames. The OpenAI models couldn't: Blender's GPU renderer crashes inside the Codex sandbox, so they wrote everything blind. Two of the three modules crashed on first build, each fixed with one line.

The final cut

Version 7, with sound. Every building, tree and camera move was placed by a script.
Direction and prompts
Aman Singh
Scene scripts
Opus 5.5 (Anthropic), in Claude Code
Modules
gpt-6.1-sol and gpt-6-astra (OpenAI), in Codex
Renderer
Blender 5.2 and Cycles, on a MacBook
Length
14 seconds, 336 frames
Final render
2 hours 27 minutes
Music
“Call to Adventure” by Kevin MacLeod (incompetech.com), licensed under CC BY 3.0
Models, textures, skies
Poly Haven, CC0

What I took from it

The notes did more than any prompt.
The WLOP breakdown and the research notes moved the result more than anything I typed. The models did better with rules they could check their work against.
Drafts first, next time.
A draft frame takes about 6 seconds and a final one about 25. I found that out after waiting 2.5 hours for a bird I didn't like.
Opus 5.5 and the OpenAI models were good at different things.
Opus 5.5 was better at direction, testing and stitching pieces together. gpt-6.1-sol and gpt-6-astra were better at dense, detailed 3D models. Neither side could see its own mistakes without a render.
I still made the calls.
Which sky, fewer birds, keeping the Opus 5.5 camera, losing the red road. Those were mine.
Still open.
I never ran the Gemini Omni Flash pass, because it needs a paid API key. The gatehouse hides the rose window. And Codex still can't render inside its sandbox, so every OpenAI module goes in blind. The moored ship has also been buried inside the hill since v4: its position was offset twice when it went onto its bobbing rig. It sits at the pier only in the close-up after the credits.

DeadDreams is WLOP's; the study near the top is my rebuild of it for learning, not his work.

Off the flight path

After v7, Opus 5.5 put cameras where the flight never goes, then went in close on the pieces. These skip the film's haze, grade and grain, so they look cleaner and flatter than the video.

The whole valley from high up: the castle on its hill, the lake, the forest and the mountainsThe castle across the lake from water level, the forest below and the watermill at the right edgeThe castle from low on its hill, between rock outcrops, with chimney smoke drifting acrossThe castle front with the full mountain range behind itThe castle on its round hill from behind, rocks on the slope, forest and lake beyondStraight down: the castle square on its round hill, the forest around it and the lake below
The gatehouse: two crowned drum towers with red banners and a gold-emblem shield over the arch
The cathedral spires and a slate cone roof against the sky, flags flying
Slate cone roofs with gold seams over battlemented corner towers
The south wall: an arched gate with lanterns, red and blue banners, and a timber gallery on a round tower
The watermill's timber tower on the shore, houses and pines behind
A two-masted ship moored at the pier, reflected in the lake below the forest
The ship, where it should be.
A roofed well and vegetable plots inside the walls
The gate arch with lanterns, a cobbled road, timber sheds, cannons and a log pile

The mills, from v4

gpt-6.1-sol wrote both in Codex. Here they are out of the film, so you can walk round them.

Live 3D · drag to turn, pinch or Ctrl-scroll to zoom

The same geometry as in the film, with flat colours in place of Blender's procedural materials.