feat(picture,api): GPT-Image-2 image generation

Adds a third provider path to /api/v1/picture/generate that calls OpenAI
gpt-image-2 when model starts with "openai/". Supports n=1..4 batch
generation with character continuity, base64 response decoded server-side
and uploaded to mana-media for dedup + thumbnails. Credit cost scales
by quality (low=3, medium=10, high=25) × n.

Env plumbing:
- scripts/generate-env.mjs: new apps/api/.env stanza propagates
  OPENAI_API_KEY + REPLICATE_API_TOKEN from .env.secrets
- .env.macmini.example: documents OPENAI_API_KEY for prod

Frontend /picture/generate: model + quality + aspect-ratio + batch-count
selectors, real fetch with auth, persists each image via imagesStore.insert
(encrypted + synced). Wrapped in ModuleShell variant=fill with back-arrow
to /picture and a live credit badge in the header actions slot.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-23 00:37:15 +02:00
parent 13b785b33f
commit 3a68a63728
4 changed files with 459 additions and 131 deletions

View file

@ -75,6 +75,31 @@ const APP_CONFIGS = [
},
},
// Unified Mana API (Hono + Bun, Port 3060) — consolidates per-module servers
{
path: 'apps/api/.env',
vars: {
NODE_ENV: () => 'development',
PORT: (env) => env.MANA_API_PORT || '3060',
MANA_AUTH_URL: (env) => env.MANA_AUTH_URL || 'http://localhost:3001',
MANA_LLM_URL: (env) => env.MANA_LLM_URL || 'http://localhost:3025',
MANA_SEARCH_URL: (env) => env.MANA_SEARCH_URL || 'http://localhost:3021',
MANA_CREDITS_URL: (env) => env.MANA_CREDITS_URL || 'http://localhost:3061',
MANA_MEDIA_URL: (env) => env.MANA_MEDIA_URL || 'http://localhost:3015',
MANA_CRAWLER_URL: (env) => env.MANA_CRAWLER_URL || 'http://localhost:3014',
MANA_IMAGE_GEN_URL: (env) => env.MANA_IMAGE_GEN_URL || '',
MANA_SERVICE_KEY: (env) => env.MANA_SERVICE_KEY || 'dev-service-key',
DATABASE_URL: (env) =>
env.MANA_API_DATABASE_URL || 'postgresql://mana:devpassword@localhost:5432/mana_platform',
CORS_ORIGINS: (env) => env.CORS_ORIGINS || 'http://localhost:5173',
APP_ID: () => 'mana-api',
LOGGER_FORMAT: (env) => env.LOGGER_FORMAT || 'pretty',
// Picture module providers
OPENAI_API_KEY: (env) => env.OPENAI_API_KEY || '',
REPLICATE_API_TOKEN: (env) => env.REPLICATE_API_TOKEN || '',
},
},
// Mana Research Service (Hono + Bun, Port 3068)
{
path: 'services/mana-research/.env',