Community이미지github.com

blob-portrait: 그래디언트 디센트 사진 재현

셀카, 초상화, 제품 사진 등을 수만 개의 부드러운 컬러 블롭(blob)으로 재현합니다. 무작위 노이즈에서 그래디언트 디센트로 훈련하며, 결과물로 그림, 사진 vs 코드 비교 이미지, 확대 증명 사진, 노이즈-to-사진 GIF를 출력합니다.

blob-portrait: 그래디언트 디센트 사진 재현란 무엇인가요?

이 스킬은 주어진 사진을 2D 가우시안 블롭(blob)으로 학습하여 그림처럼 재현하는 기술입니다. 사용자가 사진을 '코드로 재구성'하거나 '그래디언트 디센트'로 이미지를 변환해 달라고 요청하거나, '어느 쪽이 진짜 사진일까요?' 같은 비교 영상을 원할 때 사용됩니다. 1,500개의 무작위 블롭에서 출발하여, 각 단계마다 블롭을 렌더링하고 원본 사진과의 오차(L1 + SSIM)를 측정한 뒤 Adam 최적화로 각 블롭을 미세 조정하며, 오차가 가장 큰 영역에 새로운 작은 블롭을 생성합니다. 사전 훈련된 이미지 생성 모델을 사용하지 않고 순수하게 그래디언트 디센트로 사진을 학습합니다. CPU와 GPU 모두 지원하며, quick(약 1분 GPU), default(약 5분 GPU), full(약 20-40분 GPU) 프리셋을 제공합니다. 최종 출력물로는 비교 이미지, 렌더링, 확대 샷, 학습 과정을 보여주는 GIF, 각 블롭의 위치·크기·색상 정보가 포함된 npz 파일 등이 생성됩니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/fluxpediawork/blob-portrait/tree/HEAD

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

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

블롭 포트레이트: 사진을 위한 그래디언트 디센트

2D 가우시안 블롭으로 사진을 그립니다. 1,500개의 무작위 블롭에서 시작하여, 각 단계에서 블롭을 렌더링하고 사진과의 오차(L1 + SSIM)를 측정한 뒤, 각 블롭을 조금씩 이동시켜 오차를 줄입니다(Adam). 오차가 가장 큰 영역에는 새로운 작은 블롭이 생성됩니다. 이미지 생성기는 사용되지 않습니다: 사진은 학습됩니다.

단계

  1. 사진을 준비합니다. 첨부된 파일을 사용합니다. 피사체의 위치를 확인하여 --focus를 설정할 수 있도록 합니다(가장 집중적으로 학습할 영역, 일반적으로 얼굴).

  2. 설치합니다. Python 3.10+.

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

    PyTorch 인덱스가 차단된 경우, PyPI에서 pip install torch로 간단히 설치할 수 있습니다.

  3. 사용 가능한 하드웨어와 시간에 맞춰 프리셋을 선택합니다.

    프리셋단계최대 블롭2코어 CPUGPU
    quick30015,000~8분~1분
    default1,60045,000~35분~5분
    full6,000100,000수시간~20-40분

    CPU에서 실행할 경우, default 프리셋을 백그라운드에서 실행하고 로그를 확인하며, 실행을 막지 않도록 합니다.

  4. 실행합니다.

    python scripts/blobfit.py photo.jpg --out result/ --preset default \
        --aspect 4:5 --focus 0.5,0.4,0.45,0.5
    
    • --aspect는 중심 기준으로 w:h 비율로 자릅니다(none은 원본 비율 유지).
    • --focus cx,cy,w,h는 자른 이미지의 0-1 범위 좌표입니다. 중앙 셀카의 경우 0.5,0.4,0.45,0.5가 얼굴을 덮습니다.
    • --steps / --blobs로 프리셋을 재정의할 수 있습니다.
    • 장치는 자동 선택됩니다: CUDA, Apple MPS, CPU 순서로 시도합니다.
  5. 결과를 전달하기 전에 확인합니다. compare.jpg와 zoom.jpg를 열어 확인합니다. stats.json에 PSNR이 기록됩니다: 약 28-30 dB는 부드러운 유사도(quick 프리셋), 38 dB 이상은 일반 크기에서 구별하기 어려운 수준입니다. 얼굴이 흐릿하면 더 많은 단계로 다시 실행하거나 --focus를 얼굴에 맞게 조정합니다.

  6. 전달합니다. compare.jpg, render.png, training.gif를 보냅니다. 블롭 수, 단계 수, PSNR, 그리고 생성된 것이 아니라 학습된 것임을 설명합니다.

출력물

파일설명
render.png전체 크기로 맞춰진 블롭 그림
compare.jpg실제 사진과 코드 버전 나란히 비교
zoom.jpg눈 주변 클로즈업 증명
training.gif노이즈에서 그림으로 변하는 과정, 중요 단계마다 프레임
blobs.npz모든 블롭 정보: 위치, 크기, 각도, 색상, 강도 (재렌더링 또는 애니메이션용)
stats.json단계 수, 블롭 수, PSNR, 소요 시간, 사용 장치

정직한 한계점

  • 하나의 사진을 복사합니다. 새로운 시각이나 얼굴을 창조할 수 없습니다.
  • 품질은 단계 수에 의존합니다: 짧은 CPU 실행은 부드럽게 나오고, 미세한 피부 질감은 full 프리셋이 필요합니다.
  • 배경색은 사진 가장자리에서 추출되므로, 블롭은 배경색과 다른 부분만 칠하면 됩니다.

관련 스킬