Skip to content
Docs
Open Promoeyes
Library Nook at Blue Hour

Library Nook at Blue Hour

A cosy library nook at blue hour: a cool dusk window against a warm open fire rakes a leather chair, and the iPad on its arm shows an e-reader page.

A library nook with a creased leather club chair, shelves of old hardbacks with visible paper edges and a flickering fireplace on the back wall, warm firelight against a cool overcast window out of frame. One slow 13 s take in four beats: low and close across the chair arm, a rise and hold, a pull out and round to the wide nook, then a sink to a floor stack of hardbacks, page edges close.

Length
13 s
Scenes
1
Device
ipad
Style
realistic place
Camera
push in, dolly, rack focus

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

//
    REALISM LIBRARY — "Library nook, blue hour" (see SCENE.md)

    The third realism set: two light sources of opposite colour fighting over soft dark materials.
    A cool overcast dusk window (out of frame, front-left: behind every camera) and a warm,
    flickering open fire (in frame, the back wall) both rake a creased leather club chair; old
    hardbacks show their paper edges; the iPad on the chair's arm is the third, neutral source.
    Props: TRELLIS from FLUX (models/, models.json); the room, the fireplace, the shelf carcass and
    the flames are primitives. The teapot and the log basket were cut (their meshes failed five rounds).

    SET  floor y 0, x right, z toward the camera. Room x −2200 … 2200, z −2000 … 2400, ceiling 2800.
         Fireplace centred x 550 on the back wall (chimney breast front z −1450, surround −1390),
         bookshelf x −2150 … −350 left of it, the window on the left wall at z 500 … 1600.
    Y    props y = surface + scale × |minY| (models/*.json); surfaces on the chair measured with a
         ray-cast height map of the GLB (top of the arm, the seat).
    SCREEN  Inglenook, a fictional e-reader (realism-library.screens.html → scripts/html-screens.mts).
         While the camera holds over the iPad a sentence is highlighted, "Saved to Notes" arrives and
         the chapter bar ticks 61 → 62 %.
    FIRE  no fire element: emissive teardrop flames over the TRELLIS logs, a glowing ember bed, two warm
         point lights; every flicker is hand-written keys with no shared period. No authored fog (the
         path tracer turns the HDR dome into fog colour with it); depth haze is the `haze` word.

    Authored look is the series' 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-library/realism-library.promo
promo#realism-library(width=1920 height=1080 fps=30)

  scene#nook(duration=13 transition=none)
    renderer(tone_mapping=None exposure=1 shadow_map=true shadow_map_type=pcf-soft)
    // 50 mm-ish (fov 30) for the close beats, 34 for the wide. Five beats:
    //   0–2.4 s   low and close across the chair's near arm from the front-left (the window side):
    //             creases, the iPad's edge and page, the fire soft behind; a slow drift
    //   2.4–4.2   rise over the iPad to the reader's view, 520 mm off the glass; hold to 6.4
    //             (the highlight sweeps at 4.6, "Saved to Notes" at 5.1, the bar ticks at 5.5)
    //   6.4–9.2   pull out and round to the right: the nook wide, fire, shelf, chair; drift to 9.8
    //   9.8–13    sink to the floor stack of hardbacks, page edges close, the fire behind it
    // Focus follows the look-at, so the raster DOF stays on the subject.
    camera(dof_pass=three type=perspective fov=30 near=10 far=20000 position="-886 650 93" look_at="-560 545 -250" dof_range=260 dof_blur=6)
      properties
        frame(smooth=0.3)
          keyframes
            kf(time=0 position="-886 650 93" look_at="-560 545 -250" fov=30 dof_range=260 dof_blur=6)
            kf(time=2.4 position="-858 662 58" look_at="-562 545 -248" fov=30 dof_range=260 dof_blur=6 easing=easeInOutSine)
            kf(time=4.2 position="-779 1059 -285" look_at="-570 539 -229" fov=30 dof_range=300 dof_blur=5 easing=easeInOutCubic)
            kf(time=6.4 position="-774 1052 -280" look_at="-570 539 -229" fov=30 dof_range=300 dof_blur=5 easing=easeInOutSine)
            kf(time=9.2 position="1500 1350 1500" look_at="-150 650 -1000" fov=34 dof_range=1800 dof_blur=3 easing=easeInOutCubic)
            kf(time=9.8 position="1480 1340 1480" look_at="-150 650 -1000" fov=34 dof_range=1800 dof_blur=3 easing=easeInOutSine)
            kf(time=13 position="-28 230 -161" look_at="200 150 -800" fov=30 dof_range=400 dof_blur=5 easing=easeInOutCubic)
    postprocessing
      step(name=render)
      step(name=unreal_bloom strength=0.22