I want to...
Pick your goal
Each section says what you get, the steps, and what is worth knowing. New to Kionjo? Do the getting started guide first.
Make a VR trailer with a headset
What you get: footage that moves like a real head, rendered offline at up to 4K through your own camera and post processing.
- Select your rig root (for Meta XR,
OVRCameraRig) and add Add Component > SeedeXR > Kionjo Recorder. - Add three tracks:
Head= the center eye camera (CenterEyeAnchor),LeftHandandRightHand= the hand anchors. Name the head track exactlyHead: renders follow it. - Plan the shots in the Storyboard tab. Leave each as a Performance shot with Offline Render.
- Connect the headset over Link or Air Link, put it on and enter Play mode. In the Shoot tab, press Stage, then Space to start and stop each take.
- Take the headset off and stop Link. Stay in Play mode if the editor allows it, otherwise enter Play mode again without the headset.
- Press Replay to check the motion, then Render selected take, or Render missing shots in the Cut tab.
- Press Build draft in the Cut tab.
KionjoRecorder.ToggleTake() from a controller button.Make a flat game trailer with my own camera or Cinemachine
What you get: the same storyboard, render and cut flow, with a camera instead of a headset.
A camera you fly yourself
- Add a Kionjo Recorder to your camera's rig and add the camera as a track named
Head. - Shoot Performance shots: fly the camera in Play mode while recording, then render the take at the quality you want.
A camera that moves on its own (Cinemachine, Timeline, animation)
- Set the shot's Type to Live Camera and its Target Seconds to the length you want.
- Add a Kionjo Camera Source component and set its Camera. Without one, Kionjo uses the camera tagged MainCamera.
- Use the source's On Render Started event to start your camera move, for example a Cinemachine shot or a Timeline.
- In Play mode, press Render selected take. Kionjo renders the camera frame locked for the target length. No take is needed.
Plan the trailer before shooting
What you get: an animatic, a video of the storyboard. Every shot is its picture held for its planned length, with voice, subtitles and music placed exactly as the real cut will place them. Watch it with the team to agree on pacing before anything is shot.
- Add the shots and cards. Give each shot a Target Seconds.
- Give shots a picture: frame each place in the Scene view and use From Scene view in the Picture section, or drop an image on it.
- Add the voice lines, subtitles and music cues.
- In the Cut tab, press Build animatic. It lands in
Kionjo/animatic/animatic01/.

