repowiseyusufb5/asciline

yusufb5 / asciline

A high-performance ASCII video rendering engine featuring real-time WebSocket binary streaming and an isolated compiler for serverless static generation. Built for low-latency 30 FPS playback on HTML5 Canvas.

Python★ 2,762

github.com/yusufb5/ascilineIndexed at 5344a05Up to date with upstream

What is asciline?

asciline is a Python-based, cross-platform ASCII video rendering engine for converting video into text or colored block frames for browser playback. It maps pixels to text representations and streams the resulting frames to an HTML5 Canvas over WebSocket. The stack includes Python with FastAPI, OpenCV, and NumPy, plus vanilla JavaScript in the browser.

Written by a model from the README and the source

30 files and 267 symbols in 4 modules, led by Python (13 files) and JavaScript (10).

Code health

4.9out of 10Needs work

This codebase scores 4.9 out of 10 for code health, which we rate needs work. It also scores maintainability 7.0 and static performance 9.7 out of 10. The three are scored separately and never blended into one number. Risk is concentrated, as it usually is: 6 of 30 files are git hotspots, and they average 3.0 — which is where the fixes pay off most.

Use yusufb5/asciline in your agent

Point Claude Code, Cursor, Codex or VS Code at this repository. Your agent gets the index this page is built from: cited answers, callers, history and health for any file.

  1. 1.In Claude, open Customize → Connectors, click +, then Add custom connector. On a Team or Enterprise plan an owner adds it first under Organization settings → Connectors.
  2. 2.Paste the server URL below as the Remote MCP server URL, then click Add.
  3. 3.Click Connect. A Repowise sign-in window opens. Approve access.
  4. 4.Repowise's tools are now available in your Claude chats.

Connect with one click. Sign in with Repowise (OAuth), no API key to copy. Works in Claude on the web, desktop, and mobile.

Docs
bash
https://api.repowise.dev/mcp/yusufb5/asciline
Editors need an API key: sign in to create one.Sign in to connect

This repo is public, so anyone with a Repowise account and an API key can connect.

Try asking

  • get_overview()
  • get_answer("how is asciline put together?")
  • get_why("why is asciline structured this way?")

Explore asciline

Key features of asciline

  • asciline supports real-time ASCII and pixel streaming, with pixel mode replacing characters with colored blocks.
  • asciline renders video on HTML5 Canvas and supports playback tuned for 24 to 30 FPS, with higher-FPS sources decimated for stability.
  • asciline uses the audio track as a master clock to keep audio and video synchronized.
  • asciline streams frames through a low-overhead binary protocol as raw Uint8Array data to the canvas.
  • asciline supports multiple color modes from black and white through 16M-color output.
  • asciline supports JSON playlists, folder-based auto-queuing, single-file mode, and infinite looping through CLI flags.

How yusufb5/asciline works

Video input enters the Python backend, where OpenCV decodes frames and NumPy maps pixels to ASCII or pixel-mode output. stream_server.py provides the server that streams binary frames to browser clients. The frontend receives frames over WebSocket, uses a custom INIT handshake to negotiate resolution and FPS, and renders the data on a canvas grid. app.js manages the browser-side playback path, while static_player/reader.js reads compiled video data for the static player. codec.py implements adaptive frame encodings used by the live server and compiler, and the shared JavaScript decoder handles the encoded frames in the browser.

The codebase has 30 files and 267 symbols in 4 modules, led by Python, JavaScript and Shell. Code health is 4.9 out of 10, rated needs work.

Getting started with asciline

  1. Install the required Python dependencies.
    pip install fastapi uvicorn opencv-python numpy websockets
  2. Install yt-dlp when playing from a URL instead of a local file.
    pip install yt-dlp

Commands copied from the README

yusufb5/asciline FAQ

What is asciline?

asciline is a cross-platform real-time ASCII video rendering engine. It converts video pixels into text or colored blocks and streams the result to a browser canvas.

How does asciline work?

asciline decodes video with OpenCV, maps pixels to ASCII with NumPy, and streams binary frames from a FastAPI backend to a vanilla JavaScript canvas player over WebSocket.

How do I install asciline?

asciline requires FastAPI, Uvicorn, OpenCV, NumPy, and websockets, installed with pip install fastapi uvicorn opencv-python numpy websockets. URL playback additionally uses yt-dlp.

What language is asciline written in?

asciline is primarily written in Python, with vanilla JavaScript for browser playback and a shell file.

How is the asciline code organized?

asciline has Python server and processing files at the root, browser code in static_player, tests in test, and experiments in experiments. stream_server.py, codec.py, app.js, and static_player/reader.js are central files.

Who is asciline for?

asciline is for browser video playback on constrained networks and devices that benefit from server-side rendering and text frames, including zero-GPU devices and basic microcontrollers.

The summary, features and answers on this page are written by a model from the README and the source, and refreshed with each index.

About this page

Get a page like this for your own codebase

Repowise built this map of yusufb5/asciline from its source and git history. It parses every symbol, draws the dependency graph, scores each file's health from complexity, duplication, coverage and churn, finds hotspots and owners in the history, and writes documentation for every module. Your coding agent reads the same index over MCP, so its answers cite real files.

Index your repo freeSee how Repowise worksFree for 2 public repos, with a page like this one.

Prefer local? pip install repowise && repowise init indexes your own checkout, no account needed.