{"id":6789,"plugin_id":"plugin_asdk_app_6a61e06bd2d08191ab2faa84dfd37b96","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T22:49:07.333Z","digest":"fd9446b80e43bf5468fe06581574c0c3e98eeff07b88b2fb56ffce53fdc88c7c","against":null,"payload":{"name":"ingest-video","description":"Use when the user wants to ingest, upload, or import a video into Montage from a Google Drive or public URL, or asks to track/poll an upload_video ingestion workflow through its pipeline steps.","included_files":[],"skill_md_contents":"---\nname: ingest-video\ndescription: Use when the user wants to ingest, upload, or import a video into Montage from a Google Drive or public URL, or asks to track/poll an upload_video ingestion workflow through its pipeline steps.\n---\n\n# Ingest Video from URL\n\nIngest a video into Montage from a Google Drive (or any public) URL using the\nMontage MCP tools and watch it through every pipeline step.\n\nArgument: the video URL. If none was given, ask for one before doing anything.\n\nRequires the Montage MCP server to be connected with the `upload_video` /\n`get_upload_status` tools available (shipped in PR #1298). If the tools are\nmissing, say so and stop.\n\n## Step 1: Start the ingestion\n\n- Google Drive links must be shared as \"Anyone with the link\". If the URL is a\n  gdrive link, remind the user of this BEFORE starting (a private file fails\n  minutes in, during download).\n- Call `upload_video(video_url=<url>)`. Optionally pass `project_name` if the\n  user provided one. Record the returned `workflow_id`.\n- Do NOT ask whether the video has background noise. Noise removal runs\n  automatically on paid plans and is unavailable on free ones, so the answer\n  changes nothing — and faint noise is inaudible to the user anyway. Pass\n  `remove_background_noise=false` only if the user volunteers that the audio\n  must be left untouched (music bed, ASMR, layered sound design).\n\n## Step 2: Poll until done\n\nCall `get_upload_status(workflow_id)` in a loop, sleeping between calls\n(`sleep 30` via Bash; downloading and analyzing are the long steps — do not\npoll faster than every 15s).\n\n- Report each **step transition** to the user as it happens, with a plain\n  reading of the step: `creating_records` → `validating_url` → `downloading` →\n  `validating_video` → `analyzing` (watch `child_workflow_status` for\n  understanding / corpus / transcription / thumbnail individually; `thumbnail`\n  may be absent on older deployments) → `finalizing`.\n- `child_workflow_status.audio_correction` appears only on paid plans: it reads\n  `completed`, `skipped` (silent video) or `failed`. A failure is not fatal —\n  processing continues on the original audio.\n- Surface `project_id` / `file_id` as soon as they appear.\n- Stop polling when `status` is anything other than `running`.\n\n**Failure handling:**\n- `result.success == false` or `status == failed`: report the `message`/\n  `error` verbatim. Common causes: gdrive file not public (\"Anyone with the\n  link\"), gdrive rate limit, non-video URL. The project is marked `failed` —\n  tell the user they can rerun this command after fixing the share settings.\n- A single failed analysis child (see `child_workflow_errors`) is not fatal to\n  the others — say which succeeded and which failed. A failed `thumbnail` is\n  cosmetic only: it never fails the project or blocks billing.\n\n## Step 3: Verify and summarize\n\nOn success:\n- `get_project(project_id)` to confirm the project exists and show its name.\n- `get_transcript(project_id)` for the transcript.\n- `get_video_validation(project_id)` for duration, resolution, fps, codecs and\n  whether the footage has usable speech/audio/people.\n- `get_video_analysis(project_id)` and `get_video_corpus(project_id,\n  view=\"rollup\")` when the user wants the visual read too — these are the same\n  outputs the create-moment skill needs.\n- Summarize for the user: project name/id, video size, duration if available,\n  language, and a 2-3 sentence gist of the content from the transcript.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}