cards/apps/api
Till JS 1212b62613 feat(cards): Deck-Generierung aus Bildern und PDFs via Vision-LLM
Neuer Endpoint POST /api/v1/decks/from-image akzeptiert bis zu 5 Bilder
(PNG/JPG/WebP, max 10 MiB je) oder PDFs (max 30 MiB je) als multipart/form-data.
Alle Dateien werden in einem einzigen mana-llm Vision-Call verarbeitet
(mana/vision → llava → Gemini 2.5-flash → GPT-4o Fallback-Chain).

PDFs werden von Gemini nativ verstanden (Layout, Tabellen, Bilder im Dokument)
ohne Zwischenschritt über Text-Extraktion oder Rendering. Der google.py-Provider
reicht den MIME-Type aus dem data:-URI direkt an types.Part.from_bytes() weiter.

- llm-client: chatVisionJson() mit images[]-Array (mehrere Bilder/Dokumente)
- decks-generate: GeneratedDeckSchema + insertGeneratedDeck() exportiert
- decks-from-image: neuer Route-Handler, MIME-Filter für image/* + application/pdf
- index: neue Route gemountet
- client.ts: apiForm() für multipart-Uploads ohne JSON.stringify
- decks.ts: generateDeckFromImage(files, opts)
- NewDeckCard + /decks/new: Dropzone mit Multi-File, Thumbnail-Strip, PDF-Icon

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 15:21:35 +02:00
..
src feat(cards): Deck-Generierung aus Bildern und PDFs via Vision-LLM 2026-05-10 15:21:35 +02:00
tests Phase 12 R4: Marketplace ε — Pull-Requests + Card-Discussions 2026-05-09 15:50:16 +02:00
Dockerfile fix(api Dockerfile): COPY app-manifest.json (runtime-import) 2026-05-08 20:14:20 +02:00
drizzle.config.ts Phase 12 R0+R1: Marketplace-Restore-Plan + Schema in marketplace-pgSchema 2026-05-09 15:05:22 +02:00
package.json Phase 2a: Cards-API JWT-Verify (additiv zum Dev-Stub) 2026-05-08 20:41:09 +02:00
tsconfig.json Phase 3 follow-up: type-check + tests grün, ts-fsrs v5 API 2026-05-08 14:41:04 +02:00