Retrieved article excerpt
Open article · Retrieved 2026-11-06T19:26:17.147975+00:00
# vork
A million birds, each steering itself over a lagoon. A black hole that bends
light. A glowing seed placed on a real desk, lighting the room around it.
These are scenes written as code and rendered on a GPU. No video model required.
vork is a headless 3D and VFX engine built for agents. It is written in Rust and
Slang, with GPU rendering through Vulkan and Metal. An agent writes a scene,
renders it, looks at the result and revises the code. There is no editor to drive.
Most creative tools expose controls that a person can operate. An agent can also
write a shader in the middle of a shot. vork gives it geometry, ray queries and
GPU execution, then lets scene programs define materials, cameras, light
propagation, simulation and compositing. Ordinary shots need only scene data;
the programming hooks are there when the shot needs something unusual.
Source-available and free during the research preview.
## What you can make
The examples include code, preparation commands and credits. Large downloaded
assets and footage stay outside Git; the recipes fetch them or accept a local path.
The images here are stills from these shots. Keep each credit with its image.
### [Million birds](https://github.com/voyager-so/vork/blob/main/examples/murmuration)
[A ribbon of starlings crossing the low sun above a lagoon](https://github.com/voyager-so/vork/blob/main/docs/images/birds-sun-ribbon.jpg)
| | |
| --- | --- |
| [A foreground bird above the flock at dusk](https://github.com/voyager-so/vork/blob/main/docs/images/birds-skim.jpg) | [The flock curving over still water, seen from above](https://github.com/voyager-so/vork/blob/main/docs/images/birds-lagoon.jpg) |
A million simulated agents steered by Slang compute programs, with a camera skimming
through the flock. The camera and nine foreground birds are authored; the simulated
million do not flap. The bird stills above come from the measured four-sample,
denoised skim and reveal movies.
Credit: based on ["Crow"](https://sketchfab.com/3d-models/crow-d5a9b0df4da3493688b63ce42c8a83e2)
by Alexei Ostapenko, [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).
Changes: sampled flight pose, reduced distant mesh, rescaled, articulated flight
wings, extracted wings for the starling body, resized textures.
[All bird and environment credits](https://github.com/voyager-so/vork/blob/main/examples/murmuration/CREDITS).
### [VFX on real footage](https://github.com/voyager-so/vork/blob/main/examples/vfx-artifact)
| Original footage | Tracked camera and proxy geometry | Final look |
| --- | --- | --- |
| [The photographed take: a woman asleep at a laptop](https://github.com/voyager-so/vork/blob/main/docs/images/seed-1-original.jpg) | [Proxy geometry over the same take](https://github.com/voyager-so/vork/blob/main/docs/images/seed-2-tracked.jpg) | [A glowing seed on the desk, with the room relit to night](https://github.com/voyager-so/vork/blob/main/docs/images/seed-3-final.jpg) |
A procedural ceramic-and-bronze seed, a tracked camera, occlusion mattes and proxy
geometry for relighting. The example teaches the base composite; the final look
adds later relighting and wipes. Real footage + rendered 3D; no generative video.
Credit: footage by **Ron Lach / Pexels**, modified under the Pexels Licence. Original
performer; no endorsement implied. [Source and preparation](https://github.com/voyager-so/vork/blob/main/examples/vfx-artifact).
### [After Rain](https://github.com/voyager-so/vork/blob/main/examples/vfx-neon)
[A glowing cyan sculpture and an AFTER RAIN sign in a wet night alley, reflected in a puddle](https://github.com/voyager-so/vork/blob/main/docs/images/after-rain.jpg)
A suspended neon seed and blade sign added to a moving shot of an empty alley at
night, with spill on the wall and reflections in the wet street. Real footage + rendered
3D; no generative video.
Credit: footage is ["Ally"](https://www.pexels.com/video/ally-18972999/) by
**Rafael Fernanz / Pexels**, modified under the [Pexels Licence](https://www.pexels.com/license/).
[Source and preparation](https://github.com/voyager-so/vork/blob/main/examples/vfx-neon).
### [Black hole](https://github.com/voyager-so/vork/blob/main/examples/black-hole)
[A cargo ship beside a black hole, with a moon lensed into a ring around it](https://github.com/voyager-so/vork/blob/main/docs/images/black-hole.jpg)
The scene supplies a Schwarzschild light-propagation program through vork's public
hook. Curved paths, capture and the disk's appearance live in the example. It is a
numerical approximation, not an exact relativistic solver.
Credit: based on ["Corinth Cargo Transporter"](https://sketchfab.com/3d-models/corinth-cargo-transporter-7614d85856f6477ba2a603970dcbb0dd)
by [Yvo Pors](https://sketchfab.com/yvopors14), [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).
Changes: decimated geometry, resized, compressed and exposure-adjusted textures,
adjusted material roughness and metallic weight, placement and scale.
[Ship credit](https://github.com/voyager-so/vork/blob/main/examples/black-hole/README.md#ship-credit).
### [Cake](https://github.com/voyager-so/vork/blob/main/examples/cake)
[A carrot cake on a carved plate, with a kettle out of focus behind it](https://github.com/voyager-so/vork/blob/main/docs/images/cake.jpg)
A moving camera, depth of field and daylight on detailed scanned assets. This shot is
rendered 3D, using Poly Haven assets; it isn't a photographed take.
Credit: Poly Haven CC0 assets; carrot cake photography by Greg Zaal, processing by
James Ray Cock. [Full cake credits](https://github.com/voyager-so/vork/blob/main/examples/cake/CREDITS.md).
### [Cozy Kitchen](https://github.com/voyager-so/vork/blob/main/examples/kitchen)
[A miniature kitchen diorama with pumpkins on the roof](https://github.com/voyager-so/vork/blob/main/docs/images/kitchen.jpg)
Nicole Morena's Blender 3.5 splash scene, imported into vork. The recipe uses a
shared material adaptation and a camera orbit; the pictured render has additional
staging and animated lighting.
Credit: **Cozy Kitchen** by [Nicole Morena](https://www.artstation.com/nickyblender),
[source .blend](https://download.blender.org/demo/splash/blender-3.5-splash.blend),
[CC BY-SA](https://creativecommons.org/licenses/by-sa/) (version unspecified by source).
Adapted and rendered in vork: camera orbit, animated lighting, widescreen framing,
material translation and staging changes. This still and the adapted animation
are shared under CC BY-SA. No artist endorsement implied.
[Changes and share-alike notice](https://github.com/voyager-so/vork/blob/main/examples/kitchen/CREDITS.md).
### [Water](https://github.com/voyager-so/vork/blob/main/examples/water)
[Water splashing up in a crown from a white basin on a wooden deck](https://github.com/voyager-so/vork/blob/main/docs/images/water.jpg)
A GPU liquid simulation implemented as Slang compute programs in vork's fluid library.
It uses published APIC/FLIP and surface-reconstruction methods, with an authored
initial impulse and limited secondary spray.
## Give it to an agent
Start with `vork help`. The getting-started help is about **2,500 tokens**,
including a complete first scene. The full help is about **19,400 tokens**.
Those are help-text counts, not a claim that every advanced API fits on one page.
A useful first instruction is:
> Read `vork help`. Make a small scene, render a preview and inspect the image.
> Refine the camera and lighting before rendering at final quality. Read the
> relevant help topic when you need a feature the first page doesn't explain.
Python and TypeScript can author ordinary scene JSON through the SDKs. You can
also write JSON directly. Save this as `shot.json` (also available as
[examples/first-scene.json](https://github.com/voyager-so/vork/blob/main/examples/first-scene.json)):
```
{"version":2,"nodes":[
{"type":"mesh","geometry":{"std":"sphere","radius":1},
"materials":[{"inputs":{"base_color":[0.12,0.35,0.65],"specular_roughness":0.3}}]},
{"type":"mesh","translation":[0,-1,0],"geometry":{"std":"grid","size":[10,10]},
"materials":[{"inputs":{"base_color":[0.35,0.35,0.35]}}]},
{"type":"light","shape":"rectangle","translation":[-3,5,4],"target":[0,0,0],
"energy":700,"size":4,"color":[1,0.92,0.8]},
{"type":"camera","translation":[3,2,5],"target":[0,0,0]}
],"render":{"resolution":[640,480]}}
```
```
vork render shot.json --profile std/previs --out preview.png
vork render shot.json --profile std/final --out final.png
vork help sdk
vork help programs --all
```
Scene content and render quality are separate. Use `std/previs` to iterate,
`std/draft` for scene-ray lighting at 4 samples,
`std/final` for the default delivery profile, and `std/path` for path transport.
Draft and final use 4 and 8 samples with bundled OIDN denoising by default; use `--set denoise=false` to turn it
off. `--set samples=N` overrides the profile budget (1..4096); more samples means cleaner and slower.
Without a fast GPU denoiser (NVIDIA or Apple GPU), draft and final say so and use 16 and 32 samples undenoised;
`--set denoise=true` runs the slow CPU denoiser anyway.
For a particular field, ask `vork help field node.target`. Help topics include
exact fields with `--all`. Images, video and control passes come from the same
scene; see `vork help outputs`.
## Under the hood
Default rendering combines raster visibility with hardware ray-traced lighting;
a path tracer is also available. The scene and render plan stay installed.
Frames use retained GPU resources, with GPU-to-hardware-video encoding on
supported native paths. A portable encoding fallback reads pixels back to the CPU.
Slang programs run on the GPU. Host parsing, planning, animation-track evaluation
and IO still use the CPU. The public program hooks let a scene author change
camera rays, material response, light propagation and film response without
editing the renderer. `vork help programs --all` describes their scope.
Validation includes furnace tests and analytic oracles, alongside render tests.
That is a way to catch errors, not a guarantee that every scene is physically
exact.
## Speed, with the qualifications
These are timings, **not equal-quality speedups**. The draft/final results
come from the frozen `81ae2b075` build on an NVIDIA L4: final uses eight samples
and OIDN, draft four and OIDN. All 152 planned jobs were accounted for. The broader
sweep delivered 583 of 585 images; the million-stars stress scene ran out of GPU
memory in both profiles. Visual review found softer edges, grainier defocus,
wall mottling and changed sparse or spectral highlights at these budgets.
Nineteen earlier quality comparisons failed their declared no-worse FLIP
condition; that experiment was not repeated for this build.
vork times below are complete command wall times, including startup, scene
loading, output writes and encoding. Setup, shader warmup, provisioning and
transfers are excluded. Stills use five warm repetitions, movies three. Driver
caches and clocks were not controlled. Blender 5.2.1 times are retained measured
baselines, not fresh runs: EEVEE uses different settings, and its movie times
exclude startup/loading after a still prime. Both movie timings include encoding.
The car is a proxy. [Benchmark method and recorded results](https://github.com/voyager-so/vork/blob/main/benchmarks/RESULTS.md)
explain the boundaries and carried-forward numbers.
### Default final: stills
1080p PNG, seconds. EEVEE uses 64 samples without denoising; vork uses eight with
OIDN. Missing Blender results are unmeasured, not wins.
| Scene input | EEVEE (s) | vork final (s) | Comparison |
| --- | --- | --- | --- |
| [B-push-in.json](https://github.com/voyager-so/vork/blob/main/benchmarks/B-push-in.json) | 2.912 | 1.993 | 1.46× faster |
| [B-turntable.json](https://github.com/voyager-so/vork/blob/main/benchmarks/B-turntable.json) | 3.148 | 2.247 | 1.40× faster |
| [B-walking.json](https://github.com/voya