Communitygithub.com

kalash33/adobe-redimensionar-fotos-y-videos

Redimensiona fotos y videos a dimensiones exactas en píxeles o relación de aspecto usando herramientas de Adobe. Usa esta habilidad cada vez que un usuario quiera cambiar el tamaño, escalar o modificar las dimensiones de un archivo de imagen o video.

¿Qué es adobe-redimensionar-fotos-y-videos?

Este skill para agentes de IA (como Claude Code, Cursor o Codex) permite redimensionar fotos y videos a dimensiones exactas en píxeles, relaciones de aspecto o tamaños predefinidos (como 4K, HD, A4) mediante el ecosistema de herramientas de Adobe. Su propósito es ejecutar comandos de usuario como "redimensiona esto a 1920x1080", "hazlo 4K", "cambia la relación de aspecto a 16:9" o "escala mi video", utilizando las API `image_crop_and_resize` para fotos y `video_resize` para videos. El flujo de trabajo incluye la inicialización obligatoria de herramientas de Adobe, verificación de licencias, una ingesta multi-paso para recopilar parámetros (tipo de archivo, dimensiones, modo de ajuste, enfoque inteligente y opciones), obtención del archivo fuente, y finalmente la ejecución del redimensionamiento con previsualización, carga a Creative Cloud y creación de un tablero Firefly. Soporta procesamiento por lotes, múltiples modos de ajuste (reframe, pad, extract para fotos; letterbox, crop, stretch para videos) y enfoque inteligente por sujeto, rostro o descripción textual. El skill documenta explícitamente las rutas de archivo no utilizables, la diferencia entre tipos de fuente (archivo subido, almacenamiento CC, URL pública) y el manejo de paginación en lotes grandes.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Adobe Redimensionar Fotos y Videos

Redimensiona imágenes o videos a las dimensiones, relación de aspecto o tamaño con nombre especificados por el usuario. Para conjuntos de plataformas de redes sociales (Instagram, TikTok, etc.) → usa la habilidad adobe-create-social-variations en su lugar.


Referencia de Herramientas

PasoHerramientaNotas
Abrir selector de archivosasset_add_fileDevuelve presignedAssetUrl, assetId y mediaType
Buscar recurso en CCasset_searchVuelve a escenificar el resultado vía asset_add_file para imagen; usa id directamente para video
Renderizar PSD/AIdocument_render_vectorConvierte a JPEG antes de redimensionar
Redimensionar imagenimage_crop_and_resizeUna llamada por dimensión; reframe por defecto
Vista previa de resultadosasset_preview_fileTodos los resultados en una sola llamada
Subir a CC (inicio)asset_initialize_file_uploadPrimera llamada en la canalización de subida por bloques
Subir a CC (finalización)asset_finalize_file_uploadSegunda llamada; devuelve URL CC prefirmada para el tablero
Crear tablero Fireflycreate_firefly_boardPasa import_adobe_storage con la URL de finalización
Redimensionar videovideo_resizeDevuelve statusId para sondeo
Sondeo de redimensionamiento de videoresizeVideoPollHerramienta diferida: cárgala antes de llamar

Flujo de Trabajo

Paso 0 — Inicializar Herramientas Adobe

Llama a adobe_mandatory_init primero. Esto devuelve reglas de manejo de archivos y orientación de enrutamiento de herramientas requerida para el resto del flujo de trabajo.

{ "skill_name": "adobe-resize-photos-and-videos", "skill_version": "1.0.1" }

Paso 1 — Verificación de Licencia

Ahora que adobe_mandatory_init confirmó que el conector "Adobe for creativity" está activo, verifica qué herramientas están disponibles a través del conector "Adobe for creativity" cotejándolas con la tabla de Referencia de Herramientas anterior.


ACCIÓN INMEDIATA REQUERIDA

Paso 1: Si faltan parámetros o son ambiguos → ejecuta la ingesta multi-paso (Paso 2 a continuación). Paso 2: Si no se ha subido ningún archivo, ejecuta el Paso 3 (asset_add_file({})). Paso 3: Detecta imagen vs. video y enruta al flujo de trabajo correcto (Paso 5 Imagen/Video).


Paso 2 — Ingesta Multi-Paso

Ejecuta esto cuando el usuario no haya proporcionado parámetros completos (tipo + dimensiones + modo de ajuste). Omite por completo si el mensaje del usuario ya contiene todos los tres.

Usa AskUserQuestion para recopilar parámetros paso a paso.

Paso 2a — Tipo

AskUserQuestion([{
  question: "¿Foto o video?",
  type: "single_select",
  options: ["Foto", "Video"]
}])

Paso 2b — Dimensiones

Si es Foto (multi_select — el usuario puede elegir una o más):

