Adobe 사진 및 비디오 크기 조정
사용자가 지정한 치수, 화면비 또는 명명된 크기로 이미지 또는 비디오 크기를 조정합니다.
소셜 미디어 플랫폼 세트(Instagram, TikTok 등)의 경우 → 대신 adobe-create-social-variations 스킬을 사용하세요.
도구 참조
| 단계 | 도구 | 참고사항 |
|---|---|---|
| 파일 선택기 열기 | asset_add_file | presignedAssetUrl, assetId, mediaType 반환 |
| CC에서 에셋 찾기 | asset_search | 이미지의 경우 asset_add_file을 통해 다시 스테이징; 비디오의 경우 id 직접 사용 |
| PSD/AI 렌더링 | document_render_vector | 크기 조정 전 JPEG로 변환 |
| 이미지 크기 조정 | image_crop_and_resize | 치수당 한 번 호출; 기본값 reframe |
| 출력물 미리보기 | asset_preview_file | 모든 출력을 한 번에 호출 |
| CC에 업로드(시작) | asset_initialize_file_upload | 블록 업로드 파이프라인의 첫 번째 호출 |
| CC에 업로드(완료) | asset_finalize_file_upload | 두 번째 호출; 보드용 presigned CC URL 반환 |
| Firefly 보드 생성 | create_firefly_board | 최종 URL과 함께 import_adobe_storage 전달 |
| 비디오 크기 조정 | video_resize | statusId 반환 (폴링 용) |
| 비디오 크기 조정 폴링 | resizeVideoPoll | 지연 도구 — 호출 전 로드 필요 |
워크플로우
0단계 — Adobe 도구 초기화
먼저 adobe_mandatory_init을 호출합니다. 그러면 나머지 워크플로우에 필요한 파일 처리 규칙과 도구 라우팅 지침이 반환됩니다.
{ "skill_name": "adobe-resize-photos-and-videos", "skill_version": "1.0.1" }
1단계 — 자격 확인
adobe_mandatory_init에서 "Adobe for creativity" 커넥터가 활성화되었음을 확인했으므로, 위의 도구 참조 표와 대조하여 "Adobe for creativity" 커넥터를 통해 사용 가능한 도구를 확인합니다.
즉시 실행 필요
1단계: 매개변수가 누락되었거나 모호한 경우 → 다단계 입력 수집을 실행합니다(아래 2단계).
2단계: 파일이 업로드되지 않은 경우 3단계(asset_add_file({}))를 실행합니다.
3단계: 이미지인지 비디오인지 감지하여 올바른 워크플로우(이미지/비디오 5단계)로 라우팅합니다.
2단계 — 다단계 입력 수집
사용자가 완전한 매개변수(유형 + 크기 + 맞춤 모드)를 제공하지 않은 경우 실행합니다. 사용자 메시지에 이미 세 가지가 모두 포함된 경우에는 건너뜁니다.
AskUserQuestion을 사용하여 단계별로 매개변수를 수집합니다.
2a단계 — 유형
AskUserQuestion([{
question: "사진인가요 비디오인가요?",
type: "single_select",
options: ["사진", "비디오"]
}])
2b단계 — 크기
사진인 경우 (multi_select — 사용자가 하나 이상 선택 가능):
AskUserQuestion([{
question: "크기 — 필요한 것을 모두 선택하세요",
type: "multi_select",
options: [
"1080 × 1080 — Instagram 정사각형",
"1080 × 1350 — Instagram 세로형",
"1080 × 1920 — 스토리 / 릴스",
"1920 × 1080 — YouTube / 가로형",
"1280 × 720 — YouTube 썸네일",
"1200 × 675 — X / Twitter 게시물",
"1200 × 630 — Facebook / OG 이미지",
"1080 × 566 — LinkedIn 게시물",
"2560 × 1440 — YouTube 배너",
"3840 × 2160 — 4K / UHD",
"400 × 400 — 프로필 / 아바타",
"2480 × 3508 — A4 인쇄 (300 dpi)",
"사용자 지정 — 직접 입력"
]
}])
사용자가 "사용자 지정"을 선택한 경우 후속 질문: "사용자 지정 크기를 입력하세요 (예: 1500×800):"
사용자가 여러 프리셋을 선택한 경우 → 각 치수에 대해 image_crop_and_resize를 한 번씩 실행하고,
매번 동일한 소스 URI와 매개변수를 사용합니다. 마지막에 모든 출력을 함께 미리보기합니다.
비디오인 경우 (multi_select — 사용자가 하나 이상 선택 가능):
AskUserQuestion([{
question: "크기 — 필요한 것을 모두 선택하세요",
type: "multi_select",
options: [
"1080 × 1920 — 릴스 / TikTok / 스토리",
"1920 × 1080 — YouTube / 가로형",
"1080 × 1080 — 정사각형 게시물",
"1280 × 720 — YouTube 720p",
"3840 × 2160 — 4K / UHD",
"854 × 480 — SD / 480p",
"사용자 지정 — 직접 입력"
]
}])
사용자가 여러 비디오 프리셋을 선택한 경우 → 각 치수에 대해 별도의 video_resize 작업을 제출하고,
각각이 완료될 때까지 폴링한 후 모든 출력을 함께 미리보기합니다.
2c단계 — 맞춤 모드
사진인 경우 (single_select):
AskUserQuestion([{
question: "맞춤 모드",
type: "single_select",
options: [
"Reframe — 채우기 위해 자르기",
"Pad — 레터박스, 자르기 없음",
"Extract — 피사체 분리"
]
}])
비디오인 경우 (single_select):
AskUserQuestion([{
question: "맞춤 모드",
type: "single_select",
options: [
"Letterbox — 비율 유지",
"Crop — 채우기, 검은 막대 없음",
"Stretch — 강제 정확한 크기 (왜곡)"
]
}])
2d단계 — 스마트 포커스 (사진만 해당)
AskUserQuestion([{
question: "스마트 포커스 — 자르기 중심을 어디로 할까요?",
type: "single_select",
options: [
"주제",
"얼굴 / 초상화",
"상반신",
"중앙 (기하학적)",
"명명된 개체 — 설명하겠습니다"
]
}])
사용자가 "명명된 개체"를 선택한 경우 후속 질문: "개체를 설명하세요 (예: '빨간 차', '로고'):"
2e단계 — 옵션 (사진만 해당)
AskUserQuestion([{
question: "추가 옵션이 있나요?",
type: "multi_select",
options: [
"일괄 — 여러 이미지",
"출력: JPEG",
"출력: PNG"
]
}])
2f단계 — 소스 (비디오만 해당)
AskUserQuestion([{
question: "비디오 위치는 어디인가요?",
type: "single_select",
options: [
"기기에서 업로드",
"Creative Cloud에서"
]
}])
3단계 — 소스 파일 가져오기
중요 — /mnt/user-data/uploads/ 경로는 사용 가능한 URL이 아닙니다.
사용자가 파일을 첨부하여 컨텍스트에 /mnt/user-data/uploads/ 경로로 나타나더라도,
이 경로를 Adobe 도구에 전달할 수 없습니다. asset_add_file()을 호출하여 파일을 스테이징하세요. /mnt/user-data/uploads/ 경로는 Adobe 도구에서 가져올 수 없습니다.
잘못됨 ❌ imageURI: "/mnt/user-data/uploads/photo.jpg"
잘못됨 ❌ imageURI: "file:///mnt/user-data/uploads/photo.jpg"
올바름 ✅ asset_add_file() 호출 → 선택기 컨텍스트에서 presignedAssetUrl 사용
파일이 아직 없는 경우 → 즉시 선택기를 엽니다:
asset_add_file()
반환된 mediaType에서 유형 감지:
image/*→ 이미지 워크플로우video/*→ 비디오 워크플로우
4단계 — 대상 크기 결정
| 사용자 입력 | 해석 |
|---|---|
1920×1080, 1920x1080 | width: 1920, height: 1080 |
4K | 3840 × 2160 |
HD, 1080p | 1920 × 1080 |
720p | 1280 × 720 |
480p | 854 × 480 |
A4 인쇄 | 2480 × 3508 (300 DPI 세로) |
Letter 인쇄 | 2550 × 3300 (300 DPI 세로) |
16:9, 1:1, 4:5, 9:16 | 비율 문자열 → output: "16:9"로 전달 |
square | output: "1:1" |
너비만 (800px wide) | width: 800, 비율 문자열을 사용하여 가로세로 비율 유지 |
양식에 지정된 대상이 없고 사용자 메시지에도 없는 경우 → 질문:
"어떤 크기가 필요하신가요? (예: 1920×1080, A4, 16:9)"
이미지 워크플로우
5단계 (이미지) — 유효한 URI 소스
imageURI로 작동하는 것:
asset_add_file()의presignedAssetUrl✅- 이전 도구 호출의
outputUrl✅ - 사용자가 제공한 공개 HTTPS URL ✅
imageURI로 사용할 수 없는 것:
/mnt/user-data/uploads/경로 ❌asset_search의renditionURL직접 사용 ❌file://URI ❌
| 소스 | 해결 방법 |
|---|---|
| 업로드된 파일 | asset_add_file() → presignedAssetUrl |
| CC 저장소 에셋 | asset_search → asset_add_file()을 통해 다시 스테이징 → presignedAssetUrl |
| 이전 도구 출력 | outputUrl 직접 사용 |
| PSD / AI 파일 | document_render_vector (JPEG, 300 DPI) → outputPresignedUrl |
6단계 (이미지) — 맞춤 모드
| 의도 | 모드 | 참고사항 |
|---|---|---|
| "WxH로 리사이즈" / 기본값 | reframe | 대상 비율로 가장 큰 자르기, 중앙 정렬 — 왜곡 없음 |
| "자르기 없음", "레터박스", "안쪽에 맞춤" | pad | 빈 공간을 흰색으로 채움 |
| "피사체 분리", "빡빡하게 자르기" | extract | 감지된 영역 주변으로 좁게 자르기 |
기본값: reframe. 사용자가 명시적으로 요청한 경우에만 변경하세요.
⛔
fit: "extract"는 명시적인{ width, height }와 호환되지 않습니다. 이미지가 늘어납니다. 비율 문자열을 사용하거나output을 생략하세요.
7단계 (이미지) — image_crop_and_resize 호출
image_crop_and_resize({
imageURI: presignedAssetUrl,
options: {
output: { width: 1920, height: 1080 }, // 또는 "16:9"
fit: "reframe",
focus: "subject", // 또는 "face", "upper_body", { prompt: "the car" }, { x:0.5, y:0.5 }
quality: 7
},
outputFileType: "jpeg" // 또는 투명도가 필요한 경우 "png"
})
// result.outputUrl → 미리보기 또는 체인에 사용
포커스 가이드:
"subject"— 기본값; 전신 감지, 풍경, 개체"face"— 초상화, 헤드샷"upper_body"— 가슴 위 자르기{ prompt: "the logo" }— 사용자 양식 입력에서 명명된 개체{ x: 0.5, y: 0.5 }— 기하학적 중심 (명확한 주제 없음)
8단계 (이미지) — 일괄 처리
양식에서 일괄 처리가 선택되었거나 사용자가 여러 파일을 제공한 경우:
- 각 파일에 대해
asset_add_file()을 호출하여 개별 presigned URL을 얻습니다. - 동일한 매개변수로 각각에 대해
image_crop_and_resize를 호출합니다. - 모든
outputUrl값을 수집합니다. - 모든 출력으로 한 번에
asset_preview_file을 호출합니다.
이 환경에서는 호출이 순차적으로 실행됩니다. 10개 이상의 이미지인 경우 시작 전에 사용자에게 확인하세요.
턴 간 페이지네이션 (20개 초과 일괄 처리): 대량 일괄 처리의 경우 대화 컨텍스트가 모든 이미지가 처리되기 전에 가득 차서, Claude가 중간에 멈출 수 있습니다. 이는 예상된 현상이며 오류가 아닙니다. 발생 시:
- 완료된 개수와 남은 개수를 알립니다 (예: "20 / 24 완료 — 나머지는 '계속'이라고 말씀해 주세요")
- 사용자가 확인할 때까지 기다립니다.
- 재개 시 다음 처리되지 않은 이미지부터 시작하여 끝까지 계속합니다.
- 마지막 이미지가 완료된 후에만 모든 출력을 함께 미리보기합니다.
9단계 (이미지) — 미리보기 + 전달 + Firefly 보드
asset_preview_file({
assets: [
{ name: "photo_1920x1080.jpg", presignedAssetUrl: result.outputUrl },
// 모든 성공적인 출력
]
})
CC에 저장 + Firefly 보드 생성
미리보기 후 블록 업로드 파이프라인(asset_initialize_file_upload → PUT 청크 → asset_finalize_file_upload)을 사용하여 각 출력을 CC 저장소에 업로드합니다.
그런 다음 최종 출력 URL로 firefly 보드 도구를 호출합니다:
create_firefly_board({
import_adobe_storage: [
final_output_url_1,
final_output_url_2,
// ...
]
})
✅ (Stage에서) 확인됨:
asset_finalize_file_upload의 presigned URL을 사용한import_adobe_storage가 보드를 성공적으로 채웁니다.❌ 작동하지 않음: CC URN(
urn:aaid:sc:US:...)을 사용한import_generic_assets— USS 인덱싱 지연으로 인해 빈 보드가 생성됩니다.보드 생성이 실패하거나 URL 형식이 잘못된 경우 보드 링크는 생략하세요 (재시도해도 도움이 되지 않음).
보드 단계 후 완료 요약을 게시합니다:
✅ 완료! [N]개의 이미지 크기가 조정되어 준비되었습니다.
📥 다운로드:
• resized_1920x1080.jpg → <cc_storage_url>
[N ≤ 3인 경우 개별 나열, N > 3인 경우 단일 폴더 링크]
🎨 Firefly 보드에서 보기 → <board_url> ← 보드 생성 실패 시 생략
비디오 워크플로우
5단계 (비디오) — 에셋 ID 가져오기
비디오 도구는 URL이 아닌 assetId가 필요합니다.
| 소스 | 방법 |
|---|---|
asset_add_file을 통해 업로드 | 반환된 assetId 사용 |
| CC 저장소 | filters.mediaType: "video/mp4"와 함께 asset_search → 에셋 id 사용 |
6단계 (비디오) — 일반 대상
| 이름 | 크기 |
|---|---|
| 4K / UHD | 3840 × 2160 |
| 1080p / HD | 1920 × 1080 |
| 720p | 1280 × 720 |
| 480p | 854 × 480 |
| 세로 9:16 | 1080 × 1920 |
| 정사각형 1:1 | 1080 × 1080 |
7단계 (비디오) — video_resize 호출
⚠️
resizeVideoPoll은 지연 도구입니다 — 폴링을 시도하기 전에 먼저 로드하세요. 로드하지 않고 직접 호출하면 "로드되지 않음" 오류와 함께 실패합니다.
video_resize({
assetId: videoAssetId,
width: targetW,
height: targetH,
mode: "letterbox" // 기본값; 아래 모드 표 참조
})
// 반환: { jobStatus: "pending", statusId }
모드 — 정확한 API 값 사용 (사용자 대상 레이블 아님):
| 사용자 말함 | API 값 | 동작 |
|---|---|---|
| "fit", "preserve ratio", "letterbox" | "letterbox" | 비율 유지, 검은 막대 추가 (기본값) |
| "fill", "crop to fill", "no bars" | "crop" | 가장자리를 잘라 대상에 정확히 맞춤 |
| "stretch", "force exact" | "stretch" | 대상에 정확히 맞도록 왜곡 |
ℹ️ 비디오 자동 재구성은 아직 Claude에서 사용할 수 없지만 새로운 도구가 계속 추가되고 있습니다. 더 많은 제어가 필요하면 Adobe Premiere를 사용해 보세요.
폴링: 호출하기 전에 지연 도구 resizeVideoPoll을 로드하세요 — 직접 호출은 "로드되지 않음" 오류와 함께 실패합니다.
// 1단계: 지연 도구 로드
8단계 (비디오) — resizeVideoPoll 호출
resizeVideoPoll({
videoJobStatusId: statusId_from_video_resize
})
// 반환: { status: "completed" | "processing" | "failed", outputUrl?, error? }
9단계 (비디오) — 미리보기 + 전달 + Firefly 보드
asset_preview_file({
assets: [
{ name: "video_1920x1080.mp4", presignedAssetUrl: outputUrl },
// 모든 성공적인 출력
]
})
CC에 저장 + Firefly 보드 생성
이미지와 동일: asset_initialize_file_upload → PUT 청크 → asset_finalize_file_upload,
그런 다음 create_firefly_board.
완료 요약을 게시합니다:
✅ 완료! [N]개의 비디오 크기가 조정되어 준비되었습니다.
📥 다운로드:
• resized_video_1920x1080.mp4 → <cc_storage_url>
🎨 Firefly 보드에서 보기 → <board_url> ← 보드 생성 실패 시 생략
안티패턴 및 주의사항
| 패턴 | 권장 사항 |
|---|---|
imageURI에 /mnt/user-data/ 경로 전달 | 대신 asset_add_file() 호출 |
CC 에셋의 renditionURL 직접 사용 | 항상 asset_add_file()을 통해 다시 스테이징 |
| 완료 전 미리보기 | 모든 처리가 완료될 때까지 기다린 후 asset_preview_file을 한 번 호출 |
| 각 이미지 후 Firefly 보드 생성 | 모든 처리가 완료된 후 모든 URL로 한 번 호출 |
export_generic_assets로 보드 채우기 | import_adobe_storage를 presigned URL과 함께 사용 |
resizeVideoPoll을 지연 도구로 로드하지 않고 직접 호출 | 반드시 지연된 도구를 먼저 로드 |
오류 처리
| 증상 | 조치 |
|---|---|
adobe_mandatory_init 실패 | "Adobe for creativity 커넥터가 필요합니다"라고 알리고 중단 |
asset_add_file이 null 반환 | "파일 업로드를 찾을 수 없습니다 — 다시 시도해 주세요" |
image_crop_and_resize 오류 | 오류 메시지 확인; 잘못된 URI 소스(로컬 경로 확인) |
| 비디오 유형이 감지되지 않음 | 다른 형식의 파일을 요청 (MP4 권장) |
resizeVideoPoll 시간 초과 | 30초 후 재시도; 지속되면 실패 보고 |
| 제공된 URL이 유효하지 않음 | 소스 파일이 여전히 존재하는지 확인; 다시 업로드 요청 |
요약 — 의사 결정 트리
사용자가 미디어 파일의 크기 조정 요청
│
├─ 소셜 세트 언급? → `adobe-create-social-variations`로 라우팅
│
└─ 단일/사용자 지정 크기? → 이 스킬 사용
│
├─ init → 자격 확인
├─ 유형 + 크기 + 맞춤 수집 (또는 사용자 메시지에서 추출)
├─ 파일 획득 (asset_add_file)
│
├─ image/* → image_crop_and_resize (일괄 처리 가능)
│ ├─ 미리보기
│ └─ CC + Firefly 보드
│
└─ video/* → video_resize + resizeVideoPoll
├─ 미리보기
└─ CC + Firefly 보드