Bad Apple!! Terminal Player 🍎
Flicker-free, audio-synced Bad Apple!! player for your terminal.
Features
- 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.
Controls
| 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 |
Installation & Quick Start
Option 1: Install via pip (Recommended)
pip install bad-apple-in-terminal
Run it directly from anywhere in your terminal:
bad-apple
# or
badapple
Option 2: Run from Source (Zero-Setup)
Just 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
Options & Flags
# 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
macOS Tips
- 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 (
Metadata
Release files for bad-apple-in-terminal 1.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bad_apple_in_terminal-1.1.1.tar.gz | 23.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bad_apple_in_terminal-1.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 49.7 kB
Release files / bad_apple_in_terminal-1.1.1.tar.gz
| Download URL | bad_apple_in_terminal-1.1.1.tar.gz |
|---|---|
| Size | 23.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5363cdad74f545647ba51a98859964ca82a26f8f08bbc9fa67973ee0ee4e0ef2
|
|
BLAKE2b-256 checksum How to use checksums |
4ee4fc0e1c3c85b70632f978839a60cc36a118d8e8e314d261be1faac990661c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / bad_apple_in_terminal-1.1.1-py3-none-any.whl
| Download URL | bad_apple_in_terminal-1.1.1-py3-none-any.whl |
|---|---|
| Size | 26.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e50a39e9b4a545283092fee77daec6a3f22fb688ea85870f947748635b728d3b
|
|
BLAKE2b-256 checksum How to use checksums |
380937887c025ee9dcb492ff5f86ab52e310c39191a640e7d2e247fd3efc210c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|