adobe-resize-photos-and-videos
Resize photos and videos to exact pixel dimensions or aspect ratios using Adobe tools. Use this skill whenever a user wants to resize, scale, or change the dimensions of an image or video file — including phrases like "resize this to 1920x1080", "make this 4K", "scale to 800x600", "change the aspect ratio to 16:9", "resize my video", "make the image smaller", "crop to square", "fit this to a specific size", "resize for print", "resize for web", "make it 300 DPI ready", "change canvas size", "resize a batch of photos", or any request specifying target dimensions (W×H, ratio, or named size like "4K", "HD", "A4"). Also triggers for: "make this fit a specific size", "resize to [any dimension]", "I need this at [WxH]", "scale my video down", "change resolution", "downscale", "upscale". NOT for social media platform sets (use adobe-create-social-variations for that). Uses image_crop_and_resize for photos, video_resize for videos.
What this skill does
# Adobe Resize Photos and Videos
Resizes images or videos to user-specified dimensions, aspect ratio, or named size.
For social media platform sets (Instagram, TikTok, etc.) → use the `adobe-create-social-variations` skill instead.
---
## Tool Reference
| Step | Tool | Notes |
|------|------|-------|
| Open file picker | `asset_add_file` | Returns `presignedAssetUrl`, `assetId`, and `mediaType` |
| Find asset in CC | `asset_search` | Re-stage result via `asset_add_file` for image; use `id` directly for video |
| Render PSD/AI | `document_render_vector` | Converts to JPEG before resize |
| Resize image | `image_crop_and_resize` | One call per dimension; `reframe` by default |
| Preview outputs | `asset_preview_file` | All outputs in a single call |
| Upload to CC (start) | `asset_initialize_file_upload` | First call in block upload pipeline |
| Upload to CC (finish) | `asset_finalize_file_upload` | Second call; returns presigned CC URL for board |
| Create Firefly board | `create_firefly_board` | Pass `import_adobe_storage` with finalize URL |
| Resize video | `video_resize` | Returns `statusId` for polling |
| Poll video resize | `resizeVideoPoll` | Deferred tool — load before calling |
---
## 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-resize-photos-and-videos", "skill_version": "1.0.1" }
```
---
### 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.
---
## IMMEDIATE ACTION REQUIRED
**Step 1:** If parameters are missing or ambiguous → run the multi-step intake (Step 2 below).
**Step 2:** If no file is uploaded, run Step 3 (`asset_add_file({})`).
**Step 3:** Detect image vs. video and route to the correct workflow (Step 5 Image/Video).
---
### Step 2 — Multi-Step Intake
Run this when the user hasn't provided complete parameters (type + dimensions + fit mode).
Skip entirely if the user's message already contains all three.
Use `AskUserQuestion` to collect parameters step by step.
#### Step 2a — Type
```
AskUserQuestion([{
question: "Photo or video?",
type: "single_select",
options: ["Photo", "Video"]
}])
```
#### Step 2b — Dimensions
**If Photo** (`multi_select` — user can pick one or more):
```
AskUserQuestion([{
question: "Dimensions — select all you need",
type: "multi_select",
options: [
"1080 × 1080 — Instagram square",
"1080 × 1350 — Instagram portrait",
"1080 × 1920 — Stories / Reels",
"1920 × 1080 — YouTube / landscape",
"1280 × 720 — YouTube thumbnail",
"1200 × 675 — X / Twitter post",
"1200 × 630 — Facebook / OG image",
"1080 × 566 — LinkedIn post",
"2560 × 1440 — YouTube banner",
"3840 × 2160 — 4K / UHD",
"400 × 400 — Profile / avatar",
"2480 × 3508 — A4 print (300 dpi)",
"Custom — I'll type it"
]
}])
```
If user includes "Custom" → follow up: "Enter your custom dimensions (e.g. 1500×800):"
If user selects multiple presets → run `image_crop_and_resize` once per dimension,
using the same source URI and parameters each time. Preview all outputs together at the end.
**If Video** (`multi_select` — user can pick one or more):
```
AskUserQuestion([{
question: "Dimensions — select all you need",
type: "multi_select",
options: [
"1080 × 1920 — Reels / TikTok / Stories",
"1920 × 1080 — YouTube / landscape",
"1080 × 1080 — Square post",
"1280 × 720 — YouTube 720p",
"3840 × 2160 — 4K / UHD",
"854 × 480 — SD / 480p",
"Custom — I'll type it"
]
}])
```
If user selects multiple video presets → submit a separate `video_resize` job per dimension,
poll each to completion, preview all outputs together.
#### Step 2c — Fit mode
**If Photo** (`single_select`):
```
AskUserQuestion([{
question: "Fit mode",
type: "single_select",
options: [
"Reframe — crop to fill",
"Pad — letterbox, no crop",
"Extract — isolate subject"
]
}])
```
**If Video** (`single_select`):
```
AskUserQuestion([{
question: "Fit mode",
type: "single_select",
options: [
"Letterbox — preserve ratio",
"Crop — fill, no bars",
"Stretch — force exact (distort)"
]
}])
```
#### Step 2d — Smart focus (Photo only)
```
AskUserQuestion([{
question: "Smart focus — where should the crop center?",
type: "single_select",
options: [
"Subject",
"Face / portrait",
"Upper body",
"Center (geometric)",
"Named object — I'll describe it"
]
}])
```
If user selects "Named object" → follow up: "Describe the object (e.g. 'the red car', 'the logo'):"
#### Step 2e — Options (Photo only)
```
AskUserQuestion([{
question: "Any additional options?",
type: "multi_select",
options: [
"Batch — multiple images",
"Output: JPEG",
"Output: PNG"
]
}])
```
#### Step 2f — Source (Video only)
```
AskUserQuestion([{
question: "Where is the video?",
type: "single_select",
options: [
"Upload from device",
"From Creative Cloud"
]
}])
```
---
### Step 3 — Get the Source File
**Critical — `/mnt/user-data/uploads/` paths are NOT usable URLs.**
Even when the user has attached a file and it appears in context at a `/mnt/user-data/uploads/` path,
you cannot pass this path to any Adobe tool. Call `asset_add_file()` to stage the file — `/mnt/user-data/uploads/` paths are not fetchable by Adobe tools.
```
WRONG ❌ imageURI: "/mnt/user-data/uploads/photo.jpg"
WRONG ❌ imageURI: "file:///mnt/user-data/uploads/photo.jpg"
CORRECT ✅ call asset_add_file() → use presignedAssetUrl from picker context
```
**No file yet** → open the picker immediately:
```javascript
asset_add_file()
```
Detect type from returned `mediaType`:
- `image/*` → IMAGE WORKFLOW
- `video/*` → VIDEO WORKFLOW
---
### Step 4 — Resolve Target Dimensions
| User says | Resolve to |
| ---------------------------- | ----------------------------------------------- |
| `1920×1080`, `1920x1080` | width: 1920, height: 1080 |
| `4K` | 3840 × 2160 |
| `HD`, `1080p` | 1920 × 1080 |
| `720p` | 1280 × 720 |
| `480p` | 854 × 480 |
| `A4` print | 2480 × 3508 (300 DPI portrait) |
| `Letter` print | 2550 × 3300 (300 DPI portrait) |
| `16:9`, `1:1`, `4:5`, `9:16` | ratio string → pass as `output: "16:9"` |
| `square` | `output: "1:1"` |
| Width only (`800px wide`) | width: 800, use ratio string to maintain aspect |
If no target was specified in the form AND none in the user's message → ask:
> "What dimensions do you need? (e.g. 1920×1080, A4, 16:9)"
---
## IMAGE WORKFLOW
### Step 5 (Image) — Valid URI Sources
Only these work as `imageURI`:
- `presignedAssetUrl` from `asset_add_file()` ✅
- `outputUrl` from a prior tool call ✅
- Public HTTPS URL provided by user ✅
Not usable as `imageURI`:
- `/mnt/user-data/uploads/` paths ❌
- `renditionURL` from `asset_search` directly ❌
- `file://` URIs ❌
| Source | Resolution |
| ----------------- | ---------------------------------------------------------------------- |
| Uploaded file | `asset_add_file()` → `presignedAssetUrl` |
| CC storage asset | `asset_search` → re-stage via `asset_add_file()` → `presignedAssetUrl` |
| Prior tool output | Use `outputUrl` directly Related in Image & Video
watch
IncludedWatch a video (URL or local path). Downloads with yt-dlp, extracts auto-scaled frames with ffmpeg, pulls the transcript from captions (or Whisper API fallback), and hands the result to Claude so it can answer questions about what's in the video.
physical-ai-defect-image-generation
IncludedUse when the user wants to orchestrate defect image generation, run associated setup, or handle outputs on OSMO. The Day 0 path handles cold-start with USD-to-ROI, image-edit augmentation, and AnomalyGen to create initial PCBA datasets. The Day 1 path performs inference and labeling on real images. This skill helps with first-time asset setup, creation of finetuning checkpoints, and configuring deployment. Trigger keywords: defect image generation, dig workflow, dig pipeline, defect image detection workflow, aoi pipeline, aoi anomalygen, usd2roi anomalygen, day 0 pcba, day 1 pcba, day 1 real-photo alignment, day 1 manual roi, metal surface anomaly, glass defect, anomalygen finetune, setup_pcb, setup_metal, setup_glass, setup_pretrained, dig setup, dig datasets, dig pretrained checkpoint, dig image-edit endpoint.
accelint-react-best-practices
IncludedReact performance optimization and best practices. ALWAYS use this skill when working with any React code - writing components, hooks, JSX; refactoring; optimizing re-renders, memoization, state management; reviewing for performance; fixing hydration mismatches; debugging infinite re-renders, stale closures, input focus loss, animations restarting; preventing remounting; implementing transitions, lazy initialization, effect dependencies. Even simple React tasks benefit from these patterns. Covers React 19+ (useEffectEvent, Activity, ref props). Triggers - useEffect, useState, useMemo, useCallback, memo, inline components, nested components, components inside components, re-render, performance, hydration, SSR, Next.js, useDeferredValue, combined hooks.
elevenlabs-agents
IncludedBuild conversational AI voice agents with ElevenLabs Platform using React, JavaScript, React Native, or Swift SDKs. Configure agents, tools (client/server/MCP), RAG knowledge bases, multi-voice, and Scribe real-time STT. Use when: building voice chat interfaces, implementing AI phone agents with Twilio, configuring agent workflows or tools, adding RAG knowledge bases, testing with CLI "agents as code", or troubleshooting deprecated @11labs packages, Android audio cutoff, CSP violations, dynamic variables, or WebRTC config. Keywords: ElevenLabs Agents, ElevenLabs voice agents, AI voice agents, conversational AI, @elevenlabs/react, @elevenlabs/client, @elevenlabs/react-native, @elevenlabs/elevenlabs-js, @elevenlabs/agents-cli, elevenlabs SDK, voice AI, TTS, text-to-speech, ASR, speech recognition, turn-taking model, WebRTC voice, WebSocket voice, ElevenLabs conversation, agent system prompt, agent tools, agent knowledge base, RAG voice agents, multi-voice agents, pronunciation dictionary, voice speed control, elevenlabs scribe, @11labs deprecated, Android audio cutoff, CSP violation elevenlabs, dynamic variables elevenlabs, case-sensitive tool names, webhook authentication
humanizer
IncludedHumanize AI-generated text by detecting and removing patterns typical of LLM output. Rewrites text to sound natural, specific, and human. Uses 28 pattern detectors, 560+ AI vocabulary terms across 3 tiers, and statistical analysis (burstiness, type-token ratio, readability) for comprehensive detection. Use when asked to humanize text, de-AI writing, make content sound more natural/human, review writing for AI patterns, score text for AI detection, or improve AI-generated drafts. Covers content, language, style, communication, and filler categories.
generating-mermaid-diagrams
IncludedSalesforce architecture diagrams using Mermaid with ASCII fallback. Use this skill when generating text-based diagrams for Salesforce architecture, OAuth flows, ERDs, integration sequences, or Agentforce structure. TRIGGER when: user says "diagram", "visualize", "ERD", or asks for sequence diagrams, flowcharts, class diagrams, or architecture visualizations in Mermaid. DO NOT TRIGGER when: user wants PNG/SVG image output (use generating-visual-diagrams), or asks about non-Salesforce systems.