Use my headset's own recording instead of re-rendering
What you get: a shot made from a video the device recorded, trimmed by the cut. No replay, no render.
- Select the shot and set Output Mode to Device Capture.
- Press Import capture and pick the video (MP4, MOV or MKV). Kionjo copies it into
Kionjo/captures/<code>/and uses it. - Set In Point and Out Point to the part you want. An Out Point of 0 means the end of the file.
- Build the draft as usual.
captures/index.md listing what was imported. Organise Only mode keeps a shot's files in the same layout but leaves it out of the cut. To start your own device recorder together with a take, implement IKionjoRecordingHook.Add voice over and subtitles
What you get: voice lines placed per shot, trimmed, faded, with subtitles burned into the video and written as subs.srt.
- Select a shot or card and open Voice and subtitles. Add a line.
- Set Audio Path (WAV, MP3, OGG, M4A or FLAC) and the Subtitle text. An empty subtitle means no subtitle for that line.
- Set At: the seconds after the shot starts in the cut.
- Pick a Trim Mode: Silence (the default) trims leading and trailing silence at -55 dB. Words trims to the first and last spoken word and needs Python with faster-whisper. Manual uses Trim In and Trim Out exactly as typed.
- Style the subtitles once for the whole trailer in the storyboard settings: font file, font name, size, colour, outline and margin.
{\an5}{\fad(500,1100)}. If Words trim cannot run, Kionjo falls back to Silence and says why in the Console.Add music that ducks under the voice
What you get: music cues joined with crossfades, pushed down while someone speaks, and a final mix normalised for loudness.
- Open the storyboard settings and add cues to Music.
- Per cue, set Audio Path, Trim In and Trim Out (0 = the end of the file), At (absolute time in the cut), fades (1.5 s in and 2 s out by default) and Volume (0.5 by default).
- Consecutive cues crossfade over Music Crossfade Seconds (2 s by default). Set it to 0 to join them without a crossfade.
- Tune Ducking if you need to: threshold 0.05, ratio 3, attack 40 ms and release 700 ms by default. Untick Enabled to switch it off.
Put sound effects on button presses
What you get: a sound in the cut at the exact moment something happened in the take, such as a button press.
- Mark the moment in your game code:
KionjoEvents.Mark("seal");. Or, without code, add a Kionjo Event Relay component, set its Event Name, and call itsMarkmethod from a UnityEvent such as a Button's On Click. - Record the take. Every mark lands in
take.jsonwith its time. - On the shot, open Sound effects and add a cue. Set Audio Path and put the same name in Event Name.
- Build the draft. The sound plays where the event happened, shifted by the shot's In Point.
using SeedeXR.Kionjo;
public void OnSealPressed()
{
KionjoEvents.Mark("seal"); // optional payload: KionjoEvents.Mark("button", "Confirm")
}
KionjoReplayer.onEvent so your game can show the matching UI state. Kionjo never presses anything for real.Render in 4K
What you get: renders at 3840 x 2160, 60 fps, through your own camera with post processing.
- Open the storyboard settings and set Render Preset to UHD2160p60.
- Set Cut Preset to UHD2160p60 too, here or in the Cut tab.
- Optional: under Render Quality, tick Enabled and choose a quality level, LOD bias, texture mip limit, forced anisotropic filtering or unlimited skin weights. They apply only while rendering.
- In Play mode, render the shots again, then build the draft.
| Preset | Size | fps | x264 | Used for |
|---|---|---|---|---|
| Preview720p30 | 1280 x 720 | 30 | crf 23, veryfast | Render and cut |
| HD1080p60 | 1920 x 1080 | 60 | crf 18, medium | Render |
| HD1080p30 | 1920 x 1080 | 30 | crf 18, medium | Cut |
| UHD2160p60 | 3840 x 2160 | 60 | crf 16, medium | Render and cut |
-c:v h264_nvenc -cq 19 -preset p6. Per shot, Horizontal Fov overrides the lens for the render (0 keeps the camera's own). A render is always the whole take.Finish the edit in Premiere or Resolve
What you get: every draft folder holds an FCP7 XML timeline, <Title>_draftNN.xml, next to the MP4 and the SRT.
- Build a draft in the Cut tab.
- Press Show folder.
- Import the XML into Premiere Pro or DaVinci Resolve as a timeline.
commands.txt in the same folder lists every ffmpeg step, quoted, so you can re-run or tweak the cut by hand. cut.log has ffmpeg's own output. Importing the XML into Premiere has not been verified yet: tell us how it goes.Set the scene up per shot
What you get: each shot staged the same way every time: debug panels hidden, the right objects shown, the story at the right beat.
- Select the shot and open Staging.
- Drag scene objects from the Hierarchy onto Drop scene objects here to hide them for this shot, or onto the show zone. Kionjo stores them as hierarchy paths such as
/Environment/Outside UI. - For anything else, write a Stage Command and implement
IKionjoStageHandleron a MonoBehaviour in the scene. Kionjo passes the command to every handler, one after another, and waits for each coroutine. - In Play mode, press Stage in the Shoot tab. Check verifies the scene against the shot without changing it.
using System.Collections;
using SeedeXR.Kionjo;
using UnityEngine;
public class TrailerStage : MonoBehaviour, IKionjoStageHandler
{
public IEnumerator Stage(string shotId, string stageCommand)
{
if (stageCommand == "verdict") { /* jump the story to the verdict */ }
yield return null;
}
}
Drive Kionjo from an AI agent or a script
What you get: every verb of the window as a Unity CLI command, plus a state file to watch. Kionjo works without any AI. An agent uses the same verbs a person uses.
- Install
com.unity.pipeline0.9 or newer. Without it these commands are not compiled, and everything else still works. - Run commands from a terminal. Always pass
--project-path: with two editors open, the CLI may otherwise answer from the other one.
unity command kionjo status --project-path "<your project>"
Every answer has ok and message.
| Command | What it does |
|---|---|
kionjo status | The storyboard, every shot (takes, render, state), Play mode, recording, the running job. |
kionjo create --storyboard Assets/Trailer/Storyboard.asset --title "My Trailer" | New storyboard, opened in the window. |
kionjo open --storyboard Assets/Trailer/Storyboard.asset | Open an existing storyboard. |
kionjo select --shot S03 | Select a shot by code or id. |
kionjo stage | Play mode: apply hide and show lists, run stage handlers. |
kionjo check | Is the selected shot ready? Lists what is wrong. |
kionjo record --start true | Play mode: start a take. --start false stops it. |
kionjo render --shot S03 --preset HD1080p60 | Play mode: render one shot, or every shot missing a render when --shot is empty. |
kionjo cut | Assemble the next numbered draft. --animatic true builds an animatic. |
kionjo export --json storyboard.json | The storyboard as JSON. |
kionjo import --json storyboard.json --replace false | Append shots from JSON. --replace true replaces everything. Undoable. |
The state file
The window writes Kionjo/state.json (under the storyboard's output folder) whenever something changes, at most twice a second. Watch it instead of polling the editor.
{
"storyboard": "Assets/Trailer/Storyboard.asset",
"title": "Baraza Trailer",
"isPlaying": true,
"isRecording": false,
"currentShot": "ab72ffac99ba4865805fe10b224a88a7",
"plannedSeconds": 64.0,
"targetSeconds": 80.0,
"shots": [
{
"code": "S01",
"name": "Crane down on the dome",
"takes": 2,
"hasRender": true,
"state": "rendered"
}
],
"job": {
"title": "Render S03",
"running": true,
"progress": 0.44,
"status": "frame 108 of 231"
}
}
Recipe: render and cut overnight
- After a shoot, stay in Play mode with the headset unplugged.
- Run
kionjo renderwith no shot: every shot missing a render is queued. - Watch
state.jsonuntiljob.runningis false and nothing is queued. - Run
kionjo cut.
Recipe: suggest a storyboard
- Read the narration script and list the scene's main places.
- Write a storyboard JSON: an opening card, shots grouped by beat, each with a location, a target length, its voice line and subtitle, and a closing card.
kionjo import --json draft.json --replace true, thenkionjo cut --animatic trueso the team can watch the pacing.