CLI reference¶
Installed as: quiltwright, core-only (numpy, pillow, click) -- no
extra needed just to run --help.
Source: src/quiltwright/cli/
Most commands operate on a quilt, which is where the backends have
already met: a manifold swept out of PyVista and a molecular scene
ray-traced from POV-Ray produce the same artifact, and cast / weave /
wallpaper / dynamic treat them identically. Three commands are a whole
pipeline rather than a step after one -- mesh, cartoon, probe -- and none of
them is a generic renderer for the bundled scenes; those stay in
scripts/, covered in shell.md.
This page is the flag-by-flag reference for every command. For the why behind each one, see shell.md.
quiltwright [OPTIONS] COMMAND [ARGS]...
| Option | Effect |
|---|---|
--version |
Print the installed version and exit |
--help |
Show help and exit -- also works on any subcommand |
| Command | For |
|---|---|
bridge |
Inspect and restart Looking Glass Bridge |
cartoon |
Convert a structure into a POV-Ray cartoon include |
cast |
Show a saved quilt on the connected Looking Glass |
dynamic |
Pack stills into a macOS Dynamic Desktop HEIC |
mesh |
Auto-frame a mesh file and render it as a quilt |
probe |
Measure a scene's near and far depth by plane sweep |
wallpaper |
Set a woven frame as the desktop picture of its own panel |
weave |
Weave a quilt into a native pre-lensed frame for one panel |
bridge¶
quiltwright bridge COMMAND [ARGS]...
Inspect and restart Looking Glass Bridge.
quiltwright bridge status # is it actually able to draw?
quiltwright bridge reset # kill and relaunch a wedged daemon
bridge status¶
quiltwright bridge status [OPTIONS]
Reports whether Bridge is running, responsive, and seeing a panel. Exits
non-zero if Bridge is unusable, so this can gate a cast in a script. Bridge
keeps its HTTP port open and keeps issuing session tokens after crashing
internally, so a cast can report success at every step against a daemon
that will never draw -- status checks the port, the session, the device
list and whether any device is actually a Looking Glass, then gives a
verdict.
| Option | Default | Effect |
|---|---|---|
--bridge-url TEXT |
http://localhost:33334 |
Bridge HTTP API base URL |
--timeout FLOAT |
5.0 |
Per-request timeout. A wedged Bridge hangs rather than refusing, so this is what separates "slow" from "dead" |
bridge reset¶
quiltwright bridge reset [OPTIONS]
Terminates Bridge and starts it again. Bridge's own menu restart spawns a replacement that inherits the wedge, which is why this kills the processes outright. Anything currently playing on the panel stops.
| Option | Default | Effect |
|---|---|---|
--no-relaunch |
off | Terminate Bridge without starting it again |
--wait FLOAT |
20.0 |
Seconds to wait for the relaunched daemon to answer |
--bridge-url TEXT |
http://localhost:33334 |
Bridge HTTP API base URL |
cartoon¶
quiltwright cartoon [OPTIONS] [SOURCE] [OUTPUT]
Converts a structure into a POV-Ray cartoon include, via headless PyMOL.
SOURCE is anything PyMOL can load -- .pdb, .cif, .cif.gz. OUTPUT
is the .inc to write. See pdb2pov.md for the object-only
contract this writes to.
| Option | Default | Effect |
|---|---|---|
--rep TEXT |
cartoon |
Representation. cartoon and surface are what pdb2pov cannot draw; sticks and spheres duplicate its -b and -v |
--color TEXT |
spectrum |
spectrum ramps rainbow along the chain; any PyMOL color name is flat; none keeps PyMOL's own coloring |
--selection TEXT |
polymer |
PyMOL selection to show. The default drops waters and ligands |
--assembly TEXT |
1 |
Biological assembly. 1 is the biological unit -- ferritin arrives as a 24-mer rather than a 24th of itself. "" gives the asymmetric unit |
--transparency FLOAT (0.0-1.0) |
0.0 |
Exports as POV-Ray transmit, which is flat see-through rather than refractive |
--surface-quality INTEGER |
-- | PyMOL surface_quality; lower is coarser. Worth setting negative for a large --rep surface, which otherwise runs to millions of triangles |
--name TEXT |
output stem | POV-Ray identifier to declare. Defaults to the output stem, made legal (a leading digit gains an underscore) |
--raw |
off | Skip coalescing and keep PyMOL's one mesh per triangle. For comparing against the raw export; several times larger |
--check |
off | Report how PyMOL can be reached and exit, converting nothing |
quiltwright cartoon 2omf.cif.gz ompf_cartoon.inc # a molecular ribbon, via PyMOL
quiltwright cartoon --check # is PyMOL reachable, and by which route?
cast¶
quiltwright cast [OPTIONS] [QUILT]
Shows a saved quilt on the connected Looking Glass. QUILT is a quilt PNG
on this machine, normally one written by save_quilt() or make
quilt-<name>, whose _qs<cols>x<rows>a<aspect> filename suffix supplies
the tiling automatically.
Requires Looking Glass Bridge >= 2.2 running on the machine the panel is plugged into. Quit Looking Glass Studio first -- it holds the display exclusively, and Bridge will report success while the glass stays black.
| Option | Default | Effect |
|---|---|---|
--preset [16-landscape\|16-portrait\|27-landscape\|27-portrait\|32-landscape\|32-portrait\|65\|go\|portrait] |
-- | Quilt tiling grid and aspect, by device preset name |
--grid COLSxROWS |
from filename | Quilt tiling grid, explicit (e.g. 8x6); defaults to parsing the _qs<cols>x<rows>a<aspect> filename suffix |
--aspect FLOAT |
from filename | Tile aspect, overriding the filename's. Rarely needed -- a value disagreeing with the panel is letterboxed by it |
--head INTEGER |
-1 |
Bridge head index to play on. -1 lets Bridge choose, which is right until it picks an ordinary monitor; run --check for the list |
--playlist TEXT |
quiltwright |
Bridge playlist name to create or replace |
--bridge-url TEXT |
http://localhost:33334 |
Bridge HTTP API base URL |
--check |
off | List the output devices Bridge can see and exit without casting. The first thing to run when the glass stays black |
# Cast a rendered quilt; tiling comes from the filename
quiltwright cast renders/quilts/bell-jar-holo_qs8x6a1.77778.png
# Which displays can Bridge see? Run this first when nothing appears
quiltwright cast --check
# Pin the panel when Bridge picks an ordinary monitor
quiltwright cast quilt.png --head 1
# A quilt whose filename carries no _qs suffix
quiltwright cast plain.png --grid 8x6 --aspect 1.77778
quiltwright cast plain.png --preset 16-landscape
mesh¶
quiltwright mesh [OPTIONS] SOURCE
Auto-frames the mesh file SOURCE and renders it as a quilt through
Blender Cycles -- the only command here that needs no scene of ours at
all. See mesh-import.md.
| Option | Default | Effect |
|---|---|---|
--device [16-landscape\|16-portrait\|27-landscape\|27-portrait\|32-landscape\|32-portrait\|65\|go\|portrait] |
portrait |
Target display, which sets the quilt grid, size and view cone |
--lighting TEXT |
studio |
Light rig for a mesh that carries none: one of soft, studio, sky, or a path to an .hdr/.exr environment map |
--fov FLOAT |
14.0 |
Vertical field of view in degrees. Object-centric, so narrow |
--view-direction X Y Z |
0.0 -1.0 0.0 |
Direction from the object's center to the eye (+z is up) |
--margin FLOAT |
1.2 |
Framing headroom beyond a tight fit; 1.0 is exactly tight |
--samples INTEGER |
128 |
Cycles samples per pixel |
--view-transform TEXT |
Standard |
OCIO view transform (Standard, AgX, Filmic, ...); see cycles.md |
--compute [auto\|gpu\|cpu] |
auto |
Cycles compute device. auto prefers a GPU, Metal first |
--preview |
off | Quarter-size quilt, for iterating on framing |
--still |
off | One center view as a flat image, at the device's aspect, instead of a quilt |
--out TEXT |
source name | Output stem; defaults to the source name under renders/quilts/ (or gallery/ with --still) |
--cast |
off | Send the result to Looking Glass Bridge |
quiltwright mesh model.glb
quiltwright mesh scan.fbx --lighting sky --still
quiltwright mesh asset.obj --device 27-portrait --samples 256 --cast
quiltwright mesh statue.ply --view-direction 0.5 -1 0.3 --fov 20
probe¶
quiltwright probe [OPTIONS] SCENE
Measures SCENE's near and far depth by plane sweep -- the measurement
every POV-Ray depth budget starts from: it slides an opaque plane along
the view axis and reports where content actually begins and ends, which is
what focal_distance_for_range() wants. Probe through the camera you will
render with, and at +Q8 or above -- below that POV-Ray disables
transparency and a room reports no windows at all. On a scene whose
backdrop runs to the horizon the sweep never closes and the printed far
is the end of it; the command says so, and --rows prints the curve to
fit the knee from.
| Option | Default | Effect |
|---|---|---|
--eye X Y Z |
required | Camera position to probe through, in scene units |
--aim X Y Z |
required | Camera look-at point |
--fov FLOAT |
53.13 |
Vertical field of view in degrees. The default is POV-Ray's own unit direction/up lens, 2*atan(0.5) |
--min-distance FLOAT |
1% of --max-distance |
Near end of the sweep. A scene composed far from its eye -- porin sits 1100 units out -- wants its probes where its content is, not 200 of them in front of it |
--max-distance FLOAT |
400.0 |
Far end of the sweep, before the one at infinity |
--probes INTEGER |
200 |
Number of planes between the two distances |
--include-path DIR |
-- | Extra #include directory; repeatable. The scene's own is automatic |
--width INTEGER |
320 |
Probe frame width |
--height INTEGER |
180 |
Probe frame height |
--quality INTEGER |
11 |
POV-Ray +Q. Below 8 it disables transparency and glass reads solid |
--pov-arg ARG |
-- | Extra POV-Ray argument, e.g. +MV3.1 for a scene with no #version pragma of its own; repeatable |
--rows |
off | Print the whole curve, one distance per line |
quiltwright probe pov-scenes/bell_jar/bj.pov --eye 0 35 -95 --aim 0 18 0
quiltwright probe pov-scenes/porin/3porin.pov --eye 0 0 -1100 --aim 0 0 0 \
--include-path pov-scenes/myinclude --min-distance 700 \
--max-distance 1600 --pov-arg +MV3.1
dynamic¶
quiltwright dynamic [OPTIONS]
Packs finished stills into a macOS Dynamic Desktop .heic. macOS picks the
frame from sun position, wall-clock time, or Light/Dark appearance -- with
no agent of ours running. Install the file with wallpaper.
This is not POV-Ray's clock. That identifier is POV-Ray's animation
parameter (+K). Real time of day lives in the HEIC metadata, which macOS
reads. POV-Ray's contribution is render_pov_quilt(..., lighting="light")
or sun=(altitude, azimuth) to produce the stills.
Woven _native_ frames always encode lossless 4:4:4. Lossy HEVC 4:2:0
would mix the per-channel views and destroy the hologram. Encoding needs
the heic extra (pip install 'quiltwright[heic]').
| Option | Default | Effect |
|---|---|---|
--appearance LIGHT DARK |
-- | Two stills: light appearance, then dark |
--solar FILE.json |
-- | JSON array with altitude / azimuth per still (wallpapper shape) |
--time FILE.json |
-- | JSON array with time (HH:MM or HH:MM:SS) per still |
-o, --output PATH |
-- | Output .heic. Required unless --dump |
--lossless |
off (on for _native_) |
Force lossless 4:4:4 |
--lossy |
off | Force lossy HEVC. Refused for woven frames |
--dump PATH |
-- | Print apple_desktop metadata from an existing HEIC |
quiltwright dynamic --appearance day_native_LKG-J00332.png night_native_LKG-J00332.png \
-o scene.heic
quiltwright dynamic --solar solar.json -o scene.heic
quiltwright wallpaper scene.heic
Give exactly one of --appearance, --solar, or --time.
wallpaper¶
quiltwright wallpaper [OPTIONS] [WOVEN]
Sets a woven frame as the desktop picture of its own panel. WOVEN is a
native-resolution frame from quiltwright weave -- already interleaved
for one panel, so displayed 1:1 it fuses into a hologram with no Looking
Glass software running at all. The panel is identified from the
_native_<serial> filename and matched against each desktop's display
name.
The frame is copied into a stable pictures folder first, because macOS
stores wallpaper as a path: pointing the desktop into renders/ means the
panel goes blank the next time that directory is cleaned.
| Option | Default | Effect |
|---|---|---|
--display TEXT |
serial in filename | Panel serial to target (e.g. LKG-J00332) |
--desktop INTEGER |
-- | Target desktop by 1-based index instead of by serial. Use --list to see them |
--dir DIRECTORY |
~/Pictures/LKG-wallpapers |
Where to install the frame |
--no-install |
off | Set the file where it lies instead of copying it. Convenient, but the desktop breaks if that path is later cleaned |
--list |
off | List the desktops and their current pictures, then exit |
# Weave, then hang it on the panel it was woven for
quiltwright weave renders/quilts/bell-jar-holo_qs8x6a1.77778.png \
--cal ~/Pictures/LKG-wallpapers/visual.json
quiltwright wallpaper bell-jar-holo_native_LKG-J00332.png
# What is on each desktop right now?
quiltwright wallpaper --list
# Target explicitly, when the filename carries no serial
quiltwright wallpaper frame.png --display LKG-J00332
quiltwright wallpaper frame.png --desktop 2
# Leave it where it is (it will break if renders/ is cleaned)
quiltwright wallpaper renders/quilts/x_native_LKG-J00332.png --no-install
weave¶
quiltwright weave [OPTIONS] QUILT
Weaves QUILT into a native pre-lensed frame for one panel -- interleaved
for display 1:1, most usefully as its desktop wallpaper, with no Bridge
process required. See docs/lfd.md and quiltwright.weave for
the math.
| Option | Default | Effect |
|---|---|---|
--cal FILE |
required | Path to the panel's visual.json calibration file |
--preset [16-landscape\|16-portrait\|27-landscape\|27-portrait\|32-landscape\|32-portrait\|65\|go\|portrait] |
-- | Quilt tiling grid, by device preset name |
--grid COLSxROWS |
from filename | Quilt tiling grid, explicit (e.g. 8x6); defaults to parsing the _qs<cols>x<rows> filename suffix |
-o, --output FILE |
<quilt stem>_native_<serial>.png |
Output path |
--invert |
off | Reverse the view order if the fused result reads inside-out |
quiltwright weave renders/quilts/bell-jar-holo_qs8x6a1.77778.png --cal visual.json