Vivijure's first full run, and the stall that fixed itself
Vivijure is a self-hosted AI film studio. You write a storyboard in the web UI, cast your characters, and hit render; the studio orchestrates the pipeline and hands you back a finished cut. No subscription, no account wall, and every artifact lands in your own storage. That studio is the product: a Cloudflare Worker with a planner frontend, cast management, render history, and a JSON API that module workers plug into. Keyframes, motion, finish, and score are swappable stages; you can route a shot through an expensive cloud API or your own GPU for that step only. The expensive compute spins up only while a render is actually running.
vivijure is where that lives. Start there if you want to fork or deploy the studio. GPU rendering (keyframes, image-to-video, ffmpeg assembly) is a separate attachable stack, vivijure-backend on RunPod; one of many modules the control plane can call, not the main repo. Live studio: vivijure.skyphusion.org/welcome.
This post is not a feature tour. It is about a single render, because it is the first time the whole studio ran a film start to finish, unattended, and the interesting part is not the clip. It is what the system did when something went wrong with nobody watching.
See it run
This is NEON HALFLIFE: the first film rendered end to end on Vivijure Studio. Ten shots, 1080p, about thirty seconds. The motion ran on a self-hosted GPU through the own-gpu Wan image-to-video backend, the default for the bring-your-own-GPU path.
It is silent on purpose
Before anything else: yes, that clip has no sound, and that is the correct default, not a missing step. Vivijure assembles a silent picture first. Scoring, a generated music bed, TTS narration, or beat-synced cuts, is an opt-in Audio step you run after the picture locks, so you are never re-rendering thirty seconds of GPU work to swap a track. What you are watching is the picture straight off the pipeline with no audio pass applied. The next showcase will be a scored one; this one is the honest raw output.
Why a single render is the milestone
A demo clip proves the happy path can produce something watchable. This run was after something harder: the first time the full orchestration ran a complete film with nobody steering it, and I wanted to know whether it would hold together or quietly lose work in the middle.
Two things came out of it that are worth stating plainly.
Zero clips dropped. Ten shots in, ten clips out. No silent gaps, no shot that rendered to nothing and got assembled around. For a pipeline that fans out to a GPU per shot and gathers the results back, “every shot you asked for is in the final cut” is not a given, and it is exactly the kind of thing that fails silently if the gather step is sloppy.
It healed its own stall. Partway through the finish phase, the render stalled. It stalled across a session restart, which is precisely the moment a less careful pipeline strands the job: the work is in flight, the thing that launched it is gone, and the half-finished render sits there forever looking done-ish. Instead, the orchestrator re-adopted the in-flight finish work on the other side of the restart, picked up where it left off, and drove the film to completion, on its own, with nobody watching.
That is the part I am actually proud of. Not that it rendered a cyberpunk clip; plenty of things render cyberpunk clips. That the first unattended run hit a real stall and recovered from it instead of needing a human to come notice and nudge it. A render pipeline you have to babysit is a toy. One that finishes the job after the lights go out is starting to be a tool.
The honest version
I will keep showing the real state of this, including the parts that are not finished. This is a silent render and I am presenting it as one. The stall it recovered from was a real bug in the finish phase, now fixed; the recovery worked because the orchestrator was built to re-adopt in-flight work rather than assume a clean run, and this is the first time that design got tested for real and passed. The render history in the studio still shows the failed and stalled attempts that came before this clean run, and I am leaving them there, because the failures are how you know the green one is real.
One note on provenance: Vivijure grew out of an earlier collaborative attempt at a local AI-video pipeline; the design and implementation here are entirely my own. The studio (frontend and orchestration): github.com/skyphusion-labs/vivijure. GPU render module: github.com/skyphusion-labs/vivijure-backend.
Update, July 2026: Vivijure has grown into a full constellation of repos (the studio, Slate, three GPU render engines, three finish engines) and is almost ready for its full public release. The complete map, and everything that changed in the release sprint, is in the constellation post.