ASVLCII is a black-and-white Windows media player that redraws photos, video, audio visualizers, and live streams as ASCII characters. The application keeps its sharp VLC-inspired interface while ASCII output can preserve the source colour.
- Plays common image, video, and audio files; FFmpeg prepares additional formats without changing the original.
- Renders 8–512 columns with density presets, Unicode/Chinese custom ramps, colour or monochrome output, 25–100% view zoom, and a user-selected FPS ceiling up to unlimited.
- Copies ASCII text and exports TXT, PNG, or an accelerated ASCII MP4 with synchronized source audio.
- Receives HTTP(S), HLS, DASH, RTSP/RTSPS, RTMP/RTMPS, SRT, UDP, and RTP streams through the main process with stable, balanced, and low-latency A/V buffers.
- Broadcasts H.264/AAC to Twitch, YouTube, custom RTMP/RTMPS, SRT, UDP/RTP MPEG-TS, or a token-protected LAN HLS endpoint, with optional local recording.
- Supports full-desktop or DirectShow camera/microphone capture, hardware encoder selection with x264 fallback, and live statistics/reconnect handling.
- Includes audio-only spectrum/waveform/VU rendering, playback speed with pitch preservation, frame step, A–B repeat, repeat/shuffle, bookmarks, resume positions, favourites, history, and metadata search.
- Loads external SRT/WebVTT subtitles and provides subtitle/audio delay, a ten-band equalizer, normalization, mono audio, and live video adjustments.
Requirements: Windows 10/11 x64, Node.js, Rust/Cargo, Visual Studio C++ Build Tools with the Windows SDK, and the bundled FFmpeg files under vendor/ffmpeg. Run native builds from an x64 Developer Command Prompt with the SDK library paths configured.
npm install
npm run devRun the verification suite:
npm testBuild both Windows packages:
npm run buildThe outputs are release/ASVLCII-Setup-2.0.7.exe and release/ASVLCII-Portable-2.0.7.exe. The assisted installer includes license, installation scope, destination, shortcut, progress, and finish steps.
- Photos open in Fit mode and retain their complete contents and proportions. Tall canvases are contained inside the viewer. PNG export saves the full artwork, independently of window size or zoom.
- Rotation uses the correct pre-rotation dimensions; crop geometry uses the selected crop's proportions.
- Transparent MOV export removes near-black source background before rendering and carries alpha through native glyph rendering. Dark glyph antialiasing is no longer removed by a second color key. This removes black backgrounds, not arbitrary scenery; standard MP4 remains opaque.
- Failed or canceled ASCII exports stop their child processes promptly. Replacing an export no longer deletes the previous file before the replacement succeeds.
- Shuffle keeps a consistent order through each cycle and respects repeat-off. Advancing automatically to the next video starts playback.
- Dragged files use the same format conversion as the file chooser.
- Live ports are transferred correctly across Electron's isolated renderer boundary. Live previews preserve source proportions, and queued live audio is stopped or bounded.
- Narrow ASCII settings scroll vertically without compressing controls into overlapping rows.
Desktop regression tests (npm run test:desktop) require Playwright. If it is installed outside the project, set ASVLCII_PLAYWRIGHT to its module directory. Set ASVLCII_TEST_OUTPUT_DIR to choose where screenshots and test exports are stored. Tests use separate app profiles and mock OS file dialogs, while retaining real media decoding, rendering and export IPC.
Manual stream keys always work and can be session-only or encrypted with Electron safeStorage/Windows DPAPI. Optional OAuth buttons require public client IDs at build time:
$env:ASVLCII_TWITCH_CLIENT_ID="your-public-client-id"
$env:ASVLCII_YT_CLIENT_ID="your-public-client-id"
npm run buildNo client secret belongs in the app. Packaged builds omit source maps, stream keys, OAuth tokens, and personal settings.
Ctrl+O— open mediaSpace— play or pauseLeft/Right— seek five seconds]— step one frameM— muteB— add a bookmarkF— fullscreenEsc— cancel an active ASCII video export
