{
  "app": {
    "title": "🎛️ ACE-Step V1.5 Playground💡",
    "subtitle": "Expandindo os Limites da Geração de Música de Código Aberto"
  },
  "common": {
    "language_metadata": {
      "name": "Portuguese",
      "native_name": "Português"
    }
  },
  "dataset": {
    "title": "📊 Explorador de Dataset",
    "dataset_label": "Dataset",
    "dataset_info": "Escolha o dataset para explorar.",
    "import_btn": "📥 Importar Dataset",
    "search_type_label": "Tipo de Busca",
    "search_type_info": "Como encontrar itens.",
    "search_value_label": "Valor de Busca",
    "search_value_placeholder": "Digite chaves ou índice (deixe vazio para aleatório)",
    "search_value_info": "Chaves: correspondência exata, Índice: 0 até tamanho do dataset-1.",
    "instruction_label": "📝 Instrução",
    "instruction_placeholder": "Nenhuma instrução disponível",
    "metadata_title": "📋 Metadados do Item (JSON)",
    "metadata_label": "Informações Completas do Item",
    "source_audio": "Áudio de Origem",
    "target_audio": "Áudio de Destino",
    "reference_audio": "Áudio de Referência",
    "get_item_btn": "🔍 Obter Item",
    "use_src_checkbox": "Usar Áudio de Origem do Dataset",
    "use_src_info": "Marque para usar o áudio de origem do dataset.",
    "data_status_label": "📊 Status dos Dados",
    "data_status_default": "❌ Nenhum dataset importado",
    "autofill_btn": "📋 Preencher Formulário de Geração Automaticamente"
  },
  "service": {
    "title": "🔧 Configuração do Serviço",
    "checkpoint_label": "Arquivo de Checkpoint",
    "checkpoint_info": "O arquivo de pesos do modelo a ser carregado. Modelos 'turbo' são mais rápidos (4–8 passos), modelos 'base' são mais lentos, mas suportam mais recursos (escala de orientação, modos extract/lego). Escolha turbo para geração rápida, base para controle máximo.",
    "refresh_btn": "🔄 Atualizar",
    "model_path_label": "Caminho do Modelo Principal",
    "model_path_info": "O diretório contendo os arquivos de configuração e arquitetura do modelo. Detectado automaticamente a partir da seleção de checkpoint. Altere apenas se tiver uma configuração de modelo personalizada.",
    "device_label": "Dispositivo",
    "device_info": "Em qual hardware executar. 'auto' seleciona o melhor disponível (recomendado). 'cuda' = GPU NVIDIA, 'mps' = Apple Silicon, 'xpu' = GPU Intel, 'cpu' = muito lento, último recurso.",
    "lm_model_path_label": "Caminho do Modelo LM 5Hz",
    "lm_model_path_info": "O modelo de linguagem que alimenta o modo Think, metadados CoT, aprimoramento de legendas e geração de código semântico. Necessário para o modo Think. LMs maiores produzem melhores resultados, mas precisam de mais VRAM.",
    "backend_label": "Backend do LM 5Hz",
    "backend_info": "Motor para o LM 5Hz. vLLM = inferência significativamente mais rápida, recomendado para GPUs NVIDIA com ≥8GB de VRAM. PyTorch (pt) = mais lento, mas funciona em todo hardware (CPU, MPS, XPU). Use pt se o vLLM não instalar ou se estiver em hardware não-NVIDIA.",
    "init_llm_label": "Inicializar LM 5Hz",
    "init_llm_info": "Carrega o LM 5Hz na memória na inicialização. Necessário para: modo Think, geração de metadados CoT, aprimoramento de legendas/letras e Pontuação Automática. Usa VRAM adicional (~2–6GB dependendo do tamanho do modelo). Desative se precisar apenas de geração básica sem recursos de LM.",
    "lm_unavailable_vram": "⚠️ LM não disponível para este nível de GPU (VRAM insuficiente)",
    "flash_attention_label": "Usar Flash Attention",
    "flash_attention_info_enabled": "Acelera a inferência do DiT em ~20–30% com menor uso de memória. Sem diferença de qualidade — puramente uma otimização de desempenho. Recomendado se disponível. Requer o pacote flash_attn.",
    "flash_attention_info_disabled": "Flash attention não disponível (pacote flash_attn não instalado). Instale com: pip install flash-attn. Oferece ~20–30% de aceleração sem alteração de qualidade.",
    "offload_cpu_label": "Descarregar para CPU",
    "offload_cpu_info": "Move os modelos para a RAM do sistema quando não estão em execução, liberando VRAM da GPU para o modelo ativo. Adiciona um pequeno atraso (~1–3s) ao alternar entre modelos. Essencial para GPUs com <16GB de VRAM. Impacto insignificante em GPUs com >24GB.",
    "offload_dit_cpu_label": "Descarregar DiT para CPU",
    "offload_dit_cpu_info": "Também descarrega o modelo DiT para a CPU (além do descarregamento base). Economiza mais VRAM, mas adiciona tempo extra de troca. Requer que 'Descarregar para CPU' esteja habilitado. Use em GPUs com VRAM muito baixa (<10GB).",
    "compile_model_label": "Compilar Modelo (torch.compile)",
    "compile_model_info": "Otimiza o modelo usando compilação PyTorch para inferência mais rápida. A primeira geração demora mais (sobrecarga de compilação), gerações subsequentes são ~10–20% mais rápidas. Necessário para usar quantização INT8. Recomendado manter habilitado.",
    "quantization_label": "Quantização INT8",
    "quantization_info": "Reduz os pesos do modelo de 32 bits para 8 bits, diminuindo o uso de VRAM em ~50% com perda mínima de qualidade. Essencial para GPUs com <16GB de VRAM. Requer que 'Compilar Modelo' esteja habilitado. Nota: incompatível com adaptadores LoRA.",
    "mlx_dit_label": "MLX DiT (Apple Silicon)",
    "mlx_dit_info_enabled": "Executa o modelo de difusão DiT usando o framework nativo MLX da Apple em vez do PyTorch MPS. Significativamente mais rápido em Macs M1/M2/M3/M4. Recomendado para usuários de Apple Silicon.",
    "mlx_dit_info_disabled": "MLX não disponível. Requer: macOS + Apple Silicon (M1/M2/M3/M4) + pacote mlx instalado. Instale com: pip install mlx.",
    "init_btn": "Inicializar Serviço",
    "status_label": "Status",
    "language_label": "Idioma da Interface",
    "language_info": "Selecione o idioma da interface.",
    "gpu_auto_tier": "Nível Detectado Automaticamente",
    "tier_label": "Substituição do Nível de GPU",
    "tier_info": "Substitui o nível de capacidade de GPU detectado automaticamente. Cada nível ajusta os padrões de descarregamento, quantização e backend para corresponder à sua VRAM. Use 'Auto' a menos que a detecção automática esteja incorreta ou você queira forçar configurações específicas de otimização."
  },
  "generation": {
    "tab_title": "🎵 Geração",
    "required_inputs": "📝 Entradas Obrigatórias",
    "task_type_label": "Tipo de Tarefa *",
    "task_type_info": "Selecione o tipo de tarefa para geração.",
    "instruction_label": "Instrução",
    "instruction_info": "A instrução é gerada automaticamente com base no tipo de tarefa.",
    "load_btn": "📂 Carregar",
    "track_name_label": "Nome da Faixa",
    "track_name_info": "Selecione o nome da faixa para tarefas lego/extract.",
    "track_classes_label": "Nomes das Faixas",
    "track_classes_info": "Selecione múltiplas classes de faixa para a tarefa complete.",
    "audio_uploads": "🎵 Uploads de Áudio",
    "reference_audio": "Áudio de Referência",
    "source_audio": "Áudio Fonte",
    "convert_codes_btn": "Converter para Códigos",
    "analyze_btn": "🔍 Analisar",
    "sample_btn": "🎲 Clique Aqui",
    "lm_codes_hints": "🎼 Dicas de Códigos LM",
    "lm_codes_audio_upload_label": "Áudio → Códigos (utilitário)",
    "lm_codes_label": "Dicas de Códigos LM",
    "lm_codes_placeholder": "<|audio_code_10695|><|audio_code_54246|>.",
    "lm_codes_info": "Cole dicas de códigos LM para geração de text2music.",
    "lm_codes_sample": "Dicas de Códigos LM (Amostra {n})",
    "lm_codes_sample_info": "Códigos para a amostra {n}.",
    "transcribe_btn": "Transcrever",
    "repainting_controls": "🎨 Controles de Repintura (segundos)",
    "repainting_start": "Início da Repintura",
    "repainting_end": "Fim da Repintura",
    "mode_label": "Modo de Geração *",
    "mode_info": "Simple = descreva em linguagem simples, a IA cuida do resto (ideal para ideias rápidas). Custom = controle manual total sobre legenda, letra, BPM, tom, etc. Remix = faça upload de áudio e reestilize com uma nova legenda/letra. Repaint = faça upload de áudio e regenere um intervalo de tempo específico. Extract = isole uma faixa individual (vocais, bateria, etc). Lego = substitua uma faixa no áudio existente. Complete = preencha as faixas ausentes.",
    "mode_info_simple": "Simple: Descreva sua música em linguagem simples — a IA gera a legenda, letra, BPM, tom e estrutura para você. Ideal para ideias rápidas ou quando não tem certeza quais configurações usar. Mude para Custom para controle manual total.",
    "mode_info_custom": "Custom: Controle manual total sobre legenda, letra, BPM, tom, duração e todos os parâmetros de geração. Use quando souber exatamente o que quer. Mude para Simple se preferir descrever sua ideia e deixar a IA preencher os detalhes.",
    "mode_info_remix": "Remix: Faça upload do áudio fonte e reestilize com sua própria legenda e letra. A IA usa o original como guia estrutural enquanto aplica seu novo estilo. Ajuste a Intensidade do Remix para controlar o quanto segue o original (alto = cover fiel, baixo = reinterpretação livre).",
    "mode_info_repaint": "Repaint: Faça upload do áudio fonte e regenere apenas um intervalo de tempo específico (início/fim em segundos). Tudo fora desse intervalo permanece intocado. Ótimo para corrigir uma seção ruim ou substituir uma parte específica sem regenerar a faixa inteira.",
    "mode_info_extract": "Extract: Isole uma faixa individual (vocais, bateria, baixo, etc.) do áudio fonte usando separação de stems por IA. Útil para criar versões instrumentais, acapellas ou isolar partes para remixagem.",
    "mode_info_lego": "Lego: Substitua uma faixa específica (ex.: bateria, vocais) no seu áudio fonte mantendo todo o resto. Faça upload de áudio multipista e escolha qual stem regenerar com sua nova legenda/letra.",
    "mode_info_complete": "Complete: Preencha as faixas ausentes do áudio fonte. Se você tiver um mix parcial (ex.: apenas vocais e guitarra), a IA gera as partes faltantes (bateria, baixo, etc.) para criar um arranjo completo.",
    "mode_simple": "Simple",
    "mode_custom": "Custom",
    "simple_query_label": "Descrição da Música *",
    "simple_query_placeholder": "Descreva a música que deseja criar, ex.: 'uma suave canção de amor bengali para uma noite tranquila'. Deixe vazio para uma amostra aleatória.",
    "simple_query_info": "Insira uma descrição em linguagem natural da música que deseja gerar.",
    "simple_vocal_language_label": "Idioma Vocal",
    "simple_vocal_language_info": "Selecione o(s) idioma(s) preferido(s) para a letra. Use 'unknown' para qualquer idioma.",
    "create_sample_btn": "Criar Amostra",
    "caption_title": "📝 Legenda Musical",
    "caption_label": "Legenda Musical",
    "caption_placeholder": "Uma melodia suave de violão acústico com vocais delicados.",
    "caption_info": "Descreva o estilo, gênero, instrumentos e clima.",
    "lyrics_title": "📝 Letra",
    "lyrics_label": "Letra",
    "lyrics_placeholder": "[Verse 1]\\nUnder the starry night\\nI feel so alive.",
    "lyrics_info": "Letra da música com estrutura.",
    "instrumental_label": "Instrumental",
    "format_btn": "Formatar",
    "format_caption_btn": "Aprimorar Legenda",
    "format_lyrics_btn": "Aprimorar Letra",
    "optional_params": "⚙️ Parâmetros Opcionais",
    "optional_music_props": "🎵 Propriedades Musicais",
    "optional_gen_settings": "📐 Configurações de Geração",
    "advanced_dit_section": "🎛️ Difusão DiT",
    "advanced_lm_section": "🤖 Geração LM",
    "advanced_output_section": "🔊 Saída de Áudio e Pós-processamento",
    "advanced_automation_section": "⚡ Automação e Lote",
    "vocal_language_label": "Idioma Vocal",
    "vocal_language_info": "Idioma para os vocais gerados. Defina para corresponder ao idioma da sua letra para melhores resultados. 'unknown' = deixar o modelo decidir (bom para instrumental ou multilíngue). 'instrumental' = sem vocais.",
    "bpm_label": "BPM (Batidas Por Minuto)",
    "bpm_info": "Andamento da música. Balada lenta: 60–80. Pop/Rock: 100–130. Dance/EDM: 120–140. Punk/metal rápido: 160–200. Deixe vazio ou marque 'Auto' para deixar o modelo escolher com base na sua legenda.",
    "keyscale_label": "Tom",
    "keyscale_placeholder": "ex.: Dó Maior, Lá Menor, Fá# Menor",
    "keyscale_info": "Tom musical da música (ex.: 'C Major', 'Am', 'F# Minor'). Tons maiores soam brilhantes/alegres, tons menores soam sombrios/tristes. Deixe vazio ou marque 'Auto' para deixar o modelo escolher.",
    "timesig_label": "Compasso",
    "timesig_info": "Batidas por compasso. 4 = 4/4 (a maioria do pop/rock/eletrônico). 3 = 3/4 (sensação de valsa). 6 = 6/8 (composto, sensação fluida). 2 = 2/4 (sensação de marcha). Use 'N/A' ou Auto para deixar o modelo decidir.",
    "duration_label": "Duração do Áudio (segundos)",
    "duration_info": "Duração do áudio gerado em segundos. Durações maiores exigem mais VRAM e tempo. -1 = deixar o modelo decidir com base na letra/estrutura. Marque 'Auto' para duração automática.",
    "batch_size_label": "Tamanho do Lote",
    "batch_size_info": "Quantas variações gerar de uma vez. Maior = mais opções para escolher, mas usa mais VRAM e demora mais. Gere 2–4 para comparar e escolher o melhor resultado.",
    "advanced_settings": "⚙️ Configurações",
    "inference_steps_label": "Passos de Inferência DiT",
    "inference_steps_info": "Quantas passagens de remoção de ruído o modelo DiT realiza. Mais passos = maior qualidade, mas mais lento. Modelos turbo: 4–8 passos (padrão 8, retornos decrescentes acima de 8). Modelos SFT: 30–100 passos (padrão 50). Modelos base/desconhecidos usam 32 passos como padrão. Dobrar os passos aproximadamente dobra o tempo de geração.",
    "guidance_scale_label": "Escala de Orientação DiT (somente modelo base)",
    "guidance_scale_info": "Controla o quanto a saída segue sua legenda/prompt. Maior (10–15) = mais fiel ao prompt, mas pode soar áspero ou distorcido. Menor (1–5) = mais natural/criativo, mas pode se afastar da sua descrição. Padrão 7.0. Somente modelo base — não tem efeito em modelos turbo.",
    "seed_label": "Semente",
    "seed_info": "Número fixo para resultados reproduzíveis — mesma semente + mesmas configurações = mesma saída. Use valores separados por vírgula (ex.: '42,123,456') para definir sementes por amostra em um lote. -1 = aleatório.",
    "random_seed_label": "Semente Aleatória",
    "random_seed_info": "Quando ativado, gera uma nova semente aleatória a cada vez para que cada geração seja única. Desative e defina uma semente fixa para reproduzir um resultado específico.",
    "audio_format_label": "Formato de Áudio",
    "audio_format_info": "FLAC = sem perdas, arquivos grandes. MP3 = arquivos pequenos, leve perda de qualidade. WAV 32-bit = qualidade de estúdio, arquivos maiores. Opus/AAC = compressão com perdas eficiente. Escolha FLAC ou WAV para produção, MP3 para compartilhamento.",
    "use_adg_label": "Usar ADG (Orientação por Domínio Angular)",
    "use_adg_info": "Método alternativo de orientação que pode melhorar a aderência ao prompt com menos artefatos do que o CFG padrão. Tente ativar se houver distorção em escalas de orientação altas. Experimental — pode não melhorar sempre os resultados.",
    "shift_label": "Deslocamento",
    "shift_info": "Controla o tempo do cronograma de ruído. Valores mais altos (3–5) concentram o esforço de remoção de ruído nas etapas iniciais (melhor estrutura). Valores mais baixos (1–2) distribuem o esforço mais uniformemente (detalhes mais finos). Padrão 3.0. Afeta apenas modelos base — modelos turbo ignoram isso.",
    "infer_method_label": "Método de Inferência",
    "infer_method_info": "ODE (Euler): Determinístico e mais rápido — a mesma semente sempre gera o mesmo resultado. Recomendado para a maioria dos casos. SDE (Estocástico): Adiciona aleatoriedade durante a difusão — pode produzir resultados mais variados/criativos, porém menos previsíveis. Experimente SDE se os resultados do ODE parecerem muito 'seguros'.",
    "sampler_mode_label": "Modo de Amostragem",
    "sampler_mode_info": "Euler: Solver padrão de primeira ordem (rápido, padrão). Heun: Preditor-corretor de segunda ordem que avalia o modelo duas vezes por etapa para maior precisão — produz áudio mais limpo, especialmente com inferência turbo de 8 etapas, ao custo de ~2x o tempo de difusão.",
    "velocity_norm_threshold_label": "Limiar da Norma de Velocidade",
    "velocity_norm_threshold_info": "Limita as normas de predição de velocidade em relação às normas de entrada em cada etapa de difusão. Evita predições discrepantes que causam artefatos de áudio. 0 = desativado. Valores em torno de 1.5–3.0 reduzem artefatos. Comece com 2.0 ao experimentar.",
    "velocity_ema_factor_label": "Fator EMA de Velocidade",
    "velocity_ema_factor_info": "Combina a predição de velocidade atual com a etapa anterior via média móvel exponencial. Suaviza a trajetória de remoção de ruído para uma saída mais limpa. 0 = desativado. Valores em torno de 0.05–0.2 funcionam bem. Comece com 0.1 ao experimentar.",
    "custom_timesteps_label": "Passos de Tempo Personalizados",
    "custom_timesteps_info": "Avançado: Defina manualmente o cronograma de remoção de ruído como valores separados por vírgula de 1.0→0.0 (ex.: '0.97,0.76,0.615,0.5,0.395,0.28,0.18,0.085,0'). Substitui tanto os Passos de Inferência quanto o Deslocamento. Deixe vazio para usar o agendamento automático. Altere somente se souber o que está fazendo.",
    "cfg_interval_start": "Início do Intervalo CFG",
    "cfg_interval_start_info": "Controla quando a orientação CFG entra em ação durante a remoção de ruído (0.0 = desde o início, 1.0 = nunca). Valores mais baixos aplicam a orientação por mais tempo, aumentando a aderência ao prompt. Aumentar esse valor pula a orientação nas etapas iniciais, o que pode reduzir artefatos mantendo o direcionamento da saída. Padrão 0.0. Afeta apenas modelos base.",
    "cfg_interval_end": "Fim do Intervalo CFG",
    "cfg_interval_end_info": "Controla quando a orientação CFG para durante a remoção de ruído (1.0 = até o final, 0.0 = imediatamente). Valores mais baixos interrompem a orientação mais cedo, permitindo que as etapas posteriores refinem livremente — pode reduzir a aspereza. Valores mais altos mantêm a orientação por mais tempo para um controle mais forte do prompt. Padrão 1.0. Afeta apenas modelos base.",
    "lm_params_title": "🤖 Parâmetros de Geração do LM",
    "lm_temperature_label": "Temperatura do LM",
    "lm_temperature_info": "Controla a criatividade versus previsibilidade do LM de 5Hz. Mais baixo (0.0–0.5) = escolhas musicais mais seguras e convencionais. Mais alto (0.8–1.5) = mais criativo/surpreendente, mas mais arriscado. Muito alto (1.5+) = caótico, pode produzir resultados sem sentido. O padrão 0.85 é um bom equilíbrio. Comece aqui e ajuste com base nos resultados.",
    "lm_cfg_scale_label": "Escala CFG do LM",
    "lm_cfg_scale_info": "Quão fortemente o LM segue seu prompt versus gerar livremente. 1.0 = sem orientação (LM ignora influência do prompt). 1.5–2.0 = orientação moderada, bom equilíbrio. 2.5–3.0 = orientação forte, muito fiel ao prompt, mas pode reduzir a variedade. 5.0–7.0 = controle máximo do prompt, pode reduzir a qualidade musical ou introduzir artefatos. Valores acima de 7.0 são experimentais. Requer um prompt negativo para funcionar (definido automaticamente se vazio). Importa apenas quando o LM de 5Hz está ativo.",
    "lm_top_k_label": "Top-K do LM",
    "lm_top_k_info": "Limita as escolhas do LM aos K tokens mais prováveis em cada etapa. Mais baixo (10–30) = saída mais focada/previsível. Mais alto (50–100) = mais diverso. 0 = desativado (sem filtragem). Funciona junto com Top-P — ambos podem estar ativos. Comece com 0 (desativado) a menos que queira restringir a diversidade.",
    "lm_top_p_label": "Top-P do LM (Amostragem por Núcleo)",
    "lm_top_p_info": "Mantém apenas os tokens cuja probabilidade acumulada atinge P. 0.9 = considerar os 90% tokens mais prováveis (elimina valores atípicos improváveis). Mais baixo (0.5–0.8) = mais focado. 1.0 = desativado (considerar todos os tokens). Mais adaptável que Top-K. Bom padrão: 0.9–0.95.",
    "lm_negative_prompt_label": "Prompt Negativo do LM",
    "lm_negative_prompt_placeholder": "Insira o prompt negativo para CFG (padrão: SEM ENTRADA DO USUÁRIO)",
    "lm_negative_prompt_info": "Diz ao LM o que evitar. Só é eficaz quando a Escala CFG do LM > 1.0. O LM se afasta deste prompt e em direção à sua legenda real. Deixe vazio para o comportamento padrão. Exemplo: 'baixa qualidade, ruído, distorcido' para se afastar de saídas ruins.",
    "advanced_dit_params": "Parâmetros Avançados DiT",
    "cot_metas_label": "Metadados CoT (Metadados de Cadeia de Pensamento)",
    "cot_metas_info": "Quando ativado, o LM 'pensa' nos metadados musicais (BPM, tonalidade, estrutura) antes de gerar. Produz resultados mais coerentes, mas adiciona ~2–5s por geração. Desative para pular esta etapa e usar seus metadados definidos manualmente diretamente. Recomendado: manter ativado a menos que você mesmo tenha definido todos os metadados.",
    "cot_language_label": "Detecção de Idioma CoT",
    "cot_language_info": "Quando ativado, o LM detecta automaticamente o idioma vocal durante o raciocínio em cadeia de pensamento. Útil quando o idioma é ambíguo ou definido como 'unknown'. Desative se você definiu explicitamente o idioma vocal.",
    "constrained_debug_label": "Depuração de Decodificação Restrita",
    "constrained_debug_info": "Exibe registros detalhados de como os tokens de saída do LM estão sendo filtrados/restringidos. Útil apenas para desenvolvedores depurando problemas de geração de tokens. Deixe desativado para uso normal.",
    "lm_use_legacy_cfg_prompt_label": "LM CFG: Prompt Incondicional Legado",
    "lm_use_legacy_cfg_prompt_info": "Alternância A/B de depuração. DESLIGADO (padrão): user do CFG incondicional é 'NO USER INPUT' puro (alinhado ao treino, verdadeiramente incondicional). LIGADO: incondicional mantém caption+lyrics (design pré-correção — incondicional ainda carrega condicionamento, então CFG amplia principalmente a direção dos metadados do CoT). A estrutura em nível de byte (turn do assistant aberto, quebras de linha separadoras, renderização de reasoning vazio) é idêntica em ambos os estados, então a alternância isola apenas esta variável de design. Afeta apenas CFG da fase de codes.",
    "auto_score_label": "Pontuação Automática",
    "auto_score_info": "Calcula automaticamente uma pontuação de qualidade (0–1) para cada áudio gerado usando perplexidade. Maior = melhor. Útil para comparar resultados em um lote e encontrar o melhor. Adiciona alguns segundos por amostra.",
    "auto_lrc_label": "LRC Automático",
    "auto_lrc_info": "Gera automaticamente letras com marcação de tempo (formato LRC) para cada áudio gerado. Útil para exibição estilo karaokê ou sincronização de letras com a música. Adiciona tempo de processamento por amostra.",
    "lm_batch_chunk_label": "Tamanho do Lote do LM",
    "lm_batch_chunk_info": "Quantas amostras o LM processa de uma vez. Maior = geração em lote mais rápida, mas usa mais VRAM. Reduza se tiver erros de falta de memória durante a geração em lote. Padrão 8. Reduza para 1–4 em GPUs com menos de 12GB de VRAM.",
    "codes_strength_label": "Intensidade dos Códigos do LM",
    "codes_strength_info": "Qual fração das etapas de remoção de ruído do DiT usa os códigos semânticos gerados pelo LM como orientação. Maior (0.7–1.0) = a saída segue de perto o plano musical do LM. Menor (0.1–0.4) = o DiT tem mais liberdade criativa. 0 = códigos ignorados completamente. O padrão 1.0 é um bom ponto de partida.",
    "cover_strength_label": "Intensidade da Cobertura de Áudio",
    "cover_strength_info": "Qual fração das etapas de remoção de ruído referencia a estrutura do áudio de origem. Maior = a saída soa mais próxima do original. Menor = reinterpretação mais criativa. Ajuste junto com a Intensidade da Cobertura (Retenção de Melodia) para controle fino do remix.",
    "remix_strength_label": "Intensidade do Remix",
    "remix_strength_info": "Quão próximo o remix segue a estrutura e melodia do áudio de origem. Maior (0.7–1.0) = muito próximo do original, apenas mudanças sutis de estilo. Menor (0.1–0.4) = interpretação livre, grandes liberdades criativas. 0.5 é um bom ponto de partida — ajuste para cima para covers fiéis, para baixo para remixes arrojados.",
    "cover_noise_strength_label": "Intensidade da Cobertura (Retenção de Melodia)",
    "cover_noise_strength_info": "Controla quanto da melodia original é preservada durante o remix. 0 = sem retenção de melodia (transferência de estilo pura a partir da sua legenda). 0.1–0.25 = faixa recomendada com modelo SFT (restaura a melodia permitindo mudanças de estilo). 1.0 = retenção máxima de melodia. Valores mais altos mantêm a melodia, mas podem resistir a mudanças de estilo — ajuste sua legenda se necessário.",
    "enable_normalization": "Ativar Normalização",
    "enable_normalization_info": "Ajusta o volume final do áudio para um nível de pico consistente. Evita clipping (distorção por áudio alto demais) e garante que todas as saídas estejam em volume semelhante. Recomendado manter ativado para resultados consistentes.",
    "normalization_db": "Pico Alvo (dB)",
    "normalization_db_info": "Quão alto o áudio normalizado deve ser. -1.0 dB = pico seguro padrão da indústria (recomendado, deixa margem). -0.1 dB = volume máximo antes do clipping. Valores menores (ex.: -3.0) = mais silencioso, mais margem para mixagem/masterização posterior.",
    "fade_in_duration": "Fade In (segundos)",
    "fade_in_duration_info": "Aumenta gradualmente o volume a partir do silêncio no início do áudio. 0 = sem fade (começa no volume total). 1–3s = intro sutil. 5–10s = construção dramática lenta. Útil para evitar inícios abruptos.",
    "fade_out_duration": "Fade Out (segundos)",
    "fade_out_duration_info": "Diminui gradualmente o volume até o silêncio no final do áudio. 0 = sem fade (pode terminar abruptamente). 2–5s = final suave. Útil para evitar cortes bruscos no final do áudio gerado.",
    "latent_shift": "Deslocamento Latente",
    "latent_shift_info": "Avançado: Desloca a representação interna do áudio antes da decodificação. Experimente valores negativos pequenos (ex.: -0.04) se as saídas tiverem clipping/distorção. 0 = sem deslocamento (padrão). Ajuste apenas se estiver ouvindo artefatos de áudio.",
    "latent_rescale": "Reescala Latente",
    "latent_rescale_info": "Avançado: Escala a representação interna do áudio antes da decodificação. Valores abaixo de 1.0 (ex.: 0.91) podem reduzir clipping/distorção. 1.0 = sem reescala (padrão). Ajuste apenas se estiver ouvindo artefatos de áudio apesar da normalização.",
    "score_sensitivity_label": "Sensibilidade da Pontuação de Qualidade",
    "score_sensitivity_info": "Controla como a pontuação de qualidade é mapeada para o intervalo 0–1. Valores menores (ex.: 0.5) = mais dispersão entre as pontuações, mais fácil distinguir boa de ruim. Valores maiores = pontuações se agrupam. Padrão 1.0. Ajuste se todas as suas pontuações parecerem muito semelhantes.",
    "lora_accordion_title": "🔧 Adaptador LoRA",
    "lora_path_label": "Caminho do LoRA",
    "lora_path_placeholder": "./lora_output/final/adapter",
    "lora_path_info": "Caminho para o diretório do adaptador LoRA treinado. Use o botão Exportar na aba de Treinamento para criar um, ou baixe um LoRA da comunidade.",
    "load_lora_btn": "📥 Carregar LoRA",
    "unload_lora_btn": "🗑️ Descarregar",
    "use_lora_label": "Usar LoRA",
    "use_lora_info": "Ativa/desativa o adaptador LoRA carregado durante a geração. Quando ativado, o estilo treinado do LoRA é aplicado. Desative para gerar com o modelo base para comparação.",
    "lora_scale_label": "Escala do LoRA",
    "lora_scale_info": "Quão fortemente o estilo do LoRA é aplicado. 0 = LoRA sem efeito (igual ao modelo base). 0.5 = estilo mesclado. 1.0 = efeito total do LoRA. Valores acima de 1.0 podem ampliar demais o estilo. Comece em 1.0 e reduza se o estilo estiver muito forte.",
    "lora_status_label": "Status do LoRA",
    "lora_status_default": "Nenhum LoRA carregado",
    "think_label": "Pensar",
    "parallel_thinking_label": "PensamentoParalelo",
    "parallel_thinking_info": "Ao gerar múltiplas amostras (tamanho de lote > 1), processa todo o raciocínio do LM em paralelo em vez de um por um. Mais rápido, mas usa mais VRAM. Desative se tiver erros de falta de memória com lotes grandes.",
    "generate_btn": "🎵 Gerar Música",
    "extract_stem_btn": "🎵 Extrair Stem",
    "add_stem_btn": "🎵 Adicionar Stem",
    "stem_area_controls": "🧩 Nova Área de Stem (segundos)",
    "stem_start": "Início do Stem",
    "stem_end": "Fim do Stem",
    "autogen_label": "GeraçãoAuto",
    "caption_rewrite_label": "ReescritaDeLegenda",
    "caption_rewrite_info": "Permite que o LM aprimore e expanda sua legenda antes da geração. Sua breve descrição é reescrita em um prompt mais detalhado e amigável ao modelo. Útil se você escreve legendas curtas e quer que o LM preencha os detalhes musicais.",
    "auto_label": "Auto",
    "bpm_auto_label": "BPM Auto",
    "key_auto_label": "Tonalidade Auto",
    "timesig_auto_label": "CompassoAuto",
    "vocal_lang_auto_label": "Idioma Auto",
    "duration_auto_label": "Duração Auto",
    "reset_all_auto": "🔄 Redefinir Tudo para Auto",
    "mp3_bitrate_label": "Taxa de Bits do MP3",
    "mp3_bitrate_info": "Taxa de bits de codificação do MP3.",
    "mp3_sample_rate_label": "Taxa de Amostragem do MP3",
    "mp3_sample_rate_info": "Taxa de amostragem de codificação do MP3. Escolha 44.1 kHz ou 48 kHz."
  },
  "results": {
    "title": "🎵 Resultados",
    "generated_music": "🎵 Música Gerada (Amostra {n})",
    "send_to_remix_btn": "🔗 Enviar para Remix",
    "send_to_repaint_btn": "🔗 Enviar para Repintura",
    "save_btn": "💾 Salvar",
    "score_btn": "📊 Obter Pontuação",
    "lrc_btn": "🎵 Obter LRC",
    "save_lrc_btn": "💾 Salvar LRC",
    "convert_to_codes_btn": "🔄 Converter para Códigos",
    "quality_score_label": "Pontuação de Qualidade (Amostra {n})",
    "quality_score_placeholder": "Clique em 'Pontuação' para calcular a pontuação de qualidade baseada em perplexidade",
    "codes_label": "Códigos LM (Amostra {n})",
    "lrc_label": "Marcações de Tempo das Letras (Amostra {n})",
    "lrc_placeholder": "Clique em 'LRC' para gerar as marcações de tempo",
    "details_accordion": "📊 Pontuação & LRC & Códigos LM",
    "generation_status": "Status de Geração",
    "current_batch": "Lote Atual",
    "batch_indicator": "Lote {current} / {total}",
    "next_batch_status": "Status do Próximo Lote",
    "prev_btn": "◀ Anterior",
    "next_btn": "Próximo ▶",
    "restore_params_btn": "↙️ Aplicar Estas Configurações à Interface (Restaurar Parâmetros do Lote)",
    "batch_results_title": "📁 Resultados do Lote & Detalhes de Geração",
    "all_files_label": "📁 Todos os Arquivos Gerados (Download)",
    "generation_details": "Detalhes de Geração"
  },
  "messages": {
    "no_audio_to_save": "❌ Nenhum áudio para salvar",
    "save_success": "✅ Áudio e metadados salvos em {filename}",
    "save_failed": "❌ Falha ao salvar: {error}",
    "no_file_selected": "⚠️ Nenhum arquivo selecionado",
    "params_loaded": "✅ Parâmetros carregados de {filename}",
    "invalid_json": "❌ Arquivo JSON inválido: {error}",
    "load_error": "❌ Erro ao carregar arquivo: {error}",
    "example_loaded": "📁 Exemplo carregado de {filename}",
    "example_failed": "Falha ao analisar o arquivo JSON {filename}: {error}",
    "example_error": "Erro ao carregar exemplo: {error}",
    "lm_generated": "🤖 Exemplo gerado usando LM",
    "lm_fallback": "Falha ao gerar exemplo usando LM, usando o diretório de exemplos como alternativa",
    "lm_not_initialized": "❌ LM 5Hz não inicializado. Por favor, inicialize-o primeiro.",
    "think_requires_lm": "⚠️ 'Pensar' requer que o LM 5Hz esteja inicializado. O pensamento foi desativado — a geração prosseguirá sem o raciocínio do LM.",
    "autogen_enabled": "🔄 AutoGen ativado - o próximo lote será gerado após este",
    "batch_ready": "✅ Lote {n} pronto! Clique em 'Próximo' para visualizar.",
    "batch_generating": "🔄 Iniciando geração em segundo plano para o Lote {n}.",
    "batch_failed": "❌ Falha na geração em segundo plano: {error}",
    "viewing_batch": "✅ Visualizando Lote {n}",
    "at_first_batch": "Já está no primeiro lote",
    "at_last_batch": "Nenhum próximo lote disponível",
    "batch_not_found": "Lote {n} não encontrado na fila",
    "no_batch_data": "Nenhum dado de lote encontrado para restaurar.",
    "params_restored": "✅ Parâmetros da interface restaurados do Lote {n}",
    "scoring_failed": "❌ Erro: Dados do lote não encontrados",
    "no_codes": "❌ Nenhum código de áudio disponível. Por favor, gere música primeiro.",
    "score_failed": "❌ Falha na pontuação: {error}",
    "score_error": "❌ Erro ao calcular pontuação: {error}",
    "lrc_save_memory_disabled": "❌ A geração de LRC está desativada no modo de economia de memória (ACESTEP_SAVE_MEMORY=1). Os tensores intermediários não são armazenados para reduzir o uso de RAM.",
    "lrc_no_batch_data": "❌ Nenhum dado de lote encontrado. Por favor, gere música primeiro.",
    "lrc_no_extra_outputs": "❌ Nenhuma saída extra encontrada. Tensores de condição não disponíveis.",
    "lrc_missing_tensors": "❌ Tensores necessários ausentes para a geração de LRC.",
    "lrc_sample_not_exist": "❌ A amostra não existe no lote atual.",
    "lrc_empty_result": "⚠️ A geração de LRC produziu um resultado vazio.",
    "empty_query": "⚠️ Por favor, insira uma descrição musical.",
    "sample_creation_failed": "❌ Falha ao criar amostra. Por favor, tente novamente.",
    "sample_created": "✅ Amostra criada! Revise a legenda e as letras, depois clique em Gerar Música.",
    "simple_examples_not_found": "⚠️ Diretório de exemplos do modo simples não encontrado.",
    "simple_examples_empty": "⚠️ Nenhum arquivo de exemplo encontrado nos exemplos do modo simples.",
    "simple_example_loaded": "🎲 Exemplo aleatório carregado de {filename}",
    "format_success": "✅ Legenda e letras formatadas com sucesso",
    "format_failed": "❌ Falha na formatação: {error}",
    "skipping_metas_cot": "⚡ Pulando a Fase 1 de metadados CoT (amostra já formatada)",
    "invalid_timesteps_format": "⚠️ Formato de passos de tempo inválido. Usando programação padrão.",
    "timesteps_out_of_range": "⚠️ Os passos de tempo devem estar no intervalo [0, 1]. Usando programação padrão.",
    "timesteps_count_mismatch": "⚠️ A contagem de passos de tempo ({actual}) difere de inference_steps ({expected}). Usando a contagem de passos de tempo.",
    "audio_format_invalid": "O formato de {role} é inválido ou não suportado. Por favor, envie um arquivo de áudio válido."
  },
  "training": {
    "tab_title": "🎓 Treinamento LoRA",
    "tab_dataset_builder": "📁 Construtor de Dataset",
    "tab_train_lora": "🚀 Treinar LoRA",
    "quick_start_title": "🚀 Início Rápido",
    "load_dataset_label": "Caminho do JSON do Dataset",
    "load_dataset_info": "Carregue um dataset salvo anteriormente.",
    "load_btn": "📂 Carregar",
    "load_status": "Status do Carregamento",
    "scan_label": "Caminho do Diretório de Áudio",
    "scan_info": "Escanear arquivos de áudio (wav, mp3, flac, ogg, opus).",
    "scan_btn": "🔍 Escanear",
    "scan_status": "Status do Escaneamento",
    "found_audio_files": "Arquivos de Áudio Encontrados",
    "dataset_name": "Nome do Dataset",
    "dataset_name_placeholder": "Digite o nome do dataset",
    "dataset_settings_header": "Configurações do Dataset",
    "tag_prepend": "Inserir no Início (Tag, Legenda)",
    "tag_append": "Inserir no Final (Legenda, Tag)",
    "tag_replace": "Substituir Legenda",
    "step2_title": "Passo 2: Rotulagem Automática por IA",
    "step2_instruction": "Clique no botão abaixo para usar IA e gerar metadados automaticamente para todos os arquivos de áudio:\n- **Legenda**: Estilo musical, gênero, descrição de humor\n- **BPM**: Batidas por minuto\n- **Tom**: Tom musical (ex.: Dó Maior, Lam)\n- **Compasso**: 4/4, 3/4 etc.",
    "step3_title": "Passo 3: Pré-visualizar e Editar",
    "step4_title": "Passo 4: Salvar Dataset",
    "step5_title": "Passo 5: Pré-processar para Tensors",
    "step5_intro": "**O pré-processamento converte seu dataset em tensors pré-computados para treinamento rápido.**\n\nVocê pode:\n- Usar o dataset dos passos 1-4 acima, **OU**\n- Carregar um arquivo JSON de dataset existente (se você tiver um salvo)",
    "step5_details": "Este passo irá:\n- Codificar áudio para latentes VAE\n- Codificar legendas e letras para embeddings de texto\n- Executar encoders de condição\n- Salvar todos os tensors em arquivos `.pt`\n\n⚠️ **Isso requer o carregamento de modelos e pode levar alguns minutos.**",
    "train_tensor_selection_desc": "Selecione o diretório contendo os arquivos de tensor pré-processados (`.pt` files).\nEles são criados usando o botão 'Pré-processar' na aba 'Construtor de Dataset'.",
    "all_instrumental": "Tudo Instrumental",
    "all_instrumental_info": "Marque se todas as faixas são instrumentais (sem vocais).",
    "custom_tag": "Tag de Ativação Personalizada",
    "custom_tag_info": "Tag única para ativar este estilo LoRA.",
    "tag_position": "Posição da Tag",
    "tag_position_info": "Onde inserir a tag personalizada na legenda.",
    "genre_ratio": "Proporção de Gênero (%)",
    "genre_ratio_info": "0%=Toda Legenda, 100%=Todo Gênero. A sobreposição de amostra individual tem prioridade.",
    "skip_metas": "Ignorar BPM/Tom/Compasso",
    "skip_metas_info": "Ignora a geração de BPM/Tom/Compasso. Legendas e gêneros ainda são gerados pelo LM.",
    "only_unlabeled": "Apenas Não Rotulados",
    "only_unlabeled_info": "Rotula apenas amostras sem legenda (para continuar rotulagem interrompida).",
    "auto_label_btn": "🏷️ Rotular Tudo Automaticamente",
    "label_progress": "Progresso da Rotulagem",
    "select_sample": "Selecionar Amostra #",
    "select_sample_info": "Selecione a amostra para pré-visualizar e editar.",
    "audio_preview": "Pré-visualização de Áudio",
    "filename": "Nome do Arquivo",
    "caption": "Legenda",
    "genre": "Gênero",
    "prompt_override_label": "Substituição de Prompt (Esta Amostra)",
    "prompt_override_info": "Substituir proporção global para esta amostra.",
    "lyrics_editable_label": "Letra (Editável para Treinamento)",
    "raw_lyrics_label": "Letra Bruta (do arquivo .txt)",
    "no_lyrics_placeholder": "(Nenhum arquivo de letra .txt)",
    "bpm": "BPM",
    "key_label": "Tom",
    "key_placeholder": "Dó Maior",
    "time_sig": "Compasso",
    "duration_s": "Duração (s)",
    "language": "Idioma",
    "instrumental": "Instrumental",
    "save_changes_btn": "💾 Salvar Alterações",
    "edit_status": "Status da Edição",
    "save_path": "Caminho de Salvamento",
    "save_path_info": "Caminho para salvar o JSON do dataset.",
    "save_dataset_btn": "💾 Salvar Dataset",
    "save_status": "Status do Salvamento",
    "load_existing_label": "Carregar Dataset Existente",
    "load_existing_info": "Caminho para o arquivo JSON do dataset salvo anteriormente.",
    "load_dataset_btn": "📂 Carregar Dataset",
    "tensor_output_dir": "Diretório de Saída dos Tensors",
    "tensor_output_info": "Diretório para salvar os arquivos de tensor pré-processados.",
    "preprocess_btn": "⚡ Pré-processar",
    "preprocess_progress": "Progresso do Pré-processamento",
    "preprocessed_tensors_dir": "Diretório de Tensors Pré-processados",
    "preprocessed_tensors_info": "Diretório contendo os arquivos de tensor .pt pré-processados.",
    "dataset_info": "Informações do Dataset.",
    "lora_rank": "Rank LoRA (r)",
    "lora_rank_info": "Maior capacidade, mas mais VRAM.",
    "lora_alpha": "Alpha LoRA",
    "lora_alpha_info": "Fator de escalonamento (geralmente 2x o Rank).",
    "lora_dropout": "Dropout LoRA",
    "learning_rate": "Taxa de Aprendizado",
    "learning_rate_info": "Comece com 3e-4 e ajuste conforme necessário.",
    "max_epochs": "Máximo de Epochs",
    "batch_size": "Tamanho do Lote",
    "batch_size_info": "Aumente se a VRAM permitir.",
    "gradient_accumulation": "Acumulação de Gradiente",
    "gradient_accumulation_info": "Tamanho Efetivo do Lote = batch_size * accum_steps.",
    "save_every_n_epochs": "Salvar a Cada N Epochs",
    "shift": "Shift",
    "shift_info": "Deslocamento de timestep para modelos Turbo.",
    "seed": "Seed",
    "output_dir": "Diretório de Saída",
    "output_dir_info": "Diretório para salvar os pesos LoRA treinados.",
    "start_training_btn": "🚀 Iniciar Treinamento",
    "stop_training_btn": "⏹️ Parar Treinamento",
    "training_progress": "Progresso do Treinamento",
    "training_log": "Log de Treinamento",
    "training_loss_title": "Perda de Treinamento",
    "step": "Passo",
    "loss": "Perda",
    "export_header": "Exportar LoRA",
    "export_path": "Caminho de Exportação",
    "export_lora_btn": "📦 Exportar LoRA",
    "export_status": "Status da Exportação",
    "stop_no_training": "ℹ Nenhum treinamento em andamento",
    "stop_stopping": "⏹️ Parando treinamento...",
    "latest_auto": "Mais recente (automático)",
    "export_path_required": "❌ Por favor, insira um caminho de exportação",
    "invalid_lora_output_dir": "❌ Diretório de saída LoRA inválido",
    "no_checkpoints_found": "❌ Nenhum checkpoint encontrado",
    "no_trained_model_found": "❌ Nenhum modelo treinado encontrado em {path}",
    "invalid_export_path": "❌ Caminho de exportação inválido",
    "lora_exported": "✅ LoRA exportado para {path}",
    "export_failed": "❌ Falha na exportação: {error}",
    "lokr_output_dir_required": "⚠️ Insira primeiro o diretório de saída LoKr",
    "lokr_no_checkpoints_use_latest": "ℹ Nenhum checkpoint encontrado; a exportação usará os pesos mais recentes disponíveis",
    "lokr_no_exportable_checkpoints": "ℹ Nenhum checkpoint de epoch exportável encontrado",
    "lokr_found_checkpoints": "✅ Encontrados {count} checkpoints LoKr",
    "lokr_selected_epoch_not_found": "❌ Epoch selecionado não encontrado: {chosen}. Disponíveis: {available}",
    "lokr_no_weights_selected_epoch": "❌ Nenhum peso LoKr encontrado para o epoch selecionado: {epoch}",
    "lokr_no_weights_latest_checkpoint": "❌ Nenhum peso LoKr encontrado no checkpoint mais recente: {checkpoint}",
    "lokr_no_trained_weights_found": "❌ Nenhum peso LoKr treinado encontrado em {path}",
    "lokr_exported": "✅ LoKr exportado para {path}",
    "tab_train_lokr": "🚀 Treinar LoKr",
    "train_section_tensors": "Tensors Pré-processados",
    "train_section_lora": "Configurações LoRA",
    "train_section_params": "Parâmetros de Treinamento",
    "lokr_section_tensors": "Tensors Pré-processados",
    "lokr_section_settings": "Configurações LoKr",
    "lokr_tensor_selection_desc": "Selecione o diretório contendo os arquivos de tensor pré-processados (`.pt` files).\nEles são criados usando o botão 'Pré-processar' na aba 'Construtor de Dataset'.",
    "lokr_linear_dim": "Dimensão Linear LoKr",
    "lokr_linear_dim_info": "Rank (dimensão) para as matrizes de adaptação LoKr.",
    "lokr_linear_alpha": "Alpha Linear LoKr",
    "lokr_linear_alpha_info": "Fator de escalonamento para LoKr (geralmente similar ao dim).",
    "lokr_factor": "Fator LoKr",
    "lokr_factor_info": "Fator Kronecker (-1 para automático).",
    "lokr_decompose_both": "Decompor Ambos os Lados",
    "lokr_decompose_both_info": "Quando ativado, decompõe as matrizes esquerda e direita.",
    "lokr_use_tucker": "Usar Decomposição Tucker",
    "lokr_use_tucker_info": "Aplicar decomposição Tucker quando aplicável.",
    "lokr_use_scalar": "Usar Porta Escalar",
    "lokr_use_scalar_info": "Ativar portão escalar para pesos LoKr.",
    "lokr_weight_decompose": "Decomposição de Peso (WD)",
    "lokr_weight_decompose_info": "Ativar decomposição de peso para treinamento LoKr mais estável.",
    "lokr_learning_rate_info": "LoKr comumente usa um LR mais alto que LoRA. Ajuste por dataset.",
    "lokr_output_dir_info": "Diretório para salvar os pesos LoKr treinados.",
    "start_lokr_training_btn": "🚀 Iniciar Treinamento LoKr",
    "lokr_training_loss_title": "Perda de Treinamento LoKr",
    "lokr_export_header": "Exportar LoKr",
    "export_lokr_btn": "📦 Exportar LoKr",
    "lokr_checkpoint_epoch": "Epoch do Checkpoint",
    "lokr_checkpoint_epoch_info": "Selecione um epoch específico para exportar ou mantenha Mais recente (automático).",
    "refresh_epochs_btn": "↻ Atualizar Epochs"
  },
  "help": {
    "btn_label": "?",
    "close_label": "✕",
    "getting_started": "## Primeiros Passos\n\n1. **Selecione um modelo** no acordeão de Configurações (ex.: `acestep-v15-turbo`)\n2. **Escolha um LM 5Hz** se quiser o modo Pensamento (recomendado)\n3. Clique em **Inicializar Serviço** e aguarde o status verde\n4. Escolha um **Modo de Geração** (comece com Simples)\n5. Descreva sua música e clique em **Gerar Música**\n\n> **Dica:** Os modelos turbo são os mais rápidos. Ative \"Pensar\" para uma geração mais inteligente.",
    "service_config": "## Configuração do Serviço\n\n### Configuração Rápida\n1. Selecione o **Caminho do Modelo Principal** (turbo recomendado)\n2. Selecione o **Caminho do Modelo LM 5Hz** (filtrado automaticamente pela GPU)\n3. Escolha o **Backend**: `vllm` (rápido, NVIDIA ≥8GB) ou `pt` (universal)\n4. Marque **Inicializar LM 5Hz** para o modo Pensamento\n5. Clique em **Inicializar Serviço**\n\n### Dicas de Desempenho\n- **Flash Attention**: Inferência mais rápida (requer flash_attn)\n- **Descarregamento para CPU**: Ativado automaticamente em GPUs <20GB\n- **Quantização INT8**: Reduz o VRAM, ativado automaticamente <20GB\n- **Compilar**: Necessário para quantização, ativado por padrão\n\n### LoRA\n- Defina o caminho do LoRA → Carregar → Ative \"Usar LoRA\"\n- ⚠️ Não é possível usar LoRA com quantização INT8",
    "generation_simple": "## Tutorial do Modo Simples\n\n**Ideal para:** Criação rápida de música com esforço mínimo.\n\n### Passos\n1. Selecione **Simples** no Modo de Geração\n2. Digite uma descrição, ex.: *\"música pop animada com riff de guitarra cativante\"*\n3. (Opcional) Marque **Instrumental** para sem vocais\n4. (Opcional) Selecione o **Idioma Vocal**\n5. Clique em **Criar Amostra** — a IA gera legenda, letra e metadados\n6. Revise e edite o conteúdo gerado se necessário\n7. Clique em **Gerar Música**\n\n### Dicas\n- Clique em 🎲 para inspiração aleatória\n- Quanto mais específica sua descrição, melhor o resultado\n- Deixe BPM/Tom vazios para a IA decidir",
    "generation_custom": "## Tutorial do Modo Personalizado\n\n**Ideal para:** Controle criativo total sobre cada parâmetro.\n\n### Passos\n1. Selecione **Personalizado** no Modo de Geração\n2. Escreva uma **Legenda** detalhada descrevendo estilo, gênero, instrumentos e humor\n3. Escreva a **Letra** com tags de estrutura: `[Verse]`, `[Chorus]`, `[Bridge]`\n4. (Opcional) Envie um **Áudio de Referência** para orientação de estilo\n5. Defina **BPM**, **Tom**, **Duração** ou deixe vazio para automático\n6. Clique em **Formatar** para aprimorar com LM (opcional)\n7. Clique em **Gerar Música**\n\n### Dicas de Legenda\n- Seja específico: *\"shoegaze onírico com guitarras repletas de reverb e vocais sussurrados\"*\n- Inclua: gênero, instrumentos, humor, sensação de andamento, estilo vocal",
    "generation_remix": "## Tutorial do Modo Remix\n\n**Ideal para:** Criar versões cover ou transferências de estilo.\n\n### Passos\n1. Selecione **Remix** no Modo de Geração\n2. Envie o **Áudio de Origem** (a música a remixar)\n3. Escreva uma **Legenda** descrevendo o estilo alvo\n4. (Opcional) Modifique a **Letra**\n5. Ajuste a **Intensidade do Remix** (0.0–1.0):\n   - Maior = mais próximo da estrutura original\n   - Menor = mais liberdade criativa\n6. Clique em **Gerar Música**\n\n### Dicas\n- Comece com intensidade 0.5 e ajuste\n- Use o modelo SFT com Intensidade de Cover 0.1–0.25 para retenção de melodia",
    "generation_repaint": "## Tutorial do Modo Repintar\n\n**Ideal para:** Corrigir ou regenerar seções específicas da música gerada, mantendo o restante intacto.\n\n### Passos\n1. Selecione **Repintar** no Modo de Geração\n2. Envie o **Áudio de Origem**\n3. Defina o **Início da Repintura** (em segundos) e o **Fim** (-1 para o fim do arquivo)\n4. Escreva uma **Legenda** para a seção repintada\n5. Escolha um **Modo de Repintura** e ajuste a **Intensidade de Repintura** se necessário\n6. Clique em **Gerar Música**\n\n### Modo de Repintura\nControla como o modelo trata as regiões não repintadas:\n\n- **Conservador** (Intensidade = 0): Preservação máxima da fonte. Os latentes da fonte são injetados em cada etapa de difusão com longos crossfades de limite. Melhor para mesclagem perfeita.\n- **Equilibrado** (padrão): Os latentes da fonte são injetados por uma fração das etapas controlada pelo controle deslizante de Intensidade de Repintura. Bom ponto de partida.\n- **Agressivo** (Intensidade = 1): Sem injeção de fonte — difusão pura. Máxima liberdade criativa, mas menor consistência de limite.\n\n### Intensidade de Repintura\nAtivo apenas no modo **Equilibrado**. Arraste para controlar o equilíbrio entre preservar e regenerar:\n- **0** = Comportamento conservador (troca de modo automática)\n- **0,5** = Padrão — injeta a fonte durante os primeiros 50% das etapas\n- **1** = Comportamento agressivo (troca de modo automática)\n\n### Dicas\n- Use \"Enviar para Repintar\" nos Resultados para carregar o áudio rapidamente\n- Comece com Equilibrado (0,5) e ajuste com base nos resultados\n- Intensidade menor para melhor consistência de limite, maior para saída mais criativa",
    "generation_extract": "## Modo Extrair (Somente Modelo Base)\n\n**Ideal para:** Separação de stems — isolar instrumentos de uma mixagem.\n\n### Passos\n1. Selecione **Extrair** no Modo de Geração\n2. Envie o **Áudio de Origem**\n3. Selecione o **Nome da Faixa** a extrair (ex.: vocals, drums, bass)\n4. Clique em **Extrair Stem**\n\n### Faixas Disponíveis\nvocals, backing_vocals, drums, bass, guitar, keyboard, percussion, strings, synth, fx, brass, woodwinds",
    "generation_lego": "## Modo Lego (Somente Modelo Base)\n\n**Ideal para:** Adicionar novas faixas de instrumentos ao áudio existente.\n\n### Passos\n1. Selecione **Lego** no Modo de Geração\n2. Envie o **Áudio de Origem**\n3. Selecione o **Nome da Faixa** a adicionar\n4. Escreva uma **Legenda** descrevendo a faixa\n5. Clique em **Adicionar Stem**\n\n### Dicas\n- Ótimo para camadas: adicione bateria a uma faixa de guitarra, adicione baixo a vocais\n- A legenda deve descrever apenas as características da nova faixa",
    "generation_complete": "## Modo Completar (Somente Modelo Base)\n\n**Ideal para:** Arranjo automático — preenchendo instrumentos ausentes.\n\n### Passos\n1. Selecione **Completar** no Modo de Geração\n2. Envie o **Áudio de Origem** (arranjo parcial)\n3. Selecione múltiplos **Nomes de Faixas** para adicionar\n4. Escreva uma **Legenda** descrevendo o estilo desejado\n5. Clique em **Gerar Música**",
    "generation_caption": "## Escrevendo Boas Legendas\n\n### Estrutura\nUma boa legenda inclui:\n- **Gênero/Estilo**: pop, rock, jazz, eletrônico, clássico…\n- **Instrumentos**: guitarra, piano, sintetizador, bateria, cordas…\n- **Humor**: animado, melancólico, enérgico, onírico…\n- **Estilo vocal**: sussurrado, poderoso, falsete, rap…\n- **Sensação de andamento**: rápido, lento, moderado, pulsante…\n\n### Exemplos\n- *\"Pop-punk energético com guitarras distorcidas, bateria rápida e vocais gritados\"*\n- *\"Trio de jazz suave com baixo walking, bateria com vassourinhas e piano tranquilo\"*\n- *\"Eletrônico ambiente com camadas de pads de sintetizador e sem vocais\"*\n\n### Dicas\n- Mais detalhes = melhores resultados\n- Use o botão **Formatar** para deixar a IA aprimorar sua legenda\n- Marque 🎲 para legendas de exemplo",
    "generation_lyrics": "## Escrevendo Letras\n\n### Tags de Estrutura\nUse tags de seção para estruturar sua música:\n```\n[Verse 1]\nSua letra do verso aqui\n\n[Chorus]\nSua letra do refrão aqui\n\n[Verse 2]\nSegundo verso aqui\n\n[Bridge]\nSeção da ponte\n\n[Outro]\nLetras de encerramento\n```\n\n### Dicas\n- Mantenha os versos com 4–8 linhas\n- Os refrões devem ser memoráveis e repetitivos\n- Use `[Instrumental]` ou `[Interlude]` para seções sem vocais\n- Marque a caixa **Instrumental** para música puramente instrumental\n- Selecione o **Idioma Vocal** para corresponder ao idioma da sua letra",
    "generation_advanced": "## Configurações Avançadas\n\n### Parâmetros Principais\n- **Etapas de Inferência**: turbo=8 (padrão), base=até 200. Mais etapas ≠ sempre melhor para turbo\n- **Escala de Orientação**: Somente modelo base. Maior = segue o prompt com mais rigor\n- **Shift**: Deslocamento de timestep (1,0–5,0). 3,0 recomendado para turbo\n- **Semente**: Defina uma semente específica para resultados reproduzíveis\n\n### Parâmetros do LM\n- **Temperatura** (0,0–2,0): Maior = mais criativo/aleatório\n- **Escala CFG** (1,0–3,0): Maior = segue mais o prompt\n- **Top-K / Top-P**: Estratégias de amostragem para diversidade\n\n### Modo Pensar\nAtive **Pensar** para usar o LM 5Hz para geração mais inteligente:\n- Gera códigos semânticos e metadados\n- Requer que o LM esteja inicializado\n- **ParallelThinking**: Processa lotes em paralelo (mais rápido)",
    "generation_retake": "## Retake (Geração de Variação)\n\n**Ideal para:** produzir variações controladas e suaves de uma baseline com seed fixa, sem alterar prompts.\n\n### Princípio\nRetake mistura uma nova amostra de ruído independente ao ruído inicial via mistura sin/cos com preservação de variância:\n\n```\nmixed = cos(v · π/2) · base_noise + sin(v · π/2) · retake_noise\n```\n\nComo `cos² + sin² = 1`, a variância total é exatamente preservada. `v=0` é noop (idêntico à baseline); `v=1` substitui o ruído por completo.\n\n### Entradas\n- **variance** (0–1): fator de mistura.\n  - `0` = baseline\n  - `0.05–0.15` = variação sutil\n  - `0.3–0.5` = drift moderado\n  - `0.5+` = drift forte\n- **seed** (inteiro, opcional): seed independente para o ruído de retake. Vazio = aleatório a cada chamada.\n\n### ⚠️ Requisito de consistência\nRetake só é significativo se as outras condições baterem com a baseline:\n\n- A **seed** principal precisa ser a mesma (desligue random-seed).\n- **Think** deve estar **off**, OU os LM codes da baseline devem ser reutilizados. Com Think on o LM regenera audio codes a cada chamada, então o ponto de partida do modelo de difusão muda — a mistura de ruído do Retake fica sobreposta a um ponto já diferente.\n- Todos os outros parâmetros (caption, lyrics, BPM, key, duration, guidance_scale, shift, sampler, DCW, etc.) devem bater com a baseline.\n\n### Workflow para retake de um resultado em modo Think\n1. Expanda **📊 Score & LRC & LM Codes** no resultado desejado.\n2. Copie o texto **LM Codes** desse resultado.\n3. Cole no campo **LM Codes Hints**.\n4. **Desmarque Think** — o modelo vai usar os codes colados literalmente.\n5. Trave a seed principal, ative **Retake**, defina `retake_seed`, ajuste `variance`.\n\n### Referência\nVeja [issue #1155](https://github.com/ace-step/ACE-Step-1.5/issues/1155).",
    "generation_edit": "## Edit (Overlay Flow-Edit)\n\n**Ideal para:** transformar um áudio existente em direção a uma nova letra ou estilo, mantendo a estrutura da fonte. Faz transição suave da fonte → alvo via integração de campos de velocidade pareados ao longo do schedule de difusão.\n\n### Princípio\nFlow-Edit integra uma diferença de velocidades:\n\n```\nz_edit_{t-Δt} = z_edit_t + (V_tar(z_tar_t, c_tar) − V_src(z_src_t, c_src)) · Δt\n```\n\nonde `c_src` e `c_tar` são condicionamentos texto/letra pareados. Ambos os ramos compartilham o mesmo contexto de áudio, então V_delta isola a diferença **somente de texto** e a acumula em `z_edit` ao longo de `[n_min, n_max]` do schedule.\n\n### Workflow\n1. Escolha **Custom** (recomendado para novas edições) ou **Remix** (quando quiser preservar o scaffolding do cover).\n2. Suba o áudio a editar no campo **Source Audio** no topo.\n3. Preencha **Music Caption** / **Lyrics** no topo com a descrição **original** do áudio de origem (será o V_src no próximo passo).\n4. Marque **Edit** para expandir o painel.\n5. Clique **Copy current → source** — isso captura o conteúdo *original* nos campos source abaixo como V_src.\n6. Agora edite os campos topo **Music Caption** / **Lyrics** para definir o **alvo** (o que você quer no resultado morphado) — V_tar.\n7. Mantenha `n_min=0`, `n_max=1`, `n_avg=1` na primeira tentativa.\n8. Em **Optional Parameters**, defina `shift=3.0` (recomendado para todas as variantes).\n9. Clique **Generate Music**.\n\n> Dica: se você chegou aqui via **Send to Remix** / **Send to Repaint**, os campos source já estão pré-preenchidos da execução anterior — pule os passos 3 e 5 e vá direto editar os campos topo como alvo.\n\n### Comportamento por modo\n- **Custom** (text2music): o backend **ignora silenciosamente Think e LM Codes Hints** — sempre faz VAE-encode do seu Source Audio para o ponto de partida do flow-edit. V_delta é puramente texto. Modo mais confiável da v1.\n- **Remix** (cover / cover-nofsq): o backend usa o contexto natural de LM-codes do cover, compartilhado entre os dois ramos. Bom quando você quer reter o scaffolding do cover.\n- **Repaint / Extract / Lego**: não suportado na v1 — o backend loga um aviso e roda o task normal (CFG pareado para esses task shapes é o PR seguinte).\n\n### Entradas\n- **source caption / lyrics**: descreve o áudio *original* (V_src).\n- topo **caption / lyrics**: o *alvo* desejado (V_tar).\n- **n_min / n_max**: janela do schedule onde V_delta é integrado. `0 / 1` = schedule completo (recomendado).\n- **n_avg**: amostras Monte Carlo por passo (1 = rápido; mais = estável mas lento).\n\n### Modelos\nTodas as 6 variantes DiT são suportadas. Turbo / XL-turbo são CFG-distilled, então o backend força automaticamente `guidance_scale=1.0`. 8 etapas de inferência bastam para turbo; suba para ≥60 em `base / sft / xl_base / xl_sft`.\n\n### Dicas\n- `Send to Remix` / `Send to Repaint` já preenche os campos source com o prompt da execução anterior, agilizando iteração.\n- O `shift=3.0` recomendado bate com o schedule padrão de flow-edit do ACE-Step 1.0 e é empiricamente estável nas 6 variantes.\n\n### Referência\n- Kulikov, V. et al. *FlowEdit: Inversion-Free Text-Based Editing Using Pre-Trained Flow Models.* CVPR 2025. [arXiv:2412.08629](https://arxiv.org/abs/2412.08629)\n- [Issue #1156](https://github.com/ace-step/ACE-Step-1.5/issues/1156).",
    "results": "## Seção de Resultados\n\n### Controles por Amostra\n- **Reprodutor de Áudio**: Reproduzir, pausar, baixar\n- **Enviar para Remix/Repintar**: Use este resultado como fonte para edição adicional\n- **Salvar**: Exportar áudio + metadados como JSON\n- **Pontuação**: Calcular pontuação de qualidade (baseada em perplexidade)\n- **LRC**: Gerar timestamps de letra\n\n### Navegação em Lote\n- Use **◀ Anterior** / **Próximo ▶** para navegar pelos lotes\n- Ative **AutoGen** para gerar o próximo lote automaticamente\n- Clique em **Aplicar Estas Configurações à Interface** para reutilizar parâmetros de um bom resultado\n\n### Dicas\n- Gere 2–4 variações (tamanho do lote) e escolha a melhor\n- Use Pontuação para comparar resultados objetivamente\n- Salve bons resultados para referência",
    "training_dataset": "## Tutorial do Construtor de Dataset\n\n### Passo 1: Carregar ou Escanear\n- **Carregar**: Insira o caminho para o JSON do dataset existente → Clique em Carregar\n- **Escanear**: Insira o caminho da pasta de áudio → Clique em Escanear\n  - Suportados: wav, mp3, flac, ogg, opus\n\n### Passo 2: Configurar\n- Defina o **Nome do Dataset**\n- Marque **Tudo Instrumental** se não houver vocais\n- Defina a **Tag de Ativação Personalizada** (palavra-gatilho única para seu LoRA)\n- Escolha a **Posição da Tag**: Antes, Depois ou Substituir\n\n### Passo 3: Rotular Automaticamente\n- Clique em **Rotular Tudo Automaticamente** para gerar legendas, BPM, tom e fórmula de compasso\n- Use **Ignorar Metas** para pular BPM/Tom/Fórmula de Compasso (mais rápido)\n\n### Passo 4: Visualizar e Editar\n- Use o controle deslizante para navegar pelas amostras\n- Edite legenda, letra, BPM e tom manualmente\n- Clique em **Salvar Alterações** por amostra\n\n### Passo 5: Salvar\n- Insira o caminho de salvamento → Clique em **Salvar Dataset**\n\n### Passo 6: Pré-processar\n- Defina o diretório de saída dos tensores → Clique em **Pré-processar**\n- Isso codifica áudio/texto em tensores para treinamento\n\n### 📖 Documentação\n- [Tutorial de Treinamento LoRA](https://github.com/ACE-Step/ACE-Step-1.5/blob/main/docs/en/LoRA_Training_Tutorial.md) — Guia completo passo a passo\n- [Treinamento Avançado Side-Step](https://github.com/ACE-Step/ACE-Step-1.5/blob/main/docs/sidestep/Getting%20Started.md) — Treinamento via CLI com recursos avançados",
    "training_train": "## Tutorial de Treinamento LoRA\n\n### Configuração\n1. Insira o **Diretório de Tensores Pré-processados** → Clique em **Carregar Dataset**\n2. Configure o LoRA:\n   - **Rank** (r): 64 padrão. Maior = mais capacidade\n   - **Alpha**: Geralmente 2× o rank (128)\n   - **Dropout**: 0,1 para regularização\n\n### Treinamento\n3. Defina a **Taxa de Aprendizado** (comece com 1e-4)\n4. Defina os **Máximo de Epochs** (500 padrão)\n5. Clique em **Iniciar Treinamento**\n6. Monitore a curva de perda — ela deve diminuir ao longo do tempo\n7. Clique em **Parar Treinamento** quando estiver satisfeito\n\n### Exportação\n8. Insira o caminho de exportação → Clique em **Exportar LoRA**\n9. Carregue nas Configurações: defina o Caminho do LoRA → Carregar LoRA → Ative Usar LoRA\n\n### 🚀 Experimente LoKr para Treinamento Mais Rápido\nO LoKr melhorou muito a eficiência do treinamento. O que antes levava uma hora agora leva apenas 5 minutos — **mais de 10× mais rápido**. Isso é essencial para treinar em GPUs de nível consumidor. Mude para a aba **Treinar LoKr** para começar.\n\n### Dicas\n- Use tamanho de lote pequeno (1) se o VRAM for limitado\n- O acúmulo de gradiente aumenta o tamanho efetivo do lote\n- Salve checkpoints com frequência (a cada 200 epochs)\n\n### 📖 Documentação\n- [Tutorial de Treinamento LoRA](https://github.com/ACE-Step/ACE-Step-1.5/blob/main/docs/en/LoRA_Training_Tutorial.md) — Guia completo passo a passo\n- [Treinamento Avançado Side-Step](https://github.com/ACE-Step/ACE-Step-1.5/blob/main/docs/sidestep/Getting%20Started.md) — Treinamento CLI com timesteps corrigidos, LoKR e otimização de VRAM",
    "training_lokr": "## 🚀 Tutorial de Treinamento LoKr\n\nO LoKr (produto de Kronecker de baixo rank) melhorou muito a eficiência do treinamento. O que antes levava uma hora com LoRA agora leva apenas 5 minutos — **mais de 10× mais rápido**. Isso é essencial para treinar em GPUs de nível consumidor.\n\n### Configuração\n1. Insira o **Diretório de Tensores Pré-processados** → Clique em **Carregar Dataset**\n2. Configure o LoKr:\n   - **Dimensão Linear**: 64 padrão (semelhante ao rank do LoRA)\n   - **Alpha Linear**: 128 padrão (fator de escala)\n   - **Decompor Peso (DoRA)**: Ativado por padrão para melhor qualidade\n\n### Treinamento\n3. Defina a **Taxa de Aprendizado** (LoKr geralmente usa LR mais alto, comece com 1e-3)\n4. Defina os **Máximo de Epochs** (500 padrão)\n5. Clique em **Iniciar Treinamento LoKr**\n6. Monitore a curva de perda — ela deve diminuir ao longo do tempo\n7. Clique em **Parar Treinamento** quando estiver satisfeito\n\n### Exportação\n8. Insira o caminho de exportação → Clique em **Exportar LoKr**\n9. Carregue nas Configurações: defina o Caminho do LoRA → Carregar LoRA → Ative Usar LoRA\n\n### LoKr vs LoRA\n| | LoKr | LoRA |\n|---|---|---|\n| Velocidade | ⚡ ~10× mais rápido | Mais lento |\n| VRAM | Menor | Maior |\n| Qualidade | Comparável | Linha de base |\n| Ideal para | GPUs de consumidor, iteração rápida | Máxima fidelidade |\n\n### Dicas\n- LoKr usa decomposição de Kronecker para eficiência extrema\n- Ative **DoRA** (Decompor Peso) para qualidade aprimorada\n- Use a **decomposição Tucker** para compressão adicional\n- Taxa de aprendizado mais alta (1e-3) geralmente funciona melhor do que a típica 1e-4 do LoRA",
    "training_export": "## Usando Seu LoRA Treinado\n\n### Exportação\n1. Após o treinamento, insira o caminho de exportação\n2. Clique em **Exportar LoRA**\n\n### Carregar e Usar\n1. Nas Configurações, defina o **Caminho do LoRA** para o diretório exportado\n2. Clique em **Carregar LoRA**\n3. Ative a caixa de seleção **Usar LoRA**\n4. Gere música — o estilo do seu LoRA será aplicado\n\n### Dicas\n- Use sua **Tag de Ativação Personalizada** nas legendas para acionar o estilo\n- ⚠️ LoRA é incompatível com quantização INT8\n- Você pode descarregar e alternar entre diferentes LoRAs"
  }
}
