Export a rendered animation
This walkthrough takes you from "I have a scene" to "I have a 60-frame PNG sequence on disk" in five minutes. Then it shows the one tweak that produces an MP4 instead.
1. Build a scene with motion
Open Construct and add (or load) any SDF scene. To prove the animation
loop is working, pick one numeric parameter — e.g. a translate's x
or a sphere's radius — and bind it to an expression:
- Select the instance.
- In the parameter panel, switch the parameter from Literal to Expression.
- Enter an expression that varies with
time, for examplesin(time * 2.0) * 3.0.
The time variable is built-in. During a render export it is updated
each frame to frame / fps.
2. Open the Rendering dialog
Click the Rendering button in the toolbar. The dialog opens with two tabs: Options and Export.
3. Pick a preset (or save your own)
The bar at the top of the dialog manages saved render presets. A preset is a named bundle of every Options-tab control (raymarch, exposure, shading mode, environment, debug view, tone mapping, AA, projection).
Either:
- Select an existing preset from the combo (its values apply to the Options form), or
- Tune the Options-tab controls to taste, type a name in the lineedit, and press Save.
Preset files are JSON files under
octomy-sid:/config/presets/construct/<name>.json. With no sentient mounted, they go to the same path under the app data folder. These are the presets of the settings window too, so a preset saved here appears there. Draft, Standard and Final are built in. See Save a preset.
4. Switch to the Export tab
Three things to fill in:
- Filename — the default is something like
/home/you/Pictures/sequence_20260526_142301/frame_%04f.png. The%04fis the frame number (zero-padded to 4 digits); the%Y…%stokens were resolved at queue press into the current date and time. Edit freely; the live preview below the lineedit shows what frame 0 will be written to. - Output format — leave at PNG for the still-image walkthrough.
- Resolution — pick a preset (e.g. 1080p Full HD) or punch values into the W / H spinners. The combo flips to Custom the moment you do.
- Frames — set
From = 0,To = 59. That's 60 frames. - FPS — leave at 30 for two seconds of motion.
- Render preset — pick the preset you saved in step 3.
- On existing file — Overwrite is fine for the first run.
The estimate line below the controls shows expected size + an approximate wall-clock figure. If the line turns red, you don't have enough disk space on the target volume.
5. Queue and watch
Press Queue Export. The button label changes to Open Jobs Panel.
The job runs in the background. Open the global Jobs panel (BatchActivity in the node window) to watch progress: 60 frames at 1080p take a few seconds on a modern GPU.
When the job finishes, open the output folder. You should have
frame_0000.png through frame_0059.png. Step through them and you
should see the expression-bound parameter animate.
6. Same thing as a video
Repeat steps 4–5 with one change: in Output format, pick
MP4 (H.264) instead of PNG. Queue Export. The Jobs panel reports
one job that internally encodes all 60 frames into a single
*.mp4.
Video options only appear when QtMultimedia on your platform reports at least one encodable container/codec pair. On a stripped Linux without GStreamer / FFmpeg plugins, the video formats are absent from the combo and a hint reads "(no video codec available)".
Tips
- Editing while rendering: feel free. The render job sees a frozen snapshot of the scene at the moment you pressed Queue. Your live edits never affect the in-flight job.
- Cancelling a job: cancel from the Jobs panel. Partial output
stays on disk; combine with
Skippolicy to resume later. - Resume a sequence: select Skip as the existing-file policy. Frames that are already present are kept; missing frames are rendered.
- Long sequences: bump
Toto a few thousand if you want. The filename engine pads frame numbers to whatever width you ask for (%6ffor 6 digits, etc.). The expression engine is cheap — 10 000 expansions of a representative template fit comfortably under 50 ms in release builds.
Where do the files end up?
- Single image / sequence: by default under your
~/Picturesdirectory. - Single video: by default under your
~/Moviesdirectory.
You can change these per-format defaults by editing the filename
template; the three slots (singleImage, imageSequence,
singleVideo) are remembered separately and persist across sessions.
Troubleshooting: modern codecs are unavailable
If the Codec dropdown only offers older codecs (MPEG-2, MPEG-4, Motion JPEG…) and the H.264 / H.265 / VP9 / AV1 entries you expect are missing, one of three things is happening:
- Your GPU's hardware encoder is broken on this driver. This is
the common case on Linux with certain NVIDIA + driver combinations,
where
h264_nvencreaches the encode call and then refuses CPU-side input frames. Construct's probe correctly classifies the whole codec as non-working in this case. On a clean reboot or driver update it usually comes back; you can force a re-probe by deleting the codec stability cache. - Older codecs are filtered for clarity. MPEG-1/2/4 and Motion JPEG live behind a Show legacy codecs checkbox next to the Codec dropdown. Tick it if you specifically need one of them.
- Your Qt build doesn't include software codec fallbacks. Some
Qt distributions ship only an LGPL-licensed FFmpeg without
libx264/libvpx/libaom. In that scenario there is no software path to fall back to when hardware encoders break, and recovery requires a Qt build that bundles those encoders.
If you'd like to know exactly which path a given codec took (hardware
vs software fallback), enable the hidden setting
CodecProbe/ShowCodecTier — entries recovered via the software
fallback get a (software) suffix in the dropdown.