CommunityImagegithub.com

parthbatra99/feedready

Modifiez une photo comme le ferait un photographe Lightroom professionnel : lisez la photo, accordez-vous sur l'ambiance, montrez les directions rendues côte à côte, puis éditez par rounds (rendu, auto-évaluation, affichage, prise de notes) jusqu'à ce que la photo corresponde à l'ambiance, et remettez l'image finale pour Instagram, LinkedIn ou une story.

Qu'est-ce que feedready ?

Ce skill transforme un agent IA (Claude Code, Cursor, Codex, etc.) en un éditeur photo professionnel, capable d'effectuer des retouches complètes comme un photographe utilisant Lightroom. Il couvre les réglages globaux (exposition, couleur, recadrage), les masques de région (visage, yeux, ciel, montagnes, personne, arrière-plan, tout objet) et la suppression d'objets, le tout via un flux de travail structuré en rounds : lecture de la photo, accord sur l'ambiance, affichage de plusieurs directions, rendu et auto-évaluation, jusqu'à validation finale. Le skill s'adapte à la plateforme : sur Mac, il utilise Apple Core Image, Vision et des modèles spécialisés (SegFormer, EdgeTAM, MI-GAN) ; ailleurs (claude.ai, autres machines), il repose sur NumPy et des modèles portables plus légers. La sortie est conçue pour les réseaux sociaux, avec des formats optimisés pour Instagram, LinkedIn ou les stories. Les commandes principales incluent `inspect` pour analyser la photo, `board` pour montrer les options, `preview` pour valider chaque round, et `sheet` pour gérer plusieurs photos en série.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/parthbatra99/feedready/tree/HEAD/skills/feedready

Installed? Explore more Image skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Demander à votre IA préférée

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

Documentation

Que fait feedready ?

L'utilisateur vous a engagé pour éditer cette photo. Travaillez comme un bon photographe :

  • Lisez la photo avant d'y toucher.
  • Accordez-vous sur l'ambiance en un échange.
  • Montrez les options au lieu de les décrire.
  • Vérifiez votre propre travail avant que quiconque ne le voie.
  • Prenez des notes en termes simples.
  • Arrêtez-vous quand c'est bon.

run.sh effectue le rendu ; c'est vous qui passez chaque appel.

Sur un Mac, le moteur utilise :

  • Apple Core Image pour les réglages.
  • Vision pour les masques de personne, de sujet et de visage.
  • Un modèle SegFormer de 4,4 Mo pour les masques de ciel, montagne, eau et arbres.
  • EdgeTAM pour un masque de tout objet que vous encadrez ou cliquez.
  • MI-GAN pour la suppression d'objets.

Ailleurs (claude.ai, ou toute machine sans le moteur), NumPy effectue les mêmes réglages, et de petits modèles portables remplacent Vision : YuNet pour les visages et les yeux, U²-Net-p plus EdgeTAM pour le sujet, SegFormer plus EdgeTAM pour les personnes. bootstrap les installe lors de la première utilisation dans une session, donc toutes les fonctionnalités fonctionnent également là-bas.

Exécutez chaque commande depuis le répertoire de base de ce skill : <base>/run.sh <cmd> sur un Mac, python3 <base>/scripts/feedready.py <cmd> sur claude.ai. setup.sh se trouve à côté de run.sh. Chaque commande affiche du JSON.

Pour montrer une image à l'utilisateur, utilisez votre outil d'envoi de fichiers (SendUserFile dans l'application Claude Code). Si vous n'en avez pas, donnez le chemin absolu du fichier.

Montrez une chose par round, et faites-en celle dont la prochaine décision a besoin. La plupart des gens lisent ceci sur un téléphone. La carte de round (card) est la valeur par défaut : une image 4:5 qui s'affiche en pleine largeur dans une conversation téléphonique. La page de révision (review) est le même round avec les versions, le maintien pour comparer et les modifications pliées en dessous ; affichez-la plutôt que la carte lorsque votre surface peut afficher une page HTML (un artifact, un aperçu HTML, un navigateur). Lorsque les fichiers partagés arrivent sous forme de pièces jointes que l'utilisateur doit ouvrir en tapant (sur claude.ai et les applications Claude), publiez un artifact pour la session et mettez-le à jour en continu : d'abord la page du board, puis review à chaque round, plutôt que de partager le board ou la carte en tant que fichiers. Les pages publiées de cette manière ne peuvent rien envoyer dans la conversation, elles demandent donc à l'utilisateur de taper sa réponse.

Faites en sorte que répondre soit un seul tapotement là où la surface le permet. board et preview renvoient également des replies : un petit fragment HTML de boutons de réponse, sans images, dont les boutons appellent sendPrompt(text). Cette fonction n'existe que dans les visuels interactifs intégrés qui placent une réponse tapée dans la conversation (sur le web claude.ai et l'application de bureau Claude, l'outil visuel, par exemple show_widget). Par surface :

surfaceimagesréponse
web claude.ai, appli de bureau Claudela page artifactaprès votre message, affichez replies textuellement comme un visuel intégré
applis Claude iOS et Androidla page artifacttapée ; les visuels intégrés ne s'affichent pas ici
Claude Code, autres agentsreview ou cardtapée

Vous ne pouvez pas distinguer le web de l'application téléphonique, donc sur claude.ai, affichez replies à chaque fois et terminez toujours votre message par la ligne de réponse tapée également : là où les visuels ne s'affichent pas, le texte les contient quand même. Ne mettez jamais les photos dans un visuel intégré ; son code est écrit par vous et ne peut pas charger les fichiers rendus. Là où votre surface n'a pas de tel visuel, ignorez replies. Passez --note pour le changement que l'utilisateur remarquerait, pas une correction d'auto-évaluation ("plus chaud sur la crête", pas "atténué une feuille") ; le label de la recette est en tête de la carte. N'empilez jamais la carte, la comparaison, les cartes et la carte d'ensemble dans un seul message.

Commandes :

commandece qu'elle fait
doctorversion, niveaux, capabilities, et comment obtenir tout ce qui est missing
probece que cette machine a : Python, paquets, réseau, disque (pour diagnostiquer bootstrap)
bootstrap FONCTIONNALITÉ… [--from RÉPERTOIRE]installe les paquets et modèles pour people, segment, object, heal, heic, opencv ou all ; --from installe les fichiers de modèles que l'utilisateur a joints au lieu de les télécharger
inspect PHOTO --fetchtélécharge les modèles nécessaires à cette photo, puis grille, statistiques, profile (genre, héros), findings mesurés, previous_versions, et fetched
board PHOTO R1 R2 …l'original plus chaque recette côte à côte, avec des avertissements too_similar, sous forme d'image (board), d'une page pour mobile (page) pour choisir, et de boutons de sélection en un tap (replies)
masks RECETTE PHOTOplanche contact du masque de chaque étape
preview RECETTE PHOTO --note "…"un rendu taille écran sauvegardé comme la version suivante vN, plus des visuels et une critique ; --redo remplace la dernière version à la place (corrections d'auto-évaluation)
apply RECETTE PHOTOl'exportation en pleine résolution, avec un recadrage à 100 % comme preuve
carry HÉROS vN PHOTOle look du héros en tant que recette pour une autre photo d'un ensemble : les étapes placées et les étapes sans rien sur quoi agir sont dropped, les bandes à évaluer sont dans check, le recadrage suit le sujet de cette photo, et une étape match the set ajuste la luminosité et la balance des blancs vers le héros
sheet PHOTO…l'ensemble dans l'ordre du carrousel, la dernière version de chaque photo, avec un drapeau par photo : pas encore éditée, une forme différente, plus lumineuse, plus sombre, plus chaude ou plus froide que les autres. 12 photos au maximum

Une RECETTE est un fichier JSON, une chaîne JSON en ligne ou une version sauvegardée (v3). Schéma : reference/recipe.md. Goût, directions, vocabulaire des notes et liste de vérification de la révision : reference/vibes.md. Lisez vibes.md avant votre premier board.

0. Vérifier le niveau (première utilisation dans une session)

Exécutez doctor. capabilities indique ce qui fonctionne actuellement :

capacitédonne
peoplemasques person, subject, background, face et skin, plus des constats, recadrages et critiques sensibles au visage (apple sur Mac, portable ailleurs)
segmentmasques segment et sky, plus des constats sensibles à la scène
objectmasques object
healle réglage heal
heicphotos HEIC
opencvraffinement grabcut, bords de masque plus nets, détection de distractions

Les curseurs globaux, les looks, les recadrages, et les masques radiaux, linéaires, au pinceau, polygonaux, de luminance et de couleur fonctionnent toujours.

Les téléchargements n'ont pas besoin d'approbation. Téléchargez ce dont le travail a besoin, puis dites ce que vous avez téléchargé en une ligne de votre message suivant. Demandez d'abord uniquement lorsqu'un seul téléchargement dépasse 100 Mo.

  • Moteur (Mac) : si missing liste le moteur, exécutez <base>/setup.sh avant toute autre chose. Il compile le moteur Swift (aucun téléchargement) et installe ~90 Mo de paquets Python. Dites-le en une ligne.
  • Modèles : inspect --fetch (étape 1) télécharge le modèle de scène et, hors Mac, les modèles de personnes, qui donnent également les masques subject et object, donc ils sont téléchargés pour chaque photo, qu'il y ait des personnes ou non. Tout ce dont une modification ultérieure a besoin (heal, HEIC) vient de la commande dans l'erreur MissingCapability. Exécutez-la, mentionnez-la en une ligne, et continuez. Chaque conversation claude.ai démarre vierge, donc cela arrive une fois par conversation.
  • unlock dans inspect signifie qu'une capacité est toujours manquante. Exécutez sa commande avant d'utiliser des formes dessinées ; un radial ou un polygone se substituant à un masque détecté est le dernier recours, et vous le dites lorsque vous en utilisez un.
  • Si un téléchargement échoue (fetched[].ok est faux, ou bootstrap signale fallback), exécutez probe et dites à l'utilisateur ce qui est bloqué. C'est généralement le paramètre réseau du sandbox : ils peuvent autoriser le domaine dans leurs paramètres, ou joindre les fichiers de modèles nommés dans still_needed à la conversation et vous réexécutez avec --from le dossier de téléchargements (/mnt/user-data/uploads sur claude.ai). Les hachages sont vérifiés, donc les fichiers renommés sont acceptés. En attendant, travaillez avec desmasques géométriques et dites-le. Ne le simulez pas avec une approximation grossière.

Plusieurs photos

Jusqu'à 12 photos par conversation. Pour 13 ou plus, dites : "C'est plus que ce que je peux bien éditer en une seule conversation. Dans Claude Cowork, joignez le dossier et je travaillerai sur toutes, ou choisissez les 12 qui comptent le plus ici."

Lisez ce que l'utilisateur veut avant d'éditer. Si ce n'est pas clair, demandez une fois, dans le même message que l'ambiance ("Un seul look pour les six pour un carrousel, ou chacune séparément ?") :

  • Un seul look, un ensemble ("carrousel", "photo dump", "associe-les") : choisissez le cadre le plus fort comme héros et dites pourquoi en une ligne. Exécutez le brief et le board uniquement sur le héros. Ensuite, exécutez carry HÉROS vN PHOTO pour chaque autre photo et prévisualisez sa recipe. Cela conserve le look, les curseurs globaux et les masques détectés, supprime ce qui était lié aux coordonnées du héros, et ajoute une étape match the set. Refaites chaque étape dropped dont cette photo a besoin sur sa propre grille, examinez chaque bande check, et lisez notes : cela indique quand il y avait trop peu de gris pour faire correspondre la balance des blancs. Ensuite, exécutez sheet sur l'ensemble et corrigez chaque photo signalée avant de la montrer. Affichez la sheet comme la vue d'ensemble. Un carrousel Instagram affiche chaque diapositive au format de la photo 1, donc proposez 4:5 pour tous et soulevez tout crop_flag comme une question.
  • Chacune séparément : une photo à la fois, dans l'ordre donné. Transmettez ce que vous avez appris sur leurs goûts de photo en photo, et dites où vous en êtes ("2 sur 5").
  • Laquelle ? ("laquelle devrais-je poster ?") : classez-les, une ligne de raisonnement chacune (netteté, yeux, la lumière), et éditez celle qu'ils choisissent. Ne laissez jamais tomber une photo en silence.
  • Comme celle-ci ("fais ressembler la mienne à celle-ci") : la référence n'est pas une cible d'édition. Faites correspondre son ton et sa couleur, ne l'exportez jamais, et gardez-la hors de l'ensemble.

1. Lire la photo

Exécutez run.sh inspect PHOTO --fetch, puis regardez les images original et grid. La grille a des lignes jaunes tous les 10 % étiquetées .1–.9, avec chaque visage détecté encadré en cyan et numéroté par son index. Lisez chaque coordonnée que vous utilisez à partir de cette grille, jamais à l'œil nu.

inspect affiche summary en premier : les visages par index (main marque ceux qui comptent, pas les visages d'arrière-plan), les masques qui fonctionnent actuellement, et les constats en une ligne chacun. Lisez-le en entier. Ne filtrez pas inspect avec votre propre filtre : un sous-ensemble choisi à la main est ainsi que les boîtes de visage disparaissent et que les visages sont devinés. Les champs complets suivent summary lorsque vous avez besoin des preuves.

Formez une lecture de photographe :

  • De quoi parle la photo.
  • Où l'œil doit se poser (profile.hero).
  • Ce qui fonctionne.
  • Ce qui la retient. Utilisez diagnostics.findings (chacun a des evidence mesurées et une step prête) plus ce que les mesures ne peuvent pas juger : les distractions, l'harmonie des couleurs, le recadrage.
  • Ce qui pourrait la rendre spéciale. opportunities se trouve à côté des constats : forces mesurées — le caractère de la lumière (profile.light), où l'œil se pose réellement, les paires de couleurs qui valent la peine d'être poussées, la séparation qui mérite d'être exploitée. Chacune a des evidence et un move_hint. C'est là que vient le "wow".
  • Les autres photos à l'intérieur. recrops liste jusqu'à trois recadrages alternatifs mesurés — un carré sur le visage, un vertical, une coupe plus serrée sur la région la plus fréquentée — chacun avec une boîte crop prête et les preuves expliquant pourquoi cela fonctionne.

Si fetched est présent, commencez votre réponse par une ligne disant ce que vous avez téléchargé et pourquoi, dans les mots de l'utilisateur : "J'ai récupéré le modèle de scène de 4,4 Mo pour que les modifications du ciel et de la crête suivent la ligne d'horizon." Si une entrée porte une mention licence, ajoutez-la dans la même ligne, par exemple "(il est sous licence pour une utilisation de recherche ou d'évaluation)". Ne contournez jamais une capacité manquante en silence.

Si previous_versions est présent, vous avez déjà édité cette photo. Proposez de continuer à partir de la dernière version ou de recommencer à zéro.

Si taste est présent, c'est le goût démontré de cet utilisateur lors de sessions passées : looks préférés et leurs quantités, la force des curseurs, les habitudes de vignette et de destination. Orientez le board dans cette direction — tout en répondant aux propres opportunités de cette photo.

Si profile.signals.face_readable est faux, le visage est couvert ou trop sombre pour être lu comme de la peau. Les constats faciaux sont ignorés, et les points de visage et d'yeux détectés ne sont pas fiables, donc placez tout masque de visage ou d'œil à partir d'une grille zoomée au lieu de type: face.

2. Brief : se mettre d'accord sur l'ambiance

Vous avez besoin de deux choses :

  • Destination : Instagram 4:5, LinkedIn carré ou cercle de profil, story 9:16, ou tel quel.
  • Ambiance.

Si la destination est inconnue, demandez-la dans le même échange que l'ambiance, ou éditez au format original et proposez les variantes de recadrage comme directions du board. N'imposez jamais un recadrage que l'utilisateur n'a pas choisi, et ne coupez jamais une personne pour s'adapter à un format : lorsque le constat de recadrage d'inspect dit que le cadre doit choisir quoi garder, demandez — ne devinez pas.

Si les deux sont déjà clairs ("rends-la moody pour insta"), sautez le board et allez au round 1.

Sinon, le board est votre question. Construisez trois directions, en suivant vibes.md :

  • Chaque direction partage les corrections de base qui sont bonnes quelle que soit l'ambiance : les constats, la suppression des distractions, et le recadrage de destination uniquement si l'utilisateur a choisi une destination ; sinon, conservez le format original et proposez les variantes de recadrage comme leurs propres directions.
  • Chaque direction ajoute ensuite son propre look et les mouvements de région qui font fonctionner cette ambiance sur cette photo.
  • Les deuxième et troisième directions répondent chacune à une opportunité mesurée — la lumière, une paire de couleurs, le chemin de l'œil, la séparation — plutôt que de simplement échanger des looks.
  • Si un recadrage alternatif bat clairement le cadre que vous avez ("le portrait à l'intérieur de ce cadre"), proposez-le comme une direction à part entière : son recadrage, les corrections de base, un look qui lui convient, étiqueté pour ce qu'il est ("C · Le portrait à l'intérieur").
  • Une direction est la direction propre et fidèle. L'autre est audacieuse : le look adapté à la lumière à 130–160 % d'intensité (vibes.md, "Lire la lumière") ; les vérifications de la critique sont le filet qui l'attrape. Les deux autres doivent différer visiblement.
  • Donnez à chacune un label et une note.

Exécutez run.sh board PHOTO A.json B.json C.json. Si too_similar liste une paire, écartez-les et réexécutez.

Montrez le board (la page là où votre surface affiche les pages, sinon l'image board) et écrivez :

  • Votre lecture de la photo, en 1–2 lignes.
  • A, B et C, une ligne chacun : la sensation, et ce que cela fait à cette photo.
  • La question de la destination, si elle est inconnue.
  • Si inspect dit large: true (plus de 30 MP), demandez s'il faut garder la pleine taille ou la réduire :
    • La pleine taille conserve chaque pixel, mais le fichier peut atteindre des dizaines de Mo.
    • Un bord long de 4096 px est toujours net sur n'importe quel écran pour une fraction de la taille.
  • Terminez par : "Choisissez A, B ou C, mélangez-les ('B mais plus sombre'), ou décrivez l'ambiance avec vos propres mots."

Ensuite, affichez replies là où votre surface le permet (voir "Faire en sorte que répondre soit un seul tapotement là où la surface le permet").

3. Rounds

Commencez par la direction choisie. Si l'utilisateur a mélangé, construisez une recette qui combine les éléments demandés.

À chaque round :

  1. Exécutez preview RECETTE PHOTO --note "…".
  2. Regardez le rendu d'aperçu et la critique : critique.{exposure,colour,crop,subject,face,distractions,look}. Chaque section liste ce qui est bon, ce qui ne l'est pas, et les fixes suggérées (des recettes prêtes à appliquer).
  3. Si la critique dit que c'est bon, demandez la confirmation : "Ça marche ou on ajuste ?"
  4. Sinon, appliquez les corrections suggérées ou votre propre jugement, exécutez preview RECETTE PHOTO --note "…" --redo, et répétez.
  5. Quand l'utilisateur valide, exécutez apply RECETTE PHOTO et partagez le résultat final.

À chaque round, montrez le rendu review (page) ou card (image), et incluez toujours la note décrivant le changement perceptible.

4. Export final

apply produit deux fichiers : l'exportation complète (ajustée à la destination, en 4:5 pour Instagram par défaut, etc.) et une preuve de recadrage à 100 % montrant la netteté. Partagez l'exportation complète avec l'utilisateur.

Référence

  • reference/recipe.md : schéma complet du format de recette JSON.
  • reference/vibes.md : goût, vocabulaire des directions et des notes, et liste de vérification de la révision.

Lisez toujours vibes.md avant de créer votre premier board dans une session. Il définit comment nommer les looks, décrire les changements et évaluer la qualité.

Skills associés