Communitygithub.com

ytpiano2sheet

Transcreve um vídeo de piano com barras caindo (tutorial estilo Synthesia do YouTube ou arquivo local) para MIDI, partitura (PDF, MusicXML, MuseScore) e áudio, opcionalmente adaptado para um teclado menor. Use quando o usuário compartilhar um link de tutorial de piano ou vídeo com notas caindo (ou subindo) e quiser as notas, a partitura, uma cifra, um MIDI ou uma versão em áudio, ou quiser que se ajuste a um teclado de 61, 49 ou outro menor.

O que é ytpiano2sheet?

ytpiano2sheet é uma skill especializada em converter vídeos de piano com barras caindo (como tutoriais ao estilo Synthesia) em partituras precisas, arquivos MIDI e áudio. Ela se baseia na leitura visual das barras animadas sobre o teclado virtual, o que proporciona uma precisão muito maior do que a transcrição por áudio — em testes, acertou 989 de 990 notas em um vídeo e 947 de 947 em outro. A skill suporta múltiplos formatos de saída: PDF, MusicXML, MIDI, M4A e imagens de revisão (review). Também permite adaptar a transcrição para teclados de tamanhos variados (88, 76, 61, 49 teclas ou um intervalo personalizado) deslocando notas por oitavas inteiras, mantendo a harmonia. O fluxo de uso inclui verificar dependências (como uv, MuseScore, fluidsynth e ffmpeg), perguntar ao usuário quais saídas deseja e qual o tamanho do teclado, executar a transcrição e revisar visualmente as imagens geradas para garantir que todas as barras foram capturadas corretamente. Caso a leitura falhe, a skill orienta o usuário a criar um relatório de bug com timbres, diffs e logs para abrir uma issue no repositório oficial. Não deve ser usada para áudio puro ou vídeos de piano filmado sem barras animadas.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que ytpiano2sheet faz?

ytpiano2sheet.py (ao lado deste arquivo) lê as barras caindo de um vídeo tutorial de piano. As barras são desenhadas a partir do MIDI do próprio pianista, portanto isso é muito mais exato do que transcrever o áudio: em dois vídeos de teste, correspondeu a uma transcrição verificada manualmente em 989 de 990 notas e a uma leitura independente das teclas pressionadas em 947 de 947. Funciona apenas em vídeos que mostram barras caindo sobre (ou subindo de) um teclado.

As transcrições são para a prática pessoal do usuário: a música pertence a seus compositores, arranjadores e criadores de vídeo. Não faça upload, publique ou compartilhe as saídas em nome do usuário; se ele pedir, aponte-o para a seção "Uso pessoal e notas legais" do README.

Execute tudo com uv run <pasta_atual>/ytpiano2sheet.py ...; o uv instala as dependências Python por conta própria. Abaixo, $BS significa o caminho absoluto desta pasta.

1. Pergunte primeiro

Se o usuário não forneceu um link ou arquivo de vídeo, peça-o em texto simples.

Em seguida, faça ambas as perguntas em uma única chamada AskUserQuestion (pule a pergunta que o usuário já respondeu):

  1. "Quais saídas você deseja?" (multiSelect: true)
    • "Partitura em PDF" (formato pdf)
    • "Arquivo MIDI" (formato mid)
    • "Áudio para ouvir (m4a)" (formato m4a)
    • "Arquivo MusicXML + MuseScore" (formatos musicxml,mscz, para editar a partitura) "Outro" pode nomear wav ou review (imagens das barras com as notas detectadas).
  2. "Em qual teclado você vai tocar?"
    • "88 teclas, piano completo (Recomendado)" (88)
    • "76 teclas" (76)
    • "61 teclas" (61)
    • "49 teclas" (49) "Outro" pode ser outro tamanho (73, 37, 32, 25) ou um intervalo como C2-C7 (o Dó central é C4). Notas fora do teclado são movidas por oitavas inteiras, então a harmonia permanece a mesma.

