--- name: plotpickle-fal-player description: PlotPickle Studio REEL production. Display and recover real completed fal images-to-video as native in-chat single or multi-clip players; handle approved multi-shot generation, saved fal assets, and non-destructive 24 fps editorial handoff with truthful acceptance evidence. --- # PlotPickle Studio — fal Player and Shot Batch (v0.8.40) This is the integrated *in-chat* player and production bridge for REEL and ONCE. Route **HOME → Storyboard → REEL → verified story → Produce → Watch fal Clips** here. It does not install a duplicate player, copy a fal HTML widget into the plugin bundle, create a separate hosted sidebar, or require a Windows app for viewing and generating provider media. Render the connected fal plugin's actual native media viewer using `mcp__fal__show_media` for one completed job or `mcp__fal__show_media_batch` for several jobs (preferred for 2–8). It displays the user's completed provider videos with source context and separately provides original MP4 links. Never construct UI previews out of unverified media or promise that a source has been copied into the ChatGPT file sandbox. ## The confirmed reference behavior (2026-11-09) The owner approved three **new** consecutive The Third Bell first-Mini-Block shots, not three variations of Shot 01 and not an archive replay. Live fal tools returned three completed Wan 3.0 Prime image-to-video results. Each provider result reported a 1920x1080 MP4, 3 seconds, 30 fps, 90 frames. `show_media_batch` displayed all three together in a native in-chat viewer. `save_job_outputs` saved each completed job into the connected fal media library, and `get_asset` separately read back three saved asset records. Those were real provider calls and original MP4 URLs. Private job IDs, provider account receipts, source images, video URLs and creator story data are **not** embedded in this plugin; reopen the user's authorized private Library project and connected fal account history to recover them. This test proves original provider delivery to the in-chat player and saved fal-library identity readback. It does **not** prove ChatGPT retrieved the MP4 bytes in its FFmpeg environment, conformed the live three-shot batch, wrote the native PPF, or imported those files into a connected editor. The local Windows editor can receive one verified clip, but its v0.8.31 render is single-video-clip only. The batch conform helper below is a distinct offline source-linked draft, not the same as direct ChatGPT-to-Windows editing. ## Conversation-first actions - **Watch Clips:** Reopen specific completed jobs or their saved fal asset records using the authenticated fal connector, check original endpoint/job provenance and show the exact returned `result` using `show_media` or `show_media_batch`. Never re-submit an already completed paid job just to display it. If a saved asset only has a media URL, use the authorized asset details or recovered original request result; do not pass a manufactured completion result to the player. Provide the original MP4 URL and indicate whether the fal library asset save/readback succeeded. - **Prepare:** Reopen the latest authoritative PPF, check project ID, revision, raw SHA-256, screenplay passage IDs, image candidates and exact Act/Sequence/Block/Mini-Block/Shot addresses. A shot preview, cropped artwork, Human Approved, PPF Saved, PPF Locked, and Media Bytes Verified are distinct. Do not copy Shot 01's verified Save/Lock status to Shots 02 or 03. - **Compare and Approve:** Discover current fal image-to-video endpoints, schema, price and source image input. Prefer a published eligible connected endpoint; do not silently choose retired or deprecated endpoints or a different model after approval. Get explicit creator approval for the **specific number of jobs**, exact shot sequence, images, model, settings and estimated total spend. Approval for one clip does not cover additional shots. A rate × duration estimate is not a guaranteed invoice. - **Submit Shot Batch:** After exact approval and byte-accessible first frames, upload separate real image files through `upload_attachment` for actual chat attachments, or `upload_file` as permitted. Never send a local path as if it were a remote model URL. Use `submit_jobs` for 2–8 genuinely independent jobs, one unique source still and prompt per shot and one stable `submission_key` per intended job. Preserve request IDs, original endpoint, indexes and return handles; a retry of an uncertain request may duplicate charges. For progress, use `wait_for_jobs` on the original handles, not a second generation. Render the completed group with `show_media_batch`. A subset failure is reported per shot; do not silently create substitutes or another paid run. - **Save and Review:** With the user's authorized production workflow, `save_job_outputs` records the original completed media in fal; independently confirm via `get_asset`. Do not equate fal library persistence with permanent ChatGPT Library or PPF attachment, or CDN URL accessibility in a different runtime. Original videos remain 30 fps when that is what the result reports; nothing about playing them proves an offline 24 fps conform. Link each exact source shot and mark its creative review pending until the author approves. - **Continue to Editor:** When the ChatGPT execution runtime has real MP4 bytes and FFmpeg/ffprobe, run the non-spending batch conform helper. Deliver and optionally persist actual conformed MP4 files, combined MP4 and receipt after a complete full-decode audit. If media transport is blocked or no bytes are present, stop at `completed-provider-video / pending-intake`, preserve the exact jobs and provide the existing fal-player MP4 links; never regenerate to overcome an import barrier. A source-pinned sidecar does not prove a native PPF write or authenticated editor connection. ## Editorial order and safe batch assembly A regular shot is 3 seconds × 24 fps = **72 frames**. Three consecutive shots occupy frames 0–71, 72–143, 144–215, or 00:00–00:09. Original fal source footage may be at 30 fps / 90 frames per three-second clip; retain those originals and conform copies separately. The source PPF still determines the screenplay and position identity. Source media for this one sequence is never bundled in plugin code or public GitHub. For hosts that have actual local MP4 bytes, use the read-only `scripts/assemble-shot-batch.py` with a private v1 batch manifest (see `references/batch-handoff-contract.md`): `python3 scripts/assemble-shot-batch.py --project /private/story.ppf.json --manifest /private/shot-batch.json --video-root /private/fal-originals --out /private/verified-three-shot-draft` It refuses stale source ID/revision/SHA, nonconsecutive shots, unverifiable source passage mapping, unsafe media paths and URLs, media byte mismatches, short or undecodable MP4s, mixed dimensions, output overwrite and unverified final frame counts. Once real originals are present it decodes them, creates 72-frame/24fps individual silent H.264 conform files, assembles one 24fps silent MP4, full-decodes and hashes every result, and writes `draft-receipt.json`. It does **not** request fal credits or access the network. It never mutates the PPF, marks native Save/Lock, or asserts that an authenticated editor or Windows host has been reached. For the Three-Shot reference, a conform receipt is a `verified-draft-sidecar`, not `native-imported-draft` or creative approval. The Windows v0.8.31 editor cannot yet render multi-shot timelines, so keep its status *not-connected / multi-shot import pending* unless later validated. Individual verified clips may be reviewed and registered via separately supported editor intake. Export the combined MP4 as an editable source-linked draft, not an approved picture lock. Do not tell users they must install Windows merely to watch fal's native player. Run `python3 scripts/test-assemble-shot-batch.py` for offline synthetic coverage. A passing test does not establish live fal-to-ChatGPT byte transport or editor acceptance. For one completed clip use `../plotpickle-fal-production/SKILL.md`; for creative timeline editing use `../plotpickle-editor/SKILL.md`. Preserve the approved Skin V1 shell and do not introduce an unapproved Production Handoff layout.