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.
Notes on the approach
-
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
-
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
-
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, andthe 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 inOutSinefilms/hjemkomst/scenes/evening.tala
-
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.
-
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.
-
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.
-
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.
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#.
-
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 rsrc/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)) * esrc/Tala/Springs.fs
/// A value over scene time (seconds). Pure: same t, same value.type Sig<'a> = float -> 'amodule 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
-
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
-
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