Render a video's per-frame dominant colours as a radial disk PNG.
Each frame of the input video contributes a wedge of a transparent-background ring, coloured by that frame's predominant colour. Frames radiate clockwise from a blank inner circle; a transparent notch at 12 o'clock marks the start/end boundary of the video.
- Any input format ffmpeg can read
- Per-frame dominant colour via quantization-mode histogram (configurable levels)
- Blank centre ring, configurable inner radius fraction
- Configurable notch marking the start/end boundary
- Parallel multi-process ffmpeg decode (
--jobs) - Streaming, lossless PNG encoder: constant low memory, adaptive row filters
- Fixed output resolution target (default 8k),
-rradius override
- Rust (stable)
ffmpegandffprobeonPATH
brew tap TheFirstIstari/strisk
brew install striskgit clone https://github.com/TheFirstIstari/strisk.git
cd strisk
cargo build --release
# binary at target/release/striskstrisk <INPUT> [OPTIONS]
Options:
-o, --output <PATH> Output PNG path [default: <input_stem>.strisk.png]
-r, --radius <PX> Outer disk radius [default: from --output-res]
--output-res <PX> Output image side length [default: 8192]
--inner-fraction <F> Blank center radius as fraction of R [default: 0.25]
--notch-degrees <DEG> Width of the start/end notch [default: 4]
--levels <L> Quantization levels per RGB channel [default: 8]
--sample-width <W> Decoded analysis width in px [default: 64]
--jobs <N> Parallel ffmpeg decode processes [default: 4]Examples:
strisk movie.mp4 # 8k PNG next to the input
strisk movie.mp4 --output-res 16384 -o big.png
strisk movie.mkv --jobs 8 --notch-degrees 2Memory: the encoder streams rows through a fixed row filter + zlib window; the full canvas is never in memory (peak usage ≈ row buffer + 8MB IDAT slab).
Using mise tasks (mise run build, mise run release,
mise run test, mise run clippy, mise run fmt), or plain cargo:
cargo test # unit + integration tests
cargo build --releaseSee SPEC.md for the full design specification.