v1.0.0 โ€” Built with Rust

ADOFAI CLI

A cinematic terminal engine for A Dance of Fire and Ice. Shader effects. 120 FPS. Vim editor. Single binary.

adofai โ€” Terminal
$ adofai play level.adofai --theme neon
Terminal Demo - ADOFAI CLI BPM:240
โ—‰
โ•ฑ
โ—โ”€โ”€โ”€โ”€โ—โ”€โ”€โ”€โ”€โ—โ”€โ”€โ”€โ”€โ— PERFECT!
โ•ฒ
โ—โ”€โ”€โ”€โ”€โ—
โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘
Score:4800 Combo:48 [PLAY]
120
FPS Target
1.1MB
Binary Size
7
Themes
6
Particle Styles
20+
Events Supported

// Features

Every feature is designed to push the limits of what's possible inside a terminal.

๐ŸŽฎ
Full ADOFAI Player
Real orbit physics, multi-planet support, timing system with 25ms accuracy windows. Perfect/Great/Good/Early/Late/Miss judgement with combo tracking.
โœ๏ธ
Vim-Style Map Editor
6 editing modes, directional tile placement, event editing, branch-based undo tree, mouse support. Press Space to instantly test-play.
๐ŸŽจ
Post-Processing Pipeline
Bloom, scanlines, CRT chromatic aberration, vignette, glitch displacement, screen flash, motion blur โ€” all running in your terminal.
โœจ
Particle System
6 styles with gravity, velocity, lifetime, and color interpolation. Spark, Fire, Ice, Hit, Trail, Rainbow โ€” cinematic feedback on every input.
๐Ÿ“น
Cinematic Camera
Smooth follow with exponential interpolation, zoom, rotation, beat-synced pulse, and screen shake with exponential decay.
โšก
Diff Rendering Engine
Custom framebuffer tracks every cell. Only changed pixels are written to the terminal. Achieves 120 FPS with minimal I/O overhead.
๐ŸŽต
Audio Engine
Built-in audio playback (MP3, WAV, OGG, FLAC) with hitsound synthesis. Per-hit sine wave beeps at 800Hz.
โช
Replay System
Record inputs with timestamps. Replay with adjustable speed. Frame advance and hit accuracy graph.
๐Ÿ“Š
Level Analyzer
Angle distribution histograms, BPM range detection, density graphs, event summaries. Understand any level at a glance.
๐Ÿ”ค
Unicode Pixel Engine
Block characters (โ–ˆโ–“โ–’โ–‘), braille dots (โฃฟ) for 2x resolution, half-block subpixels (โ–€โ–„), and gradient rendering.
๐Ÿงฉ
Full .adofai Compatibility
Reads and writes real ADOFAI files. Handles both angleData and pathData formats. Cleans trailing commas and comments.
๐Ÿ“ฆ
Single 1.1MB Binary
Written in Rust with LTO. Zero runtime dependencies. Cross-platform: macOS, Linux, Windows. Instant startup.

The Editor

A full-featured map editor with vim-style modal editing. Navigate with hjkl, add tiles in any direction, edit events with commands, and instantly preview your level.

Branch-based undo tree means you never lose history โ€” even after undo, your alternate branches are preserved.

ADOFAI Editor - demo.adofai [+] INSERT
Tile:12/33 BPM:200 Angle:45ยฐ
ยท ยท ยท ยท ยท ยท ยท ยท ยท
ยท ยท โ—โ”€โ”€โ”€โ”€โ—โ”€โ”€โ”€โ”€[โ—]โ”€โ”€โ”€โ— ยท
ยท ยท ยท ยท ยท ยท ยทโ†บโ•ฒ ยท
ยท ๏ฟฝ๏ฟฝ ยท ยท ยท ยท ยท ยทโ— ยท
Events
SetSpeed beatsPerMinute:200
Twirl
r:right u:up l:left d:down ESC:back

// Themes

7 hand-crafted visual presets, each with unique post-processing effects.

โ—‰โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—
neon Bloom + Vignette
โ—‰โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—
retro Scanlines + CRT
โ—‰โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—
minimal None
โ—‰โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—
fire Bloom + Vignette
โ—‰โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—
ice Bloom + Vignette
โ—‰โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—
synthwave Scanlines + Bloom
โ—‰โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—โ”€โ”€โ—
matrix All effects

// Installation

Multiple ways to install โ€” pick your favorite.

Homebrew (macOS / Linux)

brew tap 3289david/tap
brew install adofai-cli

npm (Cross-platform)

npm install -g adofai-terminal

Cargo (From source)

cargo install adofai-cli

Binary Download

Pre-built binaries for macOS (ARM + Intel), Linux, and Windows are available on GitHub Releases. Single file, zero dependencies.

// Documentation

Quick Start

# Create a new level at 180 BPM
adofai new --bpm 180

# Open the map editor
adofai edit untitled.adofai

# Play with the synthwave theme
adofai play untitled.adofai --theme synthwave

# Watch it auto-play
adofai play level.adofai --auto-play

# Full level analysis
adofai analyze level.adofai

Commands

CommandDescription
play <file>Play an ADOFAI level in the terminal
edit <file>Open the vim-style map editor
newCreate a new empty level
render <file>Auto-play and capture output
replay <file>View a saved replay file
theme <name>Preview theme effects and info
analyze <file>Show level statistics and graphs

Play Controls

KeyAction
Space / J / K / D / FHit (primary input)
Arrow keysHit (alternative input)
P / EscPause / Resume
RRestart level
AToggle auto-play
Q / Ctrl+CQuit

Editor Commands

:bpm 240             Set BPM at cursor position
:twirl               Toggle twirl event
:planet multi 3      Set multi-planet (3 planets)
:song My Song        Set song title
:artist DJ Name      Set artist name
:offset 100          Set audio offset in milliseconds
:w                   Save file
:wq                  Save and quit
:q                   Quit (warns if unsaved changes)
:q!                  Force quit without saving
:help                Show all available commands

Supported Events

EventStatus
SetSpeed (BPM/Multiplier)Full support
TwirlFull support
MultiPlanetFull support
FlashFull support
MoveCameraFull support
ShakeScreenFull support
BloomFull support
SetFilterFull support
SetTrackColorFull support
Pause / Hold / CheckpointFull support
PositionTrack / ScaleRadiusFull support
Decorations / Text / BackgroundParsed & preserved

Architecture

Input โ†’ Engine โ†’ Camera โ†’ Renderer โ†’ PostProcess โ†’ FrameBuffer โ†’ Terminal
          โ†‘                               โ†‘
      TimingEngine                    Particles
          โ†‘
     .adofai Parser

Source: ~5800 lines of Rust across 20 modules
Binary: 1.1MB with LTO, single file, zero deps