retrotoon-studio/server/gemini.test.ts
Manus e72537b20b feat: Import vidéo robuste + Multi-LLM Gemini + NLE Workspace complet
🎬 RetroToon Studio - Pipeline IA de recomposition de dessins animés

 Fonctionnalités:
- Import vidéo avec 3 modes (Rapide/Qualité/Personnalisé)
- Extraction frames robuste avec tolérance aux erreurs réseau
- Détection de plans par histogramme chi-squared
- Workspace NLE avec 6 modes de viewport
- Timeline avec séquences, marqueurs et audio synchronisé
- Loupe duale (zoom 2-8×, grille pixel)
- Assistant IA en langage naturel
- Segmentation par calques (SAM 2 architecture)
- Administration des moteurs IA

🧠 Intelligence Artificielle:
- Support multi-fournisseur LLM (Gemini 2.5 Flash + Built-in)
- Configuration dynamique depuis l'admin panel
- Fallback automatique entre fournisseurs
- Analyse de frames par vision multimodale

🐛 Corrections:
- Fix projects.get retournant undefined (tRPC interdit)
- Fix frames.getByIndex même problème
- Fix flux d'extraction interrompu par erreurs réseau isolées
- Les frames sont maintenant enregistrées même si l'extraction est partielle

📦 Stack: React 19 + tRPC 11 + Tailwind 4 + Drizzle ORM + MySQL
2026-05-20 01:51:58 +00:00

26 lines
881 B
TypeScript

import { describe, it, expect } from "vitest";
describe("Gemini API Key validation", () => {
it("should have GEMINI_API_KEY set in environment", () => {
const key = process.env.GEMINI_API_KEY;
expect(key).toBeDefined();
expect(key!.length).toBeGreaterThan(10);
expect(key).toMatch(/^AIza/); // Google API keys start with AIza
});
it("should be able to reach Gemini API with the key", async () => {
const key = process.env.GEMINI_API_KEY;
if (!key) throw new Error("GEMINI_API_KEY not set");
// Lightweight call to list models endpoint
const resp = await fetch(
`https://generativelanguage.googleapis.com/v1beta/models?key=${key}`,
{ method: "GET" }
);
expect(resp.status).toBe(200);
const data = await resp.json();
expect(data.models).toBeDefined();
expect(data.models.length).toBeGreaterThan(0);
});
});