openjutsu
One-click character swap for videos: an open-source, local Higgsfield Genjutsu alternative built on ComfyUI and MiniMax H3, with FLUX.3 Klein relighting.
Creative Intelligence Studio para crear, producir y analizar contenido audiovisual.
Translation pending
MediaTypeScript · PythonGitHub @andyRSOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Aplicación web para un creador de contenido de República Dominicana que produce microdramas con IA: frutinovelas (telenovelas animadas en 3D con personajes con cabeza de fruta), cine romántico estilo años 90, frutinovelas cristianas, y más adelante dropshipping orgánico con videos de productos.
localStorage y los datos de ejemplo./api/generate, /api/analyze-metrics, /api/analyze-viral y /api/dropshipping exigen sesión: sin login devuelven 401 sin llamar al modelo.La capa de datos vive en src/lib/DataContext.tsx (contexto + useData()), con los mapeos cliente↔tabla en src/lib/db.ts. Ningún módulo toca localStorage directamente: todos usan insert / update / remove de useData().
@supabase/ssr. Todo se lee con .eq("user_id", auth.uid()) y todo insert lleva user_id; update/delete filtran por id y user_id. La RLS de supabase/schema.sql impone lo mismo en la base de datos (política own rows: auth.uid() = user_id), así un usuario jamás ve datos de otro aunque manipule el cliente. Colecciones conectadas: accounts, series, characters, formulas, episodes (el Generador guarda el episodio con platform_adaptations y versions), production_cards, clip_checks, costs, calendar_entries, metrics (las métricas específicas de cada plataforma 4B van en la columna extra jsonb), viral_analyses, products y product_tests. Las mutaciones refrescan el estado al instante y hay suscripción Realtime (si está activa en tu proyecto) que recarga ante cambios externos.localStorage con los datos de ejemplo. Ideal para probar sin configurar nada.🟢 Conectado: tu@correo (Supabase) con botón Salir, o 🟡 Modo sin login (datos locales). La página principal es usable en ambos modos.src/middleware.ts (con @supabase/ssr) refresca la sesión en cookies en cada petición, para que el servidor la vea. Cada ruta de IA empieza llamando requireUser() (src/lib/auth-guard.ts), que crea el cliente de servidor desde las cookies y ejecuta auth.getUser():
401 {"error":"No autorizado: inicia sesión"} y la ruta no llama al LLM (se responde antes de parsear el cuerpo y de cualquier generación).503 con el mensaje de que Supabase no está configurado: las rutas quedan cerradas, nunca abiertas por falta de configuración.LLM_API_KEY usa el modelo; sin ella, responde la plantilla local del servidor).En el frontend, Generador, Métricas (Analizar), Analizador y Dropshipping detectan el 401/503 y muestran «Inicia sesión para usar la IA» con enlace a /login, sin romperse. En modo sin login ofrecen la plantilla local en el cliente (misma salida, generada en el navegador) dejando claro que la API protegida requiere login.
Verificado: con un
.env.localde placeholders bien formados,curl -X POSTsin sesión a las 4 rutas devuelve 401 en las 4; sin variables de Supabase devuelve 503 en las 4; la página principal responde 200.
s01, s02…, motivo para rehacer y montaje al aprobar todas las escenas. El Kanban y costos siguen disponibles.Regla: toda historia se construye primero con la FÓRMULA BASE (Instagram) y después se generan 4 versiones, una por plataforma. Nunca el mismo archivo ni el mismo texto en todas.
FÓRMULA BASE (Instagram) — el origen de todo:
El generador (src/lib/llm.ts + src/lib/platforms.ts, API POST /api/generate, componente Generador) entrega 4 fichas separadas, cada una con duración recomendada, cambios de montaje, texto de portada, título/descripción, hashtags, mejor horario, frecuencia, CTA, métricas a vigilar, checklist y nombre de archivo propio, con su botón Copiar:
| Plataforma | Duración | Claves de la ficha |
|---|---|---|
| Instagram Reels | 30-60 s | Cortes cada 2-4 s. Portada: cara en primer plano + 1 frase de intriga. Descripción corta con pregunta + «Comenta PARTE 2». 3-5 hashtags de nicho. Recordatorio: activar la etiqueta «Información de IA». Métricas: compartidos, guardados, seguidores. |
| 60-90 s | Diálogo sin pausas. Subida nativa, nunca desde Instagram. Gancho visible 5-8 s. Descripción emotiva / de debate: «¿Quién tiene la culpa?». Sugerencia de 3 grupos de Facebook dominicanos con una frase para compartir en cada uno (verifícalos antes de publicar). Publicar 1/día, 7-10 pm (hora RD). Métricas: tiempo promedio, vistas de 1 minuto, ingresos estimados. | |
| TikTok | 1-3 min (>1 min monetiza) | «Anteriormente...» de 5-8 s si es continuación. Tarjetas de tiempo + narrador solo en la última frase. Portada «PARTE X» grande + título de la serie. Descripción con keywords buscables (frutinovela, telenovela de frutas, drama dominicano) + 3-5 hashtags. Playlist por serie. 1-2/día. Respuestas en video a comentarios. Métricas: % visto completo, nuevos seguidores, búsquedas. |
| YouTube Shorts | Hasta 3 min, ideal 45-90 s | Final que empalma con el inicio para hacer bucle. Título con keywords + #shorts, máximo 60 caracteres. Sin marcas de agua, archivo limpio. Vincular la siguiente parte con «video relacionado». Métricas: visto vs deslizado, retención. |
Dónde se guarda: cada episodio guarda sus 4 fichas en el campo platform_adaptations (jsonb) de la tabla episodes en Supabase (en modo local: episodes[].platform_adaptations en localStorage). En el generador también puedes descargarlas como adaptaciones-plataformas.json.
Comparación en Métricas: el módulo 7 incluye un tablero de comparación del mismo episodio lado a lado en las 4 plataformas, y cada una se juzga con sus propias métricas 4B (no solo por vistas).
YouTube Shorts también es plataforma seleccionable al registrar una Cuenta.
supabase/schema.sql para un proyecto nuevo. Para un proyecto ya desplegado, ejecuta supabase/migrations/20261022_character_bible_scene_review.sql antes de publicar esta versión; añade las columnas nuevas sin borrar filas existentes./login.Copia .env.example a .env.local y rellena:
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
LLM_API_KEY=
LLM_PROVIDER=anthropic # anthropic | openai
LLM_MODEL=claude-3-5-sonnet-latest # o gpt-4o-mini si usas OpenAI
Nota honesta: las rutas de IA exigen login (ver «Protección de las rutas de IA»). Sin
LLM_API_KEY(pero con sesión) el generador, el analizador y dropshipping responden con la plantilla local del servidor (sin IA). En modo sin login, la plantilla se genera en el cliente y los datos van alocalStorage.
npm install
npm run dev
# http://localhost:3000
src/lib/platforms.ts # 4B: FÓRMULA BASE + buildPlatformAdaptations() (4 fichas)
src/lib/llm.ts # callLLM (Claude/OpenAI) + generateEpisode() + plantillas locales (servidor y cliente)
src/lib/seed.ts # Serie y personajes de ejemplo + fórmulas precargadas
src/lib/db.ts # Mapeos colección <-> tabla Supabase / clave localStorage
src/lib/DataContext.tsx # Sesión + capa de datos (Supabase por usuario | modo local) + SessionBar + Salir
src/lib/auth-guard.ts # requireUser(): 401 sin sesión / 503 sin Supabase configurado
src/lib/api-client.ts # postApi() del frontend (detecta 401/503)
src/middleware.ts # Refresco de sesión en cookies (@supabase/ssr)
src/lib/supabase/ # Cliente navegador y servidor (@supabase/ssr)
src/app/api/generate/ # Generador (incluye platformAdaptations) — protegida
src/app/api/analyze-metrics/ src/app/api/analyze-viral/ src/app/api/dropshipping/ # protegidas
src/components/ # Los 9 módulos + PlatformAdaptations.tsx (fichas 4B)
supabase/schema.sql # Esquema + RLS + migración 4B + metrics.extra