Flicker-free, audio-synced Bad Apple!! player for your terminal.
- 3 Rendering Modes:
ascii(Default): Classic nostalgic ASCII shading (.:-=+*#%@).braille: Ultra high-resolution rendering using Unicode Braille (2x4 matrix) characters.halfblock: 2x vertical resolution using half-block characters (▀,▄) for crystal-clear silhouettes.
- Zero-Setup & Featherlight Footprint: Installs in seconds without bloated dependencies! Automatically provisions media assets with MD5 checksum verification.
- Zero-CPU Binary Cache Engine (BAPB v1): Plays from a pre-rendered, zlib-compressed 1-bit binary cache (
bad_apple.bin, ~7.7 MB) for <0.5% CPU consumption and instantaneous (0.04 ms) seeking! - Cross-Platform Audio Engine: Backed by
pygame.mixerfor distortion-free pause/resume and zero-latency seeking, with fallback to native OS drivers on Windows (winmm.dllMCI), macOS (afplay), and Linux (ffplay/mpv/aplay). - Flicker-Free & Ghost-Free Rendering: Employs Alternate Screen Buffer (
\033[?1049h), scrollback buffer purging, and dynamic resizing for a pristine, clean display at 30 FPS. - Dynamic Sizing & Visual Scrubber: Automatically senses terminal dimensions, preserves the 4:3 aspect ratio, centers output, and displays an interactive progress bar.
| Key | Action |
|---|---|
| Space | Pause / Resume |
| M | Cycle render modes (ascii → braille → halfblock) |
| Right Arrow (→) | Seek forward 5 seconds |
| Left Arrow (←) | Seek backward 5 seconds |
| R | Restart playback |
| Q / Esc | Quit |
pip install bad-apple-in-terminalRun it directly from anywhere in your terminal:
bad-apple
# or
badappleJust clone and run! Required dependencies and media files are automatically prepared on first launch:
git clone https://github.com/Ohualtex/bad-apple.git
cd bad-apple
python main.py# Start with a specific render mode (ascii, braille, halfblock)
bad-apple --mode ascii
# Pre-render compact binary cache for zero-CPU playback and instantaneous seek
bad-apple --build-cache
# Force real-time OpenCV decoding instead of binary cache
bad-apple --no-cache
# Disable audio
bad-apple --no-audio
# Set specific terminal width/height
bad-apple --width 100 --height 35- Gapless Half-Block Display:
The default macOS Terminal.app adds vertical font leading (line spacing) between lines. To achieve a seamless, OLED-smooth display:- Open Terminal → Settings (
Cmd + ,) → Profiles → Text. - Click Change... under Font.
- Expand the font window downward if needed, and set the Line Spacing slider to
0.80. - Alternatively, press
Mto switch to Braille mode (which is naturally immune to line spacing), or use modern terminals like iTerm2, Ghostty, or Kitty.
- Open Terminal → Settings (