Development journey

How the forty-five builds were made

Each page below is one build in builds-ns/. The method was to keep the technique of a finished Opus build and change the subject. This page records that work, including the shortcuts and the parts that were not played through.

The arc

The starting point was the fifteen playable variations in opus5.5_15_builds_codebear, made as variations of the source video “Top 15 Things built with Claude OPUS 5.5.” The local folder was the quality bar: Eye Lab, the painted sea shanty, the weather film, the fifteen-second title, Frostbound, the volcano sandbox, the lighthouse Blender scene, the pixel dragon, the Rosetta Stone game, the wave racer, the arch bridge, Snow Day, the glass mosaic, the Japan Rail sketchbook, and the silk-road sand film.

A first set of forty-five builds was written into builds/ from the same forty-five subjects. Those pages are playable and much thinner than the sources. A night-camera page there is about 7 KB. The Eye Lab source is 112 KB. The baker film in that set is a small canvas scene with a karaoke line, which is the picture at /builds/02a-baker/.

The second set, the one this page describes, was asked for without using those skills. Same forty-five subjects. New folder, builds-ns/. Full lyric movies, Blender heroes and clay time-lapses, and new sketchbook photographs. The work was a port: read the north-star file, keep its systems, splice in a new subject.

The method

  1. Measure the source page. Eye Lab 112 KB, Frostbound 105 KB, volcano 76 KB, weather film 49 KB, title 33 KB, pixel dragon 26 KB, glass mosaic 25 KB, sand film 50 KB, Rosetta Stone 806 KB with one 668 KB block of inlined Three.js.
  2. Copy the source’s structure. For the single-file games, a Python or Node script read the north-star HTML and replaced marked sections, then wrote three index.html files. The scripts are _gen_focus.py, _gen_soul.py, _gen_voxel.py, _b03.js, _b04.js, _b13.js, _b15.js, and _g08.js.
  3. For the lyric studios, copy the painted-video pipeline from 02-clawd-goes-to-sea (library, studio, composer, headless renderer), write a new song and new scenes, then render 150 seconds at 24 frames per second.
  4. For Blender, write a procedural scene in Python, save a clay still after each step, render a PNG sequence in Eevee, and encode with ffmpeg. Blender 5.2 on this machine has no FFMPEG image format, so the movie is assembled afterward.
  5. For the sketchbooks, generate stills with Higgsfield Soul (text2image_soul_v2, 4:3), then run the Japan Rail build.js so the page embeds the photographs.
  6. Check that each file exists, that inline scripts parse, and that the movies have the right duration. Opening every page and playing it was not part of that check.

What was not done

All forty-five folders have a playable file, and the rendered movies that were required are on disk. Each page was not clicked, played, or walked. The catalog was opened in a browser and showed forty-five links. The lyric files were measured at 150.0 seconds. The three Blender heroes were measured at 12.5 seconds.

Several pages are a port that still carries source names inside the code. The clearest case is the night-camera lab, which still quotes Gullstrand’s schematic eye. A later patch script, _patch_focus.py, still draws an eye diagram. That leftover is called out under the camera build.

01. Focus labs

Source: 01-eye-lab/index.html. _gen_focus.py kept the dark lab, IBM Plex, Three.js 0.170, the drag focus, the three stops, the exploded view, the circle-of-confusion blur, and the notes column. It spliced a new instrument into the same millimetre bench. The generator warned that all three output files still contained the words “Gullstrand” and “ciliary muscle.”

01a Night street, a camera

A 50 mm night bench. Subjects are a neon sign, a parked car, and a tower. Stops are f/2, f/5.6, and f/16. The page is 90 KB, against 112 KB for the eye. The focus control is still named #ciliary, and the notes still cite Gullstrand No. 1, accommodation in diopters, and nodal points behind a cornea. The instrument geometry was replaced. The textbook block was not fully replaced.

01b A pond drop, a microscope

A daylight compound microscope. The three planes are algae, a water flea, and silt. The stops are 4×, 10×, and 40×. A dirty objective is meant to veil the silt, and cleaning restores it. Exploded parts are eyepiece, objective, stage, and mirror. Same generator, same leftover eye-lab strings. 89 KB.

01c A rooftop, a telescope

A night 700 mm f/10 refractor. Presets are a moon crater, Saturn, and a radio mast. The drag is the drawtube. The defect is chromatic fringe, and the correction is a minus-violet filter. Exploded parts are objective, drawtube, and eyepiece. 89 KB, with the same unreplaced eye notes.

