# FusionRig image capability check (2026-10-16)

## Pipeline found (~/repos/api)
- **Generator:** `src/services/image-gen.service.ts`. Provider registry `IMAGE_PROVIDERS` = `openai` (default) and `fal` (any model id starting `fal-ai/`, e.g. `fal-ai/flux-pro/v1.1`). Default model `gpt-image-1` (`src/config.ts` line 276).
- **Sizes:** only `1024x1024`, `1024x1536`, `1536x1024` (config.ts line 277; `sizeForKind` line 293 picks 1536x1024 as "closest available" because "the provider has no size" for other ratios). Quality tier low/medium/high/auto.
- **Transparency:** `backgroundMode: 'transparent'` with a real alpha check (`verifyTransparency`, outer 6% ring) plus one auto re-roll and halo trim (lines 88 to 270).
- **Upscale:** `src/services/upscale.service.ts`, providers replicate / http / fal (Real-ESRGAN class). Falls back to bilinear if not configured.
- **Exact-pixel layout with real text:** `src/services/campaign-render.service.ts`, Puppeteer HTML to PNG, any width/height up to 4096 px edge, scale up to 3, `omitBackground` for transparent PNG. Kickstarter project card is 1024x576 here. This is the Kickstarter art pipeline (templates in `src/templates/campaign/`).
- **SVG/vector:** none. `image-convert.service.ts` passes SVG through untouched; no tracing (no potrace or vectorizer).
- **Text rendering in generated art:** gpt-image-1 renders short words fairly well but not reliably for logo-grade lettering; Flux is weaker. Logo lettering should be set as real type in the HTML renderer, not generated.


## Format verdicts
| Format | Verdict | Evidence and method |
|---|---|---|
| Square profile logo (1080x1080 / 400x400) | **CAN** | gpt-image-1 at 1024x1024 native (config.ts 277), upscale to 1080 via upscale.service, or exact 1080/400 via campaign-render HTML. Test: tests/square-1080.png |
| Facebook cover 1640x624 with mobile safe zone | **PARTIAL** (CAN for final composite) | Generator cannot output 2.63:1; nearest 1536x1024 must be cropped and upscaled. campaign-render composes exact 1640x624 with art as background and a centered safe zone. Test: tests/fb-cover-1640x624.png (dashed 940x300 safe zone) |
| Wide packaging logo (4:1 to 6:1, low height) | **PARTIAL** | Generator max ratio 3:2, so no native wide output. campaign-render produces exact 1500x300 (5:1) transparent PNG with real type. Test: tests/wide-logo-1500x300-transparent.png. No vector output. |
| Transparent background | **CAN** | backgroundMode 'transparent' plus alpha verify; renderer `omitBackground` |
| Vector / SVG | **CANNOT** | No SVG output or tracing anywhere in the pipeline |
| Upscaling | **CAN** | upscale.service.ts |

## Needs ChatGPT or manual vector work
- Final logo marks for print packaging and merch (embroidery, screen print, die-cut) need SVG: manual vector redraw or trace (Illustrator, Inkscape, or a vectorizer service). Not on FusionRig today.
- Hero emblem art with lettering integrated into the illustration: ChatGPT high-end pass, then reset the letters as real type.
- Distressed broken-sign lettering texture: generate the texture, set letters as type, composite in the renderer.

## Test images (no paid API calls; renderer only)
- FusionRig: FusionRig package, 10-branding/tests/

Placeholder type only (system Impact), not final art.
