Communitygithub.com

kalash33/adobe-redimensionner-photos-et-videos

Redimensionne des photos et vidéos aux dimensions exactes ou aux ratios d'aspect souhaités à l'aide des outils Adobe. Utilisez cette compétence dès qu'un utilisateur souhaite redimensionner, mettre à l'échelle ou modifier les dimensions d'un fichier image ou vidéo.

Qu'est-ce que adobe-redimensionner-photos-et-videos ?

Cette compétence pour agents IA (compatible avec Claude Code, Cursor, Codex, etc.) automatise le redimensionnement de photos et vidéos via la suite d'API créatives Adobe. Elle permet de transformer des images et vidéos à des dimensions précises (par ex. 1920x1080, 4K, A4, 16:9) en utilisant les outils `image_crop_and_resize` pour les photos et `video_resize` pour les vidéos. La compétence prend en charge divers formats : redimensionnement simple, mise à l'échelle par ratio, lots d'images, et ajustement par mode de cadrage (recadrage, letterbox, extraction). Elle gère également l'upload vers Creative Cloud et la création de tableaux Firefly pour organiser les sorties. Son workflow inclut une vérification d'éligibilité, une collecte multi-étapes des paramètres (type de média, dimensions, mode d'ajustement, focus, options), et un traitement séquentiel des lots avec gestion de la pagination pour les grands volumes. L'agent doit impérativement utiliser les URLs présignées fournies par `asset_add_file` plutôt que les chemins locaux pour interagir avec les outils Adobe.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Adobe Redimensionner Photos et Vidéos

Redimensionne des images ou vidéos selon des dimensions, ratios d'aspect ou tailles nommées spécifiées par l'utilisateur. Pour les ensembles de plateformes sociales (Instagram, TikTok, etc.) → utilisez plutôt la compétence adobe-create-social-variations.


Référence des Outils

ÉtapeOutilNotes
Ouvrir le sélecteur de fichierasset_add_fileRenvoie presignedAssetUrl, assetId et mediaType
Trouver un fichier dans CCasset_searchRé-étagerez le résultat via asset_add_file pour une image ; utilisez id directement pour une vidéo
Rendre un PSD/AIdocument_render_vectorConvertit en JPEG avant redimensionnement
Redimensionner l'imageimage_crop_and_resizeUn appel par dimension ; reframe par défaut
Prévisualiser les sortiesasset_preview_fileToutes les sorties en un seul appel
Upload vers CC (début)asset_initialize_file_uploadPremier appel du pipeline d'upload par blocs
Upload vers CC (fin)asset_finalize_file_uploadDeuxième appel ; renvoie une URL CC présignée pour le tableau
Créer un tableau Fireflycreate_firefly_boardPassez import_adobe_storage avec l'URL finalisée
Redimensionner une vidéovideo_resizeRenvoie statusId pour le suivi
Suivre le redimensionnement vidéoresizeVideoPollOutil différé — chargez avant d'appeler

Workflow

Étape 0 — Initialisation des Outils Adobe

Appelez d'abord adobe_mandatory_init. Cela renvoie les règles de gestion des fichiers et les directives de routage des outils nécessaires pour la suite du workflow.

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

Étape 1 — Vérification des Droits

Maintenant que adobe_mandatory_init a confirmé que le connecteur "Adobe for creativity" est actif, vérifiez quels outils sont disponibles via ce connecteur en les croisant avec le tableau Référence des Outils ci-dessus.


ACTION IMMÉDIATE REQUISE

Étape 1 : Si des paramètres sont manquants ou ambigus → exécutez le processus d'accueil multi-étapes (Étape 2 ci-dessous). Étape 2 : Si aucun fichier n'est uploadé, exécutez l'Étape 3 (asset_add_file({})). Étape 3 : Détectez image vs. vidéo et acheminez vers le workflow correct (Étape 5 Image/Vidéo).


Étape 2 — Accueil Multi-Étapes