2. Pré-requisitos

  1. uv --version. Se o uv estiver faltando, pergunte antes de instalá-lo (brew install uv ou curl -LsSf https://astral.sh/uv/install.sh | sh).
  2. uv run $BS/ytpiano2sheet.py --check --formats <formatos>. Ele lista o que está faltando (MuseScore para pdf/mscz, fluidsynth e um soundfont para áudio, ffmpeg para m4a) e o comando que instala cada um.
  3. Se algo estiver faltando, pergunte com AskUserQuestion se deseja instalá-lo, nomeando cada item e seu comando (por exemplo "brew install --cask musescore", "baixar um soundfont de 32 MB para ~/.cache/ytpiano2sheet"). Se a resposta for sim, adicione --install à execução na etapa 3. Se uma instalação precisar de sudo (apt-get no Linux), peça ao usuário para executar esse comando ele mesmo com o prefixo ! e verifique novamente. Se a resposta for não, remova os formatos que dependem das ferramentas faltantes e informe quais foram removidos.

3. Execução

uv run $BS/ytpiano2sheet.py "<link ou arquivo>" -f <formatos>,review -k <teclado> -o <pasta de saída> [--install]
  • Sempre adicione review, mesmo que o usuário não tenha solicitado: você precisa das imagens para a etapa 4. Exclua a pasta review depois, a menos que o usuário a tenha solicitado.
  • Pasta de saída padrão: uma pasta out/ no projeto atual do usuário, a menos que ele especifique outra. Cada música recebe sua própria pasta dentro dela, nomeada conforme o título do vídeo: out/<música>/<música>.pdf e assim por diante, out/<música>/review/, e <música> (61 teclas).* para teclados menores.
  • Leva cerca de um minuto para um vídeo de 2-3 minutos (incluindo download). O log informa o teclado encontrado, a velocidade das barras, a contagem de notas e, para a partitura, o tom e o compasso adivinhados.
  • Flags opcionais: --meter 3 ou --meter 4 e --key D / --key d (Ré menor) substituem os palpites da partitura. A partitura adivinha apenas 3/4 ou 4/4: quando você sabe que a peça está em compasso composto (Noturno Op. 9 No. 2 de Chopin em 12/8, uma barcarola em 6/8), ou as tercinas de uma peça em 4/4 (Moonlight Sonata) fazem a partitura gerar compassos demais em 3/4, passe --meter 12/8, 6/8 ou 9/8; --lowest C2 quando o teclado do vídeo está cortado em uma tecla incomum (o log avisa quando teve que adivinhar); --start / --end (segundos) quando uma introdução ou tela final ainda se transforma em notas nas imagens de revisão; --threshold N (abaixo do limite registrado) quando algumas barras, geralmente escuras, não têm caixa.

Se parar com "could not find moving bars above the keyboard", o vídeo não tem barras caindo (um piano filmado, por exemplo). Informe ao usuário que esta ferramenta não pode lê-lo.

4. Verifique antes de relatar

Abra algumas imagens de revisão com a ferramenta Read: a primeira, uma do meio, a última e quaisquer que pareçam densas. Cada barra brilhante deve conter uma caixa com o nome da nota, e nenhuma caixa deve estar sobre espaço vazio. Verifique também:

  • que a linha do teclado no log diz 88 teclas A0-C8, ou um intervalo menor sensato;
  • que o tom da partitura corresponde à música (a linha do log sheet: key ...);
  • para um PDF, a página 1 parece música para piano. Converta com sips -s format png <pdf> --out page1.png no macOS, ou MuseScore -o page1.png, e visualize.

Se barras estiverem faltando ou incorretas, informe com timestamps em vez de esconder. Tente as flags primeiro: --meter ou --key quando apenas o compasso ou tom da partitura parecer errado (o MIDI não muda), --lowest quando o intervalo do teclado no log estiver incorreto.

Se o leitor em si estiver errado e nenhuma flag ajudar, não edite os scripts silenciosamente. Uma correção que faz um vídeo funcionar pode quebrar outros, e o resultado quebrado ainda parece música plausível. Explique o que parece errado e por quê, e pergunte com AskUserQuestion se deseja corrigir a cópia local. Se o usuário concordar:

  1. Antes de editar, copie cada script que você alterará para a pasta da música (ytpiano2sheet.py.orig, sheet.py.orig).
  2. Faça a menor alteração que corrija a causa, reexecute e refaça as verificações acima. Em seguida, execute uv run $BS/test_ytpiano2sheet.py; se falhar, restaure os originais.
  3. Escreva bug-report.md na pasta da música: o link do vídeo, os timestamps que estavam errados, as linhas relevantes do log e diff -u de cada alteração contra seu .orig, para que o autor possa testar a correção nos vídeos de referência e distribuí-la a todos.
  4. Pergunte com AskUserQuestion se deseja abrir uma issue upstream com esse relatório. Apenas se a resposta for sim, e apenas se gh estiver instalado e logado: gh issue create --repo <proprietário/nome de git -C $BS remote get-url origin> --title "<descrição curta do estilo de vídeo que falhou>" --body-file <pasta da música>/bug-report.md e forneça ao usuário o link da issue. Sem gh, ou se $BS não for um clone git, informe ao usuário onde está o bug-report.md para que ele possa postá-lo manualmente.

5. Relatório

Liste os arquivos gravados, a contagem de notas, o tom e compasso usados, quaisquer notas movidas pela adaptação do teclado (a linha do log keyboard ...: N notas movidas) e qualquer coisa da etapa 4 que parecesse estranha. Se os scripts foram corrigidos, diga isso claramente e aponte para bug-report.md. Mantenha curto.

Habilidades Relacionadas