MCPcopy Index your code
hub / github.com/SameerVers3/stdout-tv

github.com/SameerVers3/stdout-tv @v0.1.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.1.0 ↗ · + Follow
22 symbols 34 edges 10 files 2 documented · 9%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

stdout-tv logo

🎬 Transform YouTube into ASCII cinema - right in your terminal

Because who needs 4K when you have 80 columns.

FeaturesDemoInstallationUsageOptionsDependencies

Rust License Stars


Features

  • Stream YouTube videos as ASCII art in real-time
  • Full color support with ANSI colors
  • Synchronized audio playback
  • Multiple charset presets for different styles

Demo

https://github.com/user-attachments/assets/d132860c-de12-4f78-ab4a-c96425d2285a

# One command. Instant ASCII cinema.

stdout-tv play "https://www.youtube.com/watch?v=dQw4w9WgXcQ"

master_po dense

monochrome


Installation

Prerequisites

Note: Make sure you have Rust installed (1.75+)

From Source (Recommended)

# Clone the repository
git clone https://github.com/SameerVers3/stdout-tv.git
cd stdout-tv

# Build with Cargo (optimized release build)
cargo build --release

# Run it!
./target/release/stdout-tv --help

Quick Install Script

# One-liner install
curl -sSL https://raw.githubusercontent.com/SameerVers3/stdout-tv/main/install.sh | bash

Add to PATH

# Linux/macOS - Add to your local bin
sudo cp ./target/release/stdout-tv /usr/local/bin/

# Or symlink it
ln -s $(pwd)/target/release/stdout-tv ~/.local/bin/stdout-tv

Usage

Play a Video

# Basic - just paste the URL
stdout-tv play "https://www.youtube.com/watch?v=VIDEO_ID"

#  Custom size (height auto-calculated for 16:9)
stdout-tv play "<url>" --width 120

#  Experiment with charsets
stdout-tv play "<url>" --charset-preset dense    # More detail
stdout-tv play "<url>" --charset-preset blocks   # Pixel art vibes

#  Silent mode (no audio)
stdout-tv play "<url>" --no-audio

#  Invert colors (for light terminals)
stdout-tv play "<url>" --invert

#  Custom FPS (default: source video FPS)
stdout-tv play "<url>" --fps 30

Get Video Info

stdout-tv info "https://www.youtube.com/watch?v=VIDEO_ID"

Example Output

Title: Never Gonna Give You Up
Uploader: Rick Astley
Upload Date: 20091025
Duration: 3m 32s
View Count: 1500000000
Like Count: 15000000

Description:
The official video for "Never Gonna Give You Up" by Rick Astley...

Tags:
rick astley | never gonna give you up | rickroll | 80s |

Check Dependencies

stdout-tv check
Checking dependencies for stdout-tv...

✓ yt-dlp found: yt-dlp 2024.12.01
✓ ffmpeg found: ffmpeg version 6.1.1

All dependencies are installed!

Options

Play Command Options

Option Description Default
--width <WIDTH> Terminal width in characters 80
--height <HEIGHT> Terminal height in characters Auto (16:9)
--fps <FPS> Frames per second Source FPS
--charset <CHARSET> Custom charset (5-50 chars)
--charset-preset <PRESET> Preset: default | dense | blocks default
--invert Invert brightness mapping false
--color Enable ANSI color output true
--no-audio Disable audio playback false
--yt-dlp-path <PATH> Custom yt-dlp executable yt-dlp
--ffmpeg-path <PATH> Custom ffmpeg executable ffmpeg

Charset Presets

Preset Style Best For
default @%#*+=-:. General purpose, balanced
dense Extended ASCII range High detail, complex scenes
blocks █▓▒░ Retro pixel art look

🔧 Dependencies

stdout-tv requires these external tools to work its magic:

Tool Purpose Install
yt-dlp Fetches video streams brew install yt-dlp / pacman -S yt-dlp
ffmpeg Video processing & audio brew install ffmpeg / pacman -S ffmpeg

Tip: Run stdout-tv check to verify everything is set up correctly!


Project Structure

stdout-tv/
├── Cargo.toml            # Project manifest
├── src/
│   ├── main.rs           # Entry point
│   ├── cli.rs            # CLI with clap
│   ├── utils.rs          # Terminal magic
│   ├── commands/
│   │   ├── play.rs       # The main show
│   │   ├── info.rs       # Video metadata
│   │   └── check.rs       # Dependency checker
│   └── video/
│       ├── yt_dlp.rs     # yt-dlp wrapper
│       └── ffmpeg.rs     # ffmpeg pipeline

Contributing

Contributions, issues, and feature requests are welcome!


License

This project is licensed under the MIT License - see the LICENSE file for details.


Implementation Notes

- This project uses pixel2ascii, a companion crate developed to handle image-to-ASCII conversion efficiently.

Made with ❤️ and 🦀 Rust

Star ⭐ this repo if you found it useful!

Core symbols most depended-on inside this repo

run
called by 3
src/commands/info.rs
check_command
called by 2
src/commands/check.rs
hide_cursor
called by 1
src/utils.rs
show_cursor
called by 1
src/utils.rs
clear_screen
called by 1
src/utils.rs
move_cursor_home
called by 1
src/utils.rs
get_audio_output
called by 1
src/utils.rs
resolve_dimensions
called by 1
src/cli.rs

Shape

Function 16
Class 2
Enum 2
Method 2

Languages

Rust100%

Modules by API surface

src/utils.rs8 symbols
src/cli.rs5 symbols
src/video/yt_dlp.rs2 symbols
src/video/ffmpeg.rs2 symbols
src/commands/check.rs2 symbols
src/main.rs1 symbols
src/commands/play.rs1 symbols
src/commands/info.rs1 symbols

For agents

$ claude mcp add stdout-tv \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page