Communitygithub.com

ytpiano2sheet

Transcribe un video de piano con barras descendentes (tutorial estilo Synthesia de YouTube, o un archivo de video local) a MIDI, partitura (PDF, MusicXML, MuseScore) y audio, opcionalmente adaptado a un teclado más pequeño.

¿Qué es ytpiano2sheet?

ytpiano2sheet es una habilidad para agentes de IA que permite transcribir videos de piano con barras descendentes (como los tutoriales estilo Synthesia en YouTube, o videos locales con barras que caen sobre un teclado) a partituras en PDF, MusicXML, MuseScore, archivos MIDI y audio M4A. A diferencia de transcripciones basadas en audio, este método lee las barras visuales del video, logrando una precisión mucho mayor (en pruebas coincidió con transcripciones verificadas en 989 de 990 notas). Soporta múltiples plataformas como Claude Code, Cursor y Codex, y el flujo se maneja mediante un script Python que se ejecuta con `uv`, instalando dependencias automáticamente. La habilidad guía al usuario paso a paso: primero solicita el enlace o archivo, luego pregunta por los formatos de salida deseados y el tamaño del teclado (puede adaptar la transcripción a teclados de 61, 49, 76 teclas, etc.). También incluye opciones para revisar visualmente la transcripción mediante imágenes, ajustar métrica y tonalidad, y manejar casos donde la lectura falle. Está diseñada para uso personal del usuario; no debe subir ni compartir las transcripciones generadas.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ax3lt/ytpiano2sheet/tree/main

Preguntar en tu IA favorita

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

Documentación

¿Qué hace ytpiano2sheet?

ytpiano2sheet.py (junto a este archivo) lee las barras descendentes de un video tutorial de piano. Las barras se dibujan a partir del MIDI del pianista, por lo que esto es mucho más exacto que transcribir el audio: en dos videos de prueba coincidió con una transcripción verificada manualmente en 989 de 990 notas y con una lectura independiente de las pulsaciones de teclas en 947 de 947. Solo funciona en videos que muestren barras cayendo sobre (o elevándose desde) un teclado.

Las transcripciones son para la práctica personal del usuario: la música pertenece a sus compositores, arreglistas y creadores de video. No subas, publiques ni compartas las salidas en nombre del usuario; si te lo pide, remítelo a la sección "Personal use and legal notes" del README.

Ejecuta todo con uv run <esta carpeta>/ytpiano2sheet.py ...; uv instala las dependencias de Python por sí mismo. A continuación, $BS significa la ruta absoluta de esta carpeta.

1. Preguntar primero

Si el usuario no ha dado un enlace o un archivo de video, pídelo en texto plano.

Luego haz ambas preguntas en una sola llamada AskUserQuestion (salta la pregunta que el usuario ya haya respondido):

  1. "¿Qué salidas deseas?" (multiSelect: true)
    • "Partitura en PDF" (formato pdf)
    • "Archivo MIDI" (formato mid)
    • "Audio para escuchar (m4a)" (formato m4a)
    • "Archivo MusicXML + MuseScore" (formatos musicxml,mscz, para editar la partitura) "Otro" puede nombrar wav o review (imágenes de las barras con las notas detectadas).
  2. "¿En qué teclado lo tocarás?"
    • "88 teclas, piano completo (Recomendado)" (88)
    • "76 teclas" (76)
    • "61 teclas" (61)
    • "49 teclas" (49) "Otro" puede ser otro tamaño (73, 37, 32, 25) o un rango como C2-C7 (el Do central es C4). Las notas fuera del teclado se mueven en octavas completas, por lo que la armonía se mantiene igual.

