Closed-loop GPU-saturation render daemons for the Quivent render system.
All spiral-* systemd units are stopped and disabled after a system audit found the spiral was the source of runaway GPU load (uncoordinated producers + multiple restart authorities + an in-process governor, with no shared arbiter or convergence stop).
Do not re-enable until the guardrails below and in the
SYSTEM-AUDIT-2026-06-10.md
are in place. up requires --force.
The spiral continuously feeds and steers the FLUX render worker so the GH200 stays busy, nudging the generation formula toward a calibrated target each cycle.
The render repository contains two largely independent systems:
Deterministic, model-free, byte-reproducible geometry. The pure render CLI, source/gpu_*.py, PIPELINE.md.
Comfort UI + inference stack + this spiral. The resident ~34 GB FLUX.1 pipeline + the autonomous research loop.
The seam between them is the render-stream/1 protocol and the shared out/ + museum surfaces. The spiral belongs entirely to the second product.
~/spiral (or $SPIRAL_ROOT) is both the Python package and the live data directory.
import spiral (the directory is the package).SPIRAL_ROOT for the web UI.python -m spiral.xxx and the systemd units resolve the package correctly.This design makes the spiral a self-contained “colony” that can be NFS-shared for fleet workers while the rich control surface lives in the Comfort UI + model-manager.
~/spiral/ # SPIRAL_ROOT (also the import root) ├── cli.py # the operator console (python -m spiral) ├── __main__.py ├── core/ # shared libraries │ ├── convergence.py │ ├── crew.py, crewcfg.py │ ├── modules.py │ └── ... ├── agents/ # the autonomous crew │ ├── mathematician.py, physicist.py, researcher.py... ├── orchestration/ │ ├── controller.py # closed-loop feedback governor │ └── runner.py ├── observability/ │ └── monitor.py # live dashboard ├── ops/ │ ├── refill.sh, guardian.sh, converge.sh, reaper.sh... ├── systemd/ │ └── spiral-*.service, *.timer ├── docs/ │ └── OVERNIGHT.md, SPEC-observability-agentic.md └── *.json # live state (globals, control, calibration...)
Data directories created at runtime (gitignored): queue/, renders/, axes/, insights.jsonl, spiral.jsonl.
python -m spiral <verb> is the single front door for inspecting and driving the system.
| Verb | Purpose | Notes / Safety |
|---|---|---|
status |
Services, queue depth, owner prompt, convergence snapshot | Uses the read-only monitor under the hood |
monitor |
Live terminal dashboard | Pure read. --watch N or --once |
converge |
Drive the multivec optimizer (foreground) | Wraps ops/converge.sh |
refill |
Keep the queue fed from the owner prompt | Wraps ops/refill.sh |
reap |
Renders retention reaper | Dry-run by default. Use --go to delete. |
down |
Stop the entire spiral unit set | Always safe. No --force needed. |
up |
Start the spiral unit set | Refuses without --force while DISABLED. |
control.json) sets prompt + globals and a fixed seed basis.refill.sh or the UI "feed workers" button POSTs to the model-manager, which writes job JSONs into ~/spiral/queue/.spiral-worker claims a job (host-tagged), runs the moment operator, produces frames + webm.spiral-evaluator scores the render on the 8 dimensions. Results go to insights.jsonl.orchestration/controller reads the convergence spine and nudges the actuators (rates, gain map...).spiral.jsonl.The autonomous research system is factored into specialized agents (each can run as its own python -m spiral.agents.<name> unit):
Many of these run “CPU lane” (nice, capped) so they do not fight the GPU worker.
spiral-workerspiral-saturator (GPU floor)Every unit has Restart=on-failure, StartLimitBurst=5, memory/task caps, and clean shutdown modes.
python -m spiral) — the safe terminal operator console./api/mm/spiral/*) — the common substrate.The audit found that the spiral had become an uncoordinated multi-producer system with no single source of truth for “should we be rendering right now?”
up is gated behind --forceops/fleet-join.sh (run from the hub) enrolls additional GH200 boxes:
~/spiral over NFSspiral-worker unit (with host-tagged claims)The remote worker claims jobs and writes results back into the shared directories. The model-manager and CLI on the hub see the combined capacity.
The spiral is deliberately split across two concerns:
~/spiral): CLI, agents, core, orchestration, observability, ops scripts, systemd units.worker.py and saturator.py, the model-manager, and the research papers.For the rich visual experience, use the Comfort UI Motion section.
docs/spiral.html (generated from the detailed Markdown source in the repository) and served live at https://spiral.influx.vision.