PixelForge / imageforge /README.md
Gregorfun's picture
Initial commit
32c5da4
# ImageForge
ImageForge ist eine lokal laufende Desktop-App zur Bild-Erstellung per Prompt. Die App nutzt ein Python-Backend (FastAPI + Job-Queue) und ein Electron+React-Frontend.
## Features
- Prompt + Negative Prompt
- Modellauswahl (`dummy`, `localai`, `diffusion`)
- Bildtyp-Presets und Stil-Presets
- Image-to-Image (Startbild + Strength)
- Dashboard (Queue, Status, Retry/Cancel, Compare)
- Preset-System (CRUD)
- Export (PNG/JPG/WEBP)
- Prompt-Versionierung (`config_hash` in `meta.json`)
- API-Key + Rollenmodell (`viewer`, `operator`, `admin`)
- Rate-Limit pro Client
- Health + Readiness + Metrics
- Recovery von Job-Status nach Neustart
- Storage-Governance (Retention-Cleanup)
## Setup
```powershell
cd imageforge
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
npm --prefix frontend install
```
## Start
```powershell
npm run dev
```
Für den kompletten lokalen Stack (Backend + Frontend, inkl. Healthcheck):
```powershell
npm run dev:stack
```
## Serverbetrieb
```powershell
$env:IMAGEFORGE_HOST="0.0.0.0"
$env:IMAGEFORGE_PORT="8008"
$env:IMAGEFORGE_CORS_ORIGINS="http://localhost:5173"
$env:IMAGEFORGE_API_KEYS="viewerKey:viewer,opsKey:operator,adminKey:admin"
$env:IMAGEFORGE_RATE_LIMIT_PER_MIN="120"
$env:IMAGEFORGE_CONTENT_PROFILE="internal-relaxed"
$env:IMAGEFORGE_ADMIN_TOKEN="change-me"
python -m backend.app.main
```
## Wichtige Endpunkte
- `GET /health`
- `GET /ready`
- `GET /metrics`
- `GET /metrics/prometheus`
- `POST /generate`
- `GET /jobs`
- `POST /jobs/{id}/retry`
- `POST /jobs/{id}/cancel`
- `GET /dashboard/stats`
- `GET/POST/DELETE /presets`
- `POST /export`
- `GET/PUT /admin/settings`
- `POST /admin/cleanup`
## Security und Policy
- API-Key Header: `X-ImageForge-Api-Key`
- Admin Override Header: `X-ImageForge-Admin-Token`
- Policy Profile:
- `strict`
- `internal-relaxed`
- Audit-Logs:
- `policy_audit.log`
- `admin_audit.log`
## Backup / Restore
```powershell
npm run backup
npm run restore -- -Source backups\imageforge_backup_YYYYMMDD_HHMMSS
```
## Tests
```powershell
npm run test
npm run test:e2e
```
## CI
GitHub Actions Workflow liegt in `.github/workflows/ci.yml`.
## Optional LocalAI / Diffusion
```powershell
pip install diffusers torch transformers accelerate
$env:IMAGEFORGE_LOCALAI_MODEL="stabilityai/sd-turbo"
$env:IMAGEFORGE_LOCALAI_IMAGE_TIMEOUT_SECONDS="180"
$env:IMAGEFORGE_LOCALAI_LOCAL_ONLY="1"
$env:IMAGEFORGE_ENABLE_ATTENTION_SLICING="1"
```
Wenn `torch.cuda.is_available()` auf `False` bleibt, ist oft eine CPU-only Torch-Build installiert.
Für NVIDIA-GPU unter Windows kann eine CUDA-Build so installiert werden:
```powershell
python -m pip install --upgrade --index-url https://download.pytorch.org/whl/cu121 torch torchvision torchaudio
```
## Optional AUTOMATIC1111 Integration
ImageForge kann AUTOMATIC1111 als Provider nutzen (`model = a1111`).
### Empfohlener Produktionspfad (Stability Matrix)
Für stabilen Betrieb auf Windows wird eine **saubere, manager-gesteuerte Installation** empfohlen (statt manuell gepatchter `stable-diffusion-webui`-Klone):
1. Stability Matrix installieren und dort eine frische WebUI-Instanz mit aktivierter API starten.
2. API-Endpunkt prüfen:
```powershell
Invoke-RestMethod http://127.0.0.1:7860/sdapi/v1/sd-models
```
3. ImageForge auf diese Instanz zeigen (Default ist bereits `127.0.0.1:7860`):
```powershell
$env:IMAGEFORGE_A1111_BASE_URL="http://127.0.0.1:7860"
```
1. AUTOMATIC1111 lokal starten (mit API), z. B.:
```powershell
webui-user.bat --api
```
2. Optional URL/Timeout konfigurieren:
```powershell
$env:IMAGEFORGE_A1111_BASE_URL="http://127.0.0.1:7860"
$env:IMAGEFORGE_A1111_TIMEOUT_SECONDS="180"
$env:IMAGEFORGE_A1111_HEALTH_ENDPOINT="/sdapi/v1/sd-models"
$env:IMAGEFORGE_A1111_RETRY_COUNT="2"
$env:IMAGEFORGE_A1111_RETRY_BACKOFF_SECONDS="1.0"
```
Falls A1111 mit `--api-auth user:password` läuft:
```powershell
$env:IMAGEFORGE_A1111_API_USER="user"
$env:IMAGEFORGE_A1111_API_PASSWORD="password"
```
Alternativ als ein String:
```powershell
$env:IMAGEFORGE_A1111_API_AUTH="user:password"
```
Danach erscheint `AUTOMATIC1111` in `/models` als verfügbar, sobald der A1111-Server erreichbar ist.
### Robuster Betrieb bei A1111-Ausfällen
Wenn A1111 nicht erreichbar ist oder Fehler liefert, kann ImageForge automatisch auf andere Provider wechseln (z. B. `localai`, `diffusion`, `dummy`) statt den Job direkt abzubrechen.
```powershell
$env:IMAGEFORGE_ENABLE_AUTO_FALLBACK="1"
$env:IMAGEFORGE_FALLBACK_MODELS="a1111,localai,diffusion,dummy"
$env:IMAGEFORGE_FALLBACK_TIMEOUT_SECONDS="90"
$env:IMAGEFORGE_FALLBACK_MAX_STEPS="24"
```
- `IMAGEFORGE_ENABLE_AUTO_FALLBACK`: `1` aktiviert automatische Umschaltung.
- `IMAGEFORGE_FALLBACK_MODELS`: Priorisierte Reihenfolge der Fallback-Provider.
- `IMAGEFORGE_FALLBACK_TIMEOUT_SECONDS`: Kürzerer Timeout pro Fallback-Versuch.
- `IMAGEFORGE_FALLBACK_MAX_STEPS`: Deckel für Steps bei Fallback, um Laufzeit zu reduzieren.
### Stack-Readiness prüfen
Nach dem Start von Backend und A1111:
```powershell
./scripts/healthcheck-stack.ps1 -RequireA1111
```
Das Skript validiert `/health`, `/ready`, `/models` und optional die A1111-API selbst.
## Troubleshooting
- Falls Desktop-Build auf Windows an Symlink-Rechten scheitert: Entwickler-Modus oder Admin-Rechte aktivieren.
- Logs: `app.log`, `policy_audit.log`, `admin_audit.log`.