# Environment variables (PM2 reads them from your shell; Docker reads this file as .env). CLIPPER_DATA=./data CLIPPER_INBOX=./inbox # Storage backend: "sqlite" (default; records + work queue in /clipper.db) # or "fs" (legacy job.json folders, no queue). Import old jobs with `clipper import-fs`. CLIPPER_STORE=sqlite # CLIPPER_STORE_URL=/data/clipper.db # CLIPPER_WORKER_NAME=worker # Web UI / PM2 # CLIPPER_ROOT=/path/on/data/volume/clipper-data # CLIPPER_INBOX_DIR=/path/on/data/volume/clipper-inbox # CLIPPER_HOST=0.0.0.0 # CLIPPER_PORT=5050 # CLIPPER_MAX_UPLOAD_MB=4096 # CLIPPER_SECRET_KEY= # default: generated once into /secret_key # Secrets and tuning can also live in /clipper.env (chmod 600), same KEY=VALUE format; # real environment variables win over the file. # CLIPPER_LLM_PROVIDER=openai # who picks the clips: openai (default) | gemini | anthropic # OPENAI_API_KEY=sk-... # only the chosen provider's key is needed # GEMINI_API_KEY=... # ANTHROPIC_API_KEY=sk-ant-... # CLIPPER_MODEL= # optional override; defaults: gpt-6-astra | gemini-3.8-flash | claude-sonnet-5-5 # CLIPPER_CLIP_MIN=20 CLIPPER_CLIP_MAX=60 CLIPPER_MAX_CLIPS=8 # CLIPPER_WHISPER_MODEL=small # tiny | base | small | medium (bigger = slower, more accurate) # CLIPPER_WHISPER_THREADS=0 # 0 = library default # CLIPPER_WHISPER_BEAM=1 # 1 = fastest # Downloading from a URL (clipper check-url tests it): # CLIPPER_JS_RUNTIME=/usr/local/bin/node # needed for YouTube; default: node/deno/bun found on the PATH # CLIPPER_COOKIES_FILE=/path/cookies.txt # for private or age-restricted videos (Netscape format, chmod 600) # CLIPPER_DOWNLOAD_HEIGHT=1080 CLIPPER_MAX_DOWNLOAD_MB=4096 # CLIPPER_MAX_CLIPS=8 CLIPPER_MUSIC_MAX_CLIPS=4 # clips asked for when a job does not say; 20 is the most, whatever you put here # CLIPPER_KEEP_RENDERS=5 # renders kept per clip (each re-render gets a new, timestamped name); older ones are deleted # CLIPPER_TAIL=0.4 CLIPPER_MUSIC_TAIL=1 # seconds a clip keeps after its last word so the sound can ring out # CLIPPER_YOUTUBE_CLIENTS=tv,web_embedded # YouTube clients to try, in order; default: a retry, then web_embedded, visionos, tv