← Back to Docs
  • index.html
  • Clayground
  • Clayground.Lab
  • CameraDirector
  • Clayground 2026.7
  • CameraDirector QML Type

    Which shot when, for a lab with a presenter in it. More...

    Import Statement: import Clayground.Lab

    Properties

    Signals

    Methods

    Detailed Description

    The rig knows how to compose a picture (OrbitCamera3D.fit); a flow knows what is being said. Neither knows the grammar between the two - when to be wide, when to be close, when to move and when to hold still - and every lab with a professor was writing that grammar for itself, differently. This is the grammar, written once. Its conventions are science television's, because that is the genre a lab lesson is in: a presenter, a bench, and a viewer who has to be able to see what is being pointed at.

    The shots

    verbwhat is in the picturewhen
    widethe bench, nobody in itestablishing the situation
    establishthe whole new setup, wide, under a titlethe setup changed - the board was replaced, the scene is a different one, and the eye needs a beat and a name before the presenter moves
    journeywhere the presenter stands, where it is going and what it will talk about, all at oncethe presenter is on its way somewhere. The walk is watched, not cut around; a follow keeps the presenter in the picture should the limits hold the frame short
    twoShotpresenter and subjecta point or a present: a finger and the thing it indicates have to share a picture or the gesture is noise
    portraitthe presenter alone, level with its faceexplanation, which is delivered to a face and not to a board
    cutawayone thing on its own, for a momentthe insert: the LED as it lights, the reading as it changes - then back

    Three rules hold across all of them. A shot change is one glide, never two writes. Everything that matters is inside the safe area, because the chrome is not picture. And a presenter that is moving is never cut around - the camera goes with it. None of this is a mode: every verb composes from the scene as it stands, so a lab can call any of them at any time and a flow guide can call them in order.

    CameraDirector {
        id: director
        rig: rig                 // the OrbitCamera3D
        presenter: prof          // anything with stand, standHeight, travelling
        safe: ({ top: 0.1, bottom: 0.18 })
    }
    director.twoShot([partPos])  // presenter + the part
    director.portrait()          // the presenter, to the reader

    See also OrbitCamera3D and Flow.

    Property Documentation

    cutMs : int

    How long a change of shot glides. -1 takes the rig's travelMs.


    followSlack : real

    Handed to the rig's follow while a journey runs.


    girth : real

    Half-width of the presenter's frame box, as a factor of standHeight. Arms out, a hoverboard, a bit of ground.


    headroom : real

    How much taller than the presenter its frame box is, as a factor of standHeight. Room for a speech bubble.

    Framing to the top of the head puts the head at the top of the window, and a bubble that hangs above it and is sized in pixels goes off the edge. 2.2 keeps it inside at any distance.


    pad : real

    Air around a wide shot and a two-shot, as a factor on the fitted distance. 1 is edge to edge.


    portraitLimits : var

    The rig limits a portrait is allowed to relax: {minPitch, minHeight}.

    A rig's floors exist for bench work - a learner orbiting the board must not skim it. A portrait is the opposite regime, so it lowers them for as long as it lasts; every other shot restores the rig's own values, captured the first time this director moves it.


    portraitPitch : real

    The angle a portrait is taken from: level with the face.

    The camera has to come down, or the shot looks at the crown and the eyes and the mouth - which is what carries the explanation - are gone.


    presenter : var

    Who is in the picture. Duck-typed: stand (a vector3d on the ground), standHeight, travelling and present.

    The professor kit's Professor is one; so is anything else that stands somewhere and says how tall it is.


    rig : var

    The OrbitCamera3D to direct. Null does nothing at all.


    safe : var

    What is NOT picture: {top, bottom, left, right}, fractions of the frame. The flow bar, the hint strip, the cards.

    Handed to every fit. Where a lab used to extend its frame box below the ground to push the subject up out of the flow bar, this says what the bar is and lets the rig do the arithmetic.


    shot : string [read-only]

    The shot in force: "wide", "journey", "two", "portrait", "cutaway" or "" before the first one.


    shotPoints : var [read-only]

    The world points the current shot was composed around. What a check reads back through rig.covers().


    title : string [read-only]

    The scene title an establish is showing; "" otherwise.

    The director draws nothing itself. A lab binds a LabBanner (or whatever card it likes) to this, so the title sits in the lab's own chrome rather than in a scene node.


    widePitch : real

    The angle a wide shot and a two-shot are taken from.

    Low enough that a figure standing on the board reads as a figure rather than as a hat seen from above, high enough that the parts on the board keep their layout.


    Signal Documentation

    cut(string shot)

    Note: The corresponding handler is onCut.


    Method Documentation

    bool cutaway(var points, int holdMs)

    An insert: points on their own for holdMs, then the shot before comes back. Default hold 2500 ms.

    Sparingly. A cutaway that shows the thing the sentence is about at the moment it changes teaches; one every step is noise.


    bool establish(var points, string title, int holdMs)

    A new scene: the whole of points, wide, under title for holdMs (default 2200), before anything else happens.

    The cut television makes when the setup changes - and the one the lessons were missing: a board replaced under the presenter in one frame, followed straight away by a walk and a two-shot, reads as the same scene gone wrong rather than as a different scene. The title is what says "this is somewhere else now"; the hold is what gives the eye time to take the new layout in. title carries the text for the duration.


    bool journey(var to, var subject)

    The walk: the presenter where it is, where it is going (to) and what it is going to talk about (subject), held in one frame, and the presenter followed until it lands.

    Call it as the presenter sets off. The follow is dropped the moment presenter.travelling turns false; whoever ordered the walk then orders the shot on arrival, usually a twoShot.


    bool portrait()

    The presenter alone, level with its face, for explanation.


    var presenterPoints(var at)

    The presenter's frame box standing at at (default: where it is): feet to headroom, girth either side.


    void release()

    Drops the follow, restores the rig's own limits, forgets the shot.

    For the end of a lesson: the camera is the learner's again.


    bool twoShot(var subject)

    Presenter and subject in one picture, from widePitch.

    The deictic shot. Called when the presenter points at or presents something; subject is that something as one or more world points.


    bool wide(var points, real pad)

    The establishing shot: points and nothing else.