OpenEXR and colour
Kitlig can hand your work to a compositor the way a render farm would: one multichannel OpenEXR per frame, with beauty, alpha, depth, mattes and a Cryptomatte, in a scene-linear working colour space. It can also view media through a display transform, with exposure and channel controls, and convert images and video between colour spaces.
OpenEXR is the VFX image format. One file holds many named channels at 16-bit or 32-bit float, so nothing is clipped or quantized. Nuke, After Effects, Fusion, Resolve, Houdini and Blender all read it.
Where the pixels come from
Kitlig writes EXR from what it already has. A generated image is 8-bit, so its beauty pass is 8-bit data stored in a float file; depth from the local depth model is an 8-bit map unless a raw float depth file is attached. The float path matters most for Cryptomatte ids (always 32-bit) and for keeping every conversion lossless from here on.
Export a Take or an asset as OpenEXR
- In Asset Mode, open a Take and click Export, then OpenEXR…. Or right-click any image, video or image sequence in the Sandbox and choose Export OpenEXR….
- Kitlig reads the sources and lists every pass it can build. Tick the channels you want. Each row has an editable layer name, a pixel type (Half (16-bit) or Float (32-bit)) and, for colour passes, the colour space the source is encoded in.
- If a Cryptomatte source exists (a segmentation set made from the image, or an object-tracking session on the video), it appears under Cryptomatte with its object names. Set the number of ranks (how many overlapping objects a pixel can hold) and whether to write the preview layer.
- Under Encoding, pick the compression, the channel naming preset, the working colour space, and single-part or multi-part layout.
- For a video, set the frame range and the first frame number (1001 by default, the usual VFX start).
- Choose a file name and a folder, then click Export. The export runs as a job; frames land in the folder you picked, outside the project.
What a Take exports:
- An image Take: diffuse becomes the beauty RGBA; depth becomes
depth.Z; normal becomesN.X/Y/Z; roughness, metalness, height, AO and the other maps become single-channel data layers named after the channel. - A video Take: the video becomes a beauty sequence; VideoDepth becomes
Z; VideoMask becomes a matte; object tracks on that video become Cryptomatte objects.
Channel naming presets
- Standard: Nuke's
layer.channelconvention (R G B A,depth.Z,N.X,CryptoObject00.R). After Effects, Fusion and Houdini read it too. Use this unless you know you need another. - Blender:
ViewLayer.Combined.R,ViewLayer.Depth.Z,ViewLayer.CryptoObject00.R, which Blender's Cryptomatte node expects. - Houdini:
Pzfor depth and lowercase components (N.x,C.r).
Compression
ZIP (1 scanline) is the compositing default and the fastest to read partially. ZIP (16 scanlines) makes smaller files. PIZ compresses noisy images best. RLE and None exist for tools that need them. All five are lossless.
Single-part or multi-part
Single-part files put every channel in one image and open everywhere. Multi-part files store each layer separately, which Nuke and Houdini read faster when they only need some layers. After Effects and Fusion are happier with single-part.
Colour
Colour passes (beauty and colour data maps) are converted from their source colour space into the Working space, scene-linear Rec.709 by default, with ACEScg and the other ACES spaces available. The chosen primaries are written into the file's chromaticities attribute so the compositor knows what it has. Data passes (depth, normals, mattes, Cryptomatte) are never colour-converted.
Cryptomatte from tracks
A tracking session built with a plain detection model has boxes but no masks, so its Cryptomatte objects are box-shaped. Use a segmentation tracking model for proper edges. The export also locks the frame rate to the track's extraction rate so frame numbers line up.
Convert operations
Four operations live under Convert in the operation pickers and as Workflow nodes.
- Convert To OpenEXR takes an image, video or image sequence plus optional depth, matte and segmentation inputs, and writes an
.exrimage or an.exrimage sequence into the project. The same encoding choices as the export dialog, as parameters. - Convert Colourspace converts between the built-in spaces. Scene-linear and log destinations are written as EXR; display spaces are written as PNG, or as a re-encoded video when the source is a video.
- Re-encode Video transcodes with the codec set Kitlig can ship: H.264 and HEVC through the encoders your FFmpeg has, VP9 (webm), AV1 (mp4) and lossless FFV1 (mkv).
- Extract Frame grabs one frame as PNG, JPEG, or a scene-referred EXR converted into the working space.
FFmpeg
Video in or out needs FFmpeg. Re-encode Video and Extract Frame are greyed without it; Convert To OpenEXR and Convert Colourspace still work on stills and sequences.
Viewing through a display transform
Colour management is off by default, and the viewers show every file exactly as it is encoded. Turn it on under Settings, Colour (see Settings). Then the viewer toolbar gains a display and view picker. The built-in config offers sRGB, Display P3, Rec.709 and Rec.2020 displays with Standard, ACES (approx) and Raw views. Pick the ACES Studio or ACES CG config, or your own .ocio file, and the same picker lists that config's displays and views, rendered by OpenColorIO itself (the real ACES output transforms, not an approximation). Saved display, view and input colour space names are matched to the new config by alias or role, and fall back to its defaults when there is no match.
Whether colour management is on or off, the toolbar's colour group gives you:
- Exposure in half-stop steps. Double-click the value to reset.
- Gamma. Scroll over the value to adjust it, double-click to reset.
- Channel isolate: RGB, R, G, B, A or L (luminance).
- A reset button once anything has changed.
EXR files always go through this path. They decode to float, show through the display transform, and the bar under the image reads out the float values of every channel under your cursor. A layer picker switches which EXR layer feeds the view.
Video stays 8-bit on screen
The browser plays video at 8 bits, so the colour controls on a playing video are a preview aid, not a precise grade. For a precise frame, use the EXR snapshot button on the toolbar: it decodes the frame at full precision and writes it as an OpenEXR asset, never from the screen.
Preview precision
Settings, Colour, Precision picks the texture precision of the display pass: 8-bit, 16-bit float or 32-bit float. EXR and 16-bit stills keep their range at the higher settings; stepping exposure through a float image shows detail an 8-bit path would band. Renderer picks the display pass itself: Automatic draws through WebGPU when the machine has it and falls back to WebGL2. The EXR viewer's footer shows which one is active.
Native decoding
When the kitlig-media helper ships with the local inference sidecar, the colour-managed viewers decode through it: FFmpeg reads video at its source bit depth (a 10-bit file stays 10-bit on the way to the display pass) and OpenEXR reads EXR with every channel and layer, both as 16-bit float frames. The EXR viewer's footer shows Native when this path is active and TS when the built-in decoder is doing the work. Turn it off under Settings, Colour, Decode with the native helper if you need to compare the two.
Note
The browser's own video playback is still the clock and the audio source. The native path draws the colour-managed picture on top of it frame by frame, so on long high-resolution clips it can skip presentations during playback while keeping every frame correct when you scrub or step.
Related
- Video tools for the player's Re-encode and Extract Frame buttons.
- Object tracking for the masks that become Cryptomatte objects.
- Kitlig Assets and Takes for how channels are assigned.