Local AI software
StillRoom
A fully local AI studio for ambient video clips.
The idea
StillRoom runs entirely on my own machine. Image generation, targeted editing, segmentation, image analysis, and sound generation all happen locally on one 16 GB GPU. Nothing is uploaded, and no cloud service is involved.
An image generator gives you a frame. Turning it into a clip still involves a lot of decisions: which version to keep, what should move, how the scene should sound, and how the loop should repeat.
I’m building StillRoom to keep those decisions in one workspace. Each edit becomes a saved version, and each export retains the image and sound mix used to make it.
Cinema No. 4
An empty cinema open to the sea. Water ripples in front of the seats, a palm shifts in the breeze, and steam rises from a cup. This one-minute clip combines the visual loop with separately generated water and rain recordings.
Choose the frame, then refine it
For Cinema No. 4, I built the composition around things that could move independently: open water, palm leaves, rain outside the shelter, and a cup in the foreground. Cream walls, green doors, and rust-colored seats gave it the palette I wanted.
StillRoom doesn’t send my scene description to the image model on its own. It assembles the prompt from four layers, and I edit each one separately.
Look
How the photograph is taken: lens, sensor, light, and color. It starts from a saved look paired with a LoRA, and I tuned it for this scene.
24mm lens, f/8, early-2000s Olympus CCD photograph, fine sensor texture, deep focus from the foreground cup to the distant screen…
Project direction
The brief for the whole project. Every scene in it shares this world and palette.
An ordinary late-1970s municipal cinema containing an impossible inland sea.
Scene
What this frame shows, where each element sits, and how large it is.
…a low walnut usher table holds one clearly visible terracotta ceramic cup of hot tea, about one-tenth of the image height, with clear empty space above it.
Background preparation
Instructions for a still that will be animated later. Anything that moves is left out, with clear space and clean edges for the effect layers.
…Show the tea cup clearly with completely clear air above it; no painted steam. Palm fronds are sharp and still, with clear edges against the wall.
ShowHide the full prompt
24mm lens, f/8, early-2000s Olympus CCD photograph, fine sensor texture, deep focus from the foreground cup to the distant screen, precise natural material detail, straight verticals. Soft overcast daylight, luminous cream plaster, clear rust and terracotta midtones, muted green foliage, dark jade water with readable ripples. Warm amber practical light balanced against cool daylight. Fixed camera at seated eye height, wide 16:9 frame. Project direction: An ordinary late-1970s municipal cinema containing an impossible inland sea. Terracotta steps, aged brass, pale cream acoustic walls, dark pine-green doors, small amber aisle lights. Believable materials, precise architecture, restrained photographic color, readable midtones, quiet empty spaces. One impossible premise in an otherwise mundane building. Scene: An impossible seaside cinema pavilion, photographed from its sheltered rear terrace. Three tidy rows of rich rust-red velvet cinema seats descend toward an endless dark jade sea, with the lowest cream terrazzo steps disappearing beneath the water. A small blank ivory cinema screen hangs far across the water, beneath an enormous flat cream canopy whose open side frames a silver-blue horizon. No shore is visible. The sea fills the central and right lower half of the frame, with fine ripple texture and long amber reflections. In the near left foreground, a low walnut usher table holds one clearly visible terracotta ceramic cup of hot tea, about one-tenth of the image height, with clear empty space above it. Behind this table, one tall potted kentia palm has long separated green fronds silhouetted against a plain cream wall; the planter and trunk remain visible. Three small round amber wall lamps sit in a clean row beneath the left canopy. Polished brass aisle rails, dark pine-green exit doors, tactile velvet, careful mid-century joinery. The open right side reveals a broad stretch of water and pale clouded sky outside the shelter, with generous empty air for a passing shower. Cool daylight under a rain-heavy sky and warm sheltered practical lights. The dry table, leaves, lamps, architecture and distant water are clearly separated. Peaceful and slightly unreal, immaculate rather than abandoned. A human-scale foreground against vast open water, asymmetrical architectural photograph, no people. Background preparation: Create a stable background for separate animation layers. Show the tea cup clearly with completely clear air above it; no painted steam. Palm fronds are sharp and still, with clear edges against the wall. Exterior air is clear without visible rain streaks or fog. Keep water fine-textured with small ripples. Keep lamps steadily illuminated. Precise stable architecture and brass rails, blank screen, no lettering. No people, stains, debris, decay, swimming-pool tiles, dramatic beams, motion blur or coarse grain.
Z-Image Turbo and the Olympus UltraReal LoRA generated the still locally from that prompt, followed by a refinement pass. The model still painted steam above the cup, so a FLUX.2 Klein edit removed it and a separate vapor layer took its place. Each edit remains a saved version.
Select where an effect appears
Where it appears turns a phrase into an effect area using SAM3.1. For this scene, the water, palm, and exterior rain each have their own selection. Motion stays within those areas while the cinema structure remains fixed.
Show area reveals the mask before rendering. Brush and eraser controls let me refine it when the automatic selection needs work.
Decide exactly what moves
Cinema No. 4 has five effect layers: water, foliage, exterior rain, tea steam, and a restrained lamp glow. I tuned them separately, keeping the water and steam readable while leaving the rain in the background.
The steam uses an emitter placed at the cup, with controls for spread, rise, and turbulence. NumPy and OpenCV composite the motion around the still image. This keeps the camera and architecture stable without asking a video model to regenerate the entire scene.
Give the place a sound
Generate ambience locally or bring in recordings. Sound layers have their own volume, stereo position, distance, and slow variation. Solo a layer to hear what it contributes, then listen to the mix.
For Cinema No. 4, I generated water and rain separately with Stable Audio 3 Small-SFX. Water sits forward in the mix; the rain is quieter and more distant. There is no music in this clip.
Review the loop and export the clip
Save a short visual take, inspect the join, and choose a longer export duration. The finished video uses that take and the current sound mix; earlier exports keep the mix they were made with.
This clip uses an eight-second 720p take rendered at 24 frames per second, repeated into a one-minute export and upscaled to 1080p. FFmpeg encodes the video and mixes the sound. The app also supports longer exports and upscaled 4K output.
Change one object, keep the scene
This earlier street scene shows a different part of the workflow. A local edit has two instructions: Change describes the result, and Only change names the target. Here, the target is the parked car. The surrounding street, storefront, and light stay in place.
SAM3.1 finds the named area. FLUX.2 Klein produces the edit, and StillRoom composites it through that mask. The result becomes a new version; the source image is retained. The comparison below shows the input, selection, and edited result.
- Change
- Change the white parked car to deep red paint. Preserve its shape, windows, wheels and reflections. Keep the surrounding street and shop unchanged.
- Only change
- car

