Files
digitalsamba__claude-code-v…/.env.example
Conal Mullan 290d7d345b Adopt uv for Python dependency management (#33 rebased, thanks @AsharibAli) (#59)
* Adopt uv for Python dependency management

Replace manual pip/venv setup with `uv sync` (pyproject.toml + uv.lock),
and switch all tool invocations across docs, skills, commands, and
examples to `uv run`. Optional extras: --extra whisper, --extra modal.
tools/requirements.txt is kept as a pip fallback.

* FIX: bring uv migration current with main — post-June deps and docs

Adds websocket-client (60db websocket transport) to core deps and a
'youtube' extra for the google-* packages (tools/youtube_upload.py),
regenerates uv.lock, bumps pyproject version to 0.18.0, and converts the
51 'python3 tools/…' invocations added since the PR was opened (60db,
YouTube, Kiro docs, publish command) to 'uv run'. Verified with
uv sync --frozen --extra youtube; voiceover, sixtydb_tts, youtube_upload
and migrate_to_kiro all run through the project environment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Asharib Ali <asharibarain4@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-26 22:55:43 +01:00

83 lines
4.1 KiB
Bash

# ============================================================
# Claude Code Video Toolkit — Environment Variables
# ============================================================
# All keys are OPTIONAL. The toolkit works without any of them.
# You only need keys for the specific features you want to use.
#
# Quick setup: Run /setup in Claude Code for a guided walkthrough.
# ============================================================
# --- Cloudflare R2 (file transfer for cloud GPU tools) ---
# Free tier: 10GB storage, 10M ops/month, zero egress fees
# Setup: https://dash.cloudflare.com → R2 Object Storage → Create bucket
# This makes cloud GPU tools faster and more reliable.
# Without it, tools fall back to free file hosting services.
# R2_ACCOUNT_ID=your_account_id_here
# R2_ACCESS_KEY_ID=your_access_key_id_here
# R2_SECRET_ACCESS_KEY=your_secret_access_key_here
# R2_BUCKET_NAME=video-toolkit
# --- Cloud GPU: Modal (recommended) ---
# $30/month free compute on Starter plan (just add a payment method)
# Setup: uv sync --extra modal && uv run modal setup
# Deploy: uv run modal deploy docker/modal-{tool}/app.py
# Endpoint URLs are printed after each deploy — paste them here.
# MODAL_QWEN3_TTS_ENDPOINT_URL=https://yourname--video-toolkit-qwen3-tts-....modal.run
# MODAL_FLUX2_ENDPOINT_URL=https://yourname--video-toolkit-flux2-....modal.run
# MODAL_IMAGE_EDIT_ENDPOINT_URL=https://yourname--video-toolkit-image-edit-....modal.run
# MODAL_UPSCALE_ENDPOINT_URL=https://yourname--video-toolkit-upscale-....modal.run
# MODAL_MUSIC_GEN_ENDPOINT_URL=https://yourname--video-toolkit-music-gen-....modal.run
# MODAL_SADTALKER_ENDPOINT_URL=https://yourname--video-toolkit-sadtalker-....modal.run
# MODAL_DEWATERMARK_ENDPOINT_URL=https://yourname--video-toolkit-dewatermark-....modal.run
# LTX-2 also needs a Modal secret named `huggingface-token` (gated weights) and an
# A100-80GB, which requires a payment method on your Modal account.
# MODAL_LTX2_ENDPOINT_URL=https://yourname--video-toolkit-ltx2-....modal.run
# --- Cloud GPU: RunPod (alternative) ---
# Pay-as-you-go, ~$0.44/hr GPU time
# Setup: https://runpod.io/console/user/settings → API Keys
# Endpoint IDs are auto-created by each tool's --setup command.
# RUNPOD_API_KEY=your_api_key_here
# RUNPOD_QWEN3_TTS_ENDPOINT_ID=
# RUNPOD_FLUX2_ENDPOINT_ID=
# RUNPOD_QWEN_EDIT_ENDPOINT_ID=
# RUNPOD_UPSCALE_ENDPOINT_ID=
# RUNPOD_SADTALKER_ENDPOINT_ID=
# RUNPOD_ACESTEP_ENDPOINT_ID=
# RUNPOD_ENDPOINT_ID=
# --- AI Voiceover ---
# Qwen3-TTS: Free (runs on your cloud GPU above). No key needed.
# ElevenLabs: Premium cloud TTS (pay-per-character, optional)
# ELEVENLABS_API_KEY=your_api_key_here
# ELEVENLABS_VOICE_ID=your_voice_id_here
#
# 60db: Premium cloud TTS (https://60db.ai), used via --provider 60db
# Get a key at https://60db.ai. VOICE_ID is optional (falls back to the
# 60db default voice; list yours with: uv run tools/sixtydb_tts.py --list-voices)
# SIXTYDB_API_KEY=sk_live_your_key
# SIXTYDB_VOICE_ID=your_voice_id_here
# --- YouTube upload (tools/youtube_upload.py) ---
# YouTube uploads use OAuth 2.0 (acting on behalf of a channel), NOT an API key.
# One-time setup (see docs/youtube-upload.md for the full walkthrough):
# 1. Google Cloud Console -> create a project -> enable "YouTube Data API v3".
# 2. OAuth consent screen -> External -> add your channel's Google account as a Test user.
# 3. Credentials -> Create OAuth client ID -> Application type "Desktop app".
# 4. Download the client_secret_*.json and point the var below at it (absolute path).
# 5. Log in once (opens a browser): uv run tools/youtube_upload.py --auth
# NOTE: unaudited API projects MAY have public uploads force-locked to private, but
# this mainly affects uploads to OTHER channels — first-party uploads to your own
# channel generally publish public/scheduled fine. "Testing"-mode refresh tokens
# expire after ~7 days (re-run --auth). The tool reports the actual returned privacy.
# YOUTUBE_CLIENT_SECRETS_FILE=/absolute/path/to/client_secret.json
#
# Optional: override where per-account refresh tokens are cached
# (default: <workspace>/_internal/.youtube/, which is gitignored).
# YOUTUBE_TOKEN_DIR=/absolute/path/to/token/cache/dir