Claude
Skills
Sign in
Back

adobe-resize-photos-and-videos

Included with Lifetime
$97 forever

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.

Image & Videoassets

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