Skip to content
Docs
Open Promoeyes
Workshop Bench

Workshop Bench

A garage woodshop at the end of the afternoon: a long fluorescent light over a scarred beech bench with hand tools, and an iPad running a cut-list app.

A garage woodshop with a laminated beech workbench, a cast-iron plane, chisels, a vise, an oil can and a hung pegboard, sawdust and curled shavings everywhere, lit by one cool fluorescent tube and a little warm daylight. One steady 13 s take in four beats: a macro on the oil can and vise, a crane up and round with a hold, a pull out to the wide shop, then a slow low push along the bench onto the shavings.

Length
13 s
Scenes
1
Device
ipad
Style
realistic place
Camera
push in, dolly, ultra closeup

The AI keeps this film's shots, timing and camera, and puts your app in it.

//
    REALISM WORKSHOP — "Workshop bench" (see SCENE.md)

    A garage woodshop at the end of the afternoon, lit by one long fluorescent shop light hung on
    chains over a scarred laminated-beech workbench; the garage door is up behind the camera and a
    little warm daylight spills in low from the front-left. On the bench: a cast-iron hand plane on
    a walnut board, its shavings, three chisels, a machinist vise, a pump oil can and an oily rag,
    a mallet, an F-clamp, a whetstone, a steel try square, a tape measure and an enamel mug; a hand
    saw on the pegboard. Sawdust lies drifted over the bench and the floor.
    The tests: rough, oily and polished metals side by side under one cool line source; shadows
    soft along the tube and crisp across it; cool tube light on warm wood against the warm spill;
    fine particulates (the dust layer, shavings) on surfaces.

    SET  origin = the bench's front edge, centred; bench top surface Y = 900 (x -1000…1000, z -880…-180).
         Back wall z = -900, left wall x = -1500, right wall x = 2100, ceiling 2600, door line z = 1400.
    Y    props y = surface + scale × |minY| (models/*.json), written as arithmetic beside each.
    SCREEN  Kerfmark, a fictional cut-list and lumber-stock app (realism-workshop.screens.html →
         scripts/html-screens.mts); the stretcher row is cut while the camera holds on the iPad.

    Authored look is the common case: no tone curve (sRGB only), SSAA 4. Everything else is a
    render-time switch on the URL (gpu/realism, gpu/pathtrace).
    Preview: http://localhost:4444/runtime?project=projects/templates/realism-workshop/realism-workshop.promo
promo#realism-workshop(width=1920 height=1080 fps=30)

  scene#workshop(duration=13 transition=none)
    renderer(tone_mapping=None exposure=1 shadow_map=true shadow_map_type=pcf-soft)
    // Four beats, focus following the look-at:
    //   0–2.4 s   macro on the oil can, the rag and the vise, 60–90 mm above the bench, sliding right
    //   2.4–4.2   crane up over the plane and round to the iPad, ~560 mm off its glass; hold to 6.8 (the row is cut at 4.9)
    //   6.8–9.6   pull out to the wide from the front-right, the shop light at the top of frame; hold to 10.2
    //   10.2–13   a slow low push along the bench onto the plane and its shavings
    camera(dof_pass=three type=perspective fov=30 near=10 far=30000 position="-360 1040 -110" look_at="-740 965 -560" dof_range=260 dof_blur=7)
      properties
        frame(smooth=0.3)
          keyframes
            kf(time=0 position="-360 1040 -110" look_at="-740 965 -560" fov=30 dof_range=260 dof_blur=7)
            kf(time=2.4 position="-270 1030 -140" look_at="-690 962 -580" fov=30 dof_range=260 dof_blur=7 easing=easeInOutSine)
            // lifted over the plane on the way, so its tote never wipes the lens
            kf(time=3.0 position="-60 1260 40" look_at="60 1075 -585" fov=30 dof_range=400 dof_blur=5 easing=easeInSine)
            kf(time=4.2 position="318 1196 -62" look_at="260 1045 -596" fov=30 dof_range=320 dof_blur=6 easing=easeOutSine)
            kf(time=6.8 position="312 1194 -58" look_at="260 1045 -596" fov=30 dof_range=320 dof_blur=6 easing=easeInOutSine)
            kf(time=9.6 position="1080 1340 880" look_at="-80 1190 -560" fov=44 dof_range=1800 dof_blur=3 easing=easeInOutCubic)
            kf(time=10.2 position="1080 1340 880" look_at="-80 1190 -560" fov=44 dof_range=1800 dof_blur=3)
            kf(time=12.2 position="360 1070 -50" look_at="-170 950 -345" fov=32 dof_range=320 dof_blur=6 easing=easeInOutCubic)
            kf(time=13 position="325 1062 -64" look_at="-180 948 -345" fov=32 dof_range=320 dof_blur=6 easing=easeOutSine)
    postprocessing
      step(name=render)
      step(name=unreal_bloom strength=0.2 radius=0.45 threshold=0.95)
      step(name=output tone_mapping=none exposure=1)
      step(name=aa method=ssaa samples=4)
    // the studio HDR lights only (the room hides any background); a garage is darker than a studi