vinnayakk.

Owl in a Ruined City — AI-Native Short Film

September 7, 2026

A Great Horned Owl perched on an overturned vehicle in a rain-soaked, neon-lit ruin. A single camera move, a slow dolly right which is held for the length of the shot. It resolves into the owl turning to face camera on the last beat. Built solo, from a blank page to a graded, sound-designed final cut, using an AI-native previs and generation pipeline on top of ComfyUI.

The brief

One character, one location, one camera move. Fifteen seconds, delivered as a single continuous shot with no cuts inside the take. It is generated with Image-to-Video, edited and sound-designed in DaVinci Resolve, and no music used. The shot shipped at 19 seconds with a short title card added in the edit.

The pipeline

  • Model: Wan 2.2 I2V-A14B (open-weights, Apache 2.0), run on a rented RTX 4090 via RunPod
  • Stills: ChatGPT image generation for the hero still, after an earlier FLUX.1 Schnell pass under-delivered on prompt adherence
  • Chaining: 4 sequential ~5-second generations, each seeded from the extracted last frame of the one before it, with locked subject/camera/environment clauses pasted identically across every chunk prompt
  • Post: RIFE frame interpolation (16fps → 48fps) and 4x ESRGAN upscale to 1920×1080, run as two isolated ComfyUI passes
  • Edit: DaVinci Resolve — assembly, repair cuts, three-layer sound design, ProRes/YouTube export

Hero still generated in ChatGPT, used to seed the first
chunk

Hero still generated in ChatGPT, used to seed the first chunk

The constraint

No open-weights Image-to-Video model that fits on a consumer GPU generates 15 continuous seconds in one pass. Wan 2.2 tops out at 81 frames, about 5 seconds, per generation. A shot this length has to be chained: generate a chunk, extract a clean frame near its end, feed that frame back in as the starting image for the next chunk. Every structural decision in this project, from what gets repeated word-for-word across chunk prompts to what never gets mentioned until the final chunk, comes back to that one limitation.

Where it broke

Chunk 1 went through roughly a dozen seeded generations before one was usable. Across that run: the camera drifting instead of dollying, a zoom disguised as a dolly, an unrequested head turn on a chunk where zero head language existed in the prompt, missing rain and puddles across nearly every take, and one outright bad generation where the owl's eyes visibly morphed mid-clip.

The pattern traced back to two mechanical causes rather than weak prompting. First, the production node bakes in a 4-step speed LoRA running at CFG≈1.0, guidance functionally off, which means the model reliably drops secondary detail (weather, fine motion) in favor of the strongest instructions in the frame (subject identity, camera motion). Second, Wan I2V has a well-documented, unprompted tendency to swivel a bird's head. The fix wasn't a negative instruction, since naming the head at all, even to forbid movement, tends to invite it. The fix was silence so that the head is never mentioned until the one chunk where it's meant to move.

Comparison: FLUX.1 Schnell still vs. the ChatGPT-generated still used in the
final chain

Comparison: FLUX.1 Schnell still vs. the ChatGPT-generated still used in the final chain

The fix that mattered most

The single highest-leverage change in the whole pipeline wasn't a prompt rewrite but was the source of the hero still. A FLUX.1 Schnell still, generated inside the same ComfyUI install, kept losing details the locked prompt clauses depended on: the vehicle didn't read as overturned, the head was already too close to front-facing, the banner and sky missed the brief. The same description generated with ChatGPT's image generator produced a sharper, more photoreal still. When fed into the identical Image-to-Video prompt, it produced the best take of the project on the first real attempt. It resulted in correct dolly, visible rain, and fabric moving in the background.

Image-to-Video models condition heavily on the starting frame. A sharper, better-lit still gives the video model clearer edges and depth cues to animate from and an ambiguous one gives it less to hold onto. This makes it fall back on its own defaults. The still did more work than the prompt.

The final cut

Four chunks, locked subject/camera/environment clauses, only the action clause changing between them. In Chunk 4, the head turn was originally scoped for FLF2V (first-frame/last-frame interpolation) for precise control over the motion, but the production node in use couldn't run that node type. It shipped as ordinary Image-to-Video instead, run across several takes, with the tail of the shot trimmed in the edit just after the turn resolves, before the generation visibly degrades.

Stack: ComfyUI · Wan 2.2 I2V-A14B · RunPod (RTX 4090) · FLUX.1 Schnell · ChatGPT image generation · RIFE · DaVinci Resolve

Runtime: 19 seconds · 1920×1080 · 24fps