Exécutez ceci lorsque l'utilisateur n'a pas fourni de paramètres complets (type + dimensions + mode d'ajustement). Ignorez complètement si le message de l'utilisateur contient déjà les trois éléments.

Utilisez AskUserQuestion pour collecter les paramètres étape par étape.

Étape 2a — Type

AskUserQuestion([{
  question: "Photo ou vidéo ?",
  type: "single_select",
  options: ["Photo", "Vidéo"]
}])

Étape 2b — Dimensions

Si Photo (multi_select — l'utilisateur peut en choisir un ou plusieurs) :

AskUserQuestion([{
  question: "Dimensions — sélectionnez tout ce dont vous avez besoin",
  type: "multi_select",
  options: [
    "1080 × 1080 — Carré Instagram",
    "1080 × 1350 — Portrait Instagram",
    "1080 × 1920 — Stories / Reels",
    "1920 × 1080 — YouTube / paysage",
    "1280 × 720 — Miniature YouTube",
    "1200 × 675 — Post X / Twitter",
    "1200 × 630 — Post Facebook / OG image",
    "1080 × 566 — Post LinkedIn",
    "2560 × 1440 — Bannière YouTube",
    "3840 × 2160 — 4K / UHD",
    "400 × 400 — Profil / avatar",
    "2480 × 3508 — Impression A4 (300 ppp)",
    "Personnalisé — Je vais le taper"
  ]
}])

Si l'utilisateur inclut "Personnalisé" → suivi : "Entrez vos dimensions personnalisées (par ex. 1500×800) :"

Si l'utilisateur sélectionne plusieurs préréglages → exécutez image_crop_and_resize une fois par dimension, en utilisant la même URI source et les mêmes paramètres à chaque fois. Prévisualisez toutes les sorties ensemble à la fin.

Si Vidéo (multi_select — l'utilisateur peut en choisir un ou plusieurs) :

AskUserQuestion([{
  question: "Dimensions — sélectionnez tout ce dont vous avez besoin",
  type: "multi_select",
  options: [
    "1080 × 1920 — Reels / TikTok / Stories",
    "1920 × 1080 — YouTube / paysage",
    "1080 × 1080 — Post carré",
    "1280 × 720 — YouTube 720p",
    "3840 × 2160 — 4K / UHD",
    "854 × 480 — SD / 480p",
    "Personnalisé — Je vais le taper"
  ]
}])

Si l'utilisateur sélectionne plusieurs préréglages vidéo → soumettez un travail video_resize séparé par dimension, suivez chacun jusqu'à son achèvement, prévisualisez toutes les sorties ensemble.

Étape 2c — Mode d'Ajustement

Si Photo (single_select) :

AskUserQuestion([{
  question: "Mode d'ajustement",
  type: "single_select",
  options: [
    "Recadrage — recadrer pour remplir",
    "Bordure — letterbox, sans recadrage",
    "Extraction — isoler le sujet"
  ]
}])

Si Vidéo (single_select) :

AskUserQuestion([{
  question: "Mode d'ajustement",
  type: "single_select",
  options: [
    "Letterbox — préserver le ratio",
    "Recadrage — remplir, sans barres",
    "Étirer — forcer exact (distorsion)"
  ]
}])

Étape 2d — Focus Intelligent (Photo uniquement)

AskUserQuestion([{
  question: "Focus intelligent — où centrer le recadrage ?",
  type: "single_select",
  options: [
    "Sujet",
    "Visage / portrait",
    "Haut du corps",
    "Centre (géométrique)",
    "Objet nommé — Je vais le décrire"
  ]
}])

Si l'utilisateur sélectionne "Objet nommé" → suivi : "Décrivez l'objet (par ex. 'la voiture rouge', 'le logo') :"

Étape 2e — Options (Photo uniquement)

AskUserQuestion([{
  question: "Options supplémentaires ?",
  type: "multi_select",
  options: [
    "Lot — plusieurs images",
    "Sortie : JPEG",
    "Sortie : PNG"
  ]
}])

Étape 2f — Source (Vidéo uniquement)

AskUserQuestion([{
  question: "Où se trouve la vidéo ?",
  type: "single_select",
  options: [
    "Uploader depuis l'appareil",
    "Depuis Creative Cloud"
  ]
}])

Étape 3 — Obtenir le Fichier Source

Critique — Les chemins /mnt/user-data/uploads/ ne sont PAS des URLs utilisables. Même lorsque l'utilisateur a joint un fichier et qu'il apparaît dans le contexte à un chemin /mnt/user-data/uploads/, vous ne pouvez pas passer ce chemin à un outil Adobe. Appelez asset_add_file() pour étager le fichier — les chemins /mnt/user-data/uploads/ ne sont pas récupérables par les outils Adobe.

MAUVAIS ❌ imageURI : "/mnt/user-data/uploads/photo.jpg"
MAUVAIS ❌ imageURI : "file:///mnt/user-data/uploads/photo.jpg"
CORRECT ✅ appelez asset_add_file() → utilisez presignedAssetUrl du contexte du sélecteur

Aucun fichier encore → ouvrez immédiatement le sélecteur :

asset_add_file()

Détectez le type à partir du mediaType renvoyé :

  • image/* → WORKFLOW IMAGE
  • video/* → WORKFLOW VIDÉO

Étape 4 — Résoudre les Dimensions Cibles

L'utilisateur ditRésoudre en
1920×1080, 1920x1080largeur : 1920, hauteur : 1080
4K3840 × 2160
HD, 1080p1920 × 1080
720p1280 × 720
480p854 × 480
Impression A42480 × 3508 (300 PPP portrait)
Impression Lettre2550 × 3300 (300 PPP portrait)
16:9, 1:1, 4:5, 9:16chaîne de ratio → passez comme output: "16:9"
carréoutput: "1:1"
Largeur seulement (800 px de large)largeur : 800, utilisez une chaîne de ratio pour maintenir l'aspect

Si aucune cible n'a été spécifiée dans le formulaire ET aucune dans le message de l'utilisateur → demandez :

"De quelles dimensions avez-vous besoin ? (par ex. 1920×1080, A4, 16:9)"


WORKFLOW IMAGE

Étape 5 (Image) — Sources URI Valides

Seules ces sources fonctionnent comme imageURI :

  • presignedAssetUrl de asset_add_file() ✅
  • outputUrl d'un appel d'outil précédent ✅
  • URL HTTPS publique fournie par l'utilisateur ✅

Non utilisable comme imageURI :

  • Chemins /mnt/user-data/uploads/ ❌
  • renditionURL de asset_search directement ❌
  • URIs file:// ❌
SourceRésolution
Fichier uploadéasset_add_file() → presignedAssetUrl
Fichier du stockage CCasset_search → ré-étagerez via asset_add_file() → presignedAssetUrl
Sortie d'outil précédentUtilisez outputUrl directement
Fichier PSD / AIdocument_render_vector (JPEG, 300 PPP) → outputPresignedUrl

Étape 6 (Image) — Mode d'Ajustement

IntentionModeNotes
"redimensionner à LxH" / par défautreframePlus grand recadrage au ratio cible, centré — sans distorsion
"pas de recadrage", "letterbox", "ajuster à l'intérieur"padRemplit l'espace vide avec du blanc
"isoler le sujet", "recadrage serré"extractRecadrage serré autour de la région détectée

Par défaut : reframe. Changez seulement lorsque l'utilisateur est explicite.

⛔ fit : "extract" est incompatible avec un { width, height } explicite — cela étire l'image. Utilisez une chaîne de ratio ou omettez output.


Étape 7 (Image) — Appeler 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" si transparence nécessaire
})
// result.outputUrl → utilisez pour la prévisualisation ou le chaînage

Guide de focus :

  • "subject" — par défaut ; détection corps entier, paysages, objets
  • "face" — portraits, photos de visage
  • "upper_body" — recadrages buste
  • { prompt : "le logo" } — objet nommé depuis le formulaire de l'utilisateur
  • { x: 0.5, y: 0.5 } — centre géométrique (aucun sujet clair)

Étape 8 (Image) — Lot

Si le lot a été sélectionné dans le formulaire OU l'utilisateur a fourni plusieurs fichiers :

  1. Appelez asset_add_file() pour chaque fichier afin d'obtenir des URLs présignées individuelles
  2. Appelez image_crop_and_resize pour chacun avec les mêmes paramètres
  3. Collectez toutes les valeurs outputUrl
  4. Appelez asset_preview_file avec toutes les sorties en un seul appel

Les appels s'exécutent séquentiellement dans cet environnement. Pour >10 images, confirmez avec l'utilisateur avant de commencer.

Pagination entre les tours (lots >20) : Pour les grands lots, le contexte de la conversation peut se remplir avant que toutes les images soient traitées, ce qui amène Claude à faire une pause au milieu du lot. C'est attendu — pas une erreur. Quand cela arrive :

  • Indiquez combien ont été terminées et combien restent (par ex. "20 / 24 faites — dites 'continuer' pour le reste")
  • Attendez que l'utilisateur confirme avant de reprendre
  • À la reprise, reprenez à partir de l'image non traitée suivante et continuez jusqu'à la fin
  • Prévisualisez toutes les sorties ensemble seulement après la dernière image terminée

Étape 9 (Image) — Prévisualiser + Livrer + Tableau Firefly

asset_preview_file({
  assets: [
    { name: "photo_1920x1080.jpg", presignedAssetUrl: result.outputUrl },
    // toutes les sorties réussies
  ]
})

Sauvegarder dans CC + Créer un Tableau Firefly

Après la prévisualisation, uploadez chaque sortie vers le stockage CC via le pipeline d'upload par blocs (asset_initialize_file_upload → PUT chunk → asset_finalize_file_upload).

Appelez ensuite l'outil de tableau Firefly avec les URLs de sortie finalisées :

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

✅ Confirmé fonctionnel (Stage) : import_adobe_storage avec URLs présignées de asset_finalize_file_upload remplit avec succès les tableaux.

❌ Ne fonctionne pas : import_generic_assets avec URNs CC (urn:aaid:sc:US:...) — le délai d'indexation USS provoque des tableaux vides.

Si la création du tableau échoue ou que l'URL est malformée, omettez le lien du tableau (relancer n'aide pas).

Publiez le résumé d'achèvement après l'étape du tableau :

✅ Terminé ! [N] image(s) redimensionnée(s) et prête(s).

📥 Téléchargement :
• redimensionnee_1920x1080.jpg → <cc_storage_url>
[listez individuellement si N ≤ 3, ou un lien de dossier unique si N > 3]

🎨 Voir dans le tableau Firefly → <board_url>   ← omettez si la création du tableau a échoué

WORKFLOW VIDÉO

Étape 5 (Vidéo) — Obtenir l'ID du Fichier

Les outils vidéo nécessitent assetId, pas une URL.

SourceComment
Upload via asset_add_fileUtilisez le assetId renvoyé
Stockage CCasset_search avec filters.mediaType : "video/mp4" → utilisez l'id du fichier

Étape 6 (Vidéo) — Cibles Courantes

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

Étape 7 (Vidéo) — Appeler video_resize

⚠️ resizeVideoPoll est un outil différé — chargez-le d'abord avant de tenter de suivre. Les appels directs sans chargement échoueront avec une erreur "not loaded".

video_resize({
  assetId: videoAssetId,
  width: targetW,
  height: targetH,
  mode: "letterbox"  // par défaut ; voir tableau des modes ci-dessous
})
// Renvoie { jobStatus: "pending", statusId }

Mode — utilisez les valeurs exactes de l'API (pas les libellés visibles par l'utilisateur) :

Ce que dit l'utilisateurValeur APIComportement
"ajuster", "préserver le ratio", "letterbox""letterbox"Préserve le ratio, ajoute des barres noires (par défaut)
"remplir", "recadrer pour remplir", "pas de barres""crop"Recadre les bords pour remplir exactement la cible
"étirer", "forcer exact""stretch"Déforme pour correspondre exactement à la cible

ℹ️ Le recadrage automatique pour vidéo n'est pas encore disponible dans Claude, mais de nouveaux outils sont ajoutés régulièrement. Si vous avez besoin de plus de contrôle, essayez d'utiliser Adobe Premiere.

Suivi : chargez l'outil différé resizeVideoPoll avant de l'appeler — les appels directs échouent avec "not loaded".

// Étape 1 : chargez l'outil différé
// (exemple d'initialisation selon la documentation de l'agent)

Étape 8 (Vidéo) — Suivi du Travail

// Après avoir chargé l'outil différé :
resizeVideoPoll({ statusId: videoStatusId })
// Renvoie { status: "completed"|"failed"|"in_progress", assetId: videoAssetId }

Répétez jusqu'à ce que status soit "completed" ou "failed". Utilisez un délai raisonnable entre les tentatives.


Étape 9 (Vidéo) — Prévisualiser + Livrer + Tableau Firefly

asset_preview_file({
  assets: [
    { name: "video_1920x1080.mp4", presignedAssetUrl: videoOutputUrl },
    // toutes les vidéos redimensionnées
  ]
})

Sauvegarder dans CC + Créer un Tableau Firefly (identique au workflow image)

get_presigned_url_for_video(videoAssetId)  // outil hypothétique — convertit assetId en URL
// Suivez le pipeline d'upload par blocs comme pour les images
✅ Terminé ! [N] vidéo(s) redimensionnée(s) et prête(s).

📥 Téléchargement :
• video_1920x1080.mp4 → <cc_storage_url>

🎨 Voir dans le tableau Firefly → <board_url>

Annotation des Outils pour le Moteur

{
  "functionName": "asset_add_file",
  "parameters": {},
  "description": "Ouvre un sélecteur de fichier système. L'utilisateur sélectionne un fichier à uploader. Renvoie presignedAssetUrl, assetId, mediaType."
}
{
  "functionName": "image_crop_and_resize",
  "parameters": {
    "imageURI": "URL du fichier image",
    "options": {
      "output": { "width": 1920, "height": 1080 },
      "fit": "reframe | pad | extract",
      "focus": "subject | face | upper_body | { prompt: 'keyword' } | { x: 0.5, y: 0.5 }",
      "quality": 7
    },
    "outputFileType": "jpeg | png"
  }
}
{
  "functionName": "video_resize",
  "parameters": {
    "assetId": "ID du fichier vidéo",
    "width": 1920,
    "height": 1080,
    "mode": "letterbox | crop | stretch"
  }
}
{
  "functionName": "resizeVideoPoll",
  "parameters": {
    "statusId": "ID de statut du travail"
  }
}
{
  "functionName": "asset_preview_file",
  "parameters": {
    "assets": [
      { "name": "output.jpg", "presignedAssetUrl": "url" }
    ]
  }
}
{
  "functionName": "document_render_vector",
  "parameters": {
    "assetId": "ID du fichier PSD/AI",
    "format": "jpeg",
    "dpi": 300,
    "outputFormat" : "presigned"
  }
}
{
  "functionName": "create_firefly_board",
  "parameters": {
    "import_adobe_storage": ["url_finalisee_1", "url_finalisee_2"]
  }
}
{
  "functionName": "adobe_mandatory_init",
  "parameters": {
    "skill_name": "adobe-resize-photos-and-videos",
    "skill_version": "1.0.1"
  }
}

Notes Complémentaires

  • Formats de fichiers vidéo : Testé avec .mp4, .mov, .avi — peut ne pas fonctionner pour tous les codecs.
  • Limites de taille : L'API Adobe impose une taille de fichier maximale (vérifiez la documentation Adobe pour les limites actuelles).
  • Redimensionnement par lots : Limité à ~20 fichiers par session en raison des limites de contexte. Pour de plus grands lots, divisez en plusieurs sessions.
  • Dépannage : Si un appel d'outil échoue, vérifiez que l'URL source est bien une URL présignée et non un chemin local. Si resizeVideoPoll échoue avec "not loaded", assurez-vous d'avoir chargé l'outil différé au préalable.

Skills associés