Keep a body of work together
Projects group related scenes, notes, images, and exports. Each scene keeps its own effects and sound mix.
The image library includes original generations and later edits. You can search across the collection and revisit earlier versions without losing the work that followed.
Earlier clips
Two other scenes made with the same workflow. These eight-second excerpts are silent.
How the application is built
I built the browser interface in HTML, CSS, and JavaScript, with a Python HTTP server and JSON API behind it. ComfyUI runs generation workflows; Ollama serves the vision-language model. The application and its saved work stay on the local machine.
Canvas 2D handles the brush, eraser, and mask overlays. The Web Audio API previews sound layers and their mix in the browser.
- State and revisions
- Scenes, versions, masks, and job records are local files. Revision checks reject stale updates from another browser tab, and atomic file replacement protects saved JSON from partial writes.
- Background work
- A single worker runs generation and rendering while HTTP requests remain responsive. Job states are saved. After a restart, interrupted work is marked failed instead of being silently submitted again.
- One rendering engine
- NumPy, OpenCV, and Pillow composite the image, masks, effects, and video layers. The lower-resolution browser preview uses that same code. FFmpeg encodes the final frames and mixes the audio.
- Custom ComfyUI integration
- I built a loop-processing node that accepts PyTorch image tensors, converts them to NumPy for CPU processing, and returns the composited frames as tensors. It connects image processing to the generation workflow.
- Traceable outputs
- Generated images retain their prompt, seed, model details, and ComfyUI workflow. Masks stay associated with the still version they belong to, so switching versions restores the correct areas.
Local inference with a 4B vision-language model
StillRoom uses Qwen3-VL 4B Instruct locally through Ollama, in Q4_K_M quantized form. It reads the actual image pixels to produce descriptions and tags, identify visual qualities, and suggest directions for a scene.
The app saves those observations with the image. Project summaries, scene ideas, music direction, and release text use that saved analysis alongside the project brief.
Scroll horizontally to compare all columns.
| Task | Model | Runtime | Purpose |
|---|---|---|---|
| Image understanding | Qwen3-VL 4B Instruct | Ollama · Q4_K_M | Descriptions, tags, project direction, and structured suggestions |
| Still generation | Z-Image Turbo | ComfyUI | Generate and compare candidate frames |
| Image editing | FLUX.2 Klein Base 4B | ComfyUI · FP8 | Reference-guided changes to a selected still |
| Area selection | SAM3.1 | Local segmentation | Find the regions where effects or edits should apply |
| Ambience | Stable Audio 3 Small-SFX | ComfyUI | Generate environmental sound layers |
Making local inference fit the machine
The practical constraint is a shared 16 GB GPU. Ollama and ComfyUI cannot be treated as if each owns all of its memory. The application checks the generation queue, releases idle ComfyUI models before vision work, and unloads the language model after each request.
The integration also has to survive imperfect responses. Calls request structured JSON, and the application validates the returned fields, text, and list sizes. Saved analyses are reused when revisiting images, so browsing the library does not require running the model again.
- Bounded model calls
- A single local model request at a time, with explicit unloading after completion.
- Validated outputs
- Structured responses are checked before they become suggestions or saved project information.
- Persistent analysis
- Image descriptions and project context remain available after the model process is unloaded.
- Local execution
- The assistant uses loopback endpoints with cloud access disabled in its Ollama runtime.