Adobe Redimensionar Fotos e Vídeos
Redimensiona imagens ou vídeos para dimensões especificadas pelo usuário, proporção de aspecto ou tamanho nomeado.
Para conjuntos de plataformas de mídia social (Instagram, TikTok, etc.) → use a habilidade adobe-create-social-variations.
Referência de Ferramentas
| Etapa | Ferramenta | Observações |
|---|---|---|
| Abrir seletor de arquivos | asset_add_file | Retorna presignedAssetUrl, assetId e mediaType |
| Encontrar ativo no CC | asset_search | Reencene o resultado via asset_add_file para imagem; use id diretamente para vídeo |
| Renderizar PSD/AI | document_render_vector | Converte para JPEG antes de redimensionar |
| Redimensionar imagem | image_crop_and_resize | Uma chamada por dimensão; reframe por padrão |
| Visualizar saídas | asset_preview_file | Todas as saídas em uma única chamada |
| Fazer upload para CC (iniciar) | asset_initialize_file_upload | Primeira chamada no pipeline de upload em bloco |
| Fazer upload para CC (finalizar) | asset_finalize_file_upload | Segunda chamada; retorna URL CC pré-assinada para o board |
| Criar board Firefly | create_firefly_board | Passe import_adobe_storage com a URL de finalização |
| Redimensionar vídeo | video_resize | Retorna statusId para polling |
| Poll de redimensionamento de vídeo | resizeVideoPoll | Ferramenta diferida — carregue antes de chamar |
Fluxo de Trabalho
Etapa 0 — Inicializar Ferramentas Adobe
Chame adobe_mandatory_init primeiro. Isso retorna regras de manipulação de arquivos e orientação de roteamento de ferramentas necessárias para o resto do fluxo de trabalho.
{ "skill_name": "adobe-resize-photos-and-videos", "skill_version": "1.0.1" }
Etapa 1 — Verificação de Licenciamento
Agora que adobe_mandatory_init confirmou que o conector "Adobe for creativity" está ativo, verifique quais ferramentas estão disponíveis através do conector "Adobe for creativity" comparando com a tabela Referência de Ferramentas acima.
AÇÃO IMEDIATA NECESSÁRIA
Etapa 1: Se os parâmetros estiverem faltando ou ambíguos → execute a coleta em múltiplas etapas (Etapa 2 abaixo).
Etapa 2: Se nenhum arquivo foi enviado, execute a Etapa 3 (asset_add_file({})).
Etapa 3: Detecte se é imagem ou vídeo e direcione para o fluxo de trabalho correto (Etapa 5 Imagem/Vídeo).
Etapa 2 — Coleta em Múltiplas Etapas
Execute esta etapa quando o usuário não forneceu parâmetros completos (tipo + dimensões + modo de ajuste). Pule completamente se a mensagem do usuário já contiver todos os três.
Use AskUserQuestion para coletar os parâmetros passo a passo.
Etapa 2a — Tipo
AskUserQuestion([{
question: "Foto ou vídeo?",
type: "single_select",
options: ["Foto", "Vídeo"]
}])
Etapa 2b — Dimensões
Se Foto (multi_select — o usuário pode escolher um ou mais):
AskUserQuestion([{
question: "Dimensões — selecione todas que você precisa",
type: "multi_select",
options: [
"1080 × 1080 — Quadrado Instagram",
"1080 × 1350 — Retrato Instagram",
"1080 × 1920 — Stories / Reels",
"1920 × 1080 — YouTube / paisagem",
"1280 × 720 — Miniatura YouTube",
"1200 × 675 — Post X / Twitter",
"1200 × 630 — Facebook / OG image",
"1080 × 566 — Post LinkedIn",
"2560 × 1440 — Banner YouTube",
"3840 × 2160 — 4K / UHD",
"400 × 400 — Perfil / avatar",
"2480 × 3508 — Impressão A4 (300 dpi)",
"Personalizado — Vou digitar"
]
}])
Se o usuário incluir "Personalizado" → pergunte em seguida: "Digite suas dimensões personalizadas (ex.: 1500×800):"
Se o usuário selecionar múltiplos predefinidos → execute image_crop_and_resize uma vez por dimensão,
usando a mesma URI de origem e parâmetros cada vez. Visualize todas as saídas juntas no final.
Se Vídeo (multi_select — o usuário pode escolher um ou mais):
AskUserQuestion([{
question: "Dimensões — selecione todas que você precisa",
type: "multi_select",
options: [
"1080 × 1920 — Reels / TikTok / Stories",
"1920 × 1080 — YouTube / paisagem",
"1080 × 1080 — Post quadrado",
"1280 × 720 — YouTube 720p",
"3840 × 2160 — 4K / UHD",
"854 × 480 — SD / 480p",
"Personalizado — Vou digitar"
]
}])
Se o usuário selecionar múltiplos predefinidos de vídeo → envie um trabalho video_resize separado por dimensão,
faça poll de cada um até a conclusão, visualize todas as saídas juntas.
Etapa 2c — Modo de Ajuste
Se Foto (single_select):
AskUserQuestion([{
question: "Modo de ajuste",
type: "single_select",
options: [
"Reframe — cortar para preencher",
"Pad — letterbox, sem corte",
"Extract — isolar assunto"
]
}])
Se Vídeo (single_select):
AskUserQuestion([{
question: "Modo de ajuste",
type: "single_select",
options: [
"Letterbox — preservar proporção",
"Crop — preencher, sem barras",
"Stretch — forçar exato (distorcer)"
]
}])
Etapa 2d — Foco inteligente (Apenas Foto)
AskUserQuestion([{
question: "Foco inteligente — onde o corte deve centralizar?",
type: "single_select",
options: [
"Assunto",
"Rosto / retrato",
"Parte superior do corpo",
"Centro (geométrico)",
"Objeto nomeado — Vou descrevê-lo"
]
}])
Se o usuário selecionar "Objeto nomeado" → pergunte em seguida: "Descreva o objeto (ex.: 'o carro vermelho', 'o logotipo'):"
Etapa 2e — Opções (Apenas Foto)
AskUserQuestion([{
question: "Alguma opção adicional?",
type: "multi_select",
options: [
"Lote — múltiplas imagens",
"Saída: JPEG",
"Saída: PNG"
]
}])
Etapa 2f — Origem (Apenas Vídeo)
AskUserQuestion([{
question: "Onde está o vídeo?",
type: "single_select",
options: [
"Enviar do dispositivo",
"Do Creative Cloud"
]
}])
Etapa 3 — Obter o Arquivo de Origem
Crítico — caminhos /mnt/user-data/uploads/ NÃO são URLs utilizáveis.
Mesmo quando o usuário anexou um arquivo e ele aparece no contexto em um caminho /mnt/user-data/uploads/,
você não pode passar este caminho para nenhuma ferramenta Adobe. Chame asset_add_file() para encenar o arquivo — caminhos /mnt/user-data/uploads/ não são buscáveis pelas ferramentas Adobe.
ERRADO ❌ imageURI: "/mnt/user-data/uploads/photo.jpg"
ERRADO ❌ imageURI: "file:///mnt/user-data/uploads/photo.jpg"
CORRETO ✅ chame asset_add_file() → use presignedAssetUrl do contexto do seletor
Nenhum arquivo ainda → abra o seletor imediatamente:
asset_add_file()
Detecte o tipo a partir do mediaType retornado:
image/*→ FLUXO DE TRABALHO DE IMAGEMvideo/*→ FLUXO DE TRABALHO DE VÍDEO
Etapa 4 — Resolver Dimensões Alvo
| Usuário diz | Resolver para |
|---|---|
1920×1080, 1920x1080 | largura: 1920, altura: 1080 |
4K | 3840 × 2160 |
HD, 1080p | 1920 × 1080 |
720p | 1280 × 720 |
480p | 854 × 480 |
Impressão A4 | 2480 × 3508 (300 DPI retrato) |
Impressão Carta | 2550 × 3300 (300 DPI retrato) |
16:9, 1:1, 4:5, 9:16 | string de proporção → passe como output: "16:9" |
quadrado | output: "1:1" |
Apenas largura (800px de largura) | largura: 800, use string de proporção para manter aspecto |
Se nenhum alvo foi especificado no formulário E nenhum na mensagem do usuário → pergunte:
"Quais dimensões você precisa? (ex.: 1920×1080, A4, 16:9)"
FLUXO DE TRABALHO DE IMAGEM
Etapa 5 (Imagem) — Fontes de URI Válidas
Apenas estas funcionam como imageURI:
presignedAssetUrldeasset_add_file()✅outputUrlde uma chamada de ferramenta anterior ✅- URL HTTPS pública fornecida pelo usuário ✅
Não utilizável como imageURI:
- Caminhos
/mnt/user-data/uploads/❌ renditionURLdeasset_searchdiretamente ❌- URIs
file://❌
| Origem | Resolução |
|---|---|
| Arquivo enviado | asset_add_file() → presignedAssetUrl |
| Ativo no armazenamento CC | asset_search → reencene via asset_add_file() → presignedAssetUrl |
| Saída de ferramenta anterior | Use outputUrl diretamente |
| Arquivo PSD / AI | document_render_vector (JPEG, 300 DPI) → outputPresignedUrl |
Etapa 6 (Imagem) — Modo de Ajuste
| Intenção | Modo | Observações |
|---|---|---|
| "redimensionar para LxA" / padrão | reframe | Maior corte na proporção alvo, centralizado — sem distorção |
| "sem corte", "letterbox", "encaixar dentro" | pad | Preenche espaço vazio com branco |
| "isolar assunto", "corte apertado" | extract | Corte apertado ao redor da região detectada |
Padrão: reframe. Altere apenas quando o usuário for explícito.
⛔
fit: "extract"é incompatível com um{ width, height }explícito — ele estica a imagem. Use uma string de proporção ou omitaoutput.
Etapa 7 (Imagem) — Chamar image_crop_and_resize
image_crop_and_resize({
imageURI: presignedAssetUrl,
options: {
output: { width: 1920, height: 1080 }, // ou "16:9"
fit: "reframe",
focus: "subject", // ou "face", "upper_body", { prompt: "the car" }, { x:0.5, y:0.5 }
quality: 7
},
outputFileType: "jpeg" // ou "png" se transparência for necessária
})
// result.outputUrl → use para visualizar ou encadear
Guia de foco:
"subject"— padrão; detecção de corpo inteiro, paisagens, objetos"face"— retratos, fotos de rosto"upper_body"— cortes do peito para cima{ prompt: "the logo" }— objeto nomeado da entrada do formulário do usuário{ x: 0.5, y: 0.5 }— centro geométrico (sem assunto claro)
Etapa 8 (Imagem) — Lote
Se lote foi selecionado no formulário OU o usuário forneceu múltiplos arquivos:
- Chame
asset_add_file()para cada arquivo para obter URLs pré-assinados individuais - Chame
image_crop_and_resizepara cada um com os mesmos parâmetros - Colete todos os valores
outputUrl - Chame
asset_preview_filecom todas as saídas em uma única chamada
As chamadas são executadas sequencialmente neste ambiente. Para >10 imagens, confirme com o usuário antes de iniciar.
Paginação entre turnos (lotes >20): Para lotes grandes, o contexto da conversa pode encher antes que todas as imagens sejam processadas, fazendo com que Claude pause no meio do lote. Isso é esperado — não é um erro. Quando acontecer:
- Informe quantas foram concluídas e quantas faltam (ex.: "20 / 24 concluídas — diga 'continuar' para o restante")
- Aguarde o usuário confirmar antes de retomar
- Ao retomar, comece da próxima imagem não processada e continue até o final
- Visualize todas as saídas juntas apenas após a imagem final ser concluída
Etapa 9 (Imagem) — Visualizar + Entregar + Board Firefly
asset_preview_file({
assets: [
{ name: "foto_1920x1080.jpg", presignedAssetUrl: result.outputUrl },
// todas as saídas bem-sucedidas
]
})
Salvar no CC + Criar Board Firefly
Após a visualização, faça upload de cada saída para o armazenamento CC usando o pipeline de upload em bloco
(asset_initialize_file_upload → PUT chunk → asset_finalize_file_upload).
Em seguida, chame a ferramenta de board firefly com as URLs de saída finais:
create_firefly_board({
import_adobe_storage: [
url_saida_final_1,
url_saida_final_2,
// ...
]
})
✅ Confirmado funcionando (Stage):
import_adobe_storagecom URLs pré-assinadas deasset_finalize_file_uploadpreenche boards com sucesso.❌ Não funciona:
import_generic_assetscom URNs CC (urn:aaid:sc:US:...) — latência de indexação USS causa boards em branco.Se a criação do board falhar ou a URL estiver malformada, omita o link do board (repetir não ajuda).
Publique o resumo de conclusão após a etapa do board:
✅ Concluído! [N] imagem(ns) redimensionada(s) e pronta(s).
📥 Download:
• redimensionada_1920x1080.jpg → <url_armazenamento_cc>
[liste individualmente se N ≤ 3, ou link de pasta única se N > 3]
🎨 Ver no Board Firefly → <url_do_board> ← omita se a criação do board falhou
FLUXO DE TRABALHO DE VÍDEO
Etapa 5 (Vídeo) — Obter ID do Ativo
Ferramentas de vídeo exigem assetId, não uma URL.
| Origem | Como |
|---|---|
Upload via asset_add_file | Use o assetId retornado |
| Armazenamento CC | asset_search com filters.mediaType: "video/mp4" → use o id do ativo |
Etapa 6 (Vídeo) — Alvos Comuns
| Nome | Dimensões |
|---|---|
| 4K / UHD | 3840 × 2160 |
| 1080p / HD | 1920 × 1080 |
| 720p | 1280 × 720 |
| 480p | 854 × 480 |
| Vertical 9:16 | 1080 × 1920 |
| Quadrado 1:1 | 1080 × 1080 |
Etapa 7 (Vídeo) — Chamar video_resize
⚠️
resizeVideoPollé uma ferramenta diferida — carregue-a primeiro antes de tentar fazer poll. Chamadas diretas sem carregamento falharão com erro "não carregado".
video_resize({
assetId: videoAssetId,
width: larguraAlvo,
height: alturaAlvo,
mode: "letterbox" // padrão; veja tabela de modos abaixo
})
// Retorna { jobStatus: "pending", statusId }
Modo — use os valores exatos da API (não os rótulos voltados ao usuário):
| Usuário diz | Valor da API | Comportamento |
|---|---|---|
| "ajustar", "preservar proporção", "letterbox" | "letterbox" | Preserva a proporção, adiciona barras pretas (padrão) |
| "preencher", "cortar para preencher", "sem barras" | "crop" | Corta as bordas para preencher exatamente o alvo |
| "esticar", "forçar exato" | "stretch" | Distorce para o alvo exato |
ℹ️ Auto-reframe para vídeo não está disponível no Claude ainda, mas novas ferramentas estão sendo adicionadas o tempo todo. Se precisar de mais controle, tente usar o Adobe Premiere.
Polling: carregue a ferramenta diferida resizeVideoPoll antes de chamá-la — chamadas diretas falham com "não carregado".
// Etapa 1: carregue a ferramenta diferida
await loadTool("resizeVideoPoll");
// Etapa 2: faça o poll
Etapa 8 (Vídeo) — Polling de Conclusão
Poll a cada 15 segundos até que o status não seja pending:
resizeVideoPoll({
statusId: "..."
})
// Possíveis respostas:
// { status: "pending" } → ainda em execução
// { status: "done", output: [...urls] } → concluído
// { status: "error", message: "..." } → falha
Saída: output conterá uma URL de saída para cada versão redimensionada.
Estas podem ser passadas diretamente para asset_preview_file.
Se o status permanecer
pendingapós 5 minutos, pergunte ao usuário se deseja continuar esperando ou voltar e tentar configurações diferentes.
Etapa 9 (Vídeo) — Visualizar + Entregar + Board Firefly
Visualização:
asset_preview_file({
assets: output.map((url, i) => ({
name: `video_redimensionado_${i}.mp4`,
presignedAssetUrl: url
}))
})
Salvar no CC: Use o pipeline de upload em bloco (não há ferramenta de upload direto de vídeo — upload em bloco é suportado para binários).
Board Firefly:
create_firefly_board({
import_adobe_storage: [
ccStorageUrl_1,
ccStorageUrl_2,
// ...
]
})
Resumo:
✅ Concluído! [N] vídeo(s) redimensionado(s) e pronto(s).
📥 Download:
• video_redimensionado_1920x1080.mp4 → <url_armazenamento_cc>
[liste individualmente se N ≤ 3, ou link de pasta única se N > 3]
🎨 Ver no Board Firefly → <url_do_board> ← omita se a criação do board falhou
Tratamento de Erros
| Problema | Ação |
|---|---|
asset_add_file retorna sem URL | Peça ao usuário: "Tente fazer upload novamente ou use um link público" |
image_crop_and_resize falha com "URI inválida" | Verifique se a URL é um presignedUrl ou HTTPS válido — nunca um caminho /mnt/user-data/ |
video_resize retorna erro | Verifique se o formato do ativo é suportado (mp4, mov) e se assetId está correto |
| Board Firefly não aparece | Atraso de indexação — não tente novamente. Forneça links de download do CC como fallback |
Ferramenta resizeVideoPoll não carregada | Sempre carregue ferramentas diferidas com loadTool() antes de chamar. Um erro "não carregado" indica que o carregamento foi esquecido |