Que fait jp-skill-image ?
Convertit une requête en langage naturel en une image générée avec Cloudflare Workers AI (@cf/black-forest-labs/flux-1-schnell). Voici le flux complet : l'utilisateur décrit ce qu'il veut, Claude fait l'ingénierie du prompt, le script appelle l'API Cloudflare, et l'image est sauvegardée localement en JPG.
Quand l'utiliser
L'utilisateur veut une image générée à partir d'une description — "génère un logo pour un café", "fais-moi une vignette pour ma vidéo sur l'IA", "une photo d'un chat cyberpunk". Claude est responsable de transformer une demande vague en un bon prompt avant de générer.
Ne s'applique pas à : l'édition d'une image existante, l'art vectoriel/SVG ou la vidéo.
Étape 0 — VÉRIFIER TOUJOURS le .env d'abord
Avant d'exécuter le script, vérifie que les identifiants sont résolus. Le script les cherche dans cet ordre : variables d'environnement réelles → .env du répertoire actuel ou d'un parent → ~/.claude/skills/jp-skill-image/.env (solution de secours globale).
python3 -c "import sys; sys.path.insert(0, '$HOME/.claude/skills/jp-skill-image'); from generate import load_credentials; print('OK' if all(load_credentials()) else 'MISSING')"
Si une variable est manquante (nouvel utilisateur / projet fraîchement cloné), n'essaie PAS de générer l'image — indique d'abord à l'utilisateur, en 3 étapes courtes, comment les obtenir :
- CF_ACCOUNT_ID : Tableau de bord Cloudflare → n'importe quel domaine/projet → Workers & Pages → Overview (apparaît à droite), ou directement dans
https://dash.cloudflare.com/profile/account-id... s'il n'y apparaît pas, utiliser l'ID visible dans l'URL du tableau de bord ou dans la section Manage Account du menu latéral gauche (pas "My Profile"). - CF_API_TOKEN :
https://dash.cloudflare.com/profile/api-tokens→ Create Token → Custom Token → permissionAccount.Workers AI Scripts: Edit→ Account Resources : ton compte → Create. - Crée le fichier
.env— à la racine du projet, ou dans~/.claude/skills/jp-skill-image/.envpour qu'il fonctionne depuis n'importe quel dossier — avec :CF_ACCOUNT_ID=xxxxx CF_API_TOKEN=xxxxx
Si le projet utilise un proxy d'entreprise pour accéder à Internet (vérifie si HTTPS_PROXY existe dans .npmrc ou si les requêtes vers des API externes échouent par timeout), ajoute aussi :
HTTPS_PROXY=<proxy-entreprise>
Une fois confirmé que les variables existent, continue normalement.
Comment l'exécuter
Depuis n'importe quel répertoire (l'image est sauvegardée par rapport au répertoire courant) :
python3 ~/.claude/skills/jp-skill-image/generate.py "<prompt optimisé>" -o <nom-fichier>.jpg --steps <N>
"<prompt optimisé>"— le prompt que tu écris (voir ci-dessous), pas les mots bruts de l'utilisateur.-o/--output— où sauvegarder (par défautout.jpg). Utilise un nom court et descriptif, ex.coffee-logo.jpg.--steps— étapes de diffusion (par défaut4). flux-schnell est affiné pour peu d'étapes, mais pour la MEILLEURE qualité utilise 8 sauf si l'utilisateur demande de la rapidité. N'utilise jamais moins de 4.
Le script affiche Saved <fichier> ... en cas de succès, ou une erreur lisible en cas d'échec (inclut le cas de réponse JSON avec image en base64, déjà géré en interne).
Le vrai travail de Claude : écrire un prompt de qualité maximale
La valeur de cette skill réside dans le fait que Claude enrichit l'intention de l'utilisateur en un prompt vivant, spécifique et techniquement correct avant d'appeler le script. Ne passe jamais la demande de l'utilisateur telle quelle — travaille-la d'abord.
Un prompt de haute qualité pour Flux doit nommer, dans cet ordre :
- Sujet principal — ce qui se trouve dans la scène, de manière concrète et sans ambiguïté.
- Style/médium — photo réaliste, rendu 3D, vectoriel plat, aquarelle, isométrique, pixel art, etc.
- Composition et cadrage — gros plan, plan large, centré, règle des tiers, angle de caméra.
- Éclairage et ambiance — heure dorée, néon, lumière de studio douce, ombres dramatiques, contre-jour.
- Couleur et niveau de détail — palette spécifique, arrière-plan, textures, niveau de détail ("highly detailed", "clean minimal").
- Qualité technique (pour photos/rendus réalistes) — des termes comme "cinematic", "8k", "sharp focus", "professional photography" aident Flux à se rapprocher de résultats premium.
Exemple de transformation :
- Utilisateur : "un logo pour un café"
- Prompt que tu passes : "minimalist logo of a steaming coffee cup, flat vector illustration, warm brown and cream palette, centered on a clean off-white background, simple bold shapes, modern branding, professional design"
Règles strictes :
- Prompt en anglais toujours (Flux répond mieux).
- 1-2 phrases, denses en informations, sans remplissage.
- Ne demande jamais de texte/mots lisibles dans l'image — Flux ne les rend pas bien.
- Si l'utilisateur ne donne pas assez de détails, comble toi-même les lacunes avec les meilleures décisions créatives (ne demande que si le sujet est vraiment ambigu).
- Utilise
--steps 8par défaut pour maximiser la qualité ; ne passe à 4 que si l'utilisateur demande explicitement de la rapidité.
Après la génération
- Confirme que le fichier a été sauvegardé (le script affiche le chemin).
- Dis à l'utilisateur le nom du fichier et le prompt exact que tu as utilisé, afin qu'il puisse l'ajuster et ré-exécuter.
- S'il veut des variations, exécute à nouveau avec un prompt modifié et un nouveau
-o.
Prérequis techniques
CF_ACCOUNT_IDetCF_API_TOKENrésolus par l'une des trois sources de l'Étape 0.- Python 3.8+. Aucune dépendance externe — le script utilise uniquement la bibliothèque standard (
urllib), donc pas besoin depip installni d'environnement virtuel. - Le script décode la réponse base64 de l'API Cloudflare et la sauvegarde en binaire JPG — la réponse n'est pas directement l'image.