perch7/img2 — FLUX 기반 이미지 생성 추론 서비스 — 역분석

대상 이미지(삭제됨): perch7/img2_v2.0.31/ssh:latest digest sha256:15a196af9b19125f850a8f75f1147ae60ac549dea862be55683a9fe9941b4486, 15.8GB, 2026-06-18 빌드 근거: 이미지 빌드 히스토리(rtx3-docker-leftover-detail.txt 297~376행)만으로 역분석. 소스 본문은 확보 못 함(이미지 삭제 + 핵심 server.py가 암호화본 server.py.enc로만 존재). 따라서 "구조·파일·모델·실행방식"은 확실, 알고리즘 세부·과금 로직은 추정으로 구분 표기. ※ 공개 DockerHub 이미지라 다이제스트로 docker pull 재취득 가능 → 삭제는 가역적(말 워커와 달리 복구 가능).


한 줄 요약

FLUX.1-schnell 디퓨전 모델을 4비트(NVFP4) 양자화로 굽고, 자체 웹 UI(ui.html) + Node/Deno 서버(server.js) + 암호화된 파이썬 추론 코어(server.py.enc) 로 감싼 상용 텍스트/이미지→이미지 생성 서비스. 모델·LoRA·텍스트인코더를 이미지에 전부 구워 넣고(7GB+), 라이선스 키 해시 검증 + 코드 암호화로 IP를 보호한 "판매용 추론 컨테이너". 포트 3000에서 서비스, Vast.ai /.launch 부팅 래퍼 + SSH 변형(/ssh 태그)으로 임대 GPU에 배포.


1. 무엇을 하는 서비스인가 (기능)

→ 전형적 용도(추정): FLUX 기반 유료 이미지 생성 SaaS의 단일 컨테이너 배포 단위. UI + API + 모델 + 라이선스 검증을 한 이미지에 패키징.


2. 모델 구성 (이미지에 전부 베이킹 — 런타임 다운로드 아님)

horse 워커가 가중치를 빼고 런타임에 받은 것과 정반대 전략: 모든 모델을 빌드 시 COPY로 구워 넣어 오프라인·고속 기동.

파일(이미지 내 경로) 크기 정체 역할
models/_docker_model/ → /root/model/ 7.21GB 메인 디퓨전 모델(FLUX 트랜스포머 본체, 양자화 전/후 가중치) 이미지 생성 핵심
models/_docker_t5.safetensors → /root/model/ 2.99GB T5 텍스트 인코더(FLUX의 프롬프트 인코더) 프롬프트→임베딩
models/flux-schnell-runtime → /root/model/flux-schnell-runtime 419MB FLUX.1-schnell 런타임(스케줄러/설정/보조 가중치) schnell(고속 distilled) 파이프라인
models/taef1 → /root/model/taef1 9.85MB TAEF1(FLUX용 Tiny AutoEncoder, TAESD 계열 초경량 VAE 디코더) 미리보기/고속 디코딩
models/v46-cfgbake-lora.safetensors → /root/model/loras/ 120MB LoRA("v46", CFG 베이크) 스타일/도메인 어댑터

ENV: MODEL_DIR=/root/model, T5_PATH=/root/model/_docker_t5.safetensors, LORA_DIR=/root/model/loras.

주목 — 모델 출처 은닉(sed 치환):

find /root/inference/lakonlab -type f ... -exec sed -i \
  's|black-forest-labs/FLUX.1-schnell|lzyvegetable/FLUX.1-schnell|g' {} +
  # FLUX.1-dev 도 동일하게 lzyvegetable/* 미러로 치환

공식 black-forest-labs/FLUX.1-* HuggingFace repo 참조를 전부 lzyvegetable/FLUX.1-* 미러 계정으로 치환. → 공식 repo의 게이트/라이선스(특히 FLUX.1-dev 비상업 제약)를 우회하거나, 다운로드 차단을 피하려는 미러링(추정). schnell(Apache-2.0 상업가능)과 dev(비상업) 둘 다 다룬 정황.


3. 소스 / 런타임 구성 (커스텀 코드)

추론 디렉터리 /root/inference/:


4. 양자화 / 가속 스택 (핵심 차별점)

이 서비스의 기술적 정수는 소비자 GPU에서 FLUX를 빠르게 돌리기 위한 양자화·어텐션 최적화:

기술 스택: PyTorch 2.7.0 / CUDA 12.8 / conda(/opt/conda 7.74GB 베이스) / Ubuntu 22.04. 베이스 ENV PYTORCH_VERSION=2.7.0, IMG2_VERSION=v2.0.31. 시스템 패키지: git/wget/aria2/ffmpeg 계열(libgl1), imagemagick, ninja-build, libjpeg-turbo, ccache, openssl.


5. 실행 / 배포 아키텍처


6. 추정 파이프라인 흐름 (재구성)

[컨테이너 기동] /.launch → start.sh
  ├─ server.py.enc 복호화 → server.py 로드
  ├─ ensure_nvfp4_model.sh → nunchaku용 NVFP4 4비트 가중치 준비/검증
  ├─ bake_loras.py / convert_lora_if_needed.py → v46 LoRA를 FLUX에 병합
  └─ 서버 기동(server.js + server.py, port 3000)

[요청 처리]
  클라이언트(ui.html / API)
    └─ key_hash.txt 로 라이선스 키 검증(추정)
    └─ 프롬프트 → T5 인코더 → 임베딩
    └─ FLUX.1-schnell (nunchaku NVFP4 4bit + SageAttention) 디노이징
        └─ (img2img 시) 입력 이미지 latent + LoRA 적용
    └─ taef1(빠른 디코드) 미리보기 → VAE 최종 디코드
    └─ avifenc 로 AVIF 인코딩 → 응답

7. 확실 vs 추정


복구 / 재현 단서


참고: 본 솔루션 설계서와의 관계

이 이미지가 바로 같은 폴더 design-txt2img-paid-service.md 에서 "유료 텍스트→이미지 서비스의 실측 원형"으로 인용한 perch7/img2 FLUX 원본이다. 그 설계서의 모델 선택(FLUX schnell 상업가능/dev 비상업)·양자화(3090=INT4/NVFP4)·IP 보호(코드 암호화+키 해시)·AVIF 출력 등의 근거가 본 역분석에서 확인된 실제 구성이다. 유료 서비스 구축 시 이 문서(=원형 구조)와 설계서(=우리 설계)를 함께 볼 것.