Shadow Puppetry — Style Prompt

Chinese shadow theatre: translucent dyed-hide puppets, carved like lace, pressed against a cotton screen and lit from behind by oil lamps. References (grammar only): Lotte Reiniger's The Adventures of Prince Achmed (1926) for profile acting and lace-like scenery; Shaanxi / Huayin shadow theatre for carving, colour and gong-and-drum rhythm. Never reproduce a specific historical puppet, melody or recording, and never name them in the film.

1. Essence, and what it is not

A white cloth screen; behind it, flat puppets cut from translucent dyed hide, lit by an oil lamp. Colour arrives by transmitted light: dyes glow like stained glass, carved holes shine brightest, overlaps go darker. Puppets are jointed with visible thread rivets and moved by thin rods (neck and hands) that show as soft grey lines just off the screen. It is live theatre, not stop-motion: the screen flickers with the lamp, puppets tremble in the hand, loose parts swing on their rivets.

Not a black silhouette film (colour is the second protagonist), not paper-cut (the light comes through), not stained glass (no lead lines; pieces move and overlap), not flat vector cut-out animation.

2. Materials & rendering

Rendering model. Per pixel: image = tonemap( lampLight × hideTransmission × clothTexture ). - hideTransmission: a 2D canvas that starts white; every piece is drawn with multiply. Holes stay white, overlaps darken by themselves. - lampLight: per lamp a broad lobe plus a tight hotspot (~6 : 1), each flickering independently (a few % of ~7 Hz value noise plus a faster sine). Warm light, never white. - tonemap = 1 − exp(−hdr), exposure ∝ 1/√(lamps lit): more lamps bleach the frame but keep it readable. Lamp count is a dial the story can turn. - Cloth: procedural weave (sin × sin, noise-warped), fibre speckle, low-frequency density blotches, darker edges at the frame. Post: warm-tinted bloom, a warm vignette (toward brown, never grey), slight saturation, soft S-curve, light grain; heat haze only when the story burns.

Hide and carving. Multiply a tileable hide texture (mottling, fibres, specks) into each piece and restore its alpha with destination-in so holes survive. Carving is density: leave thin strips, cut out most of the area. Cut vocabulary: crescent rows (scales, tiles), diamond lattice, coin holes (round hole, square of hide inside), cloud collars and scrolls, tapered slits (cracks, rain, fur), strata along a ridge, leaf holes in a canopy. A dark carved outline (1.5–2.4 px) on every region. With destination-out, set fillStyle = '#000' first: fill alpha decides how much is cut.

Figures are jointed puppets: 8–12 pieces, head ~1.2× natural with large headwear, sleeves in a different dye from the torso, round joint lobes with a rivet (dark ring + pale knot), arms by 2-bone IK from hand targets, held objects as separate pieces on the hand line. Sympathetic figures have open-cut faces (features as thin strips around a hole); antagonists solid faces.

Scenery is carved set pieces on mostly empty lit cloth: one lace piece per element, a narrow carved ground strip, separate liftable strips for water or sky. Fire, smoke and moving water are carved pieces on rods, swapped and shaken, never particles.

Stage and backstage. A lacquered frame (lintel, pillars, warm spill on its inner edges), optional blurred audience heads. Backstage = the same transmission canvas with the camera mirrored (x → −x), dark wood around, hanging lamps (additive flame glow; snuffed ones trailing dark smoke), hands and sleeves as silhouettes with a warm rim (mask minus mask shifted away from the light), rods sharp.

3. Colour logic

4. Type & subtitles

5. Motion quality

6. Camera grammar

A vocabulary, not a route. Opening and ending come from the topic.

Move Expresses Can serve
Audience seat (whole stage, heads below) "This is a show" a legend; a lesson; a framed memory
Push through the frame onto the cloth Entering the tale a story within a story; focus
Lateral pan across a wide cloth Extent, a place laid out a journey; a disaster's reach; a procession
Follow a puppet, slight zoom Being with one figure a pursuit; a working day
Crash zoom of a few frames on a percussion hit The drum becomes the camera an entrance; a pose; a reveal
Whip pan along a moving piece Cause to effect a message sent; a strike
Locked wide Every step of a change is seen counting; repetition; stages
Medium-close, empty cloth between two pieces Distance, hesitation a choice; a parting
Close on a carved detail Craft as meaning a vow; a tool; a clue
Tilt from ground strip to top of cloth Height, hierarchy a tower; heaven and earth
Truck round to the back (mirror view) The trick revealed behind the scenes; who pulls the strings
Pull back from cloth into the dark room The tale becomes an object aftermath; a story ending for the night

Puppets in profile; most of the cloth stays empty. When zoomed in, clamp the camera to the screen rectangle (no black bars); push on frame centre unless diving into a lamp. Transitions: lamps dimming, a blurred foreground pillar wipe, a piece lifting off in light, a flash to warm white; never a generic crossfade or digital wipe.

7. Sound palette

8. Native moves

A menu: use the ones your story needs; put the strongest at the peak.

9. Pitfalls of the medium

10. Engine

In demo/: carve.js (piece sprites, cut / cutLine / cutTaper, pattern library, hide texture, rivets), gl.js (WebGL2 compositor: lamp field × transmission × cloth, mirror, bloom, haze, warm fade), stage.js (frame, audience, pillar wipe, cut-letter plaques), backstage.js (rim-lit silhouettes, flame, smoke), hud.js (placard), scenery.js (landscape pieces, ground strip, fire), plus the jointed rig with IK and pendulum parts; ?test=model|frame|hands draws sheets from the real engine. A first test unlike the demo: carve a lantern-seller with a lattice basket, press it onto one lamp, light three more and watch the frame bleach.

11. Variation space

You decide the story, the figures (or none), what the lamp means, what leaves the screen, the opening, the ending, the camera path, the dyes and the pacing. All far from our demo:


How our demo was made (story, shots, score, end card, build): DEMO.md. Read it after your treatment exists.