Communitygithub.com

kalash33/adobe-redimensionar-fotos-e-videos

Redimensiona fotos e vídeos para dimensões exatas em pixels ou proporções de aspecto usando ferramentas Adobe. Use esta habilidade sempre que um usuário quiser redimensionar, escalar ou alterar as dimensões de um arquivo de imagem ou vídeo.

O que é adobe-redimensionar-fotos-e-videos?

Esta habilidade do agente AI (skill) integra-se ao ecossistema Adobe (Creative Cloud) para redimensionar arquivos de imagem e vídeo de forma programática. Ela traduz comandos em linguagem natural do usuário — como 'redimensione para 1920x1080', 'faça em 4K', 'mude a proporção para 16:9' — em chamadas de API específicas para as ferramentas `image_crop_and_resize` (para fotos) e `video_resize` (para vídeos). A skill é útil para desenvolvedores e criadores de conteúdo que precisam automatizar tarefas de redimensionamento em lote, garantindo que as saídas tenham as dimensões exatas para impressão, web, ou formatos de mídia social. O fluxo de trabalho é robusto: ele inicia com a inicialização obrigatória das ferramentas Adobe, faz uma verificação de licenciamento, e então guia o usuário através de uma coleta de parâmetros em múltiplas etapas (tipo de mídia, dimensões, modo de ajuste). Para imagens, oferece modos como 'reframe' (corte para preencher), 'pad' (letterbox) e 'extract' (isolar assunto), além de foco inteligente. Para vídeos, suporta letterbox, crop e stretch. A skill também gerencia uploads para o armazenamento da Creative Cloud e criação de boards no Firefly, com tratamento de lote e paginação para conjuntos grandes de arquivos.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kalash33/kstack/tree/HEAD/skills/adobe-adobe-resize-photos-and-videos

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

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

EtapaFerramentaObservações
Abrir seletor de arquivosasset_add_fileRetorna presignedAssetUrl, assetId e mediaType
Encontrar ativo no CCasset_searchReencene o resultado via asset_add_file para imagem; use id diretamente para vídeo
Renderizar PSD/AIdocument_render_vectorConverte para JPEG antes de redimensionar
Redimensionar imagemimage_crop_and_resizeUma chamada por dimensão; reframe por padrão
Visualizar saídasasset_preview_fileTodas as saídas em uma única chamada
Fazer upload para CC (iniciar)asset_initialize_file_uploadPrimeira chamada no pipeline de upload em bloco
Fazer upload para CC (finalizar)asset_finalize_file_uploadSegunda chamada; retorna URL CC pré-assinada para o board
Criar board Fireflycreate_firefly_boardPasse import_adobe_storage com a URL de finalização
Redimensionar vídeovideo_resizeRetorna statusId para polling
Poll de redimensionamento de vídeoresizeVideoPollFerramenta 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 IMAGEM
  • video/* → FLUXO DE TRABALHO DE VÍDEO

Etapa 4 — Resolver Dimensões Alvo

Usuário dizResolver para
1920×1080, 1920x1080largura: 1920, altura: 1080
4K3840 × 2160
HD, 1080p1920 × 1080
720p1280 × 720
480p854 × 480
Impressão A42480 × 3508 (300 DPI retrato)
Impressão Carta2550 × 3300 (300 DPI retrato)
16:9, 1:1, 4:5, 9:16string de proporção → passe como output: "16:9"
quadradooutput: "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:

  • presignedAssetUrl de asset_add_file() ✅
  • outputUrl de uma chamada de ferramenta anterior ✅
  • URL HTTPS pública fornecida pelo usuário ✅

Não utilizável como imageURI:

  • Caminhos /mnt/user-data/uploads/ ❌
  • renditionURL de asset_search diretamente ❌
  • URIs file:// ❌
OrigemResolução
Arquivo enviadoasset_add_file() → presignedAssetUrl
Ativo no armazenamento CCasset_search → reencene via asset_add_file() → presignedAssetUrl
Saída de ferramenta anteriorUse outputUrl diretamente
Arquivo PSD / AIdocument_render_vector (JPEG, 300 DPI) → outputPresignedUrl

Etapa 6 (Imagem) — Modo de Ajuste

IntençãoModoObservações
"redimensionar para LxA" / padrãoreframeMaior corte na proporção alvo, centralizado — sem distorção
"sem corte", "letterbox", "encaixar dentro"padPreenche espaço vazio com branco
"isolar assunto", "corte apertado"extractCorte 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 omita output.


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:

  1. Chame asset_add_file() para cada arquivo para obter URLs pré-assinados individuais
  2. Chame image_crop_and_resize para cada um com os mesmos parâmetros
  3. Colete todos os valores outputUrl
  4. Chame asset_preview_file com 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_storage com URLs pré-assinadas de asset_finalize_file_upload preenche boards com sucesso.

❌ Não funciona: import_generic_assets com 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.

OrigemComo
Upload via asset_add_fileUse o assetId retornado
Armazenamento CCasset_search com filters.mediaType: "video/mp4" → use o id do ativo

Etapa 6 (Vídeo) — Alvos Comuns

NomeDimensões
4K / UHD3840 × 2160
1080p / HD1920 × 1080
720p1280 × 720
480p854 × 480
Vertical 9:161080 × 1920
Quadrado 1:11080 × 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 dizValor da APIComportamento
"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 pending apó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

ProblemaAção
asset_add_file retorna sem URLPeç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 erroVerifique se o formato do ativo é suportado (mp4, mov) e se assetId está correto
Board Firefly não apareceAtraso de indexação — não tente novamente. Forneça links de download do CC como fallback
Ferramenta resizeVideoPoll não carregadaSempre carregue ferramentas diferidas com loadTool() antes de chamar. Um erro "não carregado" indica que o carregamento foi esquecido

Habilidades Relacionadas