{
  "app": {
    "title": "🎛️ ACE-Step V1.5 Playground💡",
    "subtitle": "Pushing the Boundaries of Open-Source Music Generation"
  },
  "common": {
    "language_metadata": {
      "name": "English",
      "native_name": "English"
    }
  },
  "dataset": {
    "title": "📊 Dataset Explorer",
    "dataset_label": "Dataset",
    "dataset_info": "Choose dataset to explore.",
    "import_btn": "📥 Import Dataset",
    "search_type_label": "Search Type",
    "search_type_info": "How to find items.",
    "search_value_label": "Search Value",
    "search_value_placeholder": "Enter keys or index (leave empty for random)",
    "search_value_info": "Keys: exact match, Index: 0 to dataset size-1.",
    "instruction_label": "📝 Instruction",
    "instruction_placeholder": "No instruction available",
    "metadata_title": "📋 Item Metadata (JSON)",
    "metadata_label": "Complete Item Information",
    "source_audio": "Source Audio",
    "target_audio": "Target Audio",
    "reference_audio": "Reference Audio",
    "get_item_btn": "🔍 Get Item",
    "use_src_checkbox": "Use Source Audio from Dataset",
    "use_src_info": "Check to use the source audio from dataset.",
    "data_status_label": "📊 Data Status",
    "data_status_default": "❌ No dataset imported",
    "autofill_btn": "📋 Auto-fill Generation Form"
  },
  "service": {
    "title": "🔧 Service Configuration",
    "checkpoint_label": "Checkpoint File",
    "checkpoint_info": "The model weights file to load. 'turbo' models are faster (4–8 steps), 'base' models are slower but support more features (guidance scale, extract/lego modes). Pick turbo for quick generation, base for maximum control.",
    "refresh_btn": "🔄 Refresh",
    "model_path_label": "Main Model Path",
    "model_path_info": "The directory containing model config and architecture files. Auto-detected from your checkpoint selection. Only change this if you have a custom model setup.",
    "device_label": "Device",
    "device_info": "Which hardware to run on. 'auto' picks the best available (recommended). 'cuda' = NVIDIA GPU, 'mps' = Apple Silicon, 'xpu' = Intel GPU, 'cpu' = very slow, last resort.",
    "vae_label": "VAE",
    "vae_info": "Which VAE to load. 'official' is the bundled Oobleck VAE that ships with the main model. Community fine-tunes (e.g. 'scragvae') are auto-downloaded into <checkpoints>/<name>/ on first use. Override with the ACESTEP_VAE_CHECKPOINT env var.",
    "lm_model_path_label": "5Hz LM Model Path",
    "lm_model_path_info": "The language model that powers Think mode, CoT metadata, caption enhancement, and semantic code generation. Required for Think mode. Larger LMs produce better results but need more VRAM.",
    "backend_label": "5Hz LM Backend",
    "backend_info": "Engine for the 5Hz LM. vLLM = significantly faster inference, recommended for NVIDIA GPUs with ≥8GB VRAM. PyTorch (pt) = slower but works on all hardware (CPU, MPS, XPU). Use pt if vLLM won't install or you're on non-NVIDIA hardware.",
    "init_llm_label": "Initialize 5Hz LM",
    "init_llm_info": "Load the 5Hz LM into memory on startup. Required for: Think mode, CoT metadata generation, caption/lyrics enhancement, and Auto Score. Uses additional VRAM (~2–6GB depending on model size). Disable if you only need basic generation without LM features.",
    "lm_unavailable_vram": "⚠️ LM not available for this GPU tier (VRAM too low)",
    "flash_attention_label": "Use Flash Attention",
    "flash_attention_info_enabled": "Speeds up DiT inference by ~20–30% with lower memory usage. No quality difference — purely a performance optimization. Recommended if available. Requires the flash_attn package.",
    "flash_attention_info_disabled": "Flash attention not available (flash_attn package not installed). Install with: pip install flash-attn. Provides ~20–30% speedup with no quality change.",
    "offload_cpu_label": "Offload to CPU",
    "offload_cpu_info": "Moves models to system RAM when not actively running, freeing GPU VRAM for the active model. Adds a small delay (~1–3s) when switching between models. Essential for GPUs with <16GB VRAM. Negligible impact on GPUs with >24GB.",
    "offload_dit_cpu_label": "Offload DiT to CPU",
    "offload_dit_cpu_info": "Also offloads the DiT model to CPU (in addition to the base offload). Saves more VRAM but adds extra swap time. Requires 'Offload to CPU' to be enabled. Use on very low VRAM GPUs (<10GB).",
    "compile_model_label": "Compile Model (torch.compile)",
    "compile_model_info": "Optimizes the model using PyTorch compilation for faster inference. First generation takes longer (compilation overhead), subsequent generations are ~10–20% faster. Required if you want to use INT8 quantization. Recommended to keep enabled.",
    "quantization_label": "INT8 Quantization",
    "quantization_info": "Reduces model weights from 32-bit to 8-bit, cutting VRAM usage by ~50% with minimal quality loss. Essential for GPUs with <16GB VRAM. Requires 'Compile Model' to be enabled. Note: incompatible with LoRA adapters.",
    "mlx_dit_label": "MLX DiT (Apple Silicon)",
    "mlx_dit_info_enabled": "Runs the DiT diffusion model using Apple's native MLX framework instead of PyTorch MPS. Significantly faster on M1/M2/M3/M4 Macs. Recommended for Apple Silicon users.",
    "mlx_dit_info_disabled": "MLX not available. Requires: macOS + Apple Silicon (M1/M2/M3/M4) + mlx package installed. Install with: pip install mlx.",
    "init_btn": "Initialize Service",
    "status_label": "Status",
    "language_label": "UI Language",
    "language_info": "Select interface language.",
    "gpu_auto_tier": "Auto-detected Tier",
    "tier_label": "GPU Tier Override",
    "tier_info": "Override the auto-detected GPU capability tier. Each tier adjusts defaults for offload, quantization, and backend to match your VRAM. Use 'Auto' unless the auto-detection is wrong or you want to force specific optimization settings."
  },
  "generation": {
    "tab_title": "🎵 Generation",
    "required_inputs": "📝 Required Inputs",
    "task_type_label": "Task Type *",
    "task_type_info": "Select the task type for generation.",
    "instruction_label": "Instruction",
    "instruction_info": "Instruction is automatically generated based on task type.",
    "load_btn": "📂 Load",
    "track_name_label": "Track Name",
    "track_name_info": "Select track name for lego/extract tasks.",
    "track_classes_label": "Track Names",
    "track_classes_info": "Select multiple track classes for complete task.",
    "audio_uploads": "🎵 Audio Uploads",
    "reference_audio": "Reference Audio",
    "source_audio": "Source Audio",
    "convert_codes_btn": "Convert to Codes",
    "analyze_btn": "🔍 Analyze",
    "sample_btn": "🎲 Click Me",
    "lm_codes_hints": "🎼 LM Codes Hints",
    "lm_codes_audio_upload_label": "Audio → Codes (utility)",
    "lm_codes_label": "LM Codes Hints",
    "lm_codes_placeholder": "<|audio_code_10695|><|audio_code_54246|>.",
    "lm_codes_info": "Paste LM codes hints for text2music generation.",
    "lm_codes_sample": "LM Codes Hints (Sample {n})",
    "lm_codes_sample_info": "Codes for sample {n}.",
    "transcribe_btn": "Transcribe",
    "repainting_controls": "🎨 Repainting Controls (seconds)",
    "repainting_start": "Repainting Start",
    "repainting_end": "Repainting End",
    "mode_label": "Generation Mode *",
    "mode_info": "Simple = describe in plain language, AI handles the rest (best for quick ideas). Custom = full manual control over caption, lyrics, BPM, key, etc. Remix = upload audio and restyle it with a new caption/lyrics. Repaint = upload audio and regenerate a specific time range. Extract = isolate a single track (vocals, drums, etc). Lego = replace one track in existing audio. Complete = fill in missing tracks.",
    "mode_info_simple": "Simple: Describe your music in plain language — AI generates caption, lyrics, BPM, key, and structure for you. Best for quick ideas or if you're not sure what settings to use. Switch to Custom for full manual control.",
    "mode_info_custom": "Custom: Full manual control over caption, lyrics, BPM, key, duration, and all generation parameters. Use this when you know exactly what you want. Switch to Simple if you'd rather describe your idea and let AI fill in the details.",
    "mode_info_remix": "Remix: Upload source audio and restyle it with your own caption and lyrics. The AI uses the original as a structural guide while applying your new style. Adjust Remix Strength to control how closely it follows the original (high = faithful cover, low = loose reinterpretation).",
    "mode_info_repaint": "Repaint: Upload source audio and regenerate only a specific time range (start/end in seconds). Everything outside that range stays untouched. Great for fixing a bad section or replacing a specific part without re-generating the whole track.",
    "mode_info_extract": "Extract: Isolate a single track (vocals, drums, bass, etc.) from source audio using AI stem separation. Useful for creating instrumentals, acapellas, or isolating parts for remixing.",
    "mode_info_lego": "Lego: Replace a specific track (e.g. drums, vocals) in your source audio while keeping everything else. Upload multi-track audio and choose which stem to regenerate with your new caption/lyrics.",
    "mode_info_complete": "Complete: Fill in missing tracks from source audio. If you have a partial mix (e.g. just vocals and guitar), the AI generates the missing parts (drums, bass, etc.) to create a full arrangement.",
    "mode_simple": "Simple",
    "mode_custom": "Custom",
    "simple_query_label": "Song Description *",
    "simple_query_placeholder": "Describe the music you want to create, e.g., 'a soft Bengali love song for a quiet evening'. Leave empty for a random sample.",
    "simple_query_info": "Enter a natural language description of the music you want to generate.",
    "simple_vocal_language_label": "Vocal Language",
    "simple_vocal_language_info": "Select preferred language(s) for lyrics. Use 'unknown' for any language.",
    "create_sample_btn": "Create Sample",
    "caption_title": "📝 Music Caption",
    "caption_label": "Music Caption",
    "caption_placeholder": "A peaceful acoustic guitar melody with soft vocals.",
    "caption_info": "Describe the style, genre, instruments, and mood.",
    "lyrics_title": "📝 Lyrics",
    "lyrics_label": "Lyrics",
    "lyrics_placeholder": "[Verse 1]\\nUnder the starry night\\nI feel so alive.",
    "lyrics_info": "Song lyrics with structure.",
    "instrumental_label": "Instrumental",
    "format_btn": "Format",
    "format_caption_btn": "Enhance Caption",
    "format_lyrics_btn": "Enhance Lyrics",
    "optional_params": "⚙️ Optional Parameters",
    "optional_music_props": "🎵 Music Properties",
    "optional_gen_settings": "📐 Generation Settings",
    "advanced_dit_section": "🎛️ DiT Diffusion",
    "advanced_lm_section": "🤖 LM Generation",
    "advanced_output_section": "🔊 Audio Output & Post-processing",
    "advanced_automation_section": "⚡ Automation & Batch",
    "vocal_language_label": "Vocal Language",
    "vocal_language_info": "Language for generated vocals. Set to match your lyrics language for best results. 'unknown' = let the model decide (good for instrumental or multilingual). 'instrumental' = no vocals.",
    "bpm_label": "BPM (Beats Per Minute)",
    "bpm_info": "Tempo of the song. Slow ballad: 60–80. Pop/Rock: 100–130. Dance/EDM: 120–140. Fast punk/metal: 160–200. Leave empty or check 'Auto' to let the model choose based on your caption.",
    "keyscale_label": "Key",
    "keyscale_placeholder": "e.g. C Major, A Minor, F# Minor",
    "keyscale_info": "Musical key of the song (e.g. 'C Major', 'Am', 'F# Minor'). Major keys sound bright/happy, minor keys sound dark/sad. Leave empty or check 'Auto' to let the model choose.",
    "timesig_label": "Time Signature",
    "timesig_info": "Beats per measure. 4 = 4/4 (most pop/rock/electronic). 3 = 3/4 (waltz feel). 6 = 6/8 (compound, flowing feel). 2 = 2/4 (march feel). Use 'N/A' or Auto to let the model decide.",
    "duration_label": "Audio Duration (seconds)",
    "duration_info": "Length of the generated audio in seconds. Longer durations need more VRAM and time. -1 = let the model decide based on lyrics/structure. Check 'Auto' for automatic duration.",
    "batch_size_label": "Batch Size",
    "batch_size_info": "How many variations to generate at once. Higher = more options to choose from, but uses more VRAM and takes longer. Generate 2–4 to compare and pick the best result.",
    "advanced_settings": "⚙️ Settings",
    "inference_steps_label": "DiT Inference Steps",
    "inference_steps_info": "How many denoising passes the DiT model makes. More steps = higher quality but slower. Turbo models: 4–8 steps (default 8, diminishing returns above 8). SFT models: 30–100 steps (default 50). Base/unknown models default to 32 steps. Doubling steps roughly doubles generation time.",
    "guidance_scale_label": "DiT Guidance Scale (Base model only)",
    "guidance_scale_info": "Controls how strictly the output follows your caption/prompt. Higher (10–15) = more faithful to prompt but can sound harsh or distorted. Lower (1–5) = more natural/creative but may drift from your description. Default 7.0. Base model only — has no effect on turbo models.",
    "seed_label": "Seed",
    "seed_info": "Fixed number for reproducible results — same seed + same settings = same output. Use comma-separated values (e.g. '42,123,456') to set per-sample seeds in a batch. -1 = random.",
    "random_seed_label": "Random Seed",
    "random_seed_info": "When enabled, generates a new random seed each time so every generation is unique. Disable this and set a fixed seed to reproduce a specific result.",
    "audio_format_label": "Audio Format",
    "audio_format_info": "FLAC = lossless, large files. MP3 = small files, slight quality loss. WAV 32-bit = studio quality, largest files. Opus/AAC = efficient lossy compression. Choose FLAC or WAV for production, MP3 for sharing.",
    "use_adg_label": "Use ADG (Angle Domain Guidance)",
    "use_adg_info": "Alternative guidance method that can improve prompt adherence with fewer artifacts than standard CFG. Try enabling if you get distortion at high guidance scales. Experimental — may not always improve results.",
    "shift_label": "Shift",
    "shift_info": "Controls the noise schedule timing. Higher values (3–5) concentrate denoising effort on early steps (better structure). Lower values (1–2) spread effort more evenly (finer details). Default 3.0. Only affects base models — turbo models ignore this.",
    "infer_method_label": "Inference Method",
    "infer_method_info": "ODE (Euler): Deterministic and faster — same seed always gives same result. Recommended for most use cases. SDE (Stochastic): Adds randomness during diffusion — can produce more varied/creative results but less predictable. Try SDE if ODE results feel too 'safe'.",
    "sampler_mode_label": "Sampler Mode",
    "sampler_mode_info": "Euler: Standard first-order solver (fast, default). Heun: Second-order predictor-corrector that evaluates the model twice per step for higher accuracy — produces cleaner audio especially with 8-step turbo inference, at the cost of ~2x diffusion time.",
    "velocity_norm_threshold_label": "Velocity Norm Threshold",
    "velocity_norm_threshold_info": "Clamp velocity prediction norms relative to input norms at each diffusion step. Prevents outlier predictions that cause audio artifacts. 0 = disabled. Values around 1.5–3.0 reduce artifacts. Start with 2.0 if experimenting.",
    "velocity_ema_factor_label": "Velocity EMA Factor",
    "velocity_ema_factor_info": "Blend current velocity prediction with the previous step via exponential moving average. Smooths the denoising trajectory for cleaner output. 0 = disabled. Values around 0.05–0.2 work well. Start with 0.1 if experimenting.",
    "dcw_section": "🧪 DCW – Differential Correction in Wavelet domain (experimental)",
    "dcw_enabled_label": "Enable DCW",
    "dcw_enabled_info": "Sampler-side correction for SNR-t bias (CVPR 2026, arXiv:2604.16044). Applies a per-band wavelet-domain correction after each diffusion step. On by default; uncheck for a clean A/B against the uncorrected sampler.",
    "dcw_mode_label": "DCW Mode",
    "dcw_mode_info": "low: correct low-frequency band only (matches the paper's README example; our recommended starting point). high: correct high-frequency band only. double: correct both bands with independent scalers (ACE-Step extension — not in the reference implementation). pix: direct latent-space correction, no wavelet transform.",
    "dcw_scaler_label": "DCW Scaler",
    "dcw_scaler_info": "Correction strength for the low band (or the single band in 'high'/'pix' modes). Modulated by t_curr inside the sampler, so this value is the strength near t=1 and decays to 0 at t=0. Default 0.02; usable range 0–0.1. Larger values push harder but can introduce artefacts.",
    "dcw_high_scaler_label": "DCW High Scaler",
    "dcw_high_scaler_info": "High-band correction strength, only used in 'double' mode. Usable range 0–0.1; try around 0.01–0.02 together with a small 'DCW Scaler' when you want the sampler to sharpen high-frequency detail as well.",
    "dcw_wavelet_label": "DCW Wavelet",
    "dcw_wavelet_info": "PyWavelets basis used for the 1-D DWT along the temporal axis. haar is fastest (blocky low-pass); db4/sym8 give smoother low-band extraction.",
    "custom_timesteps_label": "Custom Timesteps",
    "custom_timesteps_info": "Advanced: Manually define the denoising schedule as comma-separated values from 1.0→0.0 (e.g. '0.97,0.76,0.615,0.5,0.395,0.28,0.18,0.085,0'). Overrides both Inference Steps and Shift. Leave empty to use automatic scheduling. Only change this if you know what you're doing.",
    "cfg_interval_start": "CFG Interval Start",
    "cfg_interval_start_info": "Controls when CFG guidance kicks in during denoising (0.0 = from the very start, 1.0 = never). Lower values apply guidance for more of the process, giving stronger prompt adherence. Raising this skips guidance in early steps, which can reduce artifacts while still steering the output. Default 0.0. Only affects base models.",
    "cfg_interval_end": "CFG Interval End",
    "cfg_interval_end_info": "Controls when CFG guidance stops during denoising (1.0 = at the very end, 0.0 = immediately). Lower values stop guidance early, letting later steps refine freely — can reduce harshness. Higher values maintain guidance longer for stronger prompt control. Default 1.0. Only affects base models.",
    "lm_params_title": "🤖 LM Generation Parameters",
    "lm_temperature_label": "LM Temperature",
    "lm_temperature_info": "Controls creativity vs predictability of the 5Hz LM. Lower (0.0–0.5) = safer, more conventional musical choices. Higher (0.8–1.5) = more creative/surprising but riskier. Very high (1.5+) = chaotic, may produce nonsense. Default 0.85 is a good balance. Start here and adjust based on results.",
    "lm_cfg_scale_label": "LM CFG Scale",
    "lm_cfg_scale_info": "How strongly the LM follows your prompt vs generating freely. 1.0 = no guidance (LM ignores prompt influence). 1.5–2.0 = moderate guidance, good balance. 2.5–3.0 = strong guidance, very prompt-faithful but can reduce variety. 5.0–7.0 = maximum prompt control, may reduce musical quality or introduce artifacts. Values above 7.0 are experimental. Requires a negative prompt to work (set automatically if empty). Only matters when 5Hz LM is active.",
    "lm_top_k_label": "LM Top-K",
    "lm_top_k_info": "Limits LM choices to the K most likely tokens at each step. Lower (10–30) = more focused/predictable output. Higher (50–100) = more diverse. 0 = disabled (no filtering). Works alongside Top-P — both can be active. Start with 0 (disabled) unless you want to constrain diversity.",
    "lm_top_p_label": "LM Top-P (Nucleus Sampling)",
    "lm_top_p_info": "Keeps only tokens whose cumulative probability reaches P. 0.9 = consider the top 90% most likely tokens (cuts unlikely outliers). Lower (0.5–0.8) = more focused. 1.0 = disabled (consider all tokens). More adaptive than Top-K. Good default: 0.9–0.95.",
    "lm_negative_prompt_label": "LM Negative Prompt",
    "lm_negative_prompt_placeholder": "Enter negative prompt for CFG (default: NO USER INPUT)",
    "lm_negative_prompt_info": "Tells the LM what to avoid. Only effective when LM CFG Scale > 1.0. The LM steers away from this prompt and toward your actual caption. Leave empty for the default behavior. Example: 'low quality, noise, distorted' to push away from poor outputs.",
    "advanced_dit_params": "Advanced DiT Parameters",
    "cot_metas_label": "CoT Metas (Chain-of-Thought Metadata)",
    "cot_metas_info": "When enabled, the LM 'thinks through' music metadata (BPM, key, structure) before generating. Produces more coherent results but adds ~2–5s per generation. Disable to skip this step and use your manually set metadata directly. Recommended: keep enabled unless you've set all metadata yourself.",
    "cot_language_label": "CoT Language Detection",
    "cot_language_info": "When enabled, the LM auto-detects the vocal language during chain-of-thought reasoning. Useful when language is ambiguous or set to 'unknown'. Disable if you've explicitly set the vocal language.",
    "constrained_debug_label": "Constrained Decoding Debug",
    "constrained_debug_info": "Shows detailed logs of how the LM's output tokens are being filtered/constrained. Only useful for developers debugging token generation issues. Leave off for normal use.",
    "lm_use_legacy_cfg_prompt_label": "LM CFG: Legacy Uncond Prompt",
    "lm_use_legacy_cfg_prompt_info": "Debug A/B toggle. OFF (default): CFG uncond user is bare 'NO USER INPUT' (training-aligned, truly unconditional). ON: uncond keeps caption+lyrics (pre-fix design — uncond still carries conditioning, so CFG mostly amplifies the CoT-metadata direction). Byte-level structure (open assistant turn, separator newlines, empty-reasoning rendering) is identical in both states, so the toggle isolates just this one design variable. Only affects codes-phase CFG. Leave OFF for production.",
    "auto_score_label": "Auto Score",
    "auto_score_info": "Automatically calculates a quality score (0–1) for each generated audio using perplexity. Higher = better. Useful for comparing results in a batch to find the best one. Adds a few seconds per sample.",
    "auto_lrc_label": "Auto LRC",
    "auto_lrc_info": "Automatically generates timestamped lyrics (LRC format) for each generated audio. Useful for karaoke-style display or syncing lyrics to music. Adds processing time per sample.",
    "lm_batch_chunk_label": "LM Batch Chunk Size",
    "lm_batch_chunk_info": "How many samples the LM processes at once. Higher = faster batch generation but uses more VRAM. Lower if you get out-of-memory errors during batch generation. Default 8. Reduce to 1–4 on GPUs with <12GB VRAM.",
    "codes_strength_label": "LM Codes Strength",
    "codes_strength_info": "What fraction of DiT denoising steps use LM-generated semantic codes as guidance. Higher (0.7–1.0) = output closely follows the LM's musical plan. Lower (0.1–0.4) = DiT has more creative freedom. 0 = codes ignored entirely. Default 1.0 is a good starting point.",
    "cover_strength_label": "Audio Cover Strength",
    "cover_strength_info": "What fraction of denoising steps reference the source audio structure. Higher = output sounds closer to the original. Lower = more creative reinterpretation. Adjust alongside Cover Strength (Melody Retention) for fine-tuned remix control.",
    "remix_strength_label": "Remix Strength",
    "remix_strength_info": "How closely the remix follows the source audio's structure and melody. Higher (0.7–1.0) = very close to original, subtle style changes only. Lower (0.1–0.4) = loose interpretation, major creative liberties. 0.5 is a good starting point — adjust up for faithful covers, down for wild remixes.",
    "cover_noise_strength_label": "Cover Strength (Melody Retention)",
    "cover_noise_strength_info": "Controls how much of the original melody is preserved during remix. 0 = no melody retention (pure style transfer from your caption). 0.1–0.25 = recommended range with SFT model (restores melody while allowing style changes). 1.0 = maximum melody retention. Higher values keep the tune but may resist style changes — adjust your caption if needed.",
    "enable_normalization": "Enable Normalization",
    "enable_normalization_info": "Adjusts the final audio volume to a consistent peak level. Prevents clipping (distortion from too-loud audio) and ensures all outputs are at similar loudness. Recommended to keep enabled for consistent results.",
    "normalization_db": "Target Peak (dB)",
    "normalization_db_info": "How loud the normalized audio should be. -1.0 dB = industry standard safe peak (recommended, leaves headroom). -0.1 dB = maximum loudness before clipping. Lower values (e.g. -3.0) = quieter, more headroom for further mixing/mastering.",
    "fade_in_duration": "Fade In (seconds)",
    "fade_in_duration_info": "Gradually increases volume from silence at the start of the audio. 0 = no fade (starts at full volume). 1–3s = subtle intro. 5–10s = dramatic slow build. Useful for avoiding abrupt starts.",
    "fade_out_duration": "Fade Out (seconds)",
    "fade_out_duration_info": "Gradually decreases volume to silence at the end of the audio. 0 = no fade (may end abruptly). 2–5s = smooth ending. Useful for avoiding harsh cutoffs at the end of generated audio.",
    "latent_shift": "Latent Shift",
    "latent_shift_info": "Advanced: Shifts the internal audio representation before decoding. Try small negative values (e.g. -0.04) if your outputs have clipping/distortion. 0 = no shift (default). Only adjust if you're hearing audio artifacts.",
    "latent_rescale": "Latent Rescale",
    "latent_rescale_info": "Advanced: Scales the internal audio representation before decoding. Values below 1.0 (e.g. 0.91) can reduce clipping/distortion. 1.0 = no rescale (default). Only adjust if you're hearing audio artifacts despite normalization.",
    "score_sensitivity_label": "Quality Score Sensitivity",
    "score_sensitivity_info": "Controls how the quality score maps to 0–1 range. Lower values (e.g. 0.5) = more spread between scores, easier to distinguish good from bad. Higher values = scores cluster together. Default 1.0. Adjust if all your scores look too similar.",
    "lora_accordion_title": "🔧 LoRA Adapter",
    "lora_path_label": "LoRA Path",
    "lora_path_placeholder": "./lora_output/final/adapter",
    "lora_path_info": "Path to your trained LoRA adapter directory. Use the Export button in the Training tab to create one, or download a community LoRA.",
    "load_lora_btn": "📥 Load LoRA",
    "unload_lora_btn": "🗑️ Unload",
    "use_lora_label": "Use LoRA",
    "use_lora_info": "Toggle the loaded LoRA adapter on/off during generation. When enabled, the LoRA's trained style is applied. Disable to generate with the base model for comparison.",
    "lora_scale_label": "LoRA Scale",
    "lora_scale_info": "How strongly the LoRA style is applied. 0 = LoRA has no effect (same as base model). 0.5 = blended style. 1.0 = full LoRA effect. Values above 1.0 may over-amplify the style. Start at 1.0 and reduce if the style is too strong.",
    "lora_status_label": "LoRA Status",
    "lora_status_default": "No LoRA loaded",
    "think_label": "Think",
    "parallel_thinking_label": "ParallelThinking",
    "parallel_thinking_info": "When generating multiple samples (batch size > 1), processes all LM thinking in parallel instead of one-by-one. Faster but uses more VRAM. Disable if you get out-of-memory errors with large batches.",
    "generate_btn": "🎵 Generate Music",
    "extract_stem_btn": "🎵 Extract Stem",
    "add_stem_btn": "🎵 Add Stem",
    "stem_area_controls": "🧩 New Stem Area (seconds)",
    "stem_start": "Stem Start",
    "stem_end": "Stem End",
    "autogen_label": "AutoGen",
    "caption_rewrite_label": "CaptionRewrite",
    "caption_rewrite_info": "Lets the LM enhance and expand your caption before generation. Your brief description gets rewritten into a more detailed, model-friendly prompt. Useful if you write short captions and want the LM to fill in musical details.",
    "auto_label": "Auto",
    "bpm_auto_label": "BPM Auto",
    "key_auto_label": "Key Auto",
    "timesig_auto_label": "TimeSig Auto",
    "vocal_lang_auto_label": "Language Auto",
    "duration_auto_label": "Duration Auto",
    "reset_all_auto": "🔄 Reset All to Auto",
    "mp3_bitrate_label": "MP3 Bitrate",
    "mp3_bitrate_info": "MP3 encoding bitrate.",
    "mp3_sample_rate_label": "MP3 Sample Rate",
    "mp3_sample_rate_info": "MP3 encoding sample rate. Choose 44.1 kHz or 48 kHz."
  },
  "results": {
    "title": "🎵 Results",
    "generated_music": "🎵 Generated Music (Sample {n})",
    "send_to_remix_btn": "🔗 Send To Remix",
    "send_to_repaint_btn": "🔗 Send To Repaint",
    "save_btn": "💾 Save",
    "score_btn": "📊 Get Score",
    "lrc_btn": "🎵 Get LRC",
    "save_lrc_btn": "💾 Save LRC",
    "convert_to_codes_btn": "🔄 Convert To Codes",
    "quality_score_label": "Quality Score (Sample {n})",
    "quality_score_placeholder": "Click 'Score' to calculate perplexity-based quality score",
    "codes_label": "LM Codes (Sample {n})",
    "lrc_label": "Lyrics Timestamps (Sample {n})",
    "lrc_placeholder": "Click 'LRC' to generate timestamps",
    "details_accordion": "📊 Score & LRC & LM Codes",
    "generation_status": "Generation Status",
    "current_batch": "Current Batch",
    "batch_indicator": "Batch {current} / {total}",
    "next_batch_status": "Next Batch Status",
    "prev_btn": "◀ Previous",
    "next_btn": "Next ▶",
    "restore_params_btn": "↙️ Apply These Settings to UI (Restore Batch Parameters)",
    "batch_results_title": "📁 Batch Results & Generation Details",
    "all_files_label": "📁 All Generated Files (Download)",
    "generation_details": "Generation Details"
  },
  "messages": {
    "no_audio_to_save": "❌ No audio to save",
    "save_success": "✅ Saved audio and metadata to {filename}",
    "save_failed": "❌ Failed to save: {error}",
    "no_file_selected": "⚠️ No file selected",
    "params_loaded": "✅ Parameters loaded from {filename}",
    "invalid_json": "❌ Invalid JSON file: {error}",
    "load_error": "❌ Error loading file: {error}",
    "example_loaded": "📁 Loaded example from {filename}",
    "example_failed": "Failed to parse JSON file {filename}: {error}",
    "example_error": "Error loading example: {error}",
    "lm_generated": "🤖 Generated example using LM",
    "lm_fallback": "Failed to generate example using LM, falling back to examples directory",
    "lm_not_initialized": "❌ 5Hz LM not initialized. Please initialize it first.",
    "think_requires_lm": "⚠️ 'Think' requires 5Hz LM to be initialized. Think has been disabled — generation will proceed without LM thinking.",
    "autogen_enabled": "🔄 AutoGen enabled - next batch will generate after this",
    "batch_ready": "✅ Batch {n} ready! Click 'Next' to view.",
    "batch_generating": "🔄 Starting background generation for Batch {n}.",
    "batch_failed": "❌ Background generation failed: {error}",
    "viewing_batch": "✅ Viewing Batch {n}",
    "at_first_batch": "Already at first batch",
    "at_last_batch": "No next batch available",
    "batch_not_found": "Batch {n} not found in queue",
    "no_batch_data": "No batch data found to restore.",
    "params_restored": "✅ UI Parameters restored from Batch {n}",
    "scoring_failed": "❌ Error: Batch data not found",
    "no_codes": "❌ No audio codes available. Please generate music first.",
    "score_failed": "❌ Scoring failed: {error}",
    "score_error": "❌ Error calculating score: {error}",
    "lrc_save_memory_disabled": "❌ LRC generation is disabled in save-memory mode (ACESTEP_SAVE_MEMORY=1). Intermediate tensors are not stored to reduce RAM usage.",
    "lrc_no_batch_data": "❌ No batch data found. Please generate music first.",
    "lrc_no_extra_outputs": "❌ No extra outputs found. Condition tensors not available.",
    "lrc_missing_tensors": "❌ Missing required tensors for LRC generation.",
    "lrc_sample_not_exist": "❌ Sample does not exist in current batch.",
    "lrc_empty_result": "⚠️ LRC generation produced empty result.",
    "empty_query": "⚠️ Please enter a music description.",
    "sample_creation_failed": "❌ Failed to create sample. Please try again.",
    "sample_created": "✅ Sample created! Review the caption and lyrics, then click Generate Music.",
    "simple_examples_not_found": "⚠️ Simple mode examples directory not found.",
    "simple_examples_empty": "⚠️ No example files found in simple mode examples.",
    "simple_example_loaded": "🎲 Loaded random example from {filename}",
    "format_success": "✅ Caption and lyrics formatted successfully",
    "format_failed": "❌ Format failed: {error}",
    "skipping_metas_cot": "⚡ Skipping Phase 1 metas COT (sample already formatted)",
    "invalid_timesteps_format": "⚠️ Invalid timesteps format. Using default schedule.",
    "timesteps_out_of_range": "⚠️ Timesteps must be in range [0, 1]. Using default schedule.",
    "timesteps_count_mismatch": "⚠️ Timesteps count ({actual}) differs from inference_steps ({expected}). Using timesteps count.",
    "audio_format_invalid": "{role} format is invalid or unsupported. Please upload a valid audio file."
  },
  "training": {
    "tab_title": "🎓 LoRA Training",
    "tab_dataset_builder": "📁 Dataset Builder",
    "tab_train_lora": "🚀 Train LoRA",
    "quick_start_title": "🚀 Quick Start",
    "load_dataset_label": "Dataset JSON Path",
    "load_dataset_info": "Load a previously saved dataset.",
    "load_btn": "📂 Load",
    "load_status": "Load Status",
    "scan_label": "Audio Directory Path",
    "scan_info": "Scan for audio files (wav, mp3, flac, ogg, opus).",
    "scan_btn": "🔍 Scan",
    "scan_status": "Scan Status",
    "found_audio_files": "Found Audio Files",
    "dataset_name": "Dataset Name",
    "dataset_name_placeholder": "Enter dataset name",
    "dataset_settings_header": "Dataset Settings",
    "tag_prepend": "Prepend (Tag, Caption)",
    "tag_append": "Append (Caption, Tag)",
    "tag_replace": "Replace Caption",
    "step2_title": "Step 2: AI Auto-Labeling",
    "step2_instruction": "Click the button below to use AI to automatically generate metadata for all audio files:\n- **Caption**: Music style, genre, mood description\n- **BPM**: Beats per minute\n- **Key**: Music key (e.g. C Major, Am)\n- **Time Signature**: 4/4, 3/4 etc.",
    "step3_title": "Step 3: Preview & Edit",
    "step4_title": "Step 4: Save Dataset",
    "step5_title": "Step 5: Preprocess to Tensors",
    "step5_intro": "**Preprocessing converts your dataset into pre-computed tensors for fast training.**\n\nYou can:\n- Use the dataset from steps 1-4 above, **OR**\n- Load an existing dataset JSON file (if you have one saved)",
    "step5_details": "This step will:\n- Encode audio to VAE latents\n- Encode captions and lyrics to text embeddings\n- Run condition encoders\n- Save all tensors to `.pt` files\n\n⚠️ **This requires loading models and may take a few minutes.**",
    "train_tensor_selection_desc": "Select the directory containing preprocessed tensor files (`.pt` files).\nThese are created using the 'Preprocess' button in the 'Dataset Builder' tab.",
    "all_instrumental": "All Instrumental",
    "all_instrumental_info": "Check if all tracks are instrumental (no vocals).",
    "custom_tag": "Custom Trigger Tag",
    "custom_tag_info": "Unique tag to activate this LoRA style.",
    "tag_position": "Tag Position",
    "tag_position_info": "Where to place the custom tag in the caption.",
    "genre_ratio": "Genre Ratio (%)",
    "genre_ratio_info": "0%=All Caption, 100%=All Genre. Single sample override takes precedence.",
    "skip_metas": "Skip BPM/Key/TimeSig",
    "skip_metas_info": "Skip BPM/Key/TimeSig generation. Captions and genres are still generated by LM.",
    "only_unlabeled": "Only Unlabeled",
    "only_unlabeled_info": "Only label samples with no caption (for continuing failed labeling).",
    "auto_label_btn": "🏷️ Auto-Label All",
    "label_progress": "Labeling Progress",
    "select_sample": "Select Sample #",
    "select_sample_info": "Select sample to preview and edit.",
    "audio_preview": "Audio Preview",
    "filename": "Filename",
    "caption": "Caption",
    "genre": "Genre",
    "prompt_override_label": "Prompt Override (This Sample)",
    "prompt_override_info": "Override global ratio for this sample.",
    "lyrics_editable_label": "Lyrics (Editable for Training)",
    "raw_lyrics_label": "Raw Lyrics (from .txt file)",
    "no_lyrics_placeholder": "(No .txt lyrics file)",
    "bpm": "BPM",
    "key_label": "Key",
    "key_placeholder": "C Major",
    "time_sig": "Time Sig",
    "duration_s": "Duration (s)",
    "language": "Language",
    "instrumental": "Instrumental",
    "save_changes_btn": "💾 Save Changes",
    "edit_status": "Edit Status",
    "save_path": "Save Path",
    "save_path_info": "Path to save dataset JSON.",
    "save_dataset_btn": "💾 Save Dataset",
    "save_status": "Save Status",
    "load_existing_label": "Load Existing Dataset",
    "load_existing_info": "Path to previously saved dataset JSON file.",
    "load_dataset_btn": "📂 Load Dataset",
    "tensor_output_dir": "Tensor Output Directory",
    "tensor_output_info": "Directory to save preprocessed tensor files.",
    "preprocess_btn": "⚡ Preprocess",
    "preprocess_progress": "Preprocessing Progress",
    "preprocessed_tensors_dir": "Preprocessed Tensors Directory",
    "preprocessed_tensors_info": "Directory containing preprocessed .pt tensor files.",
    "dataset_info": "Dataset Info.",
    "lora_rank": "LoRA Rank (r)",
    "lora_rank_info": "Higher capacity but more VRAM.",
    "lora_alpha": "LoRA Alpha",
    "lora_alpha_info": "Scaling factor (usually 2x Rank).",
    "lora_dropout": "LoRA Dropout",
    "learning_rate": "Learning Rate",
    "learning_rate_info": "Start with 3e-4, adjust as needed.",
    "max_epochs": "Max Epochs",
    "batch_size": "Batch Size",
    "batch_size_info": "Increase if VRAM allows.",
    "gradient_accumulation": "Gradient Accumulation",
    "gradient_accumulation_info": "Effective Batch Size = batch_size * accum_steps.",
    "save_every_n_epochs": "Save Every N Epochs",
    "shift": "Shift",
    "shift_info": "Timestep shift for Turbo models.",
    "seed": "Seed",
    "output_dir": "Output Directory",
    "output_dir_info": "Directory to save trained LoRA weights.",
    "start_training_btn": "🚀 Start Training",
    "stop_training_btn": "⏹️ Stop Training",
    "training_progress": "Training Progress",
    "training_log": "Training Log",
    "training_loss_title": "Training Loss",
    "step": "Step",
    "loss": "Loss",
    "export_header": "Export LoRA",
    "export_path": "Export Path",
    "export_lora_btn": "📦 Export LoRA",
    "export_status": "Export Status",
    "stop_no_training": "ℹ No training in progress",
    "stop_stopping": "⏹️ Stopping training...",
    "latest_auto": "Latest (auto)",
    "export_path_required": "❌ Please enter an export path",
    "invalid_lora_output_dir": "❌ Invalid LoRA output directory",
    "no_checkpoints_found": "❌ No checkpoints found",
    "no_trained_model_found": "❌ No trained model found in {path}",
    "invalid_export_path": "❌ Invalid export path",
    "lora_exported": "✅ LoRA exported to {path}",
    "export_failed": "❌ Export failed: {error}",
    "lokr_output_dir_required": "⚠️ Enter LoKr output directory first",
    "lokr_no_checkpoints_use_latest": "ℹ No checkpoints found; export will use latest available weights",
    "lokr_no_exportable_checkpoints": "ℹ No exportable epoch checkpoints found",
    "lokr_found_checkpoints": "✅ Found {count} LoKr checkpoints",
    "lokr_selected_epoch_not_found": "❌ Selected epoch not found: {chosen}. Available: {available}",
    "lokr_no_weights_selected_epoch": "❌ No LoKr weights found for selected epoch: {epoch}",
    "lokr_no_weights_latest_checkpoint": "❌ No LoKr weights found in latest checkpoint: {checkpoint}",
    "lokr_no_trained_weights_found": "❌ No trained LoKr weights found in {path}",
    "lokr_exported": "✅ LoKr exported to {path}",
    "tab_train_lokr": "🚀 Train LoKr",
    "train_section_tensors": "Preprocessed Tensors",
    "train_section_lora": "LoRA Settings",
    "train_section_params": "Training Parameters",
    "lokr_section_tensors": "Preprocessed Tensors",
    "lokr_section_settings": "LoKr Settings",
    "lokr_tensor_selection_desc": "Select the directory containing preprocessed tensor files (`.pt` files).\nThese are created using the 'Preprocess' button in the 'Dataset Builder' tab.",
    "lokr_linear_dim": "LoKr Linear Dim",
    "lokr_linear_dim_info": "Rank (dimension) for LoKr adaptation matrices.",
    "lokr_linear_alpha": "LoKr Linear Alpha",
    "lokr_linear_alpha_info": "Scaling factor for LoKr (usually similar to dim).",
    "lokr_factor": "LoKr Factor",
    "lokr_factor_info": "Kronecker factor (-1 for auto).",
    "lokr_decompose_both": "Decompose Both Sides",
    "lokr_decompose_both_info": "When enabled, decomposes both left and right matrices.",
    "lokr_use_tucker": "Use Tucker Decomposition",
    "lokr_use_tucker_info": "Apply Tucker decomposition when applicable.",
    "lokr_use_scalar": "Use Scalar Gate",
    "lokr_use_scalar_info": "Enable scalar gating for LoKr weights.",
    "lokr_weight_decompose": "Weight Decompose (WD)",
    "lokr_weight_decompose_info": "Enable weight decomposition for more stable LoKr training.",
    "lokr_learning_rate_info": "LoKr commonly uses a higher LR than LoRA. Tune per dataset.",
    "lokr_output_dir_info": "Directory to save trained LoKr weights.",
    "start_lokr_training_btn": "🚀 Start Training LoKr",
    "lokr_training_loss_title": "LoKr Training Loss",
    "lokr_export_header": "Export LoKr",
    "export_lokr_btn": "📦 Export LoKr",
    "lokr_checkpoint_epoch": "Checkpoint Epoch",
    "lokr_checkpoint_epoch_info": "Select a specific epoch checkpoint to export, or keep Latest (auto).",
    "refresh_epochs_btn": "↻ Refresh Epochs"
  },
  "help": {
    "btn_label": "?",
    "close_label": "✕",
    "getting_started": "## Getting Started\n\n1. **Select a model** in the Settings accordion (e.g. `acestep-v15-turbo`)\n2. **Choose a 5Hz LM** if you want Thinking mode (recommended)\n3. Click **Initialize Service** and wait for the green status\n4. Pick a **Generation Mode** (start with Simple)\n5. Describe your music and click **Generate Music**\n\n> **Tip:** Turbo models are fastest. Enable \"Think\" for smarter generation.",
    "service_config": "## Service Configuration\n\n### Quick Setup\n1. Select **Main Model Path** (turbo recommended)\n2. Select **5Hz LM Model Path** (auto-filtered by GPU)\n3. Choose **Backend**: `vllm` (fast, NVIDIA ≥8GB) or `pt` (universal)\n4. Check **Initialize 5Hz LM** for Thinking mode\n5. Click **Initialize Service**\n\n### Performance Tips\n- **Flash Attention**: Faster inference (needs flash_attn)\n- **CPU Offload**: Auto-enabled on GPUs <20GB\n- **INT8 Quantization**: Reduces VRAM, auto-enabled <20GB\n- **Compile**: Required for quantization, enabled by default\n\n### LoRA\n- Set LoRA path → Load → Enable \"Use LoRA\"\n- ⚠️ Cannot use LoRA with INT8 quantization",
    "generation_simple": "## Simple Mode Tutorial\n\n**Best for:** Quick music creation with minimal effort.\n\n### Steps\n1. Select **Simple** in Generation Mode\n2. Type a description, e.g. *\"upbeat pop song with catchy guitar riff\"*\n3. (Optional) Check **Instrumental** for no vocals\n4. (Optional) Select **Vocal Language**\n5. Click **Create Sample** — AI generates caption, lyrics, metadata\n6. Review and edit the generated content if needed\n7. Click **Generate Music**\n\n### Tips\n- Click 🎲 for random inspiration\n- The more specific your description, the better the result\n- Leave BPM/Key empty to let AI decide",
    "generation_custom": "## Custom Mode Tutorial\n\n**Best for:** Full creative control over every parameter.\n\n### Steps\n1. Select **Custom** in Generation Mode\n2. Write a detailed **Caption** describing style, genre, instruments, mood\n3. Write **Lyrics** with structure tags: `[Verse]`, `[Chorus]`, `[Bridge]`\n4. (Optional) Upload **Reference Audio** for style guidance\n5. Set **BPM**, **Key**, **Duration** or leave empty for auto\n6. Click **Format** to enhance with LM (optional)\n7. Click **Generate Music**\n\n### Caption Tips\n- Be specific: *\"dreamy shoegaze with reverb-heavy guitars and whispered vocals\"*\n- Include: genre, instruments, mood, tempo feel, vocal style",
    "generation_remix": "## Remix Mode Tutorial\n\n**Best for:** Creating cover versions or style transfers.\n\n### Steps\n1. Select **Remix** in Generation Mode\n2. Upload **Source Audio** (the song to remix)\n3. Write a **Caption** describing the target style\n4. (Optional) Modify **Lyrics**\n5. Adjust **Remix Strength** (0.0–1.0):\n   - Higher = closer to original structure\n   - Lower = more creative freedom\n6. Click **Generate Music**\n\n### Tips\n- Start with strength 0.5 and adjust\n- Use SFT model with Cover Strength 0.1–0.25 for melody retention",
    "generation_repaint": "## Repaint Mode Tutorial\n\n**Best for:** Fixing or regenerating specific sections of generated music while keeping the rest intact.\n\n### Steps\n1. Select **Repaint** in Generation Mode\n2. Upload **Source Audio**\n3. Set **Repainting Start** (seconds) and **End** (-1 for end of file)\n4. Write a **Caption** for the repainted section\n5. Choose a **Repaint Mode** and adjust **Repaint Strength** if needed\n6. Click **Generate Music**\n\n### Repaint Mode\nControls how the model treats non-repainted regions:\n\n- **Conservative** (Strength = 0): Maximum source preservation. Source latents are injected at every diffusion step with long boundary crossfades. Best for seamless blending.\n- **Balanced** (default): Source latents are injected for a fraction of steps controlled by the Repaint Strength slider. Good starting point.\n- **Aggressive** (Strength = 1): No source injection at all — pure diffusion. Maximum creative freedom but less boundary consistency.\n\n### Repaint Strength\nOnly active in **Balanced** mode. Drag to control the preserve-vs-regenerate tradeoff:\n- **0** = Conservative behavior (auto-switches mode)\n- **0.5** = Default — inject source during first 50% of steps\n- **1** = Aggressive behavior (auto-switches mode)\n\n### Tips\n- Use \"Send To Repaint\" from Results to quickly load audio\n- Start with Balanced (0.5) and adjust based on results\n- Lower strength for better boundary consistency, higher for more creative output",
    "generation_extract": "## Extract Mode (Base Model Only)\n\n**Best for:** Stem separation — isolating instruments from a mix.\n\n### Steps\n1. Select **Extract** in Generation Mode\n2. Upload **Source Audio**\n3. Select **Track Name** to extract (e.g. vocals, drums, bass)\n4. Click **Extract Stem**\n\n### Available Tracks\nvocals, backing_vocals, drums, bass, guitar, keyboard, percussion, strings, synth, fx, brass, woodwinds",
    "generation_lego": "## Lego Mode (Base Model Only)\n\n**Best for:** Adding new instrument tracks to existing audio.\n\n### Steps\n1. Select **Lego** in Generation Mode\n2. Upload **Source Audio**\n3. Select **Track Name** to add\n4. Write a **Caption** describing the track\n5. Click **Add Stem**\n\n### Tips\n- Great for layering: add drums to a guitar track, add bass to vocals\n- The caption should describe only the new track's characteristics",
    "generation_complete": "## Complete Mode (Base Model Only)\n\n**Best for:** Auto-arranging — filling in missing instruments.\n\n### Steps\n1. Select **Complete** in Generation Mode\n2. Upload **Source Audio** (partial arrangement)\n3. Select multiple **Track Names** to add\n4. Write a **Caption** describing the desired style\n5. Click **Generate Music**",
    "generation_caption": "## Writing Good Captions\n\n### Structure\nA good caption includes:\n- **Genre/Style**: pop, rock, jazz, electronic, classical…\n- **Instruments**: guitar, piano, synth, drums, strings…\n- **Mood**: upbeat, melancholic, energetic, dreamy…\n- **Vocal style**: whispered, powerful, falsetto, rap…\n- **Tempo feel**: fast, slow, moderate, driving…\n\n### Examples\n- *\"Energetic pop-punk with distorted guitars, fast drums, and shouted vocals\"*\n- *\"Smooth jazz trio with walking bass, brushed drums, and mellow piano\"*\n- *\"Ambient electronic with layered synth pads and no vocals\"*\n\n### Tips\n- More detail = better results\n- Use the **Format** button to let AI enhance your caption\n- Check 🎲 for example captions",
    "generation_lyrics": "## Writing Lyrics\n\n### Structure Tags\nUse section tags to structure your song:\n```\n[Verse 1]\nYour verse lyrics here\n\n[Chorus]\nYour chorus lyrics here\n\n[Verse 2]\nSecond verse here\n\n[Bridge]\nBridge section\n\n[Outro]\nEnding lyrics\n```\n\n### Tips\n- Keep verses 4–8 lines\n- Choruses should be memorable and repetitive\n- Use `[Instrumental]` or `[Interlude]` for non-vocal sections\n- Check **Instrumental** checkbox for pure instrumental music\n- Select **Vocal Language** to match your lyrics language",
    "generation_advanced": "## Advanced Settings\n\n### Key Parameters\n- **Inference Steps**: Turbo=8 (default), Base=up to 200. More steps ≠ always better for turbo\n- **Guidance Scale**: Base model only. Higher = follows prompt more strictly\n- **Shift**: Timestep shift (1.0–5.0). 3.0 recommended for turbo\n- **Seed**: Set a specific seed for reproducible results\n\n### LM Parameters\n- **Temperature** (0.0–2.0): Higher = more creative/random\n- **CFG Scale** (1.0–3.0): Higher = follows prompt more\n- **Top-K / Top-P**: Sampling strategies for diversity\n\n### Think Mode\nEnable **Think** to use 5Hz LM for smarter generation:\n- Generates semantic codes and metadata\n- Requires LM to be initialized\n- **ParallelThinking**: Process batches in parallel (faster)",
    "generation_retake": "## Retake (Variation Generation)\n\n**Best for:** producing controlled, smooth variations of a seeded baseline without changing prompts.\n\n### Principle\nRetake mixes a fresh independent noise draw into the seeded initial noise via a variance-preserving sin/cos blend:\n\n```\nmixed = cos(v · π/2) · base_noise + sin(v · π/2) · retake_noise\n```\n\nBecause `cos² + sin² = 1`, the total noise variance is preserved exactly.  `v=0` is a no-op (reproduces the baseline); `v=1` swaps the noise entirely.\n\n### Inputs\n- **variance** (0–1): blend factor.\n  - `0` = baseline (identical to no retake)\n  - `0.05–0.15` = subtle variation, same melody/structure with minor differences\n  - `0.3–0.5` = moderate drift\n  - `0.5+` = strong drift, may diverge significantly\n- **seed** (integer, optional): independent reproducibility seed for the retake noise.  Empty = random per call.\n\n### ⚠️ Consistency requirement\nRetake variation is **only meaningful** if every other condition matches the baseline run.  In particular:\n\n- The main **seed** must be the same — leave the random-seed checkbox off and reuse the seed from the baseline batch.\n- **Think** must be **off**, OR the LM-generated codes from the baseline must be reused.  With Think on the LM regenerates audio codes from scratch each call, so the input to the diffusion model is different — Retake's noise blend gets layered on top of an already-different starting point and the result mixes \"LM variation\" with \"noise variation\".\n- All other knobs (caption, lyrics, BPM, key, duration, guidance_scale, shift, sampler, DCW, etc.) should match the baseline.\n\n### Workflow for retaking a Think-mode result\n1. On the result you like, expand the **📊 Score & LRC & LM Codes** accordion.\n2. Copy the **LM Codes** text out of that result.\n3. Paste it into the **LM Codes Hints** textbox.\n4. **Uncheck Think** — the diffusion model will now use the pasted LM codes verbatim.\n5. Lock the main seed to the baseline's seed, enable **Retake**, set `retake_seed`, adjust `variance`.\n\n### Reference\nSee [issue #1155](https://github.com/ace-step/ACE-Step-1.5/issues/1155).",
    "generation_edit": "## Edit (Flow-Edit Overlay)\n\n**Best for:** morphing an existing audio toward new lyrics or a new style while keeping the source's structure.  Smoothly blends source → target via paired velocity-field integration along the diffusion schedule.\n\n### Principle\nFlow-Edit integrates a velocity difference:\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\nwhere `c_src` and `c_tar` are paired text/lyric conditions.  Both branches share the same audio context, so V_delta isolates the **text-only** delta and accumulates it into `z_edit` over `[n_min, n_max]` of the schedule.\n\n### Workflow\n1. Pick **Custom** (recommended for new edits) or **Remix** (when you want to keep cover-style scaffolding from a reference audio).\n2. Upload the audio to edit into the **Source Audio** field at the top.\n3. Fill the top-level **Music Caption** / **Lyrics** with the **original** description of the source audio (this will be V_src in the next step).\n4. Tick **Edit** to expand the panel.\n5. Click **Copy current → source** — this snapshots the *original* into the source fields below as V_src.\n6. Now edit the top-level **Music Caption** / **Lyrics** to define the **target** (what you want the morphed result to be) — V_tar.\n7. Leave `n_min=0`, `n_max=1`, `n_avg=1` for the first try.\n8. In **Optional Parameters** set `shift=3.0` (recommended for all variants).\n9. Click **Generate Music**.\n\n> Tip: if you arrived here via **Send to Remix** / **Send to Repaint**, the source fields are already pre-filled from the previous run — skip steps 3 and 5 and go straight to editing the top-level fields as the target.\n\n### Mode behaviour\n- **Custom** (text2music): the backend silently **ignores Think and `LM Codes Hints`** — it always VAE-encodes your `Source Audio` directly so flow-edit's `z_edit` starts on a clean audio latent.  V_delta is purely text-driven.  Most reliable mode for v1.\n- **Remix** (cover / cover-nofsq): backend uses cover's natural LM-codes context, shared by both branches.  Good when you want the morphed result to retain the cover task's reference scaffolding.\n- **Repaint / Extract / Lego**: not supported in v1 — the backend logs a warning and falls back to plain task behaviour (paired-CFG for those task shapes is the follow-up PR).\n\n### Inputs\n- **source caption / lyrics**: describe the *original* audio (V_src).\n- top-level **caption / lyrics**: the *target* you want (V_tar).\n- **n_min / n_max**: diffusion-schedule window where V_delta is integrated.  `0 / 1` = full schedule (recommended).\n- **n_avg**: Monte-Carlo samples per step (1 = fast; higher = more stable, slower).\n\n### Models\nAll six DiT variants are supported.  Turbo / XL-turbo are CFG-distilled, so the backend automatically forces `guidance_scale=1.0` for them.  8 inference steps is enough for turbo; bump to ≥60 for `base / sft / xl_base / xl_sft`.\n\n### Method (deeper)\n1. Encode `flow_edit_source_caption / lyrics` → V_src condition.\n2. Encode top-level `caption / lyrics` → V_tar condition.\n3. Run paired CFG/APG forward at each step in `[n_min, n_max]`.\n4. Integrate `(V_tar − V_src)` into the running `z_edit`.\n5. After `n_max`, Euler-step toward the clean latent on the target branch only.\n\n### Tips\n- `Send to Remix` / `Send to Repaint` already auto-fills source fields from the previous run's prompts so you can iterate quickly.\n- The recommended `shift=3.0` matches ACE-Step 1.0's default flow-edit schedule and is empirically stable across all six variants.\n\n### Reference\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": "## Results Section\n\n### Per-Sample Controls\n- **Audio Player**: Play, pause, download\n- **Send To Remix/Repaint**: Use this result as source for further editing\n- **Save**: Export audio + metadata as JSON\n- **Score**: Calculate quality score (perplexity-based)\n- **LRC**: Generate lyrics timestamps\n\n### Batch Navigation\n- Use **◀ Previous** / **Next ▶** to browse batches\n- Enable **AutoGen** to auto-generate next batch\n- Click **Apply These Settings to UI** to reuse parameters from a good result\n\n### Tips\n- Generate 2–4 variations (batch size) and pick the best\n- Use Score to objectively compare results\n- Save good results for reference",
    "training_dataset": "## Dataset Builder Tutorial\n\n### Step 1: Load or Scan\n- **Load**: Enter path to existing dataset JSON → Click Load\n- **Scan**: Enter audio folder path → Click Scan\n  - Supported: wav, mp3, flac, ogg, opus\n\n### Step 2: Configure\n- Set **Dataset Name**\n- Check **All Instrumental** if no vocals\n- Set **Custom Activation Tag** (unique trigger word for your LoRA)\n- Choose **Tag Position**: Prepend, Append, or Replace\n\n### Step 3: Auto-Label\n- Click **Auto-Label All** to generate captions, BPM, key, time sig\n- Use **Skip Metas** to skip BPM/Key/TimeSig (faster)\n\n### Step 4: Preview & Edit\n- Use slider to browse samples\n- Edit caption, lyrics, BPM, key manually\n- Click **Save Changes** per sample\n\n### Step 5: Save\n- Enter save path → Click **Save Dataset**\n\n### Step 6: Preprocess\n- Set tensor output directory → Click **Preprocess**\n- This encodes audio/text to tensors for training\n\n### 📖 Documentation\n- [LoRA Training Tutorial](https://github.com/ACE-Step/ACE-Step-1.5/blob/main/docs/en/LoRA_Training_Tutorial.md) — Full step-by-step guide\n- [Side-Step Advanced Training](https://github.com/ACE-Step/ACE-Step-1.5/blob/main/docs/sidestep/Getting%20Started.md) — CLI-based training with advanced features",
    "training_train": "## LoRA Training Tutorial\n\n### Setup\n1. Enter **Preprocessed Tensors Directory** → Click **Load Dataset**\n2. Configure LoRA:\n   - **Rank** (r): 64 default. Higher = more capacity\n   - **Alpha**: Usually 2× rank (128)\n   - **Dropout**: 0.1 for regularization\n\n### Training\n3. Set **Learning Rate** (start with 1e-4)\n4. Set **Max Epochs** (500 default)\n5. Click **Start Training**\n6. Monitor loss curve — it should decrease over time\n7. Click **Stop Training** when satisfied\n\n### Export\n8. Enter export path → Click **Export LoRA**\n9. Load in Settings: set LoRA Path → Load LoRA → Enable Use LoRA\n\n### 🚀 Try LoKr for Faster Training\nLoKr has greatly improved training efficiency. What used to take an hour now only takes 5 minutes — **over 10× faster**. This is crucial for training on consumer-grade GPUs. Switch to the **Train LoKr** tab to get started.\n\n### Tips\n- Use small batch size (1) if VRAM is limited\n- Gradient accumulation increases effective batch size\n- Save checkpoints frequently (every 200 epochs)\n\n### 📖 Documentation\n- [LoRA Training Tutorial](https://github.com/ACE-Step/ACE-Step-1.5/blob/main/docs/en/LoRA_Training_Tutorial.md) — Full step-by-step guide\n- [Side-Step Advanced Training](https://github.com/ACE-Step/ACE-Step-1.5/blob/main/docs/sidestep/Getting%20Started.md) — CLI training with corrected timesteps, LoKR, VRAM optimization",
    "training_lokr": "## 🚀 LoKr Training Tutorial\n\nLoKr (Low-rank Kronecker product) has greatly improved training efficiency. What used to take an hour with LoRA now only takes 5 minutes — **over 10× faster**. This is crucial for training on consumer-grade GPUs.\n\n### Setup\n1. Enter **Preprocessed Tensors Directory** → Click **Load Dataset**\n2. Configure LoKr:\n   - **Linear Dim**: 64 default (similar to LoRA rank)\n   - **Linear Alpha**: 128 default (scaling factor)\n   - **Weight Decompose (DoRA)**: Enabled by default for better quality\n\n### Training\n3. Set **Learning Rate** (LoKr commonly uses higher LR, start with 1e-3)\n4. Set **Max Epochs** (500 default)\n5. Click **Start LoKr Training**\n6. Monitor loss curve — it should decrease over time\n7. Click **Stop Training** when satisfied\n\n### Export\n8. Enter export path → Click **Export LoKr**\n9. Load in Settings: set LoRA Path → Load LoRA → Enable Use LoRA\n\n### LoKr vs LoRA\n| | LoKr | LoRA |\n|---|---|---|\n| Speed | ⚡ ~10× faster | Slower |\n| VRAM | Lower | Higher |\n| Quality | Comparable | Baseline |\n| Best for | Consumer GPUs, rapid iteration | Maximum fidelity |\n\n### Tips\n- LoKr uses Kronecker decomposition for extreme efficiency\n- Enable **DoRA** (Weight Decompose) for improved quality\n- Use **Tucker decomposition** for additional compression\n- Higher learning rate (1e-3) often works better than LoRA's typical 1e-4",
    "training_export": "## Using Your Trained LoRA\n\n### Export\n1. After training, enter export path\n2. Click **Export LoRA**\n\n### Load & Use\n1. In Settings, set **LoRA Path** to your exported directory\n2. Click **Load LoRA**\n3. Enable **Use LoRA** checkbox\n4. Generate music — your LoRA style will be applied\n\n### Tips\n- Use your **Custom Activation Tag** in captions to trigger the style\n- ⚠️ LoRA is incompatible with INT8 quantization\n- You can unload and switch between different LoRAs"
  },
  "gen": {
    "enable_normalization": "Enable Normalization",
    "enable_normalization_info": "Adjusts the final audio volume to a consistent peak level. Prevents clipping (distortion from too-loud audio) and ensures all outputs are at similar loudness. Recommended to keep enabled for consistent results.",
    "normalization_db": "Target Peak (dB)",
    "normalization_db_info": "How loud the normalized audio should be. -1.0 dB = industry standard safe peak (recommended, leaves headroom). -0.1 dB = maximum loudness before clipping. Lower values (e.g. -3.0) = quieter, more headroom for further mixing/mastering.",
    "fade_in_duration": "Fade In (seconds)",
    "fade_in_duration_info": "Gradually increases volume from silence at the start of the audio. 0 = no fade (starts at full volume). 1–3s = subtle intro. 5–10s = dramatic slow build. Useful for avoiding abrupt starts.",
    "fade_out_duration": "Fade Out (seconds)",
    "fade_out_duration_info": "Gradually decreases volume to silence at the end of the audio. 0 = no fade (may end abruptly). 2–5s = smooth ending. Useful for avoiding harsh cutoffs at the end of generated audio.",
    "latent_shift": "Latent Shift",
    "latent_shift_info": "Advanced: Shifts the internal audio representation before decoding. Try small negative values (e.g. -0.04) if your outputs have clipping/distortion. 0 = no shift (default). Only adjust if you're hearing audio artifacts.",
    "latent_rescale": "Latent Rescale",
    "latent_rescale_info": "Advanced: Scales the internal audio representation before decoding. Values below 1.0 (e.g. 0.91) can reduce clipping/distortion. 1.0 = no rescale (default). Only adjust if you're hearing audio artifacts despite normalization."
  }
}