02. Painted lyric videos

Source: 02-clawd-goes-to-sea. Each folder received lib.js, studio.js, studio.html, compose.mjs, render.mjs, and a new cast. p5 and p5.brush were installed. brush.load() is called with no arguments, because a callback is treated as a renderer and throws. Headless Chrome needs SwiftShader or the canvas falls back to WebGL 1 and the brush library refuses it.

node compose.mjs wrote a 150-second instrumental WAV and assets/timing.js for each film. There is no sung vocal. A one-second smoke render at 24 fps took about ten minutes and succeeded. Rendering all three films at once, with two Chrome workers each, timed out, and a later one-worker attempt died when three Chromes closed together after about 32 minutes. The films were then rendered one after another. Each finished at 150.0 seconds: baker 40 MB, submarine 20 MB, derby 34 MB.

02a Warm kitchen

Night baker, cat, delivery cyclist, bread rising. The studio is the live page. The movie is out/film.mp4. This is the remake of the thin left-weighted kitchen in builds/02a-baker/.

02b Cold underwater dirge

Sunken submarine, captain, dripping gauge, paper boat. No animals. The page title is Below. Movie: out/film.mp4. This one had the most frames already drawn when the parallel render died, so the sequential pass resumed from those JPEGs.

02c Loud rink

Roller derby chant: jammer, referee, flying helmet, stomps and a whistle. The page title is The Bank. Movie: out/film.mp4.

03. Coded pattern films

Source: 03-water-weather-code/index.html, 49 KB. _b03.js kept the play overlay, the pause and restart keys, the deterministic frame function, the ?t= still, the contact sheet, and the Web Audio engine (compressor, synthesized reverb, noise). It replaced the score and the pattern scenes. City is 45 KB, the hive 47 KB, the flood 47 KB. Scripts were syntax-checked. They were not listened through.

03a City sleep

One yellow window, then traffic lights, pigeons, steam, a subway, and dawn on a water tower. Piano and upright bass.

03b Hive

One bee, a waggle, hex cells filling, fanning, a swarm, scouts returning. Violin and woodblock. The comb is hex math, not a texture.

03c Flash flood

A tin cup, cracks, rain, braided channels, a wall of water, and the cup still there. Frame drum and low cello.

04. Title sequences

Source: 04-title-sequence/index.html, 33 KB, 15.0 seconds, one clock for picture and score, a 2.39:1 frame, a play gate. _b04.js kept that clock and gate and invented three looks. The Meridian credit roll was not reused. The finished files are 29 KB, 29 KB, and 28 KB, short of the source. They were syntax-checked, not watched to the end.

05. Browser soulslikes

Source: 05-frostbound-monastery/index.html, 105 KB. _gen_soul.py kept Cinzel and Cormorant, the title screen, HP and stamina, the flask, YOU DIED, pointer lock, attack, block, dodge, rest, and the Three.js 0.160 bloom stack. It spliced a new level. The comment in the generator says the great bell group stays so the tick can still nudge it, which is a source leftover in the scene graph. Subway 93 KB, lagoon 94 KB, archive 92 KB. Not walked in a browser.

05a Flooded subway

Signal lamp and short sword. Banners: Mezzanine, Drowned Platform, Service Tunnel. Rest is a ticket booth. The title on the page reads SUBWAY.

05b Coral lagoon radio telescope

Noon, a canvas-suit diver and a knife. Banners: Dish Rim, Control Hut, Cable Trench. Rest is a generator shed. Creatures, not knights. Title: LAGOON.

05c Candlelit tax archive

No water and no snow. A clerk with a stamp-seal and a letter opener. Banners: Ledger Hall, Burning Files, Vault of Seals. Rest is a desk. Title: ARCHIVE.

06. Voxel sandboxes

Source: 06-volcano-test/index.html, 76 KB. _gen_voxel.py kept the chunked volume, the fluid cellular automaton, the hotbar, the reflective liquid, and the day-night cycle, and replaced terrain generation and the two fluids. Each module script passed node --check. Tide 73 KB, candy 73 KB, glacier 73 KB. Not played.

06a Tide-pool island

Seawater and vent water become basalt. The tide rises and falls. The sea is the reflective surface.

06b Indoor candy factory

Chocolate and cold milk become fudge. A mixer overflow replaces the volcano’s eruption. Day and night are meant to show through the windows.

06c Glacier camp

