Script Python untuk mengubah input webcam menjadi video ASCII berwarna (duotone) dan mengalirkannya ke virtual camera via v4l2loopback. Script otomatis menjalankan:
sudo modprobe -r v4l2loopback 2>/dev/null || true
sudo modprobe v4l2loopback devices=1 video_nr=10 exclusive_caps=1 card_label="ASCII Cam"saat start (kecuali Anda pakai --skip-loopback).
- Linux (Ubuntu/Debian/Arch/…)
- Kernel mendukung module
v4l2loopback - Python 3.9–3.12
macOS/Windows tidak didukung karena
v4l2loopbackspesifik Linux.
kmod(untukmodprobe) — biasanya sudah adav4l2loopback-dkms(Ubuntu/Debian) atauv4l2loopback-dkms/v4l2loopback(Arch)
Ubuntu/Debian:
sudo apt update
sudo apt install -y v4l2loopback-dkms v4l2loopback-utils python3-venv python3-dev build-essential ffmpegArch/Manjaro:
sudo pacman -Syu --needed v4l2loopback-dkms ffmpegJika
v4l2loopbackbelum terpasang, pasang dulu dan reboot bila diminta.
opencv-pythonnumpypyvirtualcamFlask
Opsional (debugging/video tools):
v4l2loopback-utils,v4l2-ctl
# 1) clone / salin script 'ascii-cam.py' ke folder kerja
cd /path/ke/proyek
# 2) buat virtualenv
python3 -m venv .venv
source .venv/bin/activate
# 3) install dependensi python
pip install --upgrade pip
pip install opencv-python numpy pyvirtualcam FlaskJika
opencv-pythongagal build, coba:
sudo apt install python3-opencvlalupip install pyvirtualcam numpy Flask- atau gunakan
pip install opencv-python-headless
Pastikan script bernama ascii-cam.py berada di folder kerja.
source .venv/bin/activate
python3 ascii-cam.py --uiBuka http://127.0.0.1:8765.
python3 ascii-cam.py --menupython3 ascii-cam.py \
--out-device /dev/video10 \
--width 1280 --height 720 --fps 30 \
--cols 160 --rows 80 --mirror \
--duotone "#00ffff" "#ff00ff" --bg "#000000" --ascii "@%#*+=-:. "--ui: jalankan Web UI modern (slider + input manual + color picker + HEX + ASCII chars).--menu: tampilkan menu preset & input kustom resolusi/FPS/grid di terminal.--out-device: target virtual cam (default/dev/video10).--video-nr N: nomor device saat modprobe. Otomatis sinkron dengan--out-device.--skip-loopback: jangan jalankanmodprobe, gunakan device existing.--no-load-last: jangan load config terakhir dari disk.--mirror: mirror horizontal input.--duotone "#RRGGBB" "#RRGGBB": warna gradasi karakter (gelap → terang).--bg "#RRGGBB"atau--bg "none": warna latar.--ascii: custom ramp ASCII.--in-index: paksa kamera input tertentu.
Catatan Saat start, script akan:
modprobe -r v4l2loopbackmodprobe v4l2loopback devices=1 video_nr=<nr> exclusive_caps=1 card_label="ASCII Cam"- Mencari input camera otomatis (atau gunakan
--in-index). - Membuka virtual camera (
/dev/video<nr>) dan mulai streaming.
Buka aplikasi (Zoom/Meet/OBS/Telegram/Discord), lalu pilih kamera bernama “ASCII Cam” atau pilih device /dev/video10.
Di Wayland, beberapa aplikasi butuh izin screen/camera tambahan. Jika tidak muncul, coba jalankan dari X11 atau gunakan OBS + V4L2 sink.
-
Output 640×480@15, grid 100×50, tanpa mirror:
python3 ascii-cam.py --out-device /dev/video10 --width 640 --height 480 --fps 15 --cols 100 --rows 50
-
Warna duotone pink → biru, latar gelap:
python3 ascii-cam.py --duotone "#ff00aa" "#00aaff" --bg "#000000"
-
Input kamera tertentu:
python3 ascii-cam.py --in-index 2 --menu
-
Skip auto-modprobe:
python3 ascii-cam.py --skip-loopback --out-device /dev/video10 --menu
-
width/height = resolusi output virtual cam.
-
cols/rows = resolusi grid ASCII.
- besar → huruf lebih kecil, detail tinggi.
- kecil → huruf lebih besar, detail kasar.
Output video tetap fix sesuai width × height. Yang berubah hanya kepadatan ASCII.
ffplay -f v4l2 -i /dev/video10- Lokasi file:
~/.config/ascii-cam/config.json - Tersimpan otomatis saat klik Apply atau start CLI.
- Diload otomatis saat start (skip dengan
--no-load-last).
sudo modprobe -r v4l2loopback 2>/dev/null || true
sudo modprobe v4l2loopback devices=1 video_nr=10 exclusive_caps=1 card_label="ASCII Cam"- Tutup aplikasi lain.
- Gunakan
--in-index. - Pastikan user ada di grup
video.
sudo usermod -aG video $USER- Sudah difix dengan snapshot config. Klik Apply akan stop stream lama lalu start baru.
Gunakan systemd user service:
mkdir -p ~/.config/systemd/user
tee ~/.config/systemd/user/ascii-cam.service >/dev/null <<'EOF'
[Unit]
Description=ASCII Virtual Camera (User)
After=default.target
[Service]
Type=simple
WorkingDirectory=%h/path/ke/proyek
ExecStart=%h/path/ke/proyek/.venv/bin/python %h/path/ke/proyek/ascii-cam.py --out-device /dev/video10 --width 1280 --height 720 --fps 30 --cols 160 --rows 80
Restart=on-failure
RestartSec=3
[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable --now ascii-cam.servicepkill -f "python3 ascii-cam.py" || true
sudo modprobe -r v4l2loopback
deactivate 2>/dev/null || true
rm -rf .venvGunakan bebas untuk keperluan Anda. Atribusi dihargai.
sudo apt install -y v4l2loopback-dkms v4l2loopback-utils python3-venv
python3 -m venv .venv
source .venv/bin/activate
pip install opencv-python numpy pyvirtualcam Flask
python3 ascii-cam.py --ui