AskUserQuestion([{
  question: "Dimensiones — selecciona todas las que necesites",
  type: "multi_select",
  options: [
    "1080 × 1080 — Cuadrado de Instagram",
    "1080 × 1350 — Retrato de Instagram",
    "1080 × 1920 — Historias / Reels",
    "1920 × 1080 — YouTube / apaisado",
    "1280 × 720 — Miniatura de YouTube",
    "1200 × 675 — Publicación de X / Twitter",
    "1200 × 630 — Facebook / imagen OG",
    "1080 × 566 — Publicación de LinkedIn",
    "2560 × 1440 — Banner de YouTube",
    "3840 × 2160 — 4K / UHD",
    "400 × 400 — Perfil / avatar",
    "2480 × 3508 — Impresión A4 (300 ppp)",
    "Personalizado — Lo escribiré"
  ]
}])

Si el usuario incluye "Personalizado" → pregunta de seguimiento: "Introduce tus dimensiones personalizadas (ej. 1500×800):"

Si el usuario selecciona múltiples preajustes → ejecuta image_crop_and_resize una vez por dimensión, usando la misma URI de origen y parámetros cada vez. Previsualiza todos los resultados juntos al final.

Si es Video (multi_select — el usuario puede elegir una o más):

AskUserQuestion([{
  question: "Dimensiones — selecciona todas las que necesites",
  type: "multi_select",
  options: [
    "1080 × 1920 — Reels / TikTok / Historias",
    "1920 × 1080 — YouTube / apaisado",
    "1080 × 1080 — Publicación cuadrada",
    "1280 × 720 — YouTube 720p",
    "3840 × 2160 — 4K / UHD",
    "854 × 480 — SD / 480p",
    "Personalizado — Lo escribiré"
  ]
}])

Si el usuario selecciona múltiples preajustes de video → envía un trabajo video_resize separado por dimensión, sondea cada uno hasta completar, previsualiza todos los resultados juntos.

Paso 2c — Modo de ajuste

Si es Foto (single_select):

AskUserQuestion([{
  question: "Modo de ajuste",
  type: "single_select",
  options: [
    "Reencuadrar — recortar para llenar",
    "Rellenar — banda negra, sin recorte",
    "Extraer — aislar sujeto"
  ]
}])

Si es Video (single_select):

AskUserQuestion([{
  question: "Modo de ajuste",
  type: "single_select",
  options: [
    "Buzón — preservar relación",
    "Recortar — llenar, sin barras",
    "Estirar — forzar exacto (distorsionar)"
  ]
}])

Paso 2d — Enfoque inteligente (solo Foto)

AskUserQuestion([{
  question: "Enfoque inteligente — ¿dónde debe centrarse el recorte?",
  type: "single_select",
  options: [
    "Sujeto",
    "Rostro / retrato",
    "Parte superior del cuerpo",
    "Centro (geométrico)",
    "Objeto nombrado — Lo describiré"
  ]
}])

Si el usuario selecciona "Objeto nombrado" → pregunta de seguimiento: "Describe el objeto (ej. 'el coche rojo', 'el logotipo'):"

Paso 2e — Opciones (solo Foto)

AskUserQuestion([{
  question: "¿Alguna opción adicional?",
  type: "multi_select",
  options: [
    "Lote — múltiples imágenes",
    "Salida: JPEG",
    "Salida: PNG"
  ]
}])

Paso 2f — Origen (solo Video)

AskUserQuestion([{
  question: "¿Dónde está el video?",
  type: "single_select",
  options: [
    "Subir desde el dispositivo",
    "Desde Creative Cloud"
  ]
}])

Paso 3 — Obtener el Archivo de Origen

Crítico — las rutas /mnt/user-data/uploads/ NO son URLs utilizables. Incluso cuando el usuario ha adjuntado un archivo y aparece en el contexto en una ruta /mnt/user-data/uploads/, no puedes pasar esta ruta a ninguna herramienta de Adobe. Llama a asset_add_file() para escenificar el archivo — las rutas /mnt/user-data/uploads/ no son recuperables por las herramientas de Adobe.

INCORRECTO  ❌  imageURI: "/mnt/user-data/uploads/photo.jpg"
INCORRECTO  ❌  imageURI: "file:///mnt/user-data/uploads/photo.jpg"
CORRECTO ✅  llama a asset_add_file() → usa presignedAssetUrl del contexto del selector

Aún no hay archivo → abre el selector inmediatamente:

asset_add_file()

