This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

android-webcam: add configurable ASCII scale

- --ascii now accepts optional SIZE parameter (1-20, default 6)
- shader generated from template with scale value
- fixed exclusive_caps for raw camera device

+18 -5
+1 -1
2configs/android-webcam.nix
··· 5 5 kernelModules = [ "v4l2loopback" ]; 6 6 extraModulePackages = [ config.boot.kernelPackages.v4l2loopback ]; 7 7 extraModprobeConfig = '' 8 - options v4l2loopback devices=2 video_nr=0,1 exclusive_caps=1,1 card_label="Phone Camera","ASCII Webcam" 8 + options v4l2loopback devices=2 video_nr=0,1 exclusive_caps=0,1 card_label="Phone Camera","ASCII Webcam" 9 9 ''; 10 10 }; 11 11
+15 -3
tools/android-webcam/android-webcam.sh
··· 1 - SHADER_PATH="@shaderPath@" 1 + SHADER_TEMPLATE="@shaderPath@" 2 2 ASCII_MODE=false 3 + ASCII_SCALE=6 3 4 4 5 while [[ $# -gt 0 ]]; do 5 6 case $1 in 6 7 --ascii) 7 8 ASCII_MODE=true 8 9 shift 10 + # Check if next arg is a number (the scale) 11 + if [[ $# -gt 0 && $1 =~ ^[0-9]+$ ]]; then 12 + ASCII_SCALE=$1 13 + shift 14 + fi 9 15 ;; 10 16 *) 11 17 echo "Unknown option: $1" >&2 12 - echo "Usage: android-webcam [--ascii]" >&2 18 + echo "Usage: android-webcam [--ascii [SIZE]]" >&2 19 + echo " SIZE: character size 1-20 (default: 6)" >&2 13 20 exit 1 14 21 ;; 15 22 esac ··· 22 29 echo "v4l2loopback should be configured with devices=2" >&2 23 30 exit 1 24 31 fi 32 + # Generate shader with scale value 33 + SHADER_PATH=$(mktemp --suffix=.hook) 34 + sed "s/@SCALE@/${ASCII_SCALE}/" "${SHADER_TEMPLATE}" > "${SHADER_PATH}" 25 35 else 26 36 if [[ ! -e /dev/video0 ]]; then 27 37 echo "Error: /dev/video0 must exist" >&2 ··· 33 43 echo "Stopping..." 34 44 kill "${SCRCPY_PID}" 2>/dev/null || true 35 45 [[ -n "${FFMPEG_PID:-}" ]] && kill "${FFMPEG_PID}" 2>/dev/null || true 46 + [[ -n "${SHADER_PATH:-}" && -f "${SHADER_PATH}" ]] && rm -f "${SHADER_PATH}" 36 47 } 37 48 trap cleanup EXIT 38 49 ··· 51 62 sleep 2 52 63 53 64 # Start ffmpeg with ASCII shader to /dev/video1 54 - echo "Starting ASCII filter pipeline..." 65 + echo "Starting ASCII filter pipeline (scale=${ASCII_SCALE})..." 55 66 ffmpeg \ 56 67 -f v4l2 -i /dev/video0 \ 57 68 -vf "libplacebo=custom_shader_path=${SHADER_PATH}" \ ··· 62 73 echo "Android ASCII webcam running!" 63 74 echo " Raw camera: /dev/video0 (Phone Camera)" 64 75 echo " ASCII output: /dev/video1 (ASCII Webcam)" 76 + echo " Character size: ${ASCII_SCALE}" 65 77 else 66 78 echo "" 67 79 echo "Android webcam running!"
+1 -1
tools/android-webcam/ascii.hook
··· 2 2 //!BIND HOOKED 3 3 //!DESC ASCII art filter 4 4 5 - const int SCALE = 6; 5 + const int SCALE = @SCALE@; 6 6 const bool MONOCHROME = false; 7 7 const vec3 BASE_COLOR = vec3(0.0, 1.0, 0.0); 8 8
+1
tools/android-webcam/flake-module.nix
··· 11 11 runtimeInputs = [ 12 12 pkgs.scrcpy 13 13 ffmpeg-placebo 14 + pkgs.gnused 14 15 ]; 15 16 text = builtins.replaceStrings 16 17 [ "@shaderPath@" ]