Communitygithub.com

karmazin/simreel

Convierte una grabación real del simulador de iOS de tu app en un reel 9:16 y un video de vista previa para App Store. Úsalo cuando el usuario pida un video de lanzamiento, reel promocional, demo o vista previa de App Store para su app iOS.

¿Qué es simreel?

SimReel es una habilidad para agentes de IA (como Claude Code, Cursor o Codex) que automatiza la creación de dos tipos de videos promocionales a partir de grabaciones del simulador de iOS: un reel vertical de 1080×1920 con cuerpo de teléfono, gradiente, leyendas por escena y tarjeta final (ideal para X, Reels, TikTok o Product Hunt) y una vista previa de App Store de 886×1920 con formato y codificación oficiales. La habilidad se ejecuta íntegramente en local con Xcode y ffmpeg, sin necesidad de cuentas ni APIs de pago. El flujo guía al agente para que identifique el simulador adecuado, realice una caminata sin grabar para limpiar diálogos y permisos, grabe una única toma, genere un storyboard JSON con tiempos y leyendas, renderice los videos y los revise antes de entregarlos. El formato y las especificaciones (30 fps, H.264 High 4.0, AAC estéreo) cumplen con las directrices oficiales de App Store para vistas previas, y la habilidad incluye advertencias si la duración no está entre 15 y 30 segundos.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/karmazin/simreel/tree/HEAD/skills/simreel

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace simreel?

Graba la app real del usuario en el Simulador de iOS y genera dos archivos:

  • reel-1080x1920.mp4: la grabación dentro de un cuerpo de teléfono sobre un degradado, una leyenda por escena y una tarjeta final. Para X, Reels, TikTok, Product Hunt.
  • appstore-preview-886x1920.mp4: la grabación sin adornos, dimensionada y codificada para App Store Connect.

Todo se ejecuta localmente con Xcode y ffmpeg. Sin cuentas, sin APIs de pago.

Reglas

  • Muestra solo lo que la app realmente hace. Las leyendas describen lo que aparece en pantalla; nunca agregues afirmaciones, números ni reseñas que el metraje no muestre.
  • Mantén los datos privados fuera del encuadre. Usa un simulador nuevo o datos de demostración, y revisa los fotogramas antes de entregar.
  • Toca solo el simulador que se te indicó usar. Otros simuladores iniciados pueden pertenecer al trabajo de alguien más; nunca pases booted cuando hay más de uno ejecutándose.
  • Rechaza las solicitudes de seguimiento y cookies durante la grabación a menos que el usuario indique lo contrario.

Pasos

  1. Encuentra el simulador. xcrun simctl list devices booted. Si la app no está instalada, constrúyela e instálala con las herramientas propias del usuario.
  2. Recorre la app una vez sin grabar. Elige entre 3 y 5 momentos que muestren las funciones principales. Elimina ahora los diálogos de incorporación, permisos y cookies para que no aparezcan en la toma.
  3. Graba una sola toma.
    scripts/record.sh start work/raw.mp4 <UDID>
    # maneja la app: tu herramienta de simulador, un XCUITest en el proyecto, o pídele al usuario que navegue tocando
    scripts/record.sh stop <UDID>
    
    Haz una pausa de aproximadamente un segundo en cada pantalla que quieras conservar. Si los toques fallan justo después de iniciar el simulador, espera 20 segundos y reintenta.
  4. Revisa la toma. El archivo termina en el último cambio de pantalla, por lo que una pantalla final estática se corta y una toma de una pantalla que nunca cambia queda casi vacía. Mide los tiempos de las escenas desde el archivo, no de memoria.
    python3 scripts/compose.py frames work/raw.mp4 work
    
    Abre work/contact-sheet.png: 8 mosaicos por fila, el mosaico N es el segundo N.
  5. Escribe storyboard.json.
    {
      "app_name": "MiApp",
      "background": ["#0B1020", "#3B2AA8"],
      "scenes": [
        {"start": 0.3, "end": 5.8, "caption": "Qué hace esta pantalla"},
        {"start": 8.0, "end": 10.0, "speed": 0.8, "caption": "Siguiente paso"}
      ],
      "end_card": {"title": "MiApp", "subtitle": "El eslogan de la app"}
    }
    
    start/end están en segundos dentro de la grabación. speed por debajo de 1 ralentiza una escena, por encima de 1 la acelera. hold congela el último fotograma de la escena durante esa cantidad de segundos, que es como te detienes en una pantalla de resultados. background admite un color o un degradado de arriba a abajo; text_color y caption_size son opcionales. Omite end_card para terminar en la última escena. Recorta los indicadores de carga. Las escenas deben sumar entre 15 y 30 segundos, de lo contrario App Store Connect rechazará la vista previa.
  6. Renderiza.
    python3 scripts/compose.py render work/raw.mp4 storyboard.json out
    
    Muestra out/report.json y advierte cuando la duración de la vista previa esté fuera del rango.
  7. Verifica antes de entregar. Extrae un fotograma de cada escena (ffmpeg -ss <t> -i out/reel-1080x1920.mp4 -frames:v 1 f.png) y revísalo: la leyenda coincide con la pantalla, nada privado, nada recortado.

Notas

  • Requisitos: macOS, Xcode (para simctl y swift), ffmpeg, python3.
  • record.sh ajusta la barra de estado a las 9:41 con batería y señal completas. Límpiala después con xcrun simctl status_bar <UDID> clear.
  • Los números de vista previa de App Store usados aquí (886×1920, 15-30 s, 30 fps, H.264 High 4.0, AAC estéreo) provienen de las especificaciones de vista previa de apps de Apple. Consulta esa página si la subida es rechazada.
  • La pista de audio está en silencio. Agrega música o voz en un editor si quieres sonido.

Skills relacionados