Meltwater and lamp oil become tar crust. A crevasse is cut into the height field. Oil is supposed to burn after dark, and the day curve is a long blue twilight.

07. Procedural Blender scenes

Source: 07-storm-lighthouse, used as a pipeline, not as a subject. Blender 5.2.1, engine BLENDER_EEVEE. Each build_scene.py builds the set from primitives, writes a clay still screenshots/step_XX.png after each step with an Opus 5.5 badge, and saves a blend. render_final.py renders 300 PNG frames. ffmpeg makes a 12.5-second hero at 24 fps and a clay time-lapse at 2 fps, which is 4 seconds for eight stills. A small index.html was added afterward so the catalog can play both movies. The noodle build log also showed a Higgsfield 400 and a locked Blender extension file. The blend still saved.

07a Glasshouse

Blue hour, a storm arriving. Title GLASSHOUSE. Hero out/hero.mp4, clay out/clay-timelapse.mp4. The first-pass glasshouse in builds/ had been framed too close and two clay steps were black. This pass is a new scene file, glasshouse.blend.

07b One noodle stall

Rain, one puddle, door-sized neon. Shots logged as puddle, stall, bowls, neon, rain, stools, night, and a hero that reads the bowls. Title MIDNIGHT BROTH. Blend midnight_broth.blend. Hero and clay are in out/.

07c Open-pit mine

Harsh noon, white dust, one haul truck, no rain. Title BENCH 7. Blend bench7.blend. Eight clay stills. Hero is 12.5 seconds. Clay time-lapse is 4 seconds.

08. Pixel actors

Source: 08-pixel-dragon/index.html, 26 KB. A fixed palette, an indexed framebuffer, and a state machine of idle, charge, and action. No sprite sheets. _g08.js wrote the three actors. They were grown once to add frames, then measured again at about 23 KB each. Syntax-checked. Not watched through a full loop in the browser.

08a Pier keeper at night

24 colors. Idle blinks, the charge warms a lantern, the action sweeps a beam across the water.

08b Sumo, afternoon dohyo

24 colors, daylight. Idle breathes, the charge throws salt, the action is a slap that shakes the ring.

08c Anglerfish

16 colors, mostly black. Idle drifts, the lure brightens, the jaws close.

09. Coded artifact games

Source: 09-rosetta-stone/index.html. Line 141 is an inlined Three.js build of about 668 KB. The game script starts after it. Each new page copies that offline Three.js and replaces the dig with a new puzzle. No network after load. Voyager 735 KB, Phaistos 729 KB, violin 721 KB. Facts were constrained in the brief. The pages were not played to the ending.

09a Voyager Golden Record

A 1977 clean room. The player mounts images and the stylus. Captions use the real launch, 5 September 1977, and the Saturn flyby in November 1980. The end is the probe past Saturn.

09b Phaistos disc

Found 3 July 1908 by Luigi Pernier. The player matches stamp-signs. The page is required to say the text is not deciphered, and not to invent a translation. The end is a museum case at night.

09c Cremona violin

Candlelight. The player fits the bass bar under the bass-side top and the soundpost just behind the treble bridge foot. A Web Audio tone is supposed to change with the post. No secret-varnish claim. The end is a silent room.

10. Arcade racers

Source: 10-wave-racer. The split is index.html, data.js, world.js, game.js, ui.js, and a vendored three.min.js. Eight racers, three tracks, items that change the race, lap times. Theme data and world geometry were written per subject. The market folder had game.js and ui.js. The ice and chair folders did not, and none of the three had a title page. game.js and ui.js were copied from the market racer, which reads THEME from data.js. The title page was copied from Spraywave Rally and retitled. That wiring was not raced.

10b Iceboats at dawn

Title card FROSTKEEL / ICE. Tracks are open ice, fishing holes, and a narrowing black lead. Items are a gust and a drag anchor. world.js builds floes and holes. The driving code is the market game.js.

10c Office chairs

Title card ROLLCALL / CHAIRS. Fluorescent convention center: exhibit hall, escalators, loading dock. Coffee spill boosts. Lanyards slow the leader. Same shared game.js.

11. Sketch to rigid body

Source: 11-arch-bridge. Three.js plus cannon-es. The page loads one bundle.js so it works from a file URL. The fall is supposed to come from the solver. Removing the support should drop the whole structure, which is the failure the arch bridge was known for (the keystone drop only took the crown).

