# Changelog Todas as mudanças relevantes do USKMaker. *(English: [CHANGELOG.en.md](CHANGELOG.en.md))* O formato segue o [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0/) e o projeto usa [Versionamento Semântico](https://semver.org/lang/pt-BR/). Cada versão tem um instalador pronto em **[Releases](https://github.com/walterfr/UltraStarKaraokeMaker/releases)** — as notas de cada release trazem também as instruções de instalação. ## [0.20.0] — 2026-08-12 ### Adicionado - **Formato do áudio (OGG/MP3) e teto de resolução do vídeo baixado, configuráveis.** Antes o áudio de todo pacote saía sempre em OGG e o vídeo (quando incluído) baixava na melhor resolução disponível, sem limite (podia vir 4K). Agora dá pra escolher MP3 como formato — aplica em todo áudio gerado (pacote principal, faixas separadas e export YARG) — e limitar a resolução do vídeo, com **1080p como novo padrão** (quem não mexer na config passa a baixar vídeo mais leve; formato de áudio continua OGG por padrão). Pedido de usuário. - **Notas Rap/GoldenRap na tela de revisão**, distintas de Freestyle (cantos quadrados na visualização pra diferenciar). **Botão "+ Nota" (atalho `N`)** para criar uma nota manualmente na posição do marcador de tempo, respeitando a ordem cronológica. **Piano roll lateral tocável**, sincronizado com a nota selecionada — referência de pitch durante a revisão. **Corrigido:** mover/redimensionar notas pelo teclado (setas/Shift+setas) com um grupo multi-selecionado só mexia numa nota — agora mexe no grupo inteiro, igual o arraste já fazia. Contribuição de [@mur1nu](https://github.com/mur1nu) ([PR #14](https://github.com/walterfr/UltraStarKaraokeMaker/pull/14)). ## [0.19.0] — 2026-08-08 ### Adicionado - **Trocar o tipo de nota (Normal/Golden/Freestyle) em lote, pro grupo selecionado.** Antes só dava pra mudar nota por nota. Contribuição de [@angelrdgzrivero](https://github.com/angelrdgzrivero) ([PR #13](https://github.com/walterfr/UltraStarKaraokeMaker/pull/13)). ## [0.18.5] — 2026-08-05 ### Corrigido - **GPU antiga detectada mas incompatível travava o pipeline em vez de cair pra CPU.** `resolve_device` só conferia se havia uma GPU NVIDIA com driver (`torch.cuda.is_available()`), não se o torch instalado tinha KERNEL compilado pra ela. Placas antigas (ex.: GTX 750 Ti, arquitetura Maxwell) passavam nessa checagem e só quebravam depois, dentro do Demucs, com "CUDA error: no kernel image is available for execution on the device" - sem fallback, sem aviso claro. Agora a capacidade real da GPU é comparada contra os kernels disponíveis no torch antes de escolher CUDA; se não bater, cai pra CPU (mais lento, mas funciona) com aviso no log. Relato de usuário (Vitor). ## [0.18.4] — 2026-08-04 ### Corrigido - **Download do YouTube podia pegar o áudio/vídeo de OUTRA música, em silêncio.** `download_from_youtube` escolhia "o `.wav` mais recente por data de modificação" na pasta de trabalho — se essa pasta já tivesse qualquer outro `.wav` (de um teste anterior, por exemplo), a heurística podia devolver o arquivo errado, sem erro nenhum. Resultado real (relato de usuário): letra de uma música alinhada contra o áudio de outra completamente diferente, alinhamento naufragando (0 âncora exata, 61% interpolado). Mesmo padrão corrigido no download de vídeo. Agora o nome do arquivo baixado é fixo (`audio.wav`/`video.*`), sem ambiguidade possível. ## [0.18.3] — 2026-07-31 ### Corrigido - **Setup do ambiente de IA falhava pra todo mundo desde a v0.18.0.** `requirements.txt` pedia `korean-romanizer>=1.4` — versão que nunca existiu (o pacote real nem chegou a 1.0; a mais recente é 0.28.0). Corrigido o pin. Relato de usuário (Sethid777). ## [0.18.2] — 2026-07-31 ### Corrigido - **Setup não testava a extração de pitch (`swift_f0`), só descobria a quebra na hora de gerar.** `swift_f0` importa `onnxruntime` igual o resgate de voz principal (audio-separator), mas sem proteção de try/except — se o onnxruntime dele falhar (causa comum: falta o Microsoft Visual C++ Redistributable), o sidecar inteiro morre no import, sem gerar nada. O setup validava outras bibliotecas essenciais mas não essa, então dizia "tudo certo" e o usuário só descobria o problema no meio de uma geração real (caso relatado por usuário). Agora `swift_f0` também é validado no setup, com a mesma dica de instalar o VC++ Redistributable se falhar. ## [0.18.1] — 2026-07-31 ### Corrigido - **Log de diagnóstico do sidecar podia sumir em silêncio.** O log de sessão do servidor Python era gravado dentro da pasta de instalação do app — no instalador padrão (`perMachine`, Program Files), essa pasta é só-leitura pra usuário comum, então a gravação falhava e o erro era engolido, virando `/dev/null`. Se o sidecar morresse antes de abrir o log do próprio job (ex.: crash no import do torch/CUDA, caso real com GPU antiga), não sobrava log nenhum, nem pro usuário nem pra nós. Agora esse log fica em `%LOCALAPPDATA%\USKMaker\`, sempre gravável. ## [0.18.0] — 2026-07-31 ### Adicionado - **Romanização estendida para chinês, coreano, russo, ucraniano, hindi e grego.** A opção "Romanizar" (antes só japonês/Hepburn) agora cobre mais idiomas, cada um no sistema padrão: chinês → Pinyin com tom, coreano → Revised Romanization, russo/ucraniano → transliteração cirílico→latino, hindi → IAST, grego → transliteração simples. O checkbox só aparece para idiomas com conversor disponível. Pedido de usuário. ## [0.17.0] — 2026-07-30 ### Adicionado - **Aviso visual para saltos de pitch isolados na revisão.** Em produções com camadas (ex.: harmonia de apoio uma quinta acima do vocal principal), a IA de reconhecimento de pitch às vezes trava numa nota isolada na voz errada — com alta confiança, sem se denunciar. Sem jeito barato de corrigir isso automaticamente sem processar toda música de novo, a tela de Revisão agora sinaliza essas notas (mesmo destaque visual e botão "pular pra próxima" que já existiam para outras notas suspeitas), para correção manual rápida. ## [0.16.0] — 2026-07-30 ### Adicionado - **Colar letra sincronizada (.lrc) manualmente.** A busca automática (LRCLIB) não encontra tudo — gêneros pouco indexados (ex.: EBM, industrial, darkwave) costumam ficar sem resultado. Agora dá para colar o conteúdo de um arquivo `.lrc` encontrado manualmente no site; o app extrai a letra e usa os tempos das linhas como âncoras do alinhamento, do mesmo jeito que a busca automática. Pedido de usuário. - **Novo resgate automático: detecção de voz (VAD) mais sensível.** Quando o alinhamento sai ruim, o app agora também tenta destravar o reconhecimento de vocais baixos/atmosféricos (comum em trilhas sonoras e certos estilos eletrônicos) que a detecção de voz padrão simplesmente não percebe como canto. Só entra em ação quando o resultado já está ruim, e só fica se realmente melhorar — medido em 51 músicas de terceiros da biblioteca de teste para garantir que não piora quem já funciona bem. Relato de usuário (issue #9). ## [0.15.0] — 2026-07-30 ### Corrigido - **Letra sincronizada (LRCLIB) de gravação errada agora é detectada e ignorada.** O app busca a letra sincronizada só por artista/título, sem confirmar duração — o LRCLIB é uma base colaborativa e pode devolver a versão ao vivo, remix ou edição estendida de outra pessoa. Medido na biblioteca de teste: 66% das letras sincronizadas encontradas tinham duração incompatível com o áudio baixado. Agora, antes de usar, o app confere se a duração bate; se não bater, ignora a letra sincronizada (o alinhamento segue normal só com a IA) em vez de arriscar notas erradas. - **Log confuso de "idioma não especificado" removido.** Em alguns casos o log mostrava um aviso de que nenhum idioma tinha sido definido, mesmo quando o usuário escolhia um na tela — o idioma escolhido sempre foi usado corretamente na transcrição, era só o aviso que estava errado. Relato de usuário (issue #9). ## [0.14.0] — 2026-07-30 ### Adicionado - **Seleção múltipla de notas na revisão.** `Shift+clique` alterna uma nota dentro/fora do grupo selecionado; `Shift+arraste` no fundo do piano roll abre um retângulo de seleção que soma as notas dentro dele ao grupo. Arrastar qualquer nota do grupo move o **bloco inteiro** (mesmo deslocamento de tempo e pitch em todas), com um único undo para o gesto. `Del` com um grupo selecionado exclui todas de uma vez. Resolve o caso de um trecho inteiro da música sair deslocado do alinhamento automático e precisar ser corrigido de uma vez, sem ajustar nota por nota. Pedido de usuário (issue #11). ## [0.13.0] — 2026-07-29 ### Corrigido - **Aviso de baixa confiança no alinhamento agora é bem mais visível.** Quando o app reconhece pouco da letra na música (ex.: vocais muito processados/eletrônicos), o pacote ainda sai, mas com risco real de estar fora de sincronia — e o aviso disso era um texto pequeno, fácil de não notar na tela de "sucesso". Agora é um banner de destaque (fundo e borda), no mesmo estilo do resto do app. Achado a partir de um relato real de usuário (vocal de música eletrônica processado, reconhecimento de apenas 18% da letra). ## [0.12.0] — 2026-07-26 ### Adicionado - **Romanizar (romaji).** Nova opção nas **Opções**, para músicas em japonês: reescreve a letra do pacote em **romaji** (alfabeto latino, sistema Hepburn), para quem não lê kana/kanji conseguir cantar. O alinhamento continua rodando sobre o japonês original — só o texto final vira romaji. Em letras que já são latinas, não muda nada. ### Corrigido - **A instalação do ambiente de IA não trava mais por causa do resgate de voz opcional.** Antes, se o `audio-separator` (2º passe de separação, que melhora a voz em algumas músicas) não importasse — situação comum quando falta o Microsoft Visual C++ Redistributable na máquina —, o setup reprovava o ambiente **inteiro** e o app não abria, mesmo com tudo que importa funcionando. Agora esse componente é tratado como **opcional**: o setup só avisa, e o app funciona normalmente (o pipeline usa a separação do Demucs). Para reativar o resgate, basta instalar o VC++ Redistributable e rodar o setup de novo. - **O indicador de GPU agora diz a verdade.** Antes, o app mostrava "✓ GPU" sempre que havia uma placa NVIDIA no computador — mesmo quando o PyTorch tinha caído para CPU e a geração ia rodar lenta. Agora ele checa se o PyTorch realmente enxerga a CUDA e, quando não, mostra um aviso claro ("⚠ GPU … — torch sem CUDA, rodando em CPU") em vez de um falso positivo. ## [0.11.0] — 2026-07-25 ### Adicionado - **Exportar para o YARG.** Nova opção nas **Opções**: além do pacote UltraStar, o app monta uma subpasta **"(YARG)"** pronta para o [YARG](https://yarg.in). O YARG lê o formato UltraStar `.txt` nativamente — então não há conversão de formato, só empacotamento no layout que ele espera: `notes.txt` (o mesmo chart), `song.ini` (metadados), e os áudios `song.ogg` (instrumental) e `vocals.ogg` (voz isolada), gerados a partir da separação que o app já faz. Capa (`album.jpg`) e vídeo entram quando existem. Respeita a transposição escolhida. Reaproveita tudo que o pipeline já produz, sem custo de processamento extra relevante. ## [0.10.0] — 2026-07-24 ### Adicionado - **Mudança de tom (transposição).** Novo campo **Transpor (semitons)** ao lado do BPM, de −6 a +6. O pacote sai num tom diferente do original: o app desloca o **áudio** (preservando o andamento) **e as notas** juntos, o mesmo número de semitons — tudo fica sincronizado no tom novo. Serve para compartilhar ou tocar fora do jogo já no tom certo, ou em players sem transposição ao vivo. Passos grandes (mais de ±4) degradam o áudio; combinado com o Backtrack, o resíduo da separação aparece mais. O tom é por-música: volta ao original a cada nova geração. ## [0.9.0] — 2026-07-23 ### Adicionado - **Modo backtrack (só instrumental).** Nas opções, marque **Backtrack** e o áudio do pacote sai **sem a voz-guia** — só o instrumental, para cantar por cima (karaokê de verdade). Usa a separação de voz que o app já faz na geração, então não custa tempo a mais. A qualidade é a da separação: pode sobrar um resíduo de voz aqui e ali. O alinhamento e as notas não mudam — só o áudio empacotado. ## [0.8.0] — 2026-07-23 ### Adicionado - **Botão "Gerar de novo".** Na tela de resultado, gera a mesma música outra vez sem redigitar nada. Útil quando a separação da voz sai ruim numa tentativa — ela varia a cada geração, e a próxima costuma melhorar. - **A tela de resultado agora explica quando usar "Revisar".** Muita gente não percebia que a Revisão conserta um trecho quebrado **sem gerar de novo** — então mexer na letra e regerar acabava estragando partes que já estavam boas. Agora há uma dica no botão deixando claro: para acertar pedaços específicos, use Revisar (ajusta as notas sem re-separar a voz); regenerar é para quando a separação inteira saiu ruim. ## [0.7.1] — 2026-07-22 ### Corrigido - **O download de capa/fundo/vídeo na revisão sempre falhava** com "o download dos complementos falhou". A parte que baixa os arquivos misturava mensagens de aviso na resposta que o app lê, e isso a corrompia — não tinha a ver com o seu ambiente de IA. Corrigido; o download funciona. ## [0.7.0] — 2026-07-22 ### Adicionado - **Aviso na tela quando uma música (ou a fila) termina.** Se você deixou o USKMaker gerando e foi fazer outra coisa, o Windows te avisa quando fica pronto — `✓ Pronto: Artista - Título`, ou um resumo da fila. Só aparece quando a janela do app **não** está em foco (se você está olhando a tela, não incomoda). - **A revisão sugere baixar capa, fundo e vídeo que faltam.** Ao escolher um pacote para revisar, o app analisa a pasta e mostra o que está faltando — com um botão para **baixar de uma vez** o que não tem (capa via MusicBrainz, fundo via fanart.tv, clipe via YouTube). Funciona também com **pacotes que não foram gerados aqui**: nesse caso o app lê o `.txt` para saber artista/título e o que já existe. *(Editar as notas continua só para pacotes gerados pelo USKMaker.)* ## [0.6.0] — 2026-07-20 ### Adicionado - **41 idiomas de música, não mais só 3.** O seletor "Idioma da música" trazia apenas português, inglês e espanhol — quem tinha música em croata, coreano, alemão, japonês etc. ficava sem opção (forçar o inglês dava resultado ruim). Agora o seletor lista os 41 idiomas que o app consegue alinhar palavra a palavra. Para idiomas de escrita não-latina (coreano, japonês, russo, árabe…), escreva a letra na escrita nativa (한국어, não romanizado) — um aviso aparece ao escolher esses. *(O motor já suportava todos; faltava a opção na tela.)* ## [0.5.1] — 2026-07-19 ### Corrigido - **Algumas músicas falhavam ao gerar com o erro `cannot access local variable 'pct'`.** Acontecia justamente com as músicas que o app alinhou **perfeitamente** (nenhuma palavra estimada) — gravações limpas. Um erro de programação fazia o app quebrar logo depois do alinhamento, ao montar os avisos de qualidade. Corrigido; essas músicas geram normalmente agora. (Bug presente desde a v0.3.8.) ## [0.5.0] — 2026-07-18 ### Corrigido - **Quando o "Configurar ambiente de IA" falhava, ele escondia o motivo.** A tela mostrava só `Traceback (most recent call last):` e parava ali — sem dizer qual biblioteca falhou nem qual foi o erro, deixando "rode de novo" como única saída. A causa era do próprio script: no PowerShell do Windows, a primeira linha de erro do Python virava uma falha fatal e o resto do diagnóstico era descartado. Agora cada biblioteca é testada em separado e, quando alguma falha, o setup diz **qual** e mostra o **fim do traceback** (onde está o erro de verdade). De quebra, um simples aviso (como o do "torchcodec") não reprova mais uma biblioteca que carregou bem. ### Alterado - **Nova interface: a janela virou um workspace de duas colunas e não rola mais.** À esquerda ficam a música e a letra (que agora ocupa toda a altura disponível); à direita, o pacote (idioma, BPM, pasta e opções) em cartões. O botão **Gerar** fica sempre visível numa barra fixa embaixo — antes era preciso rolar a página inteira para alcançá-lo. Durante a geração, a coluna da direita mostra só o progresso; ao terminar, só o resultado. Em janelas estreitas as colunas se empilham sozinhas. As opções ganharam rótulos curtos com a explicação no tooltip, para caberem numa linha. ## [0.4.1] — 2026-07-17 ### Corrigido - **Um link do YouTube baixava a playlist inteira.** Quando o link vinha com `&list=...` (o "Mix"/rádio automático que o YouTube adiciona sozinho, ou uma playlist), o app baixava a lista inteira — você colava um clipe e recebia uma dúzia de músicas. Agora baixa só o vídeo que você escolheu. - **Trava no alinhamento (Etapa 4) para quem não tem o ffmpeg no PATH do sistema.** A geração ia até a Etapa 4 e morria com um erro enorme (`WinError 2`, "o sistema não consegue encontrar o arquivo"). Causa: a biblioteca de alinhamento chamava o `ffmpeg` pelo nome, sem usar o ffmpeg que o app já traz embutido. Agora o ffmpeg embutido entra no caminho do processo antes do alinhamento — não é mais preciso ter ffmpeg instalado à parte. (O aviso barulhento sobre "torchcodec" que aparecia junto era inofensivo, não era a causa.) ## [0.4.0] — 2026-07-17 ### Adicionado - **Modo dueto (duas vozes).** Marque a caixa **Dueto** e diga na letra quem canta cada trecho com uma tag no início da linha — `P1:`, `P2:` ou `P1&P2:` quando cantam juntos (linha sem tag continua com o cantor da anterior). O pacote sai no formato de dueto que a comunidade usa: headers `#P1`/`#P2` (os nomes vêm do artista, ex.: "Elton John & Kiki Dee"), o corpo em dois blocos `P1`/`P2` e o sufixo `[DUET]` no arquivo. As duas vozes já estão no vocal que o app isola — o alinhamento não muda, a tag só diz de quem é cada linha. Em dueto, o resgate por voz principal isolada é pulado (ele descartaria o segundo cantor). ## [0.3.8] — 2026-07-17 ### Adicionado - **Aviso quando o app não reconhece bem a letra na música.** Havia um jeito de o pacote sair fora de sincronia sem nenhum aviso: quando o app "ouvia" outra coisa e encaixava as notas com falsa confiança, nos lugares errados. O aviso anterior só pegava o caso em que o app *não conseguia* encaixar — não o caso em que ele encaixava errado. Agora, quando o reconhecimento da letra fica baixo, a tela de resultado avisa para você conferir a sincronia (e, se estiver ruim, gerar de novo). Descoberto medindo 60 músicas contra charts feitos à mão. ## [0.3.7] — 2026-07-17 Duas melhorias na precisão das notas, as duas medidas contra 1444 charts feitos à mão. ### Alterado - **Menos til (`~`) sobrando.** O `~` marca uma nota que sustenta e muda de altura dentro da mesma sílaba — mas o app estava exagerando: colocava `~` em três vezes mais notas que os charts feitos à mão. A causa era confundir uma nota que *escorrega* de altura (algo comum ao cantar) com uma mudança de nota de verdade. Agora a proporção de `~` está alinhada com o que os humanos fazem. ### Corrigido - **Número na letra podia levar uma nota para o lugar errado.** Quando o app "ouvia" um número na música (ex.: "17") e a sua letra também trazia o número escrito como dígito, ele podia fixar uma nota num tempo inventado, com falsa confiança. Agora esse caso é detectado e a nota é medida do jeito certo. (Escrever o número por extenso na letra — "dezessete" — nunca foi afetado.) ## [0.3.6] — 2026-07-17 ### Corrigido - **Quem instalou nas últimas semanas provavelmente está rodando sem a GPU — e nem sabe.** A instalação baixava ~2,5 GB da versão do PyTorch com CUDA e, no passo seguinte, **trocava tudo por uma versão sem CUDA** sem avisar. O resultado: processamento na CPU (~10 min por música em vez de ~2), com o app ainda mostrando "✓ GPU". Pior: quando dava para perceber, a mensagem culpava o **driver de vídeo** — que nunca teve nada a ver. **Se você tem GPU NVIDIA, rode o Configurar ambiente de IA de novo** e confira a linha final: deve dizer `CUDA disponivel: True`. *(O bug apareceu sozinho, sem ninguém mexer em nada: a biblioteca que fazíamos o download passou a servir uma versão mais nova do que a que o app precisa.)* - **Músicas que saíam completamente fora de sincronia agora se resolvem sozinhas.** A separação da voz varia a cada tentativa, e de vez em quando sai uma ruim — quando isso acontece, o app não reconhece o canto e o pacote inteiro sai errado. Agora ele detecta e **refaz a separação automaticamente**, ficando com o melhor resultado. Custa 1–3 minutos, e só nos casos em que a primeira tentativa falhou. - **Se mesmo assim falhar, o app avisa** em vez de entregar calado. Antes, um pacote com 89% das notas estimadas trazia o mesmo aviso discreto de um com 5%. - **Notas depois do fim da música.** Quando o alinhamento se perdia, as notas podiam ser escritas além do fim do áudio — o jogo mostrava nota sem ter o que cantar. ### Alterado - **`#GAP` arredondado para 10 ms** (`1927` → `1930`). O valor vinha do início da primeira palavra detectada, cuja precisão real é de dezenas de milissegundos — o milissegundo ali era ruído com cara de exatidão. É a convenção da comunidade, e 10 ms está bem abaixo do que o ouvido percebe. ## [0.3.5] — 2026-07-16 ### Adicionado - **Faixas separadas de voz e instrumental no pacote** (opcional). Marcando a caixa, o pacote leva também a voz isolada e o playback, e o jogo passa a poder **controlar o volume da voz-guia separado do instrumental** — subir para aprender a música, zerar para cantar sozinho. A separação já acontecia de qualquer jeito (é como o app entende o canto); antes as faixas eram descartadas no fim. O pacote fica quase 3× maior, por isso a caixa vem desmarcada. ### Corrigido - **O BPM manual voltou a ser literal.** Na v0.3.4 o valor digitado era ajustado junto com o automático. O campo existe para você mandar quando a detecção erra — então agora vai exatamente o que você digitou. Se o valor ficar fora da faixa que dá as notas mais precisas, o log só avisa, sem mexer no número. ## [0.3.4] — 2026-07-16 Melhorias de qualidade do chart e um bug que quebrava pacotes em silêncio. Boa parte veio de revisar os projetos vizinhos ([UltraSinger](https://github.com/rakuri255/UltraSinger), [UltraStar-Creator](https://github.com/UltraStar-Deluxe/UltraStar-Creator), [usdb_syncer](https://github.com/bohning/usdb_syncer) e a [spec oficial](https://github.com/UltraStar-Deluxe/format)). ### Corrigido - **Título com `?`, `/` ou `:` quebrava o pacote.** Sanitizávamos o nome da pasta, mas não o dos arquivos dentro dela — e bastava um caractere comum para dar errado de três jeitos: "AC/DC" fazia o áudio ir parar em outra pasta (pacote sem som, sem erro nenhum), "Quem?" fazia a geração falhar, e "Song 2: Live" criava um arquivo de **0 byte** com o áudio escondido num *stream* do NTFS — sem reclamar. Agora os nomes seguem a mesma convenção que o USDB usa ("AC/DC" vira "AC-DC"). O título e o artista continuam intactos dentro do arquivo e nas buscas de capa/ano/gênero. - **Notas muito mais precisas: o `#BPM` agora usa a grade fina dos charts feitos à mão.** O `#BPM` do UltraStar não é o andamento da música — é a unidade da grade de tempo. Gravávamos o andamento real, o que dava uma grade grossa demais: **59% das notas ficavam presas na duração mínima**, porque a duração real delas simplesmente não cabia. Agora a duração das notas reflete o que é cantado de verdade, e o erro de tempo por nota caiu pela metade. - **Números na letra ("20", "1985") saíam com a nota errada.** Ninguém canta "dois-zero", canta "vinte" — e o alinhador não entende dígitos. A nota do número saía até 6× curta demais e adiantada. Agora ela acompanha o que é cantado. A letra continua escrita do seu jeito, com o número. ### Adicionado - **Tag `#AUDIO`** no pacote, junto do `#MP3` e apontando para o mesmo arquivo. É para onde o formato está migrando: a spec já manda os players preferirem o `#AUDIO` quando ele existe, e a próxima versão do formato o torna obrigatório. Escrever os dois atende player novo e antigo. ### Nota - O ambiente de IA ganhou uma biblioteca nova (para os números por extenso). Se você **não** rodar o **Configurar ambiente de IA** de novo, tudo continua funcionando — só a correção dos números não entra em ação. ## [0.3.3] — 2026-07-16 ### Alterado - **O Git não é mais necessário para instalar.** O `whisperx` (a biblioteca de alinhamento) era a única dependência instalada direto do repositório do GitHub (`git+https://...`), e só por causa dela o **Configurar ambiente de IA** exigia Git na máquina. Quem não tinha via o setup morrer no meio e a geração falhar depois com *"o sidecar encerrou inesperadamente"*, sem nem gerar log. Agora ele vem do PyPI, com a versão fixa (`whisperx==3.8.7rc1`) — o que também torna a instalação reproduzível, já que o `git+` seguia o último commit do repositório, um alvo móvel. É exatamente a mesma versão de antes: o pacote do PyPI foi verificado como o mesmo código, arquivo por arquivo, e confirmado com uma geração completa. Pacotes gerados não mudam. ## [0.3.2] — 2026-07-16 ### Corrigido - **O app dizia "ambiente OK" quando não estava.** Se a configuração do ambiente de IA falhasse no meio, o app mostrava o ✓ verde mesmo assim e escondia o botão de configurar; a geração então falhava com *"o sidecar encerrou inesperadamente"* e **sem gerar log** (o processo morria antes de criá-lo). Agora o app confere as bibliotecas de verdade e avisa quais faltam. - **O setup falha de verdade quando dá errado**, em vez de terminar com mensagem de sucesso. ### Adicionado - **Notas douradas automáticas** (`*`) nas partes sustentadas, como nos charts feitos à mão (~5% das notas, proporção calibrada medindo charts da comunidade). Antes os pacotes saíam sem nenhuma. - **Consistência de oitava** no pitch — corrige notas isoladas em que o detector errava a oitava. ### Alterado - **Timing bem mais preciso** — a divisão das sílabas segue a voz de verdade (em vez de dividir o tempo em partes iguais), com **melisma (`~`) real** nas sílabas sustentadas e âncoras de alinhamento mais robustas. Contribuição de [@Alejololer](https://github.com/Alejololer). - **Resgate de voz principal** — quando o coro atrapalha o alinhamento, o app isola a voz principal e tenta de novo, só aceitando se melhorar. Contribuição de [@Alejololer](https://github.com/Alejololer). - A tela de revisão passa a sinalizar também as notas medidas com **baixa confiança**, não só as estimadas. - Novo módulo `eval/`: harness de avaliação de qualidade (pontuação no domínio do tempo). Contribuição de [@Alejololer](https://github.com/Alejololer). ## [0.3.1] — 2026-07-15 ### Corrigido - **O setup não abria em algumas máquinas** — o botão "Configurar ambiente de IA" falhava com um erro de caminho (`Join-Path ... o valor do argumento "drive" é nulo`) no Windows PowerShell 5.1. - **Crash com acentos/emoji** — títulos ou tags com caracteres especiais (CJK, emoji) derrubavam o processamento no Windows. Tudo em UTF-8 agora. ### Adicionado - **Preenchimento automático de título e artista** a partir das tags do arquivo de áudio (só os campos ainda vazios). - **Imagem de fundo `#BACKGROUND`** no pacote: fundo 16:9 real via [fanart.tv](https://fanart.tv/get-an-api-key/) (opcional, com `FANARTTV_API_KEY`); sem a chave, reaproveita a capa — assim todo pacote com capa passa a ter fundo. - **Correção automática de BPM** — conserta o erro comum de "meio/dobro" no andamento detectado. - **Caixa "deixar só o essencial"** — ao fim da fila, apaga os auxiliares (`.lrc`/`.log`/`.json`) de cada pasta (opcional; remove a tela de revisão daquele pacote). - Link discreto de apoio ao projeto na página "Sobre". ### Alterado - Campos de **título/artista movidos para acima da busca de letra** — a busca depende deles. ## [0.3.0] — 2026-07-12 ### Adicionado - **Auto-setup do ambiente de IA por um botão.** "Configurar ambiente de IA" baixa o `uv` (que instala o Python 3.12 se você não tiver), um **ffmpeg embutido** (com libvorbis) e as bibliotecas de IA, com progresso ao vivo no app. Acabou a necessidade de instalar Python à mão, pôr o ffmpeg no PATH ou rodar o `setup-sidecar.ps1` (que segue disponível como alternativa). ## [0.2.2] — 2026-07-12 ### Corrigido - **Máquinas sem GPU NVIDIA** (ex.: Intel Iris Xe) falhavam com `AssertionError: Torch not compiled with CUDA enabled`, mesmo com a interface indicando modo CPU. O app agora detecta a ausência de CUDA e roda tudo na CPU automaticamente. ## [0.2.1] — 2026-07-12 Correções a partir de feedback da comunidade, validadas contra a [spec oficial do formato](https://github.com/UltraStar-Deluxe/format/blob/main/The%20UltraStar%20File%20Format%20(v1).md). ### Corrigido - **Til (`~`) nas sílabas** — o `~` era prefixado em toda sílaba de continuação, e o jogo exibia o til literal na tela ("Ju~rei"). - **GAP / primeira nota** — a primeira nota agora começa no beat 0 e o atraso real do canto vai para a tag `#GAP`, então re-sincronizar com outro áudio é só ajustar o `#GAP`. - **Mensagens de erro traduzidas** — os erros vindos do núcleo Rust passam a respeitar o idioma da interface. ## [0.2.0] — 2026-07-12 ### Adicionado - **Fila de músicas + modelos quentes** — um sidecar Python persistente mantém os modelos carregados entre músicas; da 2ª em diante o alinhamento fica bem mais rápido. - **Buscar letra (LRCLIB)** por artista + título. Havendo versão sincronizada, os tempos de cada linha entram como âncoras no alinhamento. - **Interface bilíngue PT/EN**, detectando o idioma do sistema. - **Saída organizada** numa subpasta `Artista - Título` (padrão das coleções UltraStar). - Splash, página "Sobre" e ícone nítido na barra de tarefas. ### Alterado - **Reformulação de UX** — checagem de ambiente na abertura, validação da letra em tempo real, lista de etapas com estado e duração, cancelamento de verdade, e resultado com capa, metadados e contagem de notas medidas vs. estimadas. ## [0.1.0] — 2026-07-09 Primeira release pública: pipeline completo (letra sincronizada, pitch, BPM, metadados, vídeo), instalador Windows e setup assistido do ambiente de IA. [0.9.0]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.9.0 [0.8.0]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.8.0 [0.7.1]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.7.1 [0.7.0]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.7.0 [0.6.0]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.6.0 [0.5.1]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.5.1 [0.5.0]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.5.0 [0.4.1]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.4.1 [0.4.0]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.4.0 [0.3.8]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.3.8 [0.3.7]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.3.7 [0.3.6]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.3.6 [0.3.5]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.3.5 [0.3.4]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.3.4 [0.3.3]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.3.3 [0.3.2]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.3.2 [0.3.1]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.3.1 [0.3.0]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.3.0 [0.2.2]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.2.2 [0.2.1]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.2.1 [0.2.0]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.2.0 [0.1.0]: https://github.com/walterfr/UltraStarKaraokeMaker/releases/tag/v0.1.0