Detecta el tipo a partir del mediaType devuelto:

  • image/* → FLUJO DE IMAGEN
  • video/* → FLUJO DE VIDEO

Paso 4 — Resolver Dimensiones de Destino

El usuario diceResolver a
1920×1080, 1920x1080ancho: 1920, alto: 1080
4K3840 × 2160
HD, 1080p1920 × 1080
720p1280 × 720
480p854 × 480
Impresión A42480 × 3508 (300 ppp retrato)
Impresión Carta2550 × 3300 (300 ppp retrato)
16:9, 1:1, 4:5, 9:16cadena de relación → pasar como output: "16:9"
cuadradooutput: "1:1"
Solo ancho (800px de ancho)ancho: 800, usar cadena de relación para mantener relación

Si no se especificó ningún destino en el formulario NI en el mensaje del usuario → pregunta:

"¿Qué dimensiones necesitas? (ej. 1920×1080, A4, 16:9)"


FLUJO DE IMAGEN

Paso 5 (Imagen) — Fuentes URI Válidas

Solo estas funcionan como imageURI:

  • presignedAssetUrl de asset_add_file() ✅
  • outputUrl de una llamada de herramienta anterior ✅
  • URL HTTPS pública proporcionada por el usuario ✅

No utilizables como imageURI:

  • Rutas /mnt/user-data/uploads/ ❌
  • renditionURL de asset_search directamente ❌
  • URIs file:// ❌
OrigenResolución
Archivo subidoasset_add_file() → presignedAssetUrl
Recurso de CCasset_search → volver a escenificar vía asset_add_file() → presignedAssetUrl
Salida de herramienta anteriorUsa outputUrl directamente
Archivo PSD / AIdocument_render_vector (JPEG, 300 ppp) → outputPresignedUrl

Paso 6 (Imagen) — Modo de Ajuste

IntenciónModoNotas
"redimensionar a AxA" / predeterminadoreframeRecorte más grande en la relación objetivo, centrado — sin distorsión
"sin recortar", "banda negra", "ajustar dentro"padRellena el espacio vacío con blanco
"aislar sujeto", "recorte ajustado"extractRecorte ajustado alrededor de la región detectada

Predeterminado: reframe. Cambia solo cuando el usuario es explícito.

⛔ fit: "extract" es incompatible con un { ancho, alto } explícito — estira la imagen. Usa una cadena de relación u omite output.


Paso 7 (Imagen) — Llamar a image_crop_and_resize

image_crop_and_resize({
  imageURI: presignedAssetUrl,
  options: {
    output: { width: 1920, height: 1080 },  // o "16:9"
    fit: "reframe",
    focus: "subject",  // o "face", "upper_body", { prompt: "the car" }, { x:0.5, y:0.5 }
    quality: 7
  },
  outputFileType: "jpeg"  // o "png" si se necesita transparencia
})
// result.outputUrl → usar para previsualización o encadenamiento

Guía de enfoque:

  • "subject" — predeterminado; detección de cuerpo completo, paisajes, objetos
  • "face" — retratos, primeros planos
  • "upper_body" — recortes de pecho hacia arriba
  • { prompt: "the logo" } — objeto nombrado de la entrada del formulario del usuario
  • { x: 0.5, y: 0.5 } — centro geométrico (sin sujeto claro)

Paso 8 (Imagen) — Lote

Si se seleccionó lote en el formulario O el usuario proporcionó múltiples archivos:

  1. Llama a asset_add_file() por cada archivo para obtener URLs prefirmadas individuales
  2. Llama a image_crop_and_resize para cada uno con los mismos parámetros
  3. Recolecta todos los valores outputUrl
  4. Llama a asset_preview_file con todos los resultados en una sola llamada

Las llamadas se ejecutan secuencialmente en este entorno. Para más de 10 imágenes, confirma con el usuario antes de comenzar.

Paginación entre turnos (lotes >20): Para lotes grandes, el contexto de la conversación puede llenarse antes de que se procesen todas las imágenes, lo que hace que Claude se detenga a mitad del lote. Esto es esperado — no es un error. Cuando ocurra:

  • Indica cuántas se han completado y cuántas quedan (ej. "20 / 24 hechas — di 'continuar' para el resto")
  • Espera a que el usuario confirme antes de reanudar
  • Al reanudar, continúa desde la siguiente imagen no procesada hasta el final
  • Previsualiza todos los resultados juntos solo después de que se complete la imagen final

Paso 9 (Imagen) — Previsualizar + Entregar + Tablero Firefly

asset_preview_file({
  assets: [
    { name: "foto_1920x1080.jpg", presignedAssetUrl: result.outputUrl },
    // todos los resultados exitosos
  ]
})

Guardar en CC + Crear Tablero Firefly

Después de la previsualización, sube cada resultado al almacenamiento de CC usando la canalización de subida por bloques (asset_initialize_file_upload → PUT chunk → asset_finalize_file_upload).

Luego llama a la herramienta del tablero Firefly con las URLs de salida finales:

create_firefly_board({
  import_adobe_storage: [
    final_output_url_1,
    final_output_url_2,
    // ...
  ]
})

✅ Confirmado funcionando (Stage): import_adobe_storage con URLs prefirmadas de asset_finalize_file_upload pobla los tableros con éxito.

❌ No funciona: import_generic_assets con URNs de CC (urn:aaid:sc:US:...) — el retraso de indexación de USS causa tableros en blanco.

Si la creación del tablero falla o la URL está mal formada, omite el enlace del tablero (reintentar no ayuda).

Publica el resumen de finalización después del paso del tablero:

✅ ¡Listo! [N] imagen(es) redimensionada(s) y lista(s).

📥 Descargar:
• redimensionada_1920x1080.jpg → <cc_storage_url>
[lista individual si N ≤ 3, o enlace de carpeta única si N > 3]

🎨 Ver en Tablero Firefly → <board_url>   ← omitir si la creación del tablero falló

FLUJO DE VIDEO

Paso 5 (Video) — Obtener ID del Recurso

Las herramientas de video requieren assetId, no una URL.

OrigenCómo
Subir vía asset_add_fileUsa el assetId devuelto
Almacenamiento CCasset_search con filters.mediaType: "video/mp4" → usa el id del recurso

Paso 6 (Video) — Destinos Comunes

NombreDimensiones
4K / UHD3840 × 2160
1080p / HD1920 × 1080
720p1280 × 720
480p854 × 480
Vertical 9:161080 × 1920
Cuadrado 1:11080 × 1080

Paso 7 (Video) — Llamar a video_resize

⚠️ resizeVideoPoll es una herramienta diferida — cárgala primero antes de intentar sondear. Las llamadas directas sin cargar fallarán con error "no cargado".

video_resize({
  assetId: videoAssetId,
  width: targetW,
  height: targetH,
  mode: "letterbox"  // predeterminado; ver tabla de modos a continuación
})
// Devuelve { jobStatus: "pending", statusId }

Modo — usa los valores exactos de la API (no las etiquetas visibles para el usuario):

El usuario diceValor APIComportamiento
"ajustar", "preservar relación", "buzón""letterbox"Preserva la relación, añade barras negras (predeterminado)
"llenar", "recortar para llenar", "sin barras""crop"Recorta los bordes para llenar exactamente el objetivo
"estirar", "forzar exacto""stretch"Distorsiona al objetivo exacto

ℹ️ El reencuadre automático para video aún no está disponible en Claude, pero se están añadiendo nuevas herramientas constantemente. Si necesitas más control, prueba usando Adobe Premiere.

Sondeo: carga la herramienta diferida resizeVideoPoll antes de llamarla — las llamadas directas fallan con "no cargado".

// Paso 1: carga la herramienta diferida
await load_tool("resizeVideoPoll");

// Paso 2: ahora sondea con el statusId devuelto
resizeVideoPoll({ statusId: "abc-123" });
// Continúa sondeando hasta que el estado sea "completed" o "failed"

Paso 8 (Video) — Llamadas Múltiples

Si se seleccionaron múltiples dimensiones para el video, cada llamada a video_resize necesita un sondeo a resizeVideoPoll hasta que se complete. Es más eficiente enviar todas las llamadas a video_resize primero y luego sondear los trabajos uno por uno, recopilando resultados. Al final, llama a asset_preview_file con todos los resultados en una sola llamada.


Paso 9 (Video) — Guardar en CC

Después de la previsualización, sube a CC usando la misma canalización de subida que las imágenes. video_resize devuelve un presignedOutputUrl que puede usarse directamente como fuente de descarga; pásalo a la canalización de subida.

Luego llama a create_firefly_board con las URLs de CC:

create_firefly_board({
  import_adobe_storage: [
    cc_url_1,
    cc_url_2,
    // ...
  ]
})

Publica el resumen de finalización:

✅ ¡Listo! [N] videos redimensionados y listos.

📥 Descargar:
• video_1920x1080.mp4 → <cc_storage_url>
[lista individual]

🎨 Ver en Tablero Firefly → <board_url>   ← omitir si falló

Consejos y Notas

  • Siempre usa adobe_mandatory_init primero.
  • Si no hay archivo subido, abre el selector con asset_add_file({}).
  • Diferencia entre fotos (usa image_crop_and_resize) y videos (usa video_resize).
  • Para fotos, el modo de ajuste por defecto es reframe (recortar para llenar).
  • Para videos, el modo de ajuste por defecto es letterbox (barras negras).
  • Si no se selecciona enfoque, usa "subject" para fotos.
  • Para lotes, las llamadas se ejecutan en secuencia.
  • Siempre previsualiza todos los resultados juntos al final.
  • Los tableros Firefly pueden fallar; si es así, simplemente omite el enlace.
  • Las rutas /mnt/user-data/uploads/ nunca son válidas para herramientas de Adobe. Siempre usa asset_add_file().

Skills relacionados