The source files (src/main.js, a subject module, physics-config.js, build/build.js) were written first. The JPEG sketches and the bundles were not there yet. sketch/draw.py then drew graphite on cream paper with Pillow, not a photograph: crane.jpg, chair.jpg, well.jpg. node build/build.js embedded each JPEG and esbuild wrote an IIFE bundle of about 1.6 to 1.7 MB. A physics self-test was part of the brief. A passing self-test log was not recorded here.

11a Harbor crane

A crate on a cable. Sliders are mass and friction. The button is “Remove main pin.” Defaults should hold the crane. Pulling the pin should drop mast, jib, and body from the solver.

11b Kitchen chair

A heavy book on the seat. Pulling one dowel should fold the chair. The sketch is a wooden kitchen chair.

11c Spiral stair in a well

A bucket on a rope. Removing one tread should drop the spiral, including treads that are not only the neighbor of the gap.

12. Local multiplayer

Source: 12-snow-day. Express and ws on one HTTP server, an authoritative tick, client scripts for world, minimap, and chat, no mouse-look so two windows can sit side by side. The source default port is 3512. These three use 3531, 3532, and 3533 so they do not collide with Snow Day or with the first-pass servers on 3521–3523. Each README documents ?name=. The servers were not left running, and a two-window sync was not timed.

12a Hotel lobby

Port 3531. Sit-down floor buffers. Driving clears confetti. Confetti returns. Run instructions are in the folder README.

12b Dawn apple orchard

Port 3532. Heated carts, a cider barn. Frost melts in the lanes and creeps back. Hands hold a tiller and a pruning lamp.

12c Noon salt flat

Port 3533. Brine trucks. The landmark is a half-buried airliner. Wet roads dry white.

13. Glass mosaic films

Source: 13-four-seasons-glass/index.html, 25 KB. One HTML file, WebGL2, no libraries and no images. Instanced glass tiles break and reform over about 80 seconds. _b13.js wrote three films at 23 KB, 23 KB, and 23 KB, a little under the source. Syntax-checked. Not watched.

13a Harbor, noon to night

Gulls, a ferry, lanterns coming on. Tiles shatter on the light change and reform as the night harbor.

13c Reef

Color drains toward white, then returns. Parrotfish, a turtle, branching coral.

14. Marker sketchbooks

Source: 14-japan-rail-sketchbook. template.html and build.js were copied, then the photographs were generated and the template was built into index.html. The drawing on the page is a canvas marker redraw. The photograph sits in the corner with the filename as the caption. Dragging and the arrow keys curl the page.

Stills came from Higgsfield Soul 2.0, job type text2image_soul_v2, aspect 4:3, through higgsfield.cmd. Ten photographs per book. build.js embedded them as base64, which is why the pages are 30 MB, 37 MB, and 30 MB. The hospital page was not re-checked in the browser after the embed. The first-pass books used six cheaper stills and a hatch redraw. These are new photographs.

14a Hospital night shift

Ten frames, including a nurses’ station, a corridor with faces, a vending machine, an empty gurney, a charting desk, and a stairwell. People are supposed to stay recognizable in the corner photograph.

14b Livestock auction at noon

Ten frames: the ring, the auctioneer, cattle pens, dust, hats at the rail, a loading chute. The crowd is supposed to stay a crowd.

14c Empty winter ferry

Ten frames: cafeteria, car deck, empty bow, empty seats, one horizon. At most one person. A crowd was not invented.

15. Sand-table films

Source: 15-silk-road-sand/index.html, 50 KB, 120 seconds. Scenes are drawn as sand thickness, lit in a fragment shader, and blown sideways into the next picture. Year and subtitle sit at the top left in serif type. Music is synthesized in the page. No audio file. _b15.js replaced the caravan scenes. Flight is 41 KB. The river and smallpox films are 35 KB, short of the source. Syntax-checked. Not watched, and the music was not heard.

15a Flight, 1903–1969

Wright flyer, a barnstormer, a DC-3, a jet, Apollo 11. Years 1903, 1927, 1936, 1958, 1969. Brass and snare.

15b One river, 1900–2020

A channel, a steamboat, a dam, a fish ladder, a dry bed. No armies and no aircraft. Flute and a low drum.

15c Smallpox, 1796–1980

Jenner in 1796, a crowded ward, a vaccination line, the last natural case in 1977, eradication declared in 1980. Those dates are the historical ones. The ward is a sand silhouette, not a clinical plate. Pump organ.