Two tasks with separate success criteria
ReActReel has movie and music modes. A request starts with a remembered phrase or description and ends with a YouTube result. Identification asks whether the selected video contains the intended work. Localization asks whether playback starts near the requested passage. A correct title can coexist with an incorrect timestamp.
The captured full-workflow searches identified a Star Wars scene at 107 seconds and a Hotel California performance at 112 seconds. Both showed playback in the app with Quick mode off. They establish two successful examples, not an accuracy rate over unfamiliar requests.
Architecture and run state
Next.js query → FastAPI /api/run/stream → reactreel-core
→ search → observation → next action
→ video understanding → proposed timestamp → watch URL
→ streamed completion → embedded YouTube playback
The shared agent yields events while it runs. Tool arguments, observations, and iteration state appear in the trace. The model's finish action and exhaustion of the iteration limit are separate outcomes; the final event can expose reached_max_iterations.
Dispatch checks that the selected tool has its required argument object. A missing object produces an error observation. That makes a malformed action inspectable and gives the next iteration evidence to recover from. An evaluation should retain these errors even when the final answer succeeds.
Timestamp lookup and URL construction
get_timestamp_from_text sends the URL and phrase to Gemini's video-understanding interface. It does not search a local transcript. The requested response contains start_seconds, end_seconds, confidence, and matched_text.
Minutes must be converted explicitly: 1:47 is 107 seconds. The error path can return a default interval with zero confidence and an error. Checking only for the presence of start_seconds would mistake that failure for a valid passage at the beginning of the video.
process_video converts the start value and builds a YouTube watch URL. It does not download or render a clip. The operational check is therefore whether the returned video is available, embeddable, and starts at the right passage. A valid URL alone cannot establish those properties.
Quick mode and streaming failures
Quick mode adds an instruction to stop after identifying a video and skip timestamp tools. It does not remove those tools from dispatch. To test the promised shorter workflow, inspect actual tool calls and compare measured latency and usage on the same requests.
The backend emits Server-Sent Events, including tool starts, completions, and terminal outcomes, and archives run events. A failure after the stream begins becomes loop.errored; the initial HTTP status cannot describe that later outcome. The frontend needs to retain the trace and distinguish a completed result from an interrupted stream.
The handler checks a session identifier and usage budgets before a run. Those controls bound access, while loop limits bound orchestration. Neither establishes search quality. Keep those concerns separate when interpreting a successful request.
Review procedure and evidence limits
Replay the two examples on the project page, checking the search result, timestamp tool output, final URL, and audible passage in that order. A later unavailable YouTube embed does not erase what the recording captured, but it changes whether the result works now.
For a broader evaluation, freeze a set of descriptions with accepted video IDs and manually checked intervals. Report identification success over all requests, localization error conditional on correct identification, tool failures, iteration-limit exits, playback availability, latency, and usage. Label this as a proposed evaluation until those runs exist.
The technical article identifies reactreel_core/agent.py, skills/transcript_search.py, skills/youtube_manager.py, and routers/run.py as the relevant implementation points. It documents the recorded behavior and response shapes. No new benchmark or calibrated confidence claim is introduced by this report.