* 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>
modal app list --json emits capitalised keys ('Description', 'State') on
CLI <=1.3.x and lowercase keys on newer CLIs. #51 fixed detection for new
CLIs but broke it for older ones; accept both so the check works on any
Modal version. Verified live against modal 1.3.5 (6 apps detected) and
via mocked lowercase output.
Claude-Session: https://claude.ai/code/session_01MKbS3m7TXrfYjE7gDVEpnV
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Three unrelated gaps found while running /setup end to end on Windows.
1. MODAL_LTX2_ENDPOINT_URL was read by tools/cloud_gpu.py but appeared in
neither .env.example nor verify_setup.py, so LTX-2 could only be configured
by someone who had read the source. Added to both, plus the deploy command
and env var in docs/modal-setup.md.
2. verify_setup.py always reported "no toolkit apps deployed". `modal app list
--json` emits lowercase keys ("description", "state") while the check read
the capitalised column headers of the human-readable table, so the filter
never matched. Verified against a workspace with 6 deployed apps: now
correctly reports "6 deployed". Also made the "N/7 tools" header derive its
total from the tool list instead of hardcoding it, since adding LTX-2 would
otherwise have desynced the count.
3. Documented three Windows blockers that each present as a toolkit bug:
- modal deploy aborts mid-build with a cp1252 'charmap' encode error unless
PYTHONIOENCODING=utf-8 is set
- python3 resolves to the zero-byte WindowsApps App Execution Alias, which
fails with "Permission denied" — this breaks every documented
`python3 tools/...` invocation
- FFmpeg needs a manual install, with a fallback for when winget's source
index is corrupted
Also documented two Modal behaviours that cost real debugging time: AppCreate
is rate-limited so deploys must be serial, and A100-class apps (image-edit,
ltx2) fail at deploy time until a payment method is added. Noted that ltx2
separately needs a `huggingface-token` secret, and that Modal truncates long
endpoint labels with a hash so URLs must be copied rather than reconstructed.
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
- New /setup command: interactive 6-phase onboarding wizard for new users
(prerequisites, cloud GPU provider, R2 file transfer, tool deployment,
voice config, verification)
- New verify_setup.py: checks all prerequisites, env vars, deployed apps,
and optionally runs smoke tests (--test flag)
- Migrate dewatermark.py to cloud_gpu.py: replace ~400 lines of inline
RunPod code with shared abstractions, add --cloud runpod|modal flag
- Add dewatermark to Modal env vars and GPU cost tables in cloud_gpu.py
- Rewrite .env.example: all 22 env vars organized by service, Modal
section added, references /setup
- Update README, CLAUDE.md, getting-started.md, video.md to reference
/setup as the primary onboarding path
- Register setup command and verify_setup tool in toolkit-registry.json
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>