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 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 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
- Hyprland-Style Tiling -- move, swap, resize, and reassign panels with Ctrl+hjkl keybindings and 6 layout presets
- 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.
- Rust (stable)
- FFmpeg dev libraries
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt install libavformat-dev libavcodec-dev libswscale-dev libavutil-dev pkg-config# From the repo root
./asciivision
# Or manually
cargo build --release
./target/release/gpt5-asciivisionCopy .env.example to .env in the repo root and fill in your keys:
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 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 |
Cycle between providers with F2 or /provider <name>.
gpt5-asciivision [OPTIONS]
Options:
--provider <NAME> AI provider: claude, grok, gpt, gemini [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 |
F3 |
Toggle video panel |
F4 |
Toggle 3D effects overlay |
F5 |
Toggle webcam capture |
F6 |
Cycle tiling layout preset |
F7 |
Cycle 3D effect type |
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 |
| 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 |
/video |
Toggle video panel |
/webcam |
Toggle webcam |
/3d or /effects |
Toggle 3D effects |
/fx |
Cycle to next 3D effect |
/analytics |
Show analytics in focused tile |
/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 |
| 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 11 panel types: Transcript, Video, Webcam, Telemetry, Ops Deck, 3D Effects, Analytics, Video Chat Feeds, Video Chat Messages, Video Chat Users, or System Monitor.
Six terminal-rendered visual effects, cycled with F7 or /fx:
- 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
./target/release/gpt5-asciivision --serve 8080
# Machine B: connect as a client
./target/release/gpt5-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/
├── 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)
│ ├── 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/ # Sample MP4 files
| 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
- Terminal with RGB color support (iTerm2, Kitty, Alacritty, WezTerm, etc.)
- Rust 1.70+
- FFmpeg 4.0+ (for video/webcam features)
- 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
