Skip to Content

CLI Pipeline · Bazel & Python

Panimator

Turn any video into a swarm of animated circles.

Panimator converts a video into a sequence of ASCII text frames, then translates those characters into rendered circles and animates them live in a web browser.

View on GitHubSee the Pipeline


Free · Open source · GPL-3.0

Panimator Logo

From video to circles

Three stages, one pipeline.

Panimator isn't a single tool, it's a small pipeline, and each stage can be run and understood on its own. 

1

Video Processing

ffmpeg extracts frames from your video, then ascii-image-converter turns each frame into ASCII text.

2

Parsing

The ASCII frames are translated into JSON animation data, one circle per character, written continuously to web/circles.json.

3

Rendering

A lightweight Python web server streams the frame data to your browser, where it's rendered live as animated circles.

One command runs the whole thing.

The pipeline runner coordinates optional video conversion, starting the web server, and running the parser loop, so a full run from a raw video file to a live animation in your browser is a single command.

./bazel-bin/apps/pipeline/pipeline_runner \
  --build-files \
  --video your-video.mp4 \
  --fps 30 \
  --colour #4c4f69 \
  --radius 1

Tune it to taste

A handful of flags, real control.

--build-files Extract frames and generate ASCII files before starting the pipeline.
--video PATH The input video file to convert, used together with --build-files.
--fps N Overrides the frames-per-second used for conversion and playback.
--colour COLOUR Sets the circle colour, as a CSS colour name or hex code.
--radius N Sets the radius of each rendered circle.
--verbose Enables HTTP request logging in the web server.

Before you build it

What you'll need.

Bazel

Tested with 9.0.0, Bazelisk recommended.

ffmpeg

Used for frame extraction.

ascii-image-converter

Available on the AUR and other package managers.

Python 3

Runs the lightweight web server.

Worth knowing

A few honest notes.

  • ASCII frame dimensions are currently fixed in the converter.
  • The JSON output is rewritten every frame to support live animation.
  • The pipeline is designed for simplicity over throughput, this is a fun renderer, not a performance-tuned one.

Get Panimator

Free, open source, and built from source.

Panimator is released under the GPL-3.0 licence. Build it with Bazel and run your own video through the pipeline.

Free open source · build from source
 View on GitHub 

Bazel · Python · ffmpeg · GPL-3.0