Agentic AI chat, live ASCII video, webcam streaming, WebSocket video chat, 3D terminal effects, Hyprland-style tiling, system monitoring, conversation analytics -- all in one terminal app.
ASCIIVision is a single Rust binary that packs an absurd amount of functionality into your terminal:
- Multi-AI Chat -- Claude Haiku 4.5, Grok 4 Fast, GPT-5 Nano, Gemini 3 Flash, and local Ollama models with live provider switching
- Streaming Responses -- AI responses appear character-by-character in real-time via SSE streaming (Claude, OpenAI, Grok), with seamless tool-use handoff mid-stream
- Agentic Tool Use -- AI can autonomously execute shell commands, read/write files, search codebases, make HTTP requests, and query system info with configurable approval gates
- Shell Execution -- run any bash command inline with
!<cmd>, plus/curland/brewshortcuts - ASCII Video Playback -- MP4 files and streamed YouTube sources decoded to real-time colored ASCII art via FFmpeg
- Live Webcam -- your camera feed converted to ASCII art in real-time, with error reporting when the device is busy
- WebSocket Video Chat -- host or join multi-user live ASCII video chat rooms
- 3D Terminal Effects -- rainbow matrix rain, plasma fields, 3D starfield, wireframe rotating cube, fire simulation, particle storms
- Tiles Window -- real PTY-backed embedded terminals for Codex, Claude, Gemini, shells, and any other CLI app, in 1-8 way grids
- Hyprland-Style Tiling -- move, swap, resize, and reassign panels with Ctrl+hjkl keybindings and 6 layout presets
- Games Window -- playable Pac-Man, Space Invaders, and 3D Penguin inside a focused tile with selector + WASD controls
- System Monitor -- live CPU, memory, swap, network I/O, load average, per-core sparklines
- Conversation Analytics -- real-time stats dashboard with message counts, provider breakdown, bar charts
- Context Management -- automatic summarization of older messages when the context window fills up, @-file injection, pinnable messages, persistent agent memory across sessions
- SQLite Persistence -- all conversations and agent memory saved to
~/.config/asciivision/conversations.db - Cracktro Intro -- animated boot sequence with starburst effects, raster bars, and scrolling ticker
- Dynamic Theme Engine -- global color theme system with HSL-based random palette generation. F9 randomizes all UI colors on the fly, F10 resets to defaults. Every panel, border, accent, and background color is driven by the live theme.
Legacy companion apps (mega-cli, mega-analytics) are preserved in the archive/ directory.
The install script handles everything -- Rust, FFmpeg, LLVM, yt-dlp, Ollama, building, and adding asciivision to your PATH:
git clone https://github.com/lalomorales22/asciivision.git
cd asciivision
./install.shAfter installation, run from anywhere:
asciivisionThe repo includes demo-videos/demo.mp4 as the bundled intro/video sample, so the video bus works out of the box.
Supported platforms: macOS (Homebrew), Ubuntu/Debian, Fedora/RHEL, Arch Linux, openSUSE.
Windows users: Install WSL2 first (wsl --install in PowerShell), then run the commands above inside your WSL terminal.
If you prefer to install dependencies yourself:
- Rust 1.70+ (rustup.rs)
- FFmpeg dev libraries
- LLVM/libclang (needed to compile ffmpeg-sys-next)
- pkg-config
- yt-dlp (for
/youtube) - Ollama (for local model routing)
# macOS
brew install ffmpeg llvm pkg-config yt-dlp ollama
# Ubuntu/Debian
sudo apt install libavformat-dev libavcodec-dev libswscale-dev libavutil-dev libavdevice-dev pkg-config libclang-dev build-essential yt-dlp
# Fedora (enable RPM Fusion first)
sudo dnf install ffmpeg-devel clang-devel pkg-config gcc yt-dlp
# Arch
sudo pacman -S ffmpeg clang pkg-config base-devel yt-dlp
# Ollama (Linux / WSL2 manual install)
curl -fsSL https://ollama.com/install.sh | sh# From the repo root (auto-builds + runs)
./asciivision
# Or manually
cargo build --release
./target/release/asciivisionCopy .env.example to .env in the repo root and fill in your keys:
cp .env.example .envThen edit .env:
CLAUDE_API_KEY=sk-ant-...
GROK_API_KEY=xai-...
OPENAI_API_KEY=sk-...
GEMINI_API_KEY=AIza...
Only the providers you want to use need keys. The app works without any keys -- shell, video, webcam, effects, tiling, sysmon, and local Ollama routing all work standalone.
| Provider | Model | Display Name |
|---|---|---|
| Anthropic | claude-haiku-4-5 |
Claude Haiku 4.5 |
| xAI | grok-4-fast-non-reasoning |
Grok 4 Fast |
| OpenAI | gpt-5-nano |
GPT-5 Nano |
gemini-3-flash-preview |
Gemini 3 Flash | |
| Ollama | installed models on this machine | Numbered local model picker |
Cycle between providers with F2 or /provider <name>. When you land on Ollama, ASCIIVision queries your local installed models and opens a numbered picker. Type the model number and press Enter to route chat into that model.
asciivision [OPTIONS]
Options:
--provider <NAME> AI provider: claude, grok, gpt, gemini, ollama [default: claude]
--background-video <PATH> MP4 file for the video panel
--intro-video <PATH> MP4 file for the intro sequence
--skip-intro Jump straight to the command deck
--no-video Disable all video decoding
--no-db Disable SQLite persistence
--serve <PORT> Start a WebSocket video chat server on this port
--connect <URL> Connect to a video chat server (ws://host:port)
--username <NAME> Username for video chat [default: anon]
--webcam Enable webcam capture on startup
--effects Start with 3D effects active
| Key | Action |
|---|---|
F1 |
Help overlay |
F2 |
Cycle AI provider (Claude, Grok, GPT-5, Gemini, Ollama) |
F3 |
Toggle video panel |
F4 |
Cycle 3D effects, then off, then repeat |
F5 |
Toggle webcam capture |
F6 |
Cycle tiling layout preset |
F7 |
Boot/focus the Tiles PTY panel |
F8 |
Cycle focused tile's panel type |
F9 |
Randomize color theme |
F10 |
Reset theme to defaults |
Ctrl+L |
Clear transcript |
Ctrl+C |
Exit |
Esc |
Exit (if input empty) / Clear input (if typing) |
PgUp/PgDn |
Scroll transcript |
Number + Enter |
Choose an Ollama model while the picker is open |
| Key | Action |
|---|---|
Ctrl+h |
Focus tile to the left |
Ctrl+l |
Focus tile to the right |
Ctrl+k |
Focus tile above |
Ctrl+j |
Focus tile below |
Ctrl+H |
Swap focused tile left (Shift) |
Ctrl+L |
Swap focused tile right (Shift) |
Ctrl+K |
Swap focused tile up (Shift) |
Ctrl+J |
Swap focused tile down (Shift) |
Ctrl+[ |
Shrink focused split |
Ctrl+] |
Grow focused split |
Ctrl+n |
Cycle focused tile to next panel type |
The focused tile is highlighted with a double border.
| Command | Description |
|---|---|
!<cmd> |
Execute shell command (e.g., !ls -la, !git status) |
/curl <args> |
Shortcut for curl |
/brew <args> |
Shortcut for brew |
/provider <name> |
Switch AI provider |
/ollama |
Switch to Ollama and open the local model picker |
/video |
Toggle video panel |
/youtube <url> |
Resolve and stream a YouTube video into the video panel using yt-dlp |
/webcam |
Toggle webcam |
/3d or /effects |
Toggle 3D effects |
/fx |
Cycle 3D effects, then off |
/analytics |
Show analytics in focused tile |
/games |
Show the games panel in the focused tile |
| `/games <pacman | space |
/tiles |
Boot the Tiles panel with 2 live embedded terminals |
/tiles <1-8> |
Set the Tiles panel to a specific live terminal count |
/sysmon |
Show system monitor in focused tile |
/layout |
Cycle layout preset |
/layout <name> |
Set layout: default, dual, triple, quad, webcam, focus |
/server <port> |
Host WebSocket video chat server |
/connect ws://<addr> |
Join video chat server |
/chat <msg> |
Send message in video chat |
/username <name> |
Set your video chat username |
/clear |
Clear transcript |
/randomize |
Randomize all UI colors |
/theme reset |
Restore default color palette |
/help |
Toggle help overlay |
./install.sh installs yt-dlp and Ollama for you. If you do a manual setup, make sure both are installed and available before using /youtube or the Ollama provider.
/youtube now streams directly into the video bus by resolving a playable media URL first, so it no longer has to cache the full video before playback starts.
Ollama model selection is populated from the local machine at runtime. ASCIIVision does not assume any default model names; it lists whatever Ollama reports as installed on that system.
| Preset | Description |
|---|---|
| Default | Transcript (55%) + Video/3D Effects side-by-side top, Webcam/Telemetry+SysMon/Ops stacked right |
| Dual Pane | Transcript (50%) + 3D Effects/Webcam/SysMon stacked right |
| Triple Column | Three columns: transcript, video+3D effects, webcam+sysmon+ops |
| Quad | 2x2-ish grid: transcript, video, 3D effects, webcam+sysmon |
| Webcam Focus | Webcam top-right, 3D Effects below it, transcript+sysmon left |
| Full Focus | Single full-screen transcript |
Every tile can be reassigned to any of 13 panel types: Transcript, Games, Tiles, Video, Webcam, Telemetry, Ops Deck, 3D Effects, Analytics, Video Chat Feeds, Video Chat Messages, Video Chat Users, or System Monitor.
Focus a tile and press F8 or Ctrl+n until it becomes GAMES, or run /games.
- Selection --
1,2,3, arrow keys, orWASDchoose between Pac-Man, Space Invaders, and 3D Penguin - Launch --
EnterorSpace - Play --
WASDcontrol the active game while the Games tile is focused and the input prompt is empty - Reset / Exit --
Rrestarts the current game,Escreturns to the games selector
Focus a tile and press F8 or Ctrl+n until it becomes TILES, press F7, or run /tiles.
- Default Layout --
/tilesboots 2 live terminals side-by-side - Custom Counts --
/tiles 4creates a 2x2 shell grid, and any count from1to8is supported - Real PTYs -- each inner tile is a real terminal session, so you can launch
codex,claude,gemini, or any other CLI tool directly inside it - Inner Focus --
Ctrl+j/kcycles between inner terminals (next/previous) - Outer Focus --
Ctrl+h/lmoves between ASCIIVision panels (left/right), so you can jump back to chat or another module
Six terminal-rendered visual effects, cycled with F4 or /fx, then turned off on the next cycle:
- Rainbow Matrix Rain -- cascading characters with per-column rainbow hues that drift over time, white head glow, color-tinted backgrounds
- Plasma Field -- RGB sine-wave interference patterns with smooth color cycling
- 3D Starfield -- perspective-projected stars flying toward the camera with depth-based brightness
- Wireframe 3D -- rotating cube rendered with ASCII line-drawing and labeled vertices
- Fire Simulation -- bottom-up flame propagation with heat diffusion and ember colors
- Particle Storm -- multi-colored particles exploding from center with gravity and fade
Live system telemetry panel (powered by sysinfo) showing:
- CPU -- global usage percentage with colored bar and per-core sparkline
- Memory -- used/total with bar graph, color-coded thresholds
- Swap -- usage with bar (if swap is active)
- Network -- upload/download bytes with arrow indicators
- Load Average -- 1/5/15 minute load
- Cores -- thread count
Thresholds: green (<50%), amber (50-80%), red (>80%) for CPU and memory.
Live camera capture converted to ASCII art using FFmpeg's AVFoundation (macOS), V4L2 (Linux), or DirectShow (Windows).
- Toggle with F5 or
/webcam - If another app (OBS, Zoom, FaceTime) has the camera locked, the panel shows a red error message explaining the conflict and how to fix it
- The capture thread is crash-safe (wrapped in
catch_unwind) so a webcam failure never takes down the app - Camera errors are surfaced in both the webcam panel and the status ticker
Host a server and connect clients for multi-user live ASCII webcam streaming in the terminal.
# Machine A: host the server
asciivision --serve 8080
# Machine B: connect as a client
asciivision --connect ws://192.168.1.100:8080 --username alice --webcamOr use slash commands at runtime:
/server 8080
/connect ws://192.168.1.100:8080
/chat hello everyone
The video chat panel shows up to 4 remote feeds in a grid, a chat stream, and a connected users list.
asciivision/
├── install.sh # One-line installer (deps + build + PATH setup)
├── asciivision # Launcher script (builds + runs)
├── Cargo.toml # Main crate dependencies
├── .env.example # API key template (copy to .env)
├── src/
│ ├── main.rs # App shell: modes, rendering, input dispatch, tiling integration
│ ├── ai.rs # Multi-provider AI client with streaming (Claude, Grok, GPT-5, Gemini, Ollama)
│ ├── tools.rs # Agentic tool definitions and execution (shell, files, search, HTTP, sysinfo)
│ ├── memory.rs # Persistent agent memory (SQLite-backed key-value store)
│ ├── video.rs # FFmpeg-based MP4 to ASCII art decoder
│ ├── webcam.rs # Live webcam capture with ASCII conversion + error reporting
│ ├── shell.rs # Async shell command execution with timeout
│ ├── db.rs # SQLite conversation persistence
│ ├── tiling.rs # Binary-tree tiling window manager with 6 presets + min-size enforcement
│ ├── theme.rs # Global dynamic color theme engine with HSL random palette generation
│ ├── sysmon.rs # System monitor (CPU, memory, network, load)
│ ├── effects.rs # 3D terminal effects engine (6 effects, rainbow matrix)
│ ├── analytics.rs # Conversation analytics dashboard with bar charts
│ ├── server.rs # WebSocket video chat server (multi-user broadcast)
│ ├── client.rs # WebSocket video chat client (webcam + chat)
│ └── message.rs # WebSocket protocol message types
├── archive/
│ ├── mega-cli/ # Legacy standalone multi-AI chat app
│ └── mega-analytics/ # Legacy standalone analytics dashboard
└── demo-videos/ # Bundled sample video (`demo.mp4`) for intro/video playback
| Category | Crates |
|---|---|
| Core | ratatui, crossterm, tachyonfx, tokio, clap, anyhow |
| Video | ffmpeg-next, ffmpeg-sys-next, crossbeam-channel |
| AI | reqwest, serde, serde_json, dotenvy |
| Networking | tokio-tungstenite, futures, parking_lot, uuid |
| System | sysinfo, rusqlite, chrono, rand |
- macOS, Linux, or Windows (via WSL2)
- Terminal with RGB color support (iTerm2, Kitty, Alacritty, WezTerm, etc.)
- A webcam (optional, for webcam/video chat features)
- Only one app can use the webcam at a time on macOS -- close OBS/Zoom/FaceTime before enabling webcam capture
All build dependencies and local-media extras (Rust, FFmpeg, LLVM, yt-dlp, Ollama) are installed automatically by ./install.sh.
