Conventions#
| Topic | Rule on Animux |
|---|---|
| Shell | bash; the user's Home is $HOME; the guide's commands assume a normal user |
| Graphical programs | need the user's display: DISPLAY=:0 (X11, Xfce). Check with xdpyinfo -display :0 >/dev/null |
| Headless programs | need no display; prefer them |
| Exit codes | 0 = success for every command below. Still check the output file: some programs return 0 after writing nothing |
| Time limits | wrap long jobs: timeout 3600 blender -b … |
| Logs | redirect: cmd > job.log 2>&1 |
| Paths with spaces | quote them |
| Parallel jobs | Blender, Cycles, pbrt, LuxCore and Mitsuba each use all cores; run them one after another |
| Python with VFX libraries | animux-vfx-python (OpenUSD, OIIO, OpenEXR, OCIO, MaterialX, Mitsuba, LuxCore, NumPy) |
| Blender's own Python | blender -b --python script.py (module bpy) |
| Gaffer's Python | gaffer env python script.py or gaffer python script.py (modules Gaffer, GafferScene, IECore) |
All headless commands#
| Program | Command-line use (no window) |
|---|---|
| Blender | blender -b scene.blend -o //render_#### -F PNG -f 1 |
| Blender | blender -b scene.blend -a |
| Blender | blender -b --python script.py |
| OpenSCAD | openscad -o part.stl part.scad |
| POV-Ray | povray +Iscene.pov +Oscene.png +W1280 +H720 +A -D |
| appleseed | appleseed.cli scene.appleseed --output out.png |
| LuxCoreRender | animux-vfx-python /usr/share/animux/samples/luxcore/render.py out.png |
| Mitsuba 3 | mitsuba scene.xml -o out.exr |
| Mitsuba 3 | animux-vfx-python /usr/share/animux/samples/mitsuba/render.py out.exr |
| pbrt-v4 | pbrt --outfile out.exr scene.pbrt |
| pbrt-v4 | imgtool convert out.exr out.png |
| Gaffer | gaffer execute -script scene.gfr -nodes Render |
| Gaffer | gaffer python script.py |
| OpenUSD tools (usdview, usdcat …) | usdcat scene.usda -o scene.usdc |
| OpenUSD tools (usdview, usdcat …) | usdchecker scene.usda |
| OpenUSD tools (usdview, usdcat …) | usdtree scene.usda |
| Alembic tools (abcls, abctree …) | abcls -r file.abc |
| Alembic tools (abcls, abctree …) | abctree file.abc |
| Alembic tools (abcls, abctree …) | abcecho file.abc |
| Open Shading Language (oslc, oslinfo, testshade) | oslc myshader.osl |
| Open Shading Language (oslc, oslinfo, testshade) | oslinfo myshader.oso |
| OpenEXR and OpenImageIO tools | oiiotool in.exr --resize 50% -o out.png |
| OpenEXR and OpenImageIO tools | exrheader in.exr |
| OpenEXR and OpenImageIO tools | iinfo -v in.exr |
| OpenColorIO tools | ociocheck --iconfig config.ocio |
| OpenVDB tools | vdb_print -l file.vdb |
| Animux VFX Python | animux-vfx-python -c "import pxr, OpenImageIO, PyOpenColorIO, mitsuba, pyluxcore" |
| Flamenco | flamenco-manager |
| Flamenco | flamenco-worker -manager http://MANAGER:8080/ |
| OpenToonz | LD_LIBRARY_PATH=/opt/animux/opentoonz/lib/opentoonz /opt/animux/opentoonz/bin/tcomposer scene.tnz -o out.png |
| Synfig Studio | synfig file.sif -t png -o frame.png |
| Synfig Studio | synfig file.sifz -t ffmpeg -o movie.mp4 |
| GIMP | gimp-console -i --batch-interpreter=python-fu-eval -b "exec(open('script.py').read())" --quit |
| GIMP | gimp-console -i -b '(gimp-quit 0)' |
| Inkscape | inkscape drawing.svg --export-type=png --export-width=1920 |
| ImageMagick and G'MIC | convert in.png -resize 50% out.jpg |
| ImageMagick and G'MIC | mogrify -format jpg *.png |
| ImageMagick and G'MIC | montage frame*.png -tile 4x -geometry +4+4 contact-sheet.png |
| Avidemux | avidemux-cli --load in.mp4 --save out.mkv --output-format MKV |
| HandBrake | HandBrakeCLI -i in.mov -o out.mp4 --preset "Fast 1080p30" |
| FFmpeg | ffmpeg -framerate 24 -i render_%04d.png -c:v libx264 -pix_fmt yuv420p -crf 18 movie.mp4 |
| FFmpeg | ffmpeg -i movie.mp4 -i music.wav -c:v copy -c:a aac -shortest final.mp4 |
| Sound analysis and conversion (Sonic Visualiser, Praat, SoundConverter, SoX) | sox in.wav out.flac |
| Sound analysis and conversion (Sonic Visualiser, Praat, SoundConverter, SoX) | sox in.wav -n stat |
| Whisper | animux-whisper dialogue.wav --model small --language en --output_format srt |
| Whisper | animux-whisper film.mp4 --task translate --output_format srt |
| rembg | animux-rembg i photo.jpg cutout.png |
| rembg | animux-rembg p frames/ frames-cutout/ |
| Ollama | ollama serve |
| Ollama | ollama run llama3.2 "Write three names for a robot character" |
| Ollama | curl http://127.0.0.1:11434/api/generate -d '{"model":"llama3.2","prompt":"hello"}' |
| MCP servers (Blender, GIMP, Krita, Inkscape) | animux-mcp blender lab |
| MCP servers (Blender, GIMP, Krita, Inkscape) | animux-mcp gimp on |
| MCP servers (Blender, GIMP, Krita, Inkscape) | animux-mcp krita on |
| MCP servers (Blender, GIMP, Krita, Inkscape) | animux-mcp inkscape on |
| MCP servers (Blender, GIMP, Krita, Inkscape) | animux-mcp status |
| MCP servers (Blender, GIMP, Krita, Inkscape) | animux-mcp agent qwen3:8b |
| MCP servers (Blender, GIMP, Krita, Inkscape) | blender --background scene.blend --command blender_mcp |
| LTX (Lightricks API) | animux-ltx-api t2v "PROMPT" --duration 6 |
| LTX (Lightricks API) | animux-ltx-api i2v frame.png "PROMPT" |
| LTX (Lightricks API) | animux-ltx-api mcp |
| Animux Self-Test | animux-selftest |
| Animux Self-Test | animux-selftest --list |
| Animux Self-Test | animux-selftest blender povray |
| Animux Guide | animux-docs search render farm |
| Animux Guide | animux-docs show tutorials/first-3d-render |
| Animux Guide | animux-docs software blender --json |
| Animux Guide | animux-docs mcp |
Blender recipes#
# Render frame 1 of a file to PNG, 50% resolution, 16 samples
blender -b in.blend --python-expr "import bpy; s=bpy.context.scene; s.render.resolution_percentage=50; s.cycles.samples=16" -o /tmp/out_#### -F PNG -f 1
# Information about a .blend file (scenes, frame range, engine), as JSON
blender -b in.blend --python-expr "import bpy,json; s=bpy.context.scene; print('JSON'+json.dumps({'scene':s.name,'start':s.frame_start,'end':s.frame_end,'fps':s.render.fps,'engine':s.render.engine,'res':[s.render.resolution_x,s.render.resolution_y]}))" | grep '^JSON' | cut -c5-
# Convert / export
blender -b in.blend --python-expr "import bpy; bpy.ops.wm.usd_export(filepath='/tmp/out.usdc')"
blender -b --python-expr "import bpy; bpy.ops.wm.read_factory_settings(use_empty=True); bpy.ops.wm.obj_import(filepath='in.obj'); bpy.ops.wm.save_as_mainfile(filepath='/tmp/out.blend')"
Progress lines start with Fra:; a finished still prints Saved: '<path>'.
Images and video#
oiiotool in.exr --colorconvert linear sRGB -o out.png # EXR → PNG with a colour transform
iinfo -v in.exr # resolution, channels, metadata
ffprobe -v error -show_entries format=duration -of csv=p=0 in.mp4 # length in seconds
ffmpeg -y -framerate 24 -i f_%04d.png -c:v libx264 -pix_fmt yuv420p -crf 18 out.mp4
convert in.png -resize 1920x1080 out.jpg
Checking the system#
animux-selftest --list # available test names
animux-selftest blender # exit 0 = Blender works
grep -o -w -E 'sse4_2|avx|avx2' /proc/cpuinfo | sort -u
nproc; free -g; df -h "$HOME"
test -d /run/live/medium && echo live || echo installed
dpkg-query -W 'animux-*' # installed Animux packages and versions
Opening programs for the user#
When the user wants to work in a program themselves, open it on their display and detach it:
DISPLAY=:0 setsid -f krita ~/Pictures/sketch.kra >/dev/null 2>&1
DISPLAY=:0 xdg-open ~/Videos/film.mp4 # default program for a file
The menu entries' exact commands are in /usr/share/applications/*.desktop (Exec= lines).