Skip to content
Open-source video, written in Flutter

You write widgets.
Fluvie shoots the film.

A real Flutter widget tree goes in. A real MP4 comes out. You say what the video is. Fluvie works out when everything happens, frame by frame. No timeline to scrub by hand. No video editor.

It is code. It is deterministic. It is a real video file.
lesson_01.dart Dart
import 'package:flutter/material.dart' hide Animation; // Fluvie's wins
import 'package:fluvie/fluvie.dart';

Video lesson01Video() => Video(
  size: VideoSize.square,
  scenes: [
    Scene(
      duration: 4.seconds,
      background: Background.gradient([...]),
      children: [
        Text('Hello, Fluvie')
          .animate([Animation.fadeIn(), Animation.pop()]),
      ],
    ),
  ],
);
hello.mp4 1080 × 1080 · 30fps
Hello, Fluvie
frame 9 of 16
$ fluvie render hello --out hello.mp4
no display needed
Roll your first video Open the live demo
02 · THE ONE IDEA

You bring the what.
Fluvie brings the when.

Not a recorder. A renderer. A screen recorder captures whatever happened to be on screen. Fluvie computes every frame from your description, so frame 412 is the same today, tomorrow, and on your teammate's laptop.

The stopwatch way
0ms title.fadeIn(at: 0)
650 subtitle.show(at: 650)
900 chart.grow(at: 900)
?! move one, fix them all
The Fluvie way
show the title
after the title lands, float the subtitle
then grow the chart
move one, the rest re-flow
01
Describe, do not direct
02
The frame is the only clock
03
Same input, same film
03 · THE CLEVER BIT

Triggers, not timecodes.

Say "after the title lands, float the subtitle." Fluvie schedules it. Move the title earlier and everything downstream follows. You never type a frame number. Try it: drag the title's start and watch which side keeps up.

 
Inspector
title
subtitle
subtitle*

On the Fluvie side, the subtitle is anchored after the title, so it followed automatically.

04 · THE PROOF

Identical input. Byte-identical frames. Every machine.

Render the same video twice and the frames hash the same. That is the whole trick. Caching works, golden tests work, and a thousand data-driven videos render the way they did in review.

"Your CI can diff frames the way it diffs JSON."

Take 1
sha256:a1f3…9c4e
Take 2
sha256:a1f3…9c4e
ready

A demonstration of a real property. Two genuinely identical pre-rendered hashes.

05 · THE CALL SHEET

From flutter create to a real MP4.

Five steps, copy as you go. Each command ticks off when you grab it.

Prereqs: Flutter 3.44+ and FFmpeg on your PATH

Preview needs no FFmpeg. Rendering does.

$ flutter --version
$ ffmpeg -version
  1. Make a Flutter app
    Any fresh project works.
    flutter create my_promo
    cd my_promo
  2. Add Fluvie
    Drop it into your dependencies and pull it down.
    flutter pub add fluvie
  3. Install the renderer
    The headless CLI that writes the file.
    dart pub global activate fluvie_cli
  4. Write the video
    One scene, a gradient, a title that fades in and pops. Hide Flutter’s own Animation so Fluvie’s wins.
    lesson_01.dart
    import 'package:flutter/material.dart' hide Animation;  // ← let Fluvie's Animation win
    import 'package:fluvie/fluvie.dart';
    
    Video lesson01Video() => Video(
      size: VideoSize.square,
      scenes: [ Scene(duration: 4.seconds, children: [
        Text('Hello, Fluvie')
          .animate([Animation.fadeIn(), Animation.pop()]),
      ]) ],
    );
  5. Preview, then render
    Run the app and scrub it live. When it looks right, render the MP4.
    fluvie render hello --out build/hello.mp4
Run that render again. Same frames, same bytes.
That is the whole point.
Read the full guide Your first video Skip setup, scrub it live ↗
06 · THE REEL WALL

Twelve little films, each in one readable file.

Every clip below is a real Fluvie render: text and motion, scenes and transitions, charts that draw themselves, self-typing code, a beat-synced visualizer, captions, the lot. Click any tile to scrub it live.

Scrub any of these live
07 · THE CREW

A small crew. One does the magic.

Eight MIT packages, all on pub.dev. Most people only ever need fluvie. The rest are there when you scale.

08 · OPEN SOURCE

MIT. Inspect it, fork it, host it, keep it.

No black box and no per-render bill. The renderer is open and the frames are deterministic, so the output is auditable: anyone can re-run your render and get the exact same frames. It is free, and it stays free.

MIT
license
6
packages
12
lessons
100%
deterministic
  • Inspectable
    The timing resolver is a few hundred readable lines. Read it before you trust it.
  • Auditable
    A frame hash is a receipt. Render twice, diff, trust.
  • No lock-in
    Plain Dart and FFmpeg. Eject any time. Your videos are just code.
  • Self-hostable
    Run the render API in your own Docker. Your media never leaves your network.
  • Free, in the open
    MIT, with a public roadmap and issues. The lints and lessons came from real use.
09 · PICK YOUR SEAT

Same Video, four front doors.

Scrub it live in the browser. Render it from the CLI. Stand up your own render server. Or let an assistant shoot it for you. The engine is the same. Only the trigger changes.

For the cold visitor
open https://demo.fluvie.dev
Open the live demo

Same deterministic frames, whichever door you use.

10 · EASY MODE

Or just say what you want.

fluvie_ai turns a plain sentence into a real VideoSpec. fluvie_mcp lets your assistant write and render it without you opening an editor. This is the optional easy mode, not the only mode.

1 · the prompt
"A 10-second product promo, brand teal, big counter to 10,000, confetti on the last beat."
2 · the VideoSpec
VideoSpec(
  duration: 10.seconds,
  theme: Theme.teal,
  scenes: [
    Counter(to: 10000),
    Confetti(on: Beat.last),
  ],
);
3 · the film
10,000
Read the AI & MCP guide Hosted MCP
11 · ROLL CAMERA

Roll camera.

New here? Watch twelve examples render live. Building something? Five steps to your first MP4. Already shipping? Straight to the docs.

New here?
Watch it render live
Twelve examples you can scrub frame by frame.
Open the live demo
Building something?
Render your first video
Five steps to your first MP4, copy as you go.
Roll your first video
Already shipping?
Straight to the docs
Deep-link the reference and the packages.
Open the docs

You write widgets. Fluvie shoots the film.