Spaces:
Sleeping
Sleeping
Commit History
-
Add Beam serverless-GPU captioner (Qwen2.5-VL) with batching
BLIP-base is a 0.25B COCO captioner with no OCR, so on tutorial screenshots it produces generic text ("a computer screen with a website on it") that adds nothing to a step-by-step guide. Serve Qwen2.5-VL-7B-Instruct on a Beam serverless GPU instead; it reads on-screen text and understands UI elements. - beam_app.py: batched endpoint, scale-to-zero, weights cached on a Volume. torch is pinned to 2.7.1 deliberately: Beam hosts run a CUDA 12.9 driver and an unpinned torch resolves to a cu13 wheel, which fails as a silent torch.cuda.is_available() == False and a bare HTTP 500 at request time. - vision.py: Beam backend plus caption_batch(), chunked to keep request bodies bounded. Falls back to the HF Inference API and then local BLIP, so an unreachable or scaled-to-zero endpoint degrades instead of breaking. - guide.py: caption the frame pool in one batched call rather than N calls. - .beamignore: exclude work/ (32MB of frames) and .env from image uploads. Captioning is opt-in: …2d82711
-
Surface Generate errors in the guide panel; raise LLM max_tokens to 4096
Generate failures (missing token, LLM/provider error, no steps) now render in the guide panel itself, not only the easy-to-miss bottom status line — the likely reason the deployed Generate looked broken (the warning was off-screen). Also raise the default output cap so longer guides aren't truncated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>8b53847
-
Add a Capture button directly under the player
A second 'Capture current frame' button sits right under the video player (step 1), in addition to the one in the frames section (step 4); both share the same handler. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1ff6e50 -
Reorder UI: extract frames (step 4) now follows transcribe + generate
Auto-extract depends on the transcript and LLM step outline, so the frames section moves below them. Auto-extract is the primary action there; manual capture still grabs from the player above. Renumbered: 1 Upload, 2 Transcribe, 3 Generate, 4 Capture & extract frames, 5 Build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>07b432d -
Auto-extract: generate the LLM step outline first, anchor frames to step times
Auto-extract now runs guide generation (after transcription) when no draft exists, then extracts frames AT the LLM step timestamps — the same suggestions the per-step weighted selection relies on. Falls back to narration-gated scenes when there is no token/draft. The generated transcript + outline are surfaced in the UI (reused, not recomputed). Smoke test reordered to generate before extracting. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>0e7c368 -
Auto-extract transcribes first when no transcript exists
Narration-gating now works regardless of button order: Auto-extract runs Whisper first if needed, surfaces the transcript in the box + state (reused, not recomputed), and never clobbers a transcript the user may have edited. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>915f7b8 -
Make auto-frame extraction narration-accurate
- Gate scene-detected frames to the spoken time range (drops screen-recorder intro/idle screens) when a transcript is available. - Weight transcript/LLM step timestamps far more in per-step frame selection: tighter window, exclude out-of-speech frames, and extract a fresh frame at the exact step time when no close frame exists. - Thread the transcript into auto-extract + build; hint users to transcribe first. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>6e3fc02 -
Fix lightbox on Spaces: inject via demo.load(js=) not launch(head=)
HF Spaces launches the demo itself and drops launch() args, so launch(head=...) never reached the frontend. Move the lightbox to a load-time JS event (Blocks level), injecting its CSS from there too. Also register the work dir via gr.set_static_paths so the custom video player serves on Spaces regardless of launch(allowed_paths=). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>e9abad3 -
Enlarge selected frame in a full-screen lightbox
Clicking a frame opens it full-screen (dismiss via click or Esc), alongside selecting it for deletion. Injected via launch(head=...) since Gradio 6 moved 'head' out of the Blocks() constructor. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>fc88eba -
Add per-image delete from the frames pool
Click a gallery image to select it, then '🗑️ Delete selected' removes it (and deletes its file). 'Clear frames' renamed to 'Clear all'. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>024d653 -
DocuMaker: video to step-by-step DOCX guide (Whisper + HF LLM + BLIP)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>85b485a