Spaces:
Sleeping
Sleeping
Commit History
-
Document Backblaze keys in the droplet env file
/root/archiveai-tts.env was missing BACKBLAZE_KEY_ID / BACKBLAZE_APPLICATION_KEY, so both "Load from Backblaze" pickers would have warned that they were not configured. The keys have been added on the droplet; this records them alongside the other env-file contents, plus the gotcha that an env-file edit only takes effect when the container is recreated — a plain restart and a no-op nightly both miss it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>b6bbd57
-
Add "Load from Backblaze" pickers for turns/captions and text input
Two independent browsers: one for the turns.json + captions pair, one for the general text/subtitle source — mirroring the two existing Drive-link entry points. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>7eb9f97
-
Point at Orchestrator's new self-service allowlist admin panel
3500184 -
Rewrite docs for terser, more austere style (no content changes)
255731f
-
Document the REST API and the security model
docs/api.md is the full reference for the job API, including the synthesis parameters that were previously only discoverable by reading the handler signature. Two things it makes explicit: - Cost control. A job with synthesize_audio=true costs one Gemini call plus one ElevenLabs call per non-mantra segment, which on a full teaching is real money. The documented workflow is synthesize_audio=false first, review the turn plan, then resubmit with turns_file to skip Gemini entirely. - The concurrency caveat, which has a security consequence and so appears in both docs: unlike TranslationUI and ArchiveAI-STT, this app's UI Generate handlers are NOT wrapped through the job-store semaphore. So active_jobs undercounts real work, and /api/drain does not stop a UI batch already running — "drained" is not a guarantee that nothing is writing. docs/security.md covers what's particular here: this is the one droplet app that writes to HuggingFace in normal operation, …b2d53f4
-
Add async REST job API alongside the existing Gradio UI
Mirrors HuggingFaceSpaces/ArchiveAI-STT's server/api_jobs.py pattern: POST /api/jobs, GET /api/jobs/{id}, GET /api/jobs, GET /api/status, POST /api/drain, GET /api/ping, plus GET /api/projects and GET /api/projects/{id} for an external caller to poll for edits made through the UI (project updated_at changes on every UI edit). Prerequisite refactor: extracted the actual ElevenLabs call (_synthesize_turn_and_store) out of app.py into tts/core/turn_audio.py (synthesize_turn) and tts/core/turns.py (build_project_payload), so both the Gradio UI and the new API can call the same pure functions without either module importing from the other. app.py's version is now a thin wrapper that adds its Gradio-state-specific segment mutation on top. Existing tests patching the old app.synthesize_turn_audio location were updated to patch tts.core.turn_audio.synthesize_turn_audio instead; all 443 pre-existing tests still pass unchanged in behavior. A submitted job runs the same pipeline Turn Review's U…ab0a768
-
Document container egress restrictions and second-pass security gaps
Adds the DOCKER-USER egress rules (VPC + cloud metadata blocked, with the mandatory DNS carve-out called out prominently since removing it breaks all container DNS), plus the gaps that pass left open: root containers, container-to-container reachability, and the asymmetric volume mount between the two apps. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>b34b6d7 -
Document HF_TOKEN over-scoping as a known gap (security review)
Same finding as TranslationUI's docs: the HF_TOKEN in use (needed here for glossary sync) is a personal full-access account token, not scoped to this app's actual need. Deferred deliberately. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>62f46b4 -
Add docs/ covering configuration, storage, deployment, and operations
Mirrors TranslationUI's docs structure. Documents the shared-droplet architecture specifically (same Caddy/oauth2-proxy as TranslationUI, cookie-domain widened to cover both apps' subdomains) since that's the part most likely to confuse someone debugging this app in isolation. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>fc33d54