CommunityImagegithub.com

fluxpediawork/blob-portrait

Reconstruisez n'importe quelle photo (selfie, portrait, photo produit) en dizaines de milliers de taches de couleur douces entraînées à partir de bruit aléatoire par descente de gradient, et obtenez la peinture, une comparaison photo-vs-code, une preuve de zoom et un GIF bruit-vers-image.

Qu'est-ce que blob-portrait ?

Cette compétence transforme une photo en une peinture artistique composée de milliers de taches gaussiennes (blobs) 2D, en utilisant une descente de gradient pure. Contrairement aux générateurs d'images IA classiques (comme GAN ou diffusion), elle n'invente pas de nouveau contenu mais apprend littéralement la photographie en minimisant l'erreur (L1 + SSIM) entre une scène de taches aléatoires et l'image cible. Chaque tache (position, taille, angle, couleur, opacité) est optimisée via l'optimiseur Adam, et de nouvelles taches apparaissent là où l'erreur reste élevée. Cette approche est utile pour les démos de visualisation algorithmique, les contenus « code vs art », les réels de comparaison (type « laquelle est la photo ? »), ou simplement pour explorer un rendu esthétique non photoréaliste. Supporté sur CPU (lent) et GPU (CUDA ou Apple MPS), avec des préréglages pour différents compromis temps/qualité. Le résultat final comprend la peinture pure (render.png), une comparaison côte à côte, un zoom sur les yeux, un GIF de l'évolution du bruit vers l'image, et un fichier de statistiques (PSNR). Idéal pour répondre aux demandes de « recréer avec du code », « descente de gradient sur une image », ou « transformer une photo en art génératif ».

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/fluxpediawork/blob-portrait/tree/HEAD

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

Portrait en taches : descente de gradient pour une photo

Peint une photo avec des taches gaussiennes 2D. On part de 1 500 taches aléatoires, et à chaque étape on les rend, on mesure l'erreur par rapport à la photo (L1 + SSIM), et on déplace chaque tache un peu pour la réduire (Adam). De nouvelles petites taches apparaissent là où l'erreur est la plus élevée. Aucun générateur d'image n'est impliqué : l'image est apprise.

Étapes

  1. Obtenez la photo. Utilisez le fichier joint. Notez la position du sujet pour pouvoir définir --focus (la zone qui reçoit l'entraînement le plus rapproché, généralement le visage).

  2. Installation. Python 3.10+.

    pip install -r requirements.txt   # torch, numpy, pillow
    

    Si l'index PyTorch est bloqué, un simple pip install torch depuis PyPI fonctionne.

  3. Choisissez un préréglage selon le matériel et le temps disponible :

    préréglageétapesmax tachesCPU 2 cœursGPU
    quick30015 000~8 min~1 min
    default1 60045 000~35 min~5 min
    full6 000100 000des heures~20-40 min

    Sur un CPU, exécutez default en arrière-plan et consultez le journal ; ne le bloquez pas.

  4. Exécution.

    python scripts/blobfit.py photo.jpg --out result/ --preset default \
        --aspect 4:5 --focus 0.5,0.4,0.45,0.5
    
    • --aspect recadre en w:h autour du centre (none conserve la forme propre de la photo).
    • --focus cx,cy,w,h est en 0-1 de l'image recadrée. Pour un selfie centré, 0.5,0.4,0.45,0.5 couvre le visage.
    • --steps / --blobs remplacent le préréglage.
    • Le périphérique est choisi automatiquement : CUDA, puis Apple MPS, puis CPU.
  5. Vérifiez le résultat avant de le livrer. Ouvrez compare.jpg et zoom.jpg et regardez-les. stats.json contient le PSNR : autour de 28-30 dB donne une ressemblance douce (rapide), 38 dB+ est difficile à distinguer à taille normale. Si le visage est flou, relancez avec plus d'étapes ou déplacez --focus sur le visage.

  6. Livrez. Envoyez compare.jpg, render.png et training.gif. Dites combien de taches et d'étapes, le PSNR, et que cela a été entraîné, non généré.

Sorties

fichierdescription
render.pngla peinture en taches à la taille ajustée complète
compare.jpgphoto réelle à côté de la version codée
zoom.jpgpreuve agrandie autour des yeux
training.gifbruit vers image, une image par jalon
blobs.npzchaque tache : position, échelle, angle, couleur, force (pour re-rendu ou animation)
stats.jsonétapes, nombre de taches, PSNR, secondes, périphérique

Limites honnêtes

  • Il copie une seule photo. Il ne peut pas inventer une nouvelle vue ou un nouveau visage.
  • La qualité dépend du nombre d'étapes : les courtes exécutions CPU donnent des résultats doux ; le grain fin de la peau nécessite le préréglage full.
  • La couleur d'arrière-plan est prise des bords de la photo, donc les taches n'ont besoin de peindre que ce qui en diffère.

Skills associés