2. Prerrequisitos

  1. uv --version. Si falta uv, pregunta antes de instalarlo (brew install uv, o curl -LsSf https://astral.sh/uv/install.sh | sh).
  2. uv run $BS/ytpiano2sheet.py --check --formats <formatos>. Lista lo que falta (MuseScore para pdf/mscz, fluidsynth y un soundfont para audio, ffmpeg para m4a) y el comando que instala cada uno.
  3. Si falta algo, pregunta con AskUserQuestion si desea instalarlo, nombrando cada elemento y su comando (por ejemplo "brew install --cask musescore", "descargar un soundfont de 32 MB a ~/.cache/ytpiano2sheet"). Si dice que sí, añade --install a la ejecución en el paso 3. Si una instalación necesita sudo (apt-get en Linux), pide al usuario que ejecute ese comando él mismo con el prefijo !, luego verifica de nuevo. Si dice que no, elimina los formatos que necesiten las herramientas faltantes e indica cuáles eliminaste.

3. Ejecutar

uv run $BS/ytpiano2sheet.py "<enlace o archivo>" -f <formatos>,review -k <teclado> -o <carpeta de salida> [--install]
  • Añade siempre review, incluso si el usuario no lo pidió: necesitas las imágenes para el paso 4. Elimina la carpeta review después, a menos que el usuario la haya solicitado.
  • Carpeta de salida por defecto: una carpeta out/ en el proyecto actual del usuario, a menos que indique otra cosa. Cada canción recibe su propia carpeta dentro, nombrada según el título del video: out/<canción>/<canción>.pdf y así sucesivamente, out/<canción>/review/, y <canción> (61 teclas).* para un teclado más pequeño.
  • Tarda aproximadamente un minuto para un video de 2-3 minutos (incluyendo la descarga). El registro informa el teclado encontrado, la velocidad de las barras, el conteo de notas y, para la partitura, la tonalidad y el compás adivinados.
  • Banderas opcionales: --meter 3 o --meter 4 y --key D / --key d (Re menor) anulan las suposiciones de la partitura. La partitura solo adivina 3/4 o 4/4: cuando sabes que la pieza tiene un compás compuesto (Nocturno Op. 9 No. 2 de Chopin en 12/8, una barcarola en 6/8), o los tresillos de una pieza en 4/4 (Claro de Luna) hacen que la partitura tenga demasiados compases de 3/4, pasa --meter 12/8, 6/8 o 9/8; --lowest C2 cuando el teclado del video está cortado en una tecla inusual (el registro advierte cuando tuvo que adivinar); --start / --end (segundos) cuando una introducción o pantalla final aún se convierten en notas en las imágenes de revisión; --threshold N (por debajo del umbral registrado) cuando algunas barras, a menudo oscuras, no tienen recuadro.

Si se detiene con "could not find moving bars above the keyboard", el video no tiene barras descendentes (por ejemplo, un piano filmado). Indica al usuario que esta herramienta no puede leerlo.

4. Verificar antes de informar

Abre algunas imágenes de revisión con la herramienta Read: la primera, una del medio, la última, más aquellas que parezcan densas. Cada barra brillante debe llevar un recuadro con el nombre de la nota, y ningún recuadro debe estar sobre espacio vacío. También verifica que:

  • la línea del teclado en el registro indique 88 teclas A0-C8, o un rango más pequeño razonable;
  • la tonalidad de la partitura coincida con la música (la línea del registro sheet: key ...);
  • para un PDF, la página 1 se vea como música para piano. Conviértelo con sips -s format png <pdf> --out page1.png en macOS, o MuseScore -o page1.png, luego míralo.

Si faltan barras o son incorrectas, indícalo con marcas de tiempo en lugar de ocultarlo. Prueba las banderas primero: --meter o --key cuando solo el compás o la tonalidad de la partitura se vean mal (el MIDI no cambia), --lowest cuando el rango del teclado en el registro sea incorrecto.

Si el lector en sí está mal y ninguna bandera ayuda, no edites los scripts en silencio. Una corrección que haga funcionar un video puede romper otros, y el resultado roto aún parece una partitura plausible. Explica qué se ve mal y por qué, luego pregunta con AskUserQuestion si desea parchear la copia local. Si el usuario acepta:

  1. Antes de editar, copia cada script que cambiarás a la carpeta de la canción (ytpiano2sheet.py.orig, sheet.py.orig).
  2. Haz el cambio más pequeño que solucione la causa, vuelve a ejecutar y repite las verificaciones anteriores. Luego ejecuta uv run $BS/test_ytpiano2sheet.py; si falla, restaura los originales.
  3. Escribe bug-report.md en la carpeta de la canción: el enlace del video, las marcas de tiempo que estaban mal, las líneas de registro relevantes y diff -u de cada cambio contra su .orig, para que el autor pueda probar la corrección con los videos de referencia y enviarla a todos.
  4. Pregunta con AskUserQuestion si desea abrir un issue upstream con ese informe. Solo si es sí, y solo si gh está instalado y autenticado: gh issue create --repo <propietario/nombre de git -C $BS remote get-url origin> --title "<descripción breve del estilo de video que falló>" --body-file <carpeta de la canción>/bug-report.md, luego da al usuario el enlace del issue. Sin gh, o si $BS no es un clon de git, indica al usuario dónde está bug-report.md para que pueda publicarlo él mismo.

5. Informar

Enumera los archivos escritos, el conteo de notas, la tonalidad y el compás utilizados, las notas movidas por la adaptación del teclado (la línea del registro keyboard ...: N notes moved), y cualquier cosa del paso 4 que se viera mal. Si los scripts fueron parcheados, indícalo claramente y señala a bug-report.md. Mantenlo breve.

Skills relacionados