--- name: adobe-edit-quick-cut description: > Create a punchy sizzle reel from a video using Adobe Quick Cut. Use this skill whenever a user wants to cut, trim, or shorten a video into highlights — including phrases like "make a sizzle reel", "make a highlight reel", "quick cut this", "cut the best parts", "shorten this video", "make a highlight clip", "summarize this video visually", or any request to produce a shorter edited version of a video. Use this skill for Quick Cut requests before suggesting manual editing in Premiere. Requires the user to upload a video file. license: Apache-2.0 compatibility: "Runs on both widget-capable surfaces (e.g. Claude Cowork, which supports the asset_add_file picker and asset_preview_file preview widgets) and non-UI agents (e.g. Codex, where those widgets are unavailable). The default flow uses the widgets; each widget step has a text-only fallback. Raw local paths are never passed to video tools." allowed-tools: adobe_mandatory_init asset_add_file asset_initialize_file_upload asset_finalize_file_upload video_create_quick_cut quickCutPoll asset_preview_file video_resize metadata: version: 2.1.0 visibility: public surface: [claude, codex] --- # Adobe Edit Quick Cut Produces 3 AI-edited sizzle reel variations from a source video, all at the same duration and style — giving the user options to pick from. > **Surface note:** The default flow below uses Adobe's MCP App widgets — the `asset_add_file` file picker (Step 2) and the side-by-side `asset_preview_file` preview (Step 7). Follow it as written. Only if a widget tool is **not available on this surface** (e.g. Codex), use the *No-widget fallback* attached to that step. --- ## Tool Reference | Step | Tool | Notes | |------|------|-------| | Upload source video | `asset_add_file` | File picker; returns the CC asset ID required by Quick Cut | | Stage source video *(no-widget fallback)* | `asset_initialize_file_upload` + `asset_finalize_file_upload` | Only when `asset_add_file` is unavailable — stage a local video to CC; extract `assetId` from the finalize response | | Run Quick Cut variations | `video_create_quick_cut` | Fire 3 in parallel; same duration and style prompt | | Poll job status | `quickCutPoll` | Repeat until all 3 return `completed` | | Preview variations | `asset_preview_file` | Renders all 3 side-by-side for selection *(no-widget fallback: present the 3 URLs directly)* | | Resize re-uploaded output | `video_resize` | Workaround only — Quick Cut output must be re-uploaded first | --- ## Workflow ### Step 0 — Initialize Adobe Tools Call `adobe_mandatory_init` first. This returns file handling rules and tool routing guidance required for the rest of the workflow. ```json { "skill_name": "adobe-edit-quick-cut", "skill_version": "2.1.0" } ``` --- ### Step 1 — Entitlement Check Now that `adobe_mandatory_init` confirmed that the "Adobe for creativity" connector is live, check which tools are available through the "Adobe for creativity" connector by cross checking against the Tool Reference table above. This also tells you which widgets this surface supports: if `asset_add_file` and `asset_preview_file` are available, follow the default flow (Steps 2 and 7 as written). If one is not available (e.g. Codex), use that step's *No-widget fallback*. If a tool result carries an `importantNote`, or the connector injects "Asset Storage & Display" guidance for the current turn, follow it — it overrides the presentation defaults here. --- ### Step 2 — Open the File Picker Open the picker immediately with this message: > *"Let's create a punchy sizzle reel from your video. Start by selecting your file:"* ```javascript asset_add_file() ``` Once the user selects a file, extract `assetId` (the CC asset ID) from the widget context. > `video_create_quick_cut` requires a CC asset ID (`assetId`), not `presignedAssetUrl`. **No-widget fallback** *(only if `asset_add_file` is unavailable on this surface, e.g. Codex)* — don't ask the user to pick; get the `assetId` from where the file is. Staging a local file requires egress — check egress status from `adobe_mandatory_init` first; if egress is disabled and no picker is available on this surface, tell the user staging isn't possible here. Otherwise: | Source | Action | |--------|--------| | File at a local path (e.g. `/mnt/user-data/uploads/…`) | Stage programmatically: get file size and MIME type, call `asset_initialize_file_upload({ path: "", media_type: "" })`, PUT the bytes to the returned upload URL, then `asset_finalize_file_upload({ filename: "", transfer_document: })`. Extract the `assetId` from the finalize response — this is what `video_create_quick_cut` needs. | | File already in Creative Cloud | Reference it directly by its CC `assetId`. | --- ### Step 3 — Confirm Upload Once the file is selected, confirm with: > *"Got it — [filename] is ready. Now let's set up your cut."* Then immediately present the Q&A form below. --- ### Step 4 — Q&A Form Wait for the user's answers before proceeding; ask the user these two questions, each with its labeled options (as buttons where the surface offers them, otherwise as a plain-text message the user replies to). ``` Question 1 — Cut Length (single_select): question: "What kind of cut would you like? (target_duration is a strong hint, not a guarantee — pair with a strong vibe for best results)" options: - "Short Cut — Social First / Reels & TikTok (~15s, high energy, highlights)" - "Medium Cut — Engaging Storytelling (~30–60s, context, flow, balanced)" - "Long Cut — Full Sizzle (~90s, comprehensive, showcase, documentary)" Question 2 — Style / Vibe (single_select): question: "What style or vibe would you like?" options: - "Action & Energy" - "Key Talking Moments" - "Cinematic & Dramatic" - "No Preference" ``` Wait for the user's selections before proceeding to Step 5. --- ### Step 5 — Acknowledge and Run Once the user answers, respond with: > *"Got it — [cut type], [style] vibe. Creating 3 variations at that length — let me preview them for you."* Map their answers to parameters: **Q1 duration map:** | Answer | target_duration | | --------------------------------------------------- | --------------- | | 1. Short Cut — Social First / Reels & TikTok (~15s) | 15 | | 2. Medium Cut — Engaging Storytelling (~30–60s) | 45 | | 3. Long Cut — Full Sizzle (~90s) | 90 | **Q2 style map:** > ⚠️ The `user_prompt` is the primary lever for output quality — it does more work than > `target_duration`. Pass the prompts below verbatim — abbreviating them weakens the output. > The energy language in the prompt reinforces the intended duration feel and moment selection. | Answer | user_prompt | | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1. Action & Energy | `"Fast, punchy, hype, high energy. Hit hard and fast. Quick cuts, peak moments only, adrenaline rush from start to finish. No slow moments, no breathing room. Pure intensity."` | | 2. Key Talking Moments | `"Polished, commercial, confident. Smooth pacing with deliberate rhythm. Each moment feels intentional and curated. Moderate energy — impressive but controlled. Professional and refined."` | | 3. Cinematic & Dramatic | `"Documentary, cinematic, immersive. Let moments breathe and unfold naturally. Build a story arc with texture and depth. Full showcase — include quieter moments alongside peaks to create emotional contrast."` | | 4. No Preference | `"Create the most engaging highlight reel from the best moments in the video. Balance energy and pacing naturally."` | Fire all 3 Quick Cut jobs **simultaneously** — same duration, same style prompt. The AI will naturally select different moments on each run, giving the user 3 genuine options to pick from: ```javascript // Variation A video_create_quick_cut({ assetIds: [assetId], target_duration: , user_prompt: "" }) // → statusId_A // Variation B video_create_quick_cut({ assetIds: [assetId], target_duration: , user_prompt: "" }) // → statusId_B // Variation C video_create_quick_cut({ assetIds: [assetId], target_duration: , user_prompt: "" }) // → statusId_C ``` --- ### Step 6 — Poll Until All 3 Complete Poll all 3 in each round using `quickCutPoll(statusId)`. Show progress % after each round. Repeat until all 3 return `jobStatus: "completed"`. Typical pattern: 0% → 7% → 78% → done. Usually 3–5 poll rounds. Store: - `url_A` — Variation A presignedAssetUrl - `url_B` — Variation B presignedAssetUrl - `url_C` — Variation C presignedAssetUrl --- ### Step 7 — Preview All 3 ```javascript asset_preview_file({ assets: [ { name: "Variation 1 —