Dasavala

A film studio where films are programs

A small wooden house on a snowy hill at night. Its window is lit gold, the moon is out and snow is falling. Two small figures sit on the porch.
Plate 1The house on its hill. Mamma and Liv are on the porch bench.

Dasavala Studio presents

HJEMKOMST

HomecomingReleasing on YouTube · Christmas 2026

On Christmas Eve, the first Christmas since her grandmother died, a girl follows lights past the garden gate and wakes in a forest with no memory of her name. Guided by her grandmother’s old raven and befriended by a lost fox kit, she must cross the open mountain’s night before the Christmas bells close it — and the only fare she has is the mitten her mother knitted.

Close on two hands knitting a small red mitten with a white star, on wooden needles. Red yarn runs off to the left.
Plate 2Mamma’s hands and the red mitten. A three-second insert at 85 mm.

Notes on the approach

  1. I

    A film is a program.

    HJEMKOMST is written in Tala, the studio’s own language: a pure, typed Lisp with a screenplay surface. At its top the film is one form. Each name in its sequence is a scene, in a file of its own.

    (film hjemkomst(style moonlit-gouache)(title "HJEMKOMST" :sub "Homecoming")(format :fps 24 :width 1920 :height 804)(sequence prologue evening awakening fox lights shore ferry troll city runhome lookback homecredits))

    films/hjemkomst/film.tala

  2. II

    A shot says what, not how.

    A shot is a note in words, a lens, and what the frame must show. The language’s own rule: Authors state what (who, where, which part, how framed); solvers and lowerings produce the numbers. This is the shot of Plate 2 as it stands today. Its last line is a promise that her hands are seen, and the framing is checked at the cut’s start, middle and end.

    shot knitting 3snote "Close on Mamma's hands at work under the lantern (85 mm, from her right, a little above them): the needles going round the last row of a small red mitten, its cream band done, the yarn running from her forefinger down toward the ball on her knee. Steady, quick, warm."camera 85mm from porch-cam at porch-look(expect mamma.hands :seen 0.8)

    films/hjemkomst/scenes/evening.tala, its comments left out

  3. III

    Every number has a unit.

    Lenses are in millimetres, places in metres, beats in seconds. The checker carries each dimension through the arithmetic, so a length is never added to a time, and angles are a dimension of their own so that degrees can never be passed as radians by accident. Its design rules make it pure and total: no effects, no unbounded recursion, and the same source gives the same values, byte for byte, on every machine. This is the camera of Plate 1, a slow push toward the house.

    camera 20mm → 24mm from gate(8m 4m ↑1.2m) → gate(6m 1m ↑1.2m) at seatMamma ↑2.8m :ease inOutSine

    films/hjemkomst/scenes/evening.tala

  4. IV

    The world is simulated before it is filmed.

    Parts are meshed by the compiler’s own kernel, and Blender makes the kits of assets and lays out the sets, as programs. Each scene is then staged once on a physical simulation and baked. A named person’s performance is a generated take, played whole; bodies without one, the crowd among them, walk on navigation meshes by motion matching on captured motion. Godot renders the frames on cloud GPUs: a cel-animated cast over a set painted in gouache.

A woman in a patterned navy sweater and a girl in a red coat and a cream hat sit side by side on a wooden porch bench at night. The woman is knitting.
Plate 3On the porch bench. Mamma knits, and Liv watches.
The girl smiles and lifts a red mitten up under her chin. A subtitle reads: There. Now the first snow can’t bite.
Plate 4Liv lifts the new mitten to look at it. Every line in the film is a subtitle; this one is Mamma’s.
  1. V

    Made by an LLM, with a human director.

    The studio and the film are made by an LLM, with a human director in chat. The director watches a render and gives notes; the notes come back as changes to the program. The code is written for agents to read.

  2. VI

    The name.

    In Kannada and Sanskrit, tala is the rhythmic cycle that times a performance, and in the Shilpa Shastras it is the unit of proportion for a figure. The language does both: it times performances and proportions shapes. Why a Norwegian fantasy from a studio with Sanskrit roots? Simple: the director is learning Norwegian on Duolingo, and thinks this is a fun project.

  3. VII

    The music is written in the same language.

    The score is notes in Tala, and the music is synthesised from them. Its motif is Mamma’s lullaby, in D dorian. It is never played to its end until the scene called home, and the very last chord is D major: the film’s only F sharp: home.

On the porch bench under a lantern, the woman bows her head with her eyes closed, and the girl beside her looks out with a small smile.
Plate 5Mamma hums the lullaby, the film’s motif. It is first heard here, and left unfinished.

Notes on the F# and the mathematics

The compiler, the world and the runtime are F#: 68,308 lines in 156 files, with 9,517 more of tests. Godot is entered through eight lines of C#.

  1. VIII

    The engine is mathematics, end to end.

    Under the language is an engine written in F# from first principles, its techniques from the literature and its laws held by 454 tests, so an edit that breaks the mathematics fails here before it bends a film. Shapes are distance fields, with normals from automatic differentiation. People are solved whole against goals in order of priority, crowds steer by a law fitted to real pedestrians, and springs are solved in closed form, never stepped. A framing is solved, then pulled taut so that the camera holds still when it can. And everything that moves has one type, a value over scene time.

    let inline hyp (x: ^T) (y: ^T) : ^T = sqrt (x * x + y * y)let inline sdSphere (r: float) (p: P< ^T>) : ^T = P.len p - lift r

    src/Tala/Field.fs

    /// The critically damped spring x'' + 2y·x' + y²·x = 0 stepped exactly by dt from (x, v): with j = v + y·x,///   x(dt) = (x + j·dt)·e^(−y·dt),   v(dt) = (v − j·y·dt)·e^(−y·dt)./// Unconditionally stable; the offset never overshoots zero when it starts at rest. (V3: an offset, a rotation vector.)let critical (y: float) (dt: float) (x: V3) (v: V3) : V3 * V3 =let j = v + x * ylet e = exp (-y * dt)(x + j * dt) * e, (v - j * (y * dt)) * e

    src/Tala/Springs.fs

    /// A value over scene time (seconds). Pure: same t, same value.type Sig<'a> = float -> 'a​module Sig =let k (v: 'a) : Sig<'a> = fun _ -> vlet map f (s: Sig<'a>) : Sig<'b> = fun t -> f (s t)

    src/Tala/Ir.fs

  2. IX

    The camera stands on a torus.

    Most cameras in the film are asked for, not placed: 102 of its 163 shots and inserts say where the subjects should sit in the frame, and a solver finds the camera. For a given lens, placing two subjects on the screen fixes the angle between them at the camera, and every point that sees them that far apart lies on a torus: the toric space of Lino and Christie. What is left to choose is two angles.

    (frame :size MS :angle eye :lens 38mm (subject liv :x 1/3) (subject muninn :x 2/3) :side -50deg)

    films/hjemkomst/scenes/ferry.tala

  3. X

    The music is computed, not recorded.

    No audio file is in the repository. The sound is computed by the studio’s own synthesiser, in F#, and the same film gives the same bytes. Each instrument is one function. When Mamma stops humming, a harp carries the lullaby on.

    let instruments = [ "celesta"; "harp"; "strings"; "pad"; "cello"; "flute"; "fiddle"; "bells"; "choir"; "piano"; "bass"; "drone" ]let mtof (m: float) = 440.0 * Math.Pow(2.0, (m - 69.0) / 12.0)

    src/Tala/Audio.fs, the lines between left out