[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6AC3SJ5W2AM7VA2RFR4ZJFE":3,"skill-same:01M6AC3SJ5W2AM7VA2RFR4ZJFE":82},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":6,"updatedAt":52,"install":53,"resources":66},"01M6AC3SJ5W2AM7VA2RFR4ZJFE","adobe-edit-quick-cut",null,"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.","openai\u002Fplugins","openai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F14957082?v=4","01M6AC29YGCR4S2NTJFV0G8B81","OpenAI","01M6AC38CEN570NMR96RNGD2NK",7942,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Fblob\u002Fmain\u002Fplugins\u002Fadobe\u002Fskills\u002Fadobe-edit-quick-cut\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31],"adobe edit quick cut","summarize","codex","init","create","2026-11-10 10:12:30",false,"---\nname: adobe-edit-quick-cut\ndescription: >\n  Create a punchy sizzle reel from a video using Adobe Quick Cut. Use this skill whenever a user\n  wants to cut, trim, or shorten a video into highlights — including phrases like \"make a sizzle\n  reel\", \"make a highlight reel\", \"quick cut this\", \"cut the best parts\", \"shorten this video\",\n  \"make a highlight clip\", \"summarize this video visually\", or any request to produce a shorter\n  edited version of a video. Use this skill for Quick Cut requests before suggesting manual\n  editing in Premiere. Requires the user to upload a video file.\nlicense: Apache-2.0\ncompatibility: \"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.\"\nallowed-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\nmetadata:\n  version: 2.1.0\n  visibility: public\n  surface: [claude, codex]\n---\n\n# Adobe Edit Quick Cut\n\nProduces 3 AI-edited sizzle reel variations from a source video, all at the same duration and\nstyle — giving the user options to pick from.\n\n> **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.\n\n---\n\n## Tool Reference\n\n| Step | Tool | Notes |\n|------|------|-------|\n| Upload source video | `asset_add_file` | File picker; returns the CC asset ID required by Quick Cut |\n| 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 |\n| Run Quick Cut variations | `video_create_quick_cut` | Fire 3 in parallel; same duration and style prompt |\n| Poll job status | `quickCutPoll` | Repeat until all 3 return `completed` |\n| Preview variations | `asset_preview_file` | Renders all 3 side-by-side for selection *(no-widget fallback: present the 3 URLs directly)* |\n| Resize re-uploaded output | `video_resize` | Workaround only — Quick Cut output must be re-uploaded first |\n\n---\n\n## Workflow\n\n### Step 0 — Initialize Adobe Tools\n\nCall `adobe_mandatory_init` first. This returns file handling rules and tool routing guidance required for the rest of the workflow.\n\n```json\n{ \"skill_name\": \"adobe-edit-quick-cut\", \"skill_version\": \"2.1.0\" }\n```\n\n---\n\n### Step 1 — Entitlement Check\n\nNow 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.\n\nThis 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.\n\n---\n\n### Step 2 — Open the File Picker\n\nOpen the picker immediately with this message:\n\n> *\"Let's create a punchy sizzle reel from your video. Start by selecting your file:\"*\n\n```javascript\nasset_add_file()\n```\n\nOnce the user selects a file, extract `assetId` (the CC asset ID) from the widget context.\n\n> `video_create_quick_cut` requires a CC asset ID (`assetId`), not `presignedAssetUrl`.\n\n**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:\n\n| Source | Action |\n|--------|--------|\n| File at a local path (e.g. `\u002Fmnt\u002Fuser-data\u002Fuploads\u002F…`) | Stage programmatically: get file size and MIME type, call `asset_initialize_file_upload({ path: \"\u003Cfilename>\", media_type: \"\u003Cmime>\" })`, PUT the bytes to the returned upload URL, then `asset_finalize_file_upload({ filename: \"\u003Cfilename>\", transfer_document: \u003Cfrom initialize response> })`. Extract the `assetId` from the finalize response — this is what `video_create_quick_cut` needs. |\n| File already in Creative Cloud | Reference it directly by its CC `assetId`. |\n\n---\n\n### Step 3 — Confirm Upload\n\nOnce the file is selected, confirm with:\n\n> *\"Got it — [filename] is ready. Now let's set up your cut.\"*\n\nThen immediately present the Q&A form below.\n\n---\n\n### Step 4 — Q&A Form (via AskUserQuestion)\n\nWait for the user's answers before proceeding; present the questions via `AskUserQuestion` (not plain text) so the user gets tappable buttons.\n\n> **No-widget fallback** *(only if `AskUserQuestion` is unavailable, e.g. Codex)* — ask the same labeled options as a plain-text message and wait for the user's typed reply. The option set is identical.\n\n```javascript\nAskUserQuestion({\n  questions: [\n    {\n      header: \"Cut Length\",\n      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)\",\n      multiSelect: false,\n      options: [\n        { label: \"Short Cut — Social First \u002F Reels & TikTok (~15s, high energy, highlights)\" },\n        { label: \"Medium Cut — Engaging Storytelling (~30–60s, context, flow, balanced)\" },\n        { label: \"Long Cut — Full Sizzle (~90s, comprehensive, showcase, documentary)\" }\n      ]\n    },\n    {\n      header: \"Style \u002F Vibe\",\n      question: \"What style or vibe would you like?\",\n      multiSelect: false,\n      options: [\n        { label: \"Action & Energy\" },\n        { label: \"Key Talking Moments\" },\n        { label: \"Cinematic & Dramatic\" },\n        { label: \"No Preference\" }\n      ]\n    }\n  ]\n})\n```\n\nWait for the user's selections before proceeding to Step 5.\n\n---\n\n### Step 5 — Acknowledge and Run\n\nOnce the user answers, respond with:\n\n> *\"Got it — [cut type], [style] vibe. Creating 3 variations at that length — let me preview them for you.\"*\n\nMap their answers to parameters:\n\n**Q1 duration map:**\n| Answer                                              | target_duration |\n| --------------------------------------------------- | --------------- |\n| 1. Short Cut — Social First \u002F Reels & TikTok (~15s) | 15              |\n| 2. Medium Cut — Engaging Storytelling (~30–60s)     | 45              |\n| 3. Long Cut — Full Sizzle (~90s)                    | 90              |\n\n**Q2 style map:**\n\n> ⚠️ The `user_prompt` is the primary lever for output quality — it does more work than\n> `target_duration`. Pass the prompts below verbatim — abbreviating them weakens the output.\n> The energy language in the prompt reinforces the intended duration feel and moment selection.\n\n| Answer                  | user_prompt                                                                                                                                                                                                      |\n| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| 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.\"`                                 |\n| 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.\"`                     |\n| 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.\"` |\n| 4. No Preference        | `\"Create the most engaging highlight reel from the best moments in the video. Balance energy and pacing naturally.\"`                                                                                             |\n\nFire all 3 Quick Cut jobs **simultaneously** — same duration, same style prompt. The AI will\nnaturally select different moments on each run, giving the user 3 genuine options to pick from:\n\n```javascript\n\u002F\u002F Variation A\nvideo_create_quick_cut({\n  assetIds: [assetId],\n  target_duration: \u003Cmapped_seconds>,\n  user_prompt: \"\u003Cmapped style prompt>\"\n}) \u002F\u002F → statusId_A\n\n\u002F\u002F Variation B\nvideo_create_quick_cut({\n  assetIds: [assetId],\n  target_duration: \u003Cmapped_seconds>,\n  user_prompt: \"\u003Cmapped style prompt>\"\n}) \u002F\u002F → statusId_B\n\n\u002F\u002F Variation C\nvideo_create_quick_cut({\n  assetIds: [assetId],\n  target_duration: \u003Cmapped_seconds>,\n  user_prompt: \"\u003Cmapped style prompt>\"\n}) \u002F\u002F → statusId_C\n```\n\n---\n\n### Step 6 — Poll Until All 3 Complete\n\nPoll all 3 in each round using `quickCutPoll(statusId)`. Show progress % after each round.\nRepeat until all 3 return `jobStatus: \"completed\"`.\n\nTypical pattern: 0% → 7% → 78% → done. Usually 3–5 poll rounds.\n\nStore:\n- `url_A` — Variation A presignedAssetUrl\n- `url_B` — Variation B presignedAssetUrl\n- `url_C` — Variation C presignedAssetUrl\n\n---\n\n### Step 7 — Preview All 3\n\n```javascript\nasset_preview_file({\n  assets: [\n    { name: \"Variation 1 — \u003Ccut_type> \u003Cstyle>.mp4\", presignedAssetUrl: url_A, source: \"acp\" },\n    { name: \"Variation 2 — \u003Ccut_type> \u003Cstyle>.mp4\", presignedAssetUrl: url_B, source: \"acp\" },\n    { name: \"Variation 3 — \u003Ccut_type> \u003Cstyle>.mp4\", presignedAssetUrl: url_C, source: \"acp\" }\n  ]\n})\n```\n\n**No-widget fallback** *(only if `asset_preview_file` is unavailable on this surface, e.g. Codex)* — present all 3 variation URLs directly in the message, labeled by variation:\n\n```\nVariation 1 — \u003Ccut_type> \u003Cstyle>.mp4 → \u003Curl_A>\nVariation 2 — \u003Ccut_type> \u003Cstyle>.mp4 → \u003Curl_B>\nVariation 3 — \u003Ccut_type> \u003Cstyle>.mp4 → \u003Curl_C>\n```\n\nUI clients that render media URLs inline will show previews automatically. In Codex or other non-UI agents, download each to the workspace (`curl -L -o variation_1.mp4 \"\u003Curl_A>\"`, etc.) and reference those local paths instead.\n\n---\n\n### Step 8 — Deliver Summary + Download Prompt\n\nAfter preview, present:\n\n```\n✅ 3 variations ready — same length, different moment selection. Pick your favorite!\n\n| Variation | Cut Type | Style   | Target | Status |\n| --------- | -------- | ------- | ------ | ------ |\n| 1         | \u003Ctype>   | \u003Cstyle> | ~\u003CXs>  | ✅      |\n| 2         | \u003Ctype>   | \u003Cstyle> | ~\u003CXs>  | ✅      |\n| 3         | \u003Ctype>   | \u003Cstyle> | ~\u003CXs>  | ✅      |\n```\n\n> Note: actual durations may vary — Quick Cut selects the best moments rather than cutting to\n> an exact second. The prompt vibe (e.g. \"no breathing room\") reinforces the intended length\n> feel more than the target_duration parameter alone.\n\nThen prompt:\n\n> *\"Which variation do you want to download, or would you like all 3? You can also rerun with a different style or cut type.\"*\n\nThe videos are available for download directly from the preview above (or from the links above on a no-widget surface).\n\n---\n\n## ⚠️ Known Gap — Output Cannot Feed Downstream Video Tools\n\n`video_create_quick_cut` returns a temporary presigned download URL, not a CC-stored asset ID.\nTools like `video_resize` and `media_enhance_speech` require a CC asset ID as input.\n\n**You cannot chain Quick Cut → Resize or Quick Cut → Enhance Speech directly.**\n\n**Workaround — if user wants to resize a Quick Cut output:**\n1. Tell the user: *\"Quick Cut outputs can't be passed directly to the resize tool — you'll need to download your preferred cut first, then re-upload it and I'll resize from there.\"*\n2. Let them download from the preview.\n3. Re-ingest the downloaded file exactly as in Step 2 (`asset_add_file()`, or the no-widget staging fallback).\n4. Once re-uploaded, run `video_resize` on the fresh `assetId` with their target dimensions.\n\nWhen the user asks to resize or enhance a Quick Cut output, surface the limitation proactively — the chain is known to fail.\n\n---\n\n## What Quick Cut Does NOT Support\n\n- Content-aware cuts based on speech (\"remove the parts where they repeat themselves\")\n- Trimming to specific timestamps (\"cut from 0:30 to 1:15\")\n- Semantic understanding of dialogue\n\nFor these, recommend a manual video-editing workflow.\n\n---\n\n## Error Handling\n\n- **`video_create_quick_cut` returns 403 (entitlement)**: Retrying does not help for a 403\n  entitlement — stop and surface the plan requirement. Respond with:\n  > *\"I was unable to create your quick cut.*\n  >\n  > ***Why:** Adobe Quick Cut isn't available on your current Adobe plan.*\n  >\n  > ***Options:**\n  > - Upgrade your Adobe plan to one that includes Quick Cut.*\n  > - Manually trim your video using Adobe Premiere Rush or Premiere Pro.*\n  >\n  > *Let me know how you'd like to proceed.\"*\n\n- **Any tool call returns 401 (not authenticated)**: Ask the user to re-authenticate via Adobe\n  OAuth and retry.\n\n- **`StoryBuilderNoARoll`**: The most common error. Means Quick Cut detected no A-roll (talking\n  head \u002F primary camera footage) in the clip — only B-roll. The tool requires at least some\n  dialogue or narration to anchor the story structure. Respond with:\n  > *\"This video appears to be B-roll only — scenery, action, or product shots without anyone\n  > speaking to camera. Quick Cut needs some talking-head footage to build a story around. Try\n  > uploading a video that includes someone speaking on camera, or a mix of interview + B-roll.*\n  >\n  > *If you only have B-roll, Adobe Premiere Rush or Adobe Express let you manually assemble a\n  > highlight reel without requiring dialogue.\"*\n  Retries repeat the same error regardless of duration\u002Fstyle; no workaround exists.\n\n- **Job fails with any other error on first attempt**: Retry once with the same parameters. If\n  it fails again, report and suggest re-uploading the source video.\n\n- **Stuck at same % for 5+ poll rounds**: Inform user, suggest re-uploading the source video.\n\n- **User uploads an image by mistake**: Detect from `mediaType` — if not `video\u002F*`, say so\n  and re-open the picker (or re-run the no-widget staging fallback).\n\n- **One of the 3 variations fails (but not all)**: Preview and deliver the successful ones, note\n  the failure clearly. If all 3 fail with `StoryBuilderNoARoll`, apply the B-roll error response\n  above.\n\n---\n\n## Constraints\n\n- Never pass a raw local filesystem path to `video_create_quick_cut` or any other video tool. Local files must reach Creative Cloud first — selected via the `asset_add_file` picker, or (no-widget fallback) staged via `asset_initialize_file_upload` → PUT → `asset_finalize_file_upload`; only the resulting `assetId` is valid.\n- `video_create_quick_cut` requires `assetId` (CC asset ID), not `presignedAssetUrl`.\n","# Adobe Edit Quick Cut\n\nProduces 3 AI-edited sizzle reel variations from a source video, all at the same duration and\nstyle — giving the user options to pick from.\n\n> **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.\n\n---\n\n## Tool Reference\n\n| Step | Tool | Notes |\n|------|------|-------|\n| Upload source video | `asset_add_file` | File picker; returns the CC asset ID required by Quick Cut |\n| 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 |\n| Run Quick Cut variations | `video_create_quick_cut` | Fire 3 in parallel; same duration and style prompt |\n| Poll job status | `quickCutPoll` | Repeat until all 3 return `completed` |\n| Preview variations | `asset_preview_file` | Renders all 3 side-by-side for selection *(no-widget fallback: present the 3 URLs directly)* |\n| Resize re-uploaded output | `video_resize` | Workaround only — Quick Cut output must be re-uploaded first |\n\n---\n\n## Workflow\n\n### Step 0 — Initialize Adobe Tools\n\nCall `adobe_mandatory_init` first. This returns file handling rules and tool routing guidance required for the rest of the workflow.\n\n```json\n{ \"skill_name\": \"adobe-edit-quick-cut\", \"skill_version\": \"2.1.0\" }\n```\n\n---\n\n### Step 1 — Entitlement Check\n\nNow 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.\n\nThis 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.\n\n---\n\n### Step 2 — Open the File Picker\n\nOpen the picker immediately with this message:\n\n> *\"Let's create a punchy sizzle reel from your video. Start by selecting your file:\"*\n\n```javascript\nasset_add_file()\n```\n\nOnce the user selects a file, extract `assetId` (the CC asset ID) from the widget context.\n\n> `video_create_quick_cut` requires a CC asset ID (`assetId`), not `presignedAssetUrl`.\n\n**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:\n\n| Source | Action |\n|--------|--------|\n| File at a local path (e.g. `\u002Fmnt\u002Fuser-data\u002Fuploads\u002F…`) | Stage programmatically: get file size and MIME type, call `asset_initialize_file_upload({ path: \"\u003Cfilename>\", media_type: \"\u003Cmime>\" })`, PUT the bytes to the returned upload URL, then `asset_finalize_file_upload({ filename: \"\u003Cfilename>\", transfer_document: \u003Cfrom initialize response> })`. Extract the `assetId` from the finalize response — this is what `video_create_quick_cut` needs. |\n| File already in Creative Cloud | Reference it directly by its CC `assetId`. |\n\n---\n\n### Step 3 — Confirm Upload\n\nOnce the file is selected, confirm with:\n\n> *\"Got it — [filename] is ready. Now let's set up your cut.\"*\n\nThen immediately present the Q&A form below.\n\n---\n\n### Step 4 — Q&A Form (via AskUserQuestion)\n\nWait for the user's answers before proceeding; present the questions via `AskUserQuestion` (not plain text) so the user gets tappable buttons.\n\n> **No-widget fallback** *(only if `AskUserQuestion` is unavailable, e.g. Codex)* — ask the same labeled options as a plain-text message and wait for the user's typed reply. The option set is identical.\n\n```javascript\nAskUserQuestion({\n  questions: [\n    {\n      header: \"Cut Length\",\n      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)\",\n      multiSelect: false,\n      options: [\n        { label: \"Short Cut — Social First \u002F Reels & TikTok (~15s, high energy, highlights)\" },\n        { label: \"Medium Cut — Engaging Storytelling (~30–60s, context, flow, balanced)\" },\n        { label: \"Long Cut — Full Sizzle (~90s, comprehensive, showcase, documentary)\" }\n      ]\n    },\n    {\n      header: \"Style \u002F Vibe\",\n      question: \"What style or vibe would you like?\",\n      multiSelect: false,\n      options: [\n        { label: \"Action & Energy\" },\n        { label: \"Key Talking Moments\" },\n        { label: \"Cinematic & Dramatic\" },\n        { label: \"No Preference\" }\n      ]\n    }\n  ]\n})\n```\n\nWait for the user's selections before proceeding to Step 5.\n\n---\n\n### Step 5 — Acknowledge and Run\n\nOnce the user answers, respond with:\n\n> *\"Got it — [cut type], [style] vibe. Creating 3 variations at that length — let me preview them for you.\"*\n\nMap their answers to parameters:\n\n**Q1 duration map:**\n| Answer                                              | target_duration |\n| --------------------------------------------------- | --------------- |\n| 1. Short Cut — Social First \u002F Reels & TikTok (~15s) | 15              |\n| 2. Medium Cut — Engaging Storytelling (~30–60s)     | 45              |\n| 3. Long Cut — Full Sizzle (~90s)                    | 90              |\n\n**Q2 style map:**\n\n> ⚠️ The `user_prompt` is the primary lever for output quality — it does more work than\n> `target_duration`. Pass the prompts below verbatim — abbreviating them weakens the output.\n> The energy language in the prompt reinforces the intended duration feel and moment selection.\n\n| Answer                  | user_prompt                                                                                                                                                                                                      |\n| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| 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.\"`                                 |\n| 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.\"`                     |\n| 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.\"` |\n| 4. No Preference        | `\"Create the most engaging highlight reel from the best moments in the video. Balance energy and pacing naturally.\"`                                                                                             |\n\nFire all 3 Quick Cut jobs **simultaneously** — same duration, same style prompt. The AI will\nnaturally select different moments on each run, giving the user 3 genuine options to pick from:\n\n```javascript\n\u002F\u002F Variation A\nvideo_create_quick_cut({\n  assetIds: [assetId],\n  target_duration: \u003Cmapped_seconds>,\n  user_prompt: \"\u003Cmapped style prompt>\"\n}) \u002F\u002F → statusId_A\n\n\u002F\u002F Variation B\nvideo_create_quick_cut({\n  assetIds: [assetId],\n  target_duration: \u003Cmapped_seconds>,\n  user_prompt: \"\u003Cmapped style prompt>\"\n}) \u002F\u002F → statusId_B\n\n\u002F\u002F Variation C\nvideo_create_quick_cut({\n  assetIds: [assetId],\n  target_duration: \u003Cmapped_seconds>,\n  user_prompt: \"\u003Cmapped style prompt>\"\n}) \u002F\u002F → statusId_C\n```\n\n---\n\n### Step 6 — Poll Until All 3 Complete\n\nPoll all 3 in each round using `quickCutPoll(statusId)`. Show progress % after each round.\nRepeat until all 3 return `jobStatus: \"completed\"`.\n\nTypical pattern: 0% → 7% → 78% → done. Usually 3–5 poll rounds.\n\nStore:\n- `url_A` — Variation A presignedAssetUrl\n- `url_B` — Variation B presignedAssetUrl\n- `url_C` — Variation C presignedAssetUrl\n\n---\n\n### Step 7 — Preview All 3\n\n```javascript\nasset_preview_file({\n  assets: [\n    { name: \"Variation 1 — \u003Ccut_type> \u003Cstyle>.mp4\", presignedAssetUrl: url_A, source: \"acp\" },\n    { name: \"Variation 2 — \u003Ccut_type> \u003Cstyle>.mp4\", presignedAssetUrl: url_B, source: \"acp\" },\n    { name: \"Variation 3 — \u003Ccut_type> \u003Cstyle>.mp4\", presignedAssetUrl: url_C, source: \"acp\" }\n  ]\n})\n```\n\n**No-widget fallback** *(only if `asset_preview_file` is unavailable on this surface, e.g. Codex)* — present all 3 variation URLs directly in the message, labeled by variation:\n\n```\nVariation 1 — \u003Ccut_type> \u003Cstyle>.mp4 → \u003Curl_A>\nVariation 2 — \u003Ccut_type> \u003Cstyle>.mp4 → \u003Curl_B>\nVariation 3 — \u003Ccut_type> \u003Cstyle>.mp4 → \u003Curl_C>\n```\n\nUI clients that render media URLs inline will show previews automatically. In Codex or other non-UI agents, download each to the workspace (`curl -L -o variation_1.mp4 \"\u003Curl_A>\"`, etc.) and reference those local paths instead.\n\n---\n\n### Step 8 — Deliver Summary + Download Prompt\n\nAfter preview, present:\n\n```\n✅ 3 variations ready — same length, different moment selection. Pick your favorite!\n\n| Variation | Cut Type | Style   | Target | Status |\n| --------- | -------- | ------- | ------ | ------ |\n| 1         | \u003Ctype>   | \u003Cstyle> | ~\u003CXs>  | ✅      |\n| 2         | \u003Ctype>   | \u003Cstyle> | ~\u003CXs>  | ✅      |\n| 3         | \u003Ctype>   | \u003Cstyle> | ~\u003CXs>  | ✅      |\n```\n\n> Note: actual durations may vary — Quick Cut selects the best moments rather than cutting to\n> an exact second. The prompt vibe (e.g. \"no breathing room\") reinforces the intended length\n> feel more than the target_duration parameter alone.\n\nThen prompt:\n\n> *\"Which variation do you want to download, or would you like all 3? You can also rerun with a different style or cut type.\"*\n\nThe videos are available for download directly from the preview above (or from the links above on a no-widget surface).\n\n---\n\n## ⚠️ Known Gap — Output Cannot Feed Downstream Video Tools\n\n`video_create_quick_cut` returns a temporary presigned download URL, not a CC-stored asset ID.\nTools like `video_resize` and `media_enhance_speech` require a CC asset ID as input.\n\n**You cannot chain Quick Cut → Resize or Quick Cut → Enhance Speech directly.**\n\n**Workaround — if user wants to resize a Quick Cut output:**\n1. Tell the user: *\"Quick Cut outputs can't be passed directly to the resize tool — you'll need to download your preferred cut first, then re-upload it and I'll resize from there.\"*\n2. Let them download from the preview.\n3. Re-ingest the downloaded file exactly as in Step 2 (`asset_add_file()`, or the no-widget staging fallback).\n4. Once re-uploaded, run `video_resize` on the fresh `assetId` with their target dimensions.\n\nWhen the user asks to resize or enhance a Quick Cut output, surface the limitation proactively — the chain is known to fail.\n\n---\n\n## What Quick Cut Does NOT Support\n\n- Content-aware cuts based on speech (\"remove the parts where they repeat themselves\")\n- Trimming to specific timestamps (\"cut from 0:30 to 1:15\")\n- Semantic understanding of dialogue\n\nFor these, recommend a manual video-editing workflow.\n\n---\n\n## Error Handling\n\n- **`video_create_quick_cut` returns 403 (entitlement)**: Retrying does not help for a 403\n  entitlement — stop and surface the plan requirement. Respond with:\n  > *\"I was unable to create your quick cut.*\n  >\n  > ***Why:** Adobe Quick Cut isn't available on your current Adobe plan.*\n  >\n  > ***Options:**\n  > - Upgrade your Adobe plan to one that includes Quick Cut.*\n  > - Manually trim your video using Adobe Premiere Rush or Premiere Pro.*\n  >\n  > *Let me know how you'd like to proceed.\"*\n\n- **Any tool call returns 401 (not authenticated)**: Ask the user to re-authenticate via Adobe\n  OAuth and retry.\n\n- **`StoryBuilderNoARoll`**: The most common error. Means Quick Cut detected no A-roll (talking\n  head \u002F primary camera footage) in the clip — only B-roll. The tool requires at least some\n  dialogue or narration to anchor the story structure. Respond with:\n  > *\"This video appears to be B-roll only — scenery, action, or product shots without anyone\n  > speaking to camera. Quick Cut needs some talking-head footage to build a story around. Try\n  > uploading a video that includes someone speaking on camera, or a mix of interview + B-roll.*\n  >\n  > *If you only have B-roll, Adobe Premiere Rush or Adobe Express let you manually assemble a\n  > highlight reel without requiring dialogue.\"*\n  Retries repeat the same error regardless of duration\u002Fstyle; no workaround exists.\n\n- **Job fails with any other error on first attempt**: Retry once with the same parameters. If\n  it fails again, report and suggest re-uploading the source video.\n\n- **Stuck at same % for 5+ poll rounds**: Inform user, suggest re-uploading the source video.\n\n- **User uploads an image by mistake**: Detect from `mediaType` — if not `video\u002F*`, say so\n  and re-open the picker (or re-run the no-widget staging fallback).\n\n- **One of the 3 variations fails (but not all)**: Preview and deliver the successful ones, note\n  the failure clearly. If all 3 fail with `StoryBuilderNoARoll`, apply the B-roll error response\n  above.\n\n---\n\n## Constraints\n\n- Never pass a raw local filesystem path to `video_create_quick_cut` or any other video tool. Local files must reach Creative Cloud first — selected via the `asset_add_file` picker, or (no-widget fallback) staged via `asset_initialize_file_upload` → PUT → `asset_finalize_file_upload`; only the resulting `assetId` is valid.\n- `video_create_quick_cut` requires `assetId` (CC asset ID), not `presignedAssetUrl`.\n",{"name":5,"license":15,"metadata":37,"description":42,"allowed-tools":43,"compatibility":44},{"surface":38,"version":40,"visibility":41},[39,29],"claude","2.1.0","public","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.\n","adobe_mandatory_init asset_add_file asset_initialize_file_upload asset_finalize_file_upload video_create_quick_cut quickCutPoll asset_preview_file video_resize","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.","main","0722921d5542fc593105c27bd52630babd8b8c2a","plugins\u002Fadobe\u002Fskills\u002Fadobe-edit-quick-cut",1025,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins","https:\u002F\u002Fgithub.com\u002Fopenai","https:\u002F\u002Fopenai.com\u002F","2026-11-14 08:11:13",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add openai\u002Fplugins --skill adobe-edit-quick-cut",{"tool":59,"command":60},"bunx","bunx skills add openai\u002Fplugins --skill adobe-edit-quick-cut",{"tool":62,"command":63},"pnpm","pnpm dlx skills add openai\u002Fplugins --skill adobe-edit-quick-cut","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Fblob\u002Fmain\u002Fplugins\u002Fadobe\u002Fskills\u002Fadobe-edit-quick-cut\u002FSKILL.md",true,[67,73,79],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"agents\u002Fopenai.yaml","REFERENCE","参考文档",200,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Fblob\u002Fmain\u002Fplugins\u002Fadobe\u002Fskills\u002Fadobe-edit-quick-cut\u002Fagents\u002Fopenai.yaml",{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"assets\u002Ficon-large.svg","ASSET","资产文件",488,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Fblob\u002Fmain\u002Fplugins\u002Fadobe\u002Fskills\u002Fadobe-edit-quick-cut\u002Fassets\u002Ficon-large.svg",{"path":80,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":81},"assets\u002Ficon-small.svg","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Fblob\u002Fmain\u002Fplugins\u002Fadobe\u002Fskills\u002Fadobe-edit-quick-cut\u002Fassets\u002Ficon-small.svg",[83,103,114,131,158,171],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":87,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":93,"publishedAt":32},"01M6ACYN431ER9AFG508JJH3VT","supabase-postgres-best-practices","Postgres performance optimization and best practices from Supabase. Use this skill when writing, reviewing, or optimizing Postgres queries, schema designs, or database configurations.","MIT","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Fblob\u002Fmain\u002Fplugins\u002Fsupabase\u002Fskills\u002Fsupabase-postgres-best-practices\u002FSKILL.md",[90],{"categoryNo":91,"categoryName":92,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",[94,95,96,97,98,99,100,101,102],"best practices","supabase postgres best practices","writing","performance","sql","code","database","metrics","examples",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":87,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":110,"publishedAt":32},"01M6ACQRGGJYVNDPQWB9XGWRNZ","minimal-skill","Minimal example skill for plugin-eval tests. Use when the user wants a compact demonstration of a well-structured skill.","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Fblob\u002Fmain\u002Fplugins\u002Fplugin-eval\u002Ffixtures\u002Fminimal-skill\u002FSKILL.md",[109],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[111,112,113],"minimal skill","example skill","plugin",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":32},"01M6ACQ406M83341YPKPEXBXDZ","physical-ai-neural-reconstruction","Router for NVIDIA NuRec\u002FNRE: USDZ rendering, NCore conversion, 3DGS, gRPC sensor sim, PhysicalAI HF datasets. Do NOT use for SimReady or infra setup.","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Fblob\u002Fmain\u002Fplugins\u002Fnvidia\u002Fskills\u002Fphysical-ai-neural-reconstruction\u002FSKILL.md",[],[121,122,123,124,125,126,127,128,129,130],"physical ai neural reconstruction","https","python","github","docker","setup","toolkit","gpu","index","grpc",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":140,"publishedAt":32},"01M6ACPVRFPVATXD7H38Z56QC5","physical-ai-infrastructure-setup-and-resilient-scaling","Use when the user wants to set up, scale, validate, or harden NVIDIA physical AI infrastructure for synthetic data generation workflows across local MicroK8s or Azure AKS, including Kubernetes clusters, inference endpoint deployment, OSMO deployment, workload submission readiness, and infrastructure failure recovery. Trigger keywords: physical ai infrastructure, resilient scaling, SDG infrastructure, microk8s, azure aks, NVCF deployment, NIM Operator, OSMO deploy, workflow scaling. Don't trigger for: OSMO log summarization or workload-only operations unless infrastructure setup, scaling, validation, or recovery is requested.","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Fblob\u002Fmain\u002Fplugins\u002Fnvidia\u002Fskills\u002Fphysical-ai-infrastructure-setup-and-resilient-scaling\u002FSKILL.md",[137],{"categoryNo":138,"categoryName":139,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",[141,126,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157],"physical ai infrastructure setup and resilient scaling","infrastructure","validation","terraform","deployment","synthetic data","workload","ml","cli","kubernetes","inference","workflow","workflows","component","validate","deploy","azure",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":165,"publishedAt":32},"01M6ACPG9JPDSS6MMKVKR3P56E","omniverse-usd-performance-tuning","Top-level workflow skill for USD performance diagnosis and optimization. Use for slow loading, high memory, low FPS, or 'optimize my scene' requests; delegates auth\u002Fruntime setup to Phase 0 owners.","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Fblob\u002Fmain\u002Fplugins\u002Fnvidia\u002Fskills\u002Fomniverse-usd-performance-tuning\u002FSKILL.md",[164],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[166,97,167,123,168,169,152,126,148,170],"omniverse usd performance tuning","auth","memory","triage","authentication",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":178,"publishedAt":32},"01M6ACP73X9YS5Y730C2WE58YF","omniverse-realtime-viewer","Use as the top-level router for Omniverse Realtime Viewer USD app requests and focused viewer reference documents.","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Fblob\u002Fmain\u002Fplugins\u002Fnvidia\u002Fskills\u002Fomniverse-realtime-viewer\u002FSKILL.md",[177],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[179,180,123,152,181,182,183,148,145,184,128,185],"omniverse realtime viewer","realtime","electron","react","documents","cpp","typescript"]