Application Updates 应用更新
This page tracks notable user-facing changes to the SXSEditor application, grouped by release version. Application version numbers are auto-incremented by GitHub CI. For the full commit history, see the GitHub commit log. Changes released before v1.0.5 are not tracked here.
本页按发布版本追踪 SXSEditor 应用面向用户的重大变更。应用版本号由 GitHub CI 自动递增。完整提交历史请查看 GitHub 提交日志。v1.0.5 之前的变更不再追踪。
Looking for model / inference changes? See Model Updates.
查找模型 / 推理相关变更?请见 模型更新。
v2.0.2 v2.0.2
New Features 新功能
- WindowsML TensorRT-RTX EP — FP16 models can now run on NVIDIA GPUs via the Windows ML
NvTensorRTRTXExecutionProvider(TensorRT through the WinML runtime, ORT 1.27 + TensorRT-RTX).preflow/diff_step/vocoderload on[winml:NvTensor]with DML / CPU automatic fallback. Measured on an NVIDIA GeForce RTX 5060 Laptop (8 GB): ~4.9× fordiff_step, ~4.4× forvocoder, and ~4× end-to-end FP16 speedup vs the DML FP32 baseline. TensorRT-RTX ships opt-in with a one-click diagnostic and optional TRT dynamic profile generation.WindowsML TensorRT-RTX 执行提供器——FP16 模型现可通过 Windows ML 的NvTensorRTRTXExecutionProvider(基于 WinML 运行时封装 TensorRT,ORT 1.27 + TensorRT-RTX)在 NVIDIA GPU 上运行。preflow/diff_step/vocoder在[winml:NvTensor]后端加载,并自动以 DML / CPU 回退。在 NVIDIA GeForce RTX 5060 Laptop(8 GB)上测得:diff_step约 4.9×、vocoder约 4.4×,端到端 FP16 较 DML FP32 基线约快 4 倍。TensorRT-RTX 为可选开启,附带一键诊断与可选的 TRT 动态 profile 生成。 - Native inference backend selector — the old WAML checkbox is replaced by a single durable backend selector (TensorRT-RTX / DML / WebNN / CPU) that serves multiple hardware paths with automatic fallback.原生推理后端选择器——旧的 WinML 开关被统一的后端选择器(TensorRT-RTX / DML / WebNN / CPU)取代,一条路径即可服务多种硬件并自动回退。
- Streaming chunk-resume cache — long streams resume from cached chunks, so scrubbing back and replaying a section avoids re-running inference.流式 chunk 续播缓存——长流可从已缓存 chunk 续播,回拉重放某段时无需重新推理。
- MIDI timeline gap preservation — gap regions on the timeline are now preserved in streaming synthesis rather than being collapsed.保留 MIDI 时间线间隔——流式合成现在保留时间线上的间隔区域,而非将其折叠。
Performance 性能优化
- GPU drain delay removal — fixed per-chunk GPU drain waits are removed; waits are only applied after an out-of-memory event, cutting idle time in the diffusion loop.移除 GPU 排空延迟——移除每 chunk 固定的 GPU 排空等待;仅在显存不足后才施加等待,减少扩散循环中的空闲开销。
- Vocal region splitting — non-vocal regions (incl. long rests ≥ 1.5 s) are split out of model input via reworked audio segmentation, eliminating rest hiss and reducing wasted inference.人声区域切分——非人声区域(含 ≥ 1.5 秒长休止)通过重构的音频分割从模型输入中切分出去,消除休止噪声并减少无谓推理。
Bug Fixes 缺陷修复
- Fixed vendor-EP all-zero output — device-to-host copies for vendor execution providers now use a robust ArrayBuffer copy path (
d2h-copy-v3native bridge marker), with application-level zero-output protection as a safety net.修复第三方 EP 全零输出——第三方执行提供器的设备到主机复制现改用稳健的 ArrayBuffer 复制路径(d2h-copy-v3原生桥接标记),并以应用级全零输出保护作为安全兜底。 - Fixed long-rest regions piling voices on top of each other in streaming synthesis — absolute note starts are now preserved so regions after a long rest no longer overlap.修复流式合成中长休止区域人声重叠——现保持绝对音符起点,长休止后的各区域不再互相叠加。
- Fixed settings UI failing to initialize when the backend selector replaced the old WinML checkbox.修复设置 UI 未初始化的问题——旧 WinML 复选框替换为后端选择器后页面无法正常初始化。
v2.0.0 v2.0.0
New Features 新功能
- FCPE pitch detector — a new ONNX-based FCPE pitch detector is now the default MIDI extraction tool, replacing Basic Pitch as the recommended option. It auto-downloads from ModelScope and is registered as a new model group.FCPE 音高检测器——新增基于 ONNX 的 FCPE 音高检测器,作为默认 MIDI 提取工具,替代 Basic Pitch 成为推荐选项。支持从 ModelScope 自动下载,已注册为新模型组。
- FCPE post-processing pipeline — a configurable post-processing pipeline improves MIDI extraction quality: loudness normalization, RMS-based silence gating, F0 range gating, median smoothing, note segmentation & quantization (strict or pitch-bend preserving), voice quality detection, and auto-BPM detection. A full parameter panel with presets, audition toggle, and progress/ETA feedback is available in the audio preprocess UI.FCPE 后处理流水线——可配置的后处理流水线提升 MIDI 提取质量:响度归一化、基于 RMS 的静音门控、F0 范围门控、中值平滑、音符分割与量化(严格模式或保留弯音)、嗓音质量检测与自动 BPM 检测。音频预处理界面提供完整的参数面板、预设、试听开关与进度/ETA 反馈。
- Accompaniment tracks — import WAV / MP3 / FLAC / OGG / M4A / AAC audio as accompaniment tracks alongside vocal fragments. Accompaniment audio is mixed into playback (streaming & non-streaming) and WAV export. Supports multi-channel audio (no downmix), per-track volume control, and drag-to-move clips on the timeline.伴奏轨道——可导入 WAV / MP3 / FLAC / OGG / M4A / AAC 音频作为伴奏轨道,与人声分片并行排列。伴奏音频混入播放(流式与非流式)与 WAV 导出。支持多声道音频(不下混)、逐轨道音量控制,以及时间线上拖拽移动伴奏片段。
- Switchable diffusion samplers — the diffusion ODE solver is now pluggable. Choose from Euler (1 NFE/step, default baseline), Heun (2 NFE/step, improved Euler), Extrapolated Euler, or STORK-2 (ICLR 2026, arXiv:2505.24210; 1 NFE/step, 2nd-order accuracy via velocity-field temporal extrapolation, with numerical stability guard). Configurable per-preview and per-export.可切换的扩散采样器——扩散 ODE 求解器现可插拔切换。可选 Euler(1 NFE/步,默认基线)、Heun(2 NFE/步,改进 Euler)、外推 Euler 或 STORK-2(ICLR 2026, arXiv:2505.24210;1 NFE/步,通过速度场时间外推实现二阶精度,含数值稳定性保护)。预览与导出可分别配置。
- Dynamic Thresholding — per-frame quickselect percentile clipping with linear remapping after CFG combine (arXiv:2507.08965), integrated into both DML and WebNN diffusion paths. Adjustable percentile (0.9–0.999) with UI controls in settings and export dialog.动态阈值——在 CFG 合并后进行逐帧 quickselect 百分位裁剪与线性重映射(arXiv:2507.08965),已集成到 DML 与 WebNN 两条扩散路径。百分位可调(0.9–0.999),设置页与导出对话框均提供 UI 控件。
- Singer Market — a new Singer Market window lets users browse and download community-created singers. Includes a dedicated terms-of-use page (EN/ZH) with uploader authorization and disclaimer.歌手市场——新增歌手市场窗口,可浏览并下载社区创建的歌手。包含独立的使用条款页面(中英双语),涵盖上传者授权与免责声明。
- Note context menu: vibrato & fade in/out — right-click a note in the Fragment Editor (MIDI or Pitch mode) to fine-tune per-note vibrato (Depth 0–200¢, Rate 2–10 Hz, Start 0–80%, Length 20–100%, Fade-in ramp 0–100%; presets: Soft / Medium / Strong) and fade in / fade out (0–500 ms each; presets: Fade In / Fade Out / Both). Vibrato is layered additively over existing pitch curves; fades apply as post-processing gain in both preview and export. Visual indicators (sine-wave marker for vibrato, triangles for fades) appear on affected notes. Full undo/redo support; old projects auto-normalized on load. The menu applies to all selected notes when the right-clicked note is part of a multi-selection.音符右键菜单:颤音与渐入渐出——在分片编辑器中右键音符(MIDI 或 Pitch 模式)可逐音符微调颤音(幅度 0–200¢、频率 2–10 Hz、起始点 0–80%、长度 20–100%、渐入比例 0–100%;预设:柔和 / 中等 / 强烈)与渐入 / 渐出(各 0–500 ms;预设:渐强 / 渐弱 / 渐入渐出)。颤音以叠加方式作用于已有音高曲线;渐变作为后处理增益在预览与导出中均生效。受影响音符上会显示视觉指示(颤音显示正弦波标记,渐变显示三角形)。完整支持撤销 / 重做;旧项目加载时自动补全。多选时菜单作用于全部选中音符。
- 48 kHz default playback & export sample rate selection — the default audio sample rate is changed from 24 kHz to 48 kHz. Export sample rate is now selectable (24 / 44.1 / 48 / 96 kHz) with linear upsampling from the 24 kHz model rate.48 kHz 默认播放与导出采样率选择——默认音频采样率从 24 kHz 改为 48 kHz。导出采样率现可选择(24 / 44.1 / 48 / 96 kHz),从 24 kHz 模型采样率线性上采样。
- LRC lyrics export — a new LRC export button and module allow exporting project lyrics as a timed LRC file.LRC 歌词导出——新增 LRC 导出按钮与模块,可将项目歌词导出为带时间轴的 LRC 文件。
- QDIT int8 diff_step model support — the pipeline now supports QDIT-quantized int8 diff_step models with a new signature, including legacy int8 detection and a user prompt for switching.QDIT int8 diff_step 模型支持——推理管道现支持 QDIT 量化的 int8 diff_step 模型(新签名),包含旧版 int8 检测与用户切换提示。
- Segment-level synth cache — a per-segment LRU cache (32 entries / 300 MB) keyed on segment content skips re-inference for unchanged segments during iterative editing of long pieces, reducing compute and latency.段落级合成缓存——基于段落内容的 LRU 缓存(32 条 / 300 MB),在长曲目的迭代编辑中跳过未变更段落的重新推理,减少计算量与延迟。
- Cooperative synthesis cancellation — replaces
worker.terminate()with collaborative cancellation viaAbortController, so GPU inference exits at safe checkpoints. Fixes the D3D device-hung crash caused by killing in-flight synthesis. A cancel command bypasses the serial worker queue for immediate response.协作式合成取消——用基于AbortController的协作式取消替代worker.terminate(),使 GPU 推理在安全检查点退出。修复了强行终止推理导致的 D3D 设备挂起崩溃。取消命令绕过串行 worker 队列,实现即时响应。 - Per-track MIDI lyrics — multi-track MIDI files now correctly match lyrics per track (exact-track → channel → global fallback), fixing cases where multi-track files got wrong lyrics.逐轨道 MIDI 歌词匹配——多轨道 MIDI 文件现按轨道正确匹配歌词(精确轨道 → 通道 → 全局回退),修复了多轨道文件歌词错配的问题。
- FCPE params in global settings — FCPE threshold, smoothing, quantization, F0 range, min note duration, and normalize are now exposed as global settings with a dedicated UI group (auto-hidden when tool is not FCPE).FCPE 参数纳入全局设置——FCPE 的阈值、平滑、量化、F0 范围、最小音符时长与归一化参数现作为全局设置暴露,配有专用 UI 分组(非 FCPE 工具时自动隐藏)。
- UI polish: easing tokens & non-linear motion — introduces easing tokens (standard / emphasized / bounce) across CSS for consistent non-linear motion. Adds micro-interactions (button hover lift with bounce, active scale, singer card hover), improved modal animations, rAF-throttled wheel events to prevent trackpad lag, and
prefers-reduced-motionsupport for accessibility.界面打磨:缓动令牌与非线性动效——引入缓动令牌(标准 / 强调 / 弹跳)统一非线性动效。新增微交互(按钮悬停弹跳提升、按下缩放、歌手卡片悬停)、改进模态框动画、rAF 节流滚轮事件防止触控板卡顿,以及prefers-reduced-motion无障碍支持。 - Magnetic boundary snap & configurable snap grid — dragged or resized note edges within 4 px of an adjacent note's boundary snap to it. The snap grid is now configurable (default 1/16, finer than the old hard-coded 1/4). Resize hot zone is zoom-aware (clamped to 4–12 px).磁性边界吸附与可配置吸附网格——拖拽或调整音符边缘时,距相邻音符边界 4 像素以内会自动吸附。吸附网格现可配置(默认 1/16,比旧版硬编码 1/4 更精细)。调整热区随缩放自适应(限制在 4–12 像素)。
- EBU R128 loudness normalization & true-peak limiter — applies EBU R128 loudnorm (−14 LUFS) and a true-peak limiter (−1 dBTP) to synthesis output for consistent loudness across renders.EBU R128 响度归一化与真峰值限制器——对合成输出施加 EBU R128 响度归一化(−14 LUFS)与真峰值限制器(−1 dBTP),确保不同渲染间的响度一致。
- WSOLA crossfade — replaces Hann overlap-add with WSOLA (Waveform Similarity Overlap-Add) crossfade at vocoder and diffusion chunk boundaries for smoother audio transitions.WSOLA 交叉淡变——在声码器与扩散 chunk 边界处用 WSOLA(波形相似性重叠相加)交叉淡变替代 Hann 重叠相加,实现更平滑的音频过渡。
- Viewport-sized timeline canvas — replaces the oversized fragment canvas with a viewport-sized backing store + scroll transform, fixing the Chromium canvas size limit on long MIDI projects.视口尺寸时间线画布——用视口尺寸的 backing store + 滚动变换替代超大分片画布,修复长 MIDI 项目中的 Chromium 画布尺寸限制问题。
- Silence non-vocal regions — non-vocal regions after the vocoder are now silenced to eliminate rest hiss, and long rests (≥ 1.5 s) are split out of model input via reworked audio segmentation.静音非人声区域——声码器输出中的非人声区域现被静音以消除休止噪声,长休止(≥ 1.5 秒)通过重构的音频分割从模型输入中切分出去。
Performance 性能优化
- DML CFG batch merge — conditional and unconditional predictions are now merged into a single
session.runfor CFG, halving inference round-trips in the DML diffusion path.DML CFG 批量合并——条件与非条件预测现合并为单次session.run执行 CFG,将 DML 扩散路径的推理往返减半。 - Single-pass Welford CFG combine — replaces the three-pass CFG combine with a single-pass Welford online variance algorithm, reducing per-step computation.单遍 Welford CFG 合并——用单遍 Welford 在线方差算法替代三遍 CFG 合并,减少每步计算量。
- 2× oversampling anti-aliasing — replaces the 1st-order Butterworth LP with a full 2× oversampling pipeline (zero-stuff → 2nd-order Butterworth anti-image LP → anti-alias LP → decimate), improving audio quality during resampling.2 倍过采样抗混叠——用完整的 2 倍过采样流水线(零填充 → 二阶 Butterworth 抗镜像 LP → 抗混叠 LP → 抽取)替代一阶 Butterworth 低通,提升重采样音质。
- Packaged app size reduced by ~527 MB (32%) — onnxruntime-web files are only copied to the main window (eliminating ~538 MB of redundant copies across 7 windows), source maps are disabled in production, and Chromium locale .pak files are pruned to zh-CN / zh-TW / en-US / en-GB only.打包体积减少约 527 MB(32%)——onnxruntime-web 文件仅复制到主窗口(消除 7 个窗口间约 538 MB 冗余副本),生产环境禁用 source map,Chromium 语言 .pak 文件裁剪为仅 zh-CN / zh-TW / en-US / en-GB。
- Pitch curve caching & binary search — caches
generateAutoPitchPoints,_getActiveSortedNotes, andgetClippedNotesto eliminate O(steps × n²) repeated computation; replaces linear scans ingetPitchAtTimewith O(log n) binary search, preventing long-fragment freezes.音高曲线缓存与二分查找——缓存generateAutoPitchPoints、_getActiveSortedNotes与getClippedNotes以消除 O(steps × n²) 重复计算;将getPitchAtTime中的线性扫描替换为 O(log n) 二分查找,防止长分片卡顿。 - Notes index for large-scale fragments — a new sorted-array + pitch-bucketed binary search index provides O(log n) hit-test, overlap detection, and clamp operations, replacing O(n²) nested loops. Viewport culling reduces draw cost to O(log n + visible).大规模分片音符索引——新增排序数组 + 音高分桶的二分查找索引,提供 O(log n) 命中测试、重叠检测与夹紧操作,替代 O(n²) 嵌套循环。视口裁剪将绘制开销降至 O(log n + 可见数)。
- Adaptive GPU drain — skips the 50 ms wait normally, applies 200 ms wait only after OOM, reducing idle overhead in the diffusion loop.自适应 GPU 排空——正常时跳过 50 ms 等待,仅在 OOM 后施加 200 ms 等待,减少扩散循环中的空闲开销。
- Vocoder overlap frames 8 → 32 — the vocoder overlap frame count is increased from 8 to 32 (user-adjustable 8–96) for smoother chunk boundaries.声码器重叠帧 8 → 32——声码器重叠帧数从 8 增至 32(用户可调 8–96),使 chunk 边界更平滑。
- Model reload optimization — skips dummy warmup inference on session reloads (after VRAM release, language swaps, offloading), cutting reload latency.模型重载优化——在会话重载时(VRAM 释放、语言切换、卸载后)跳过 dummy 预热推理,缩短重载延迟。
- Per-step tensor pre-allocation —
xt/ttensors are pre-allocated and reused across diffusion steps, reducing per-step allocation overhead.逐步张量预分配——xt/t张量在扩散步骤间预分配并复用,减少每步分配开销。
Bug Fixes 缺陷修复
- Fixed synthesis cancellation causing D3D device-hung crash — collaborative cancellation via
AbortControllerexits GPU inference at safe checkpoints instead of terminating the worker mid-flight.修复合成取消导致 D3D 设备挂起崩溃——基于AbortController的协作式取消在安全检查点退出 GPU 推理,而非在推理过程中强制终止 worker。 - Fixed multi-fragment chunked diffusion ignoring sampler / CFG schedule / dynamic threshold opts —
synthesizeMultiStreamingnow forwardssamplerName,cfgScheduleOpts, anddynamicThresholdOptsto each chunk, so multi-fragment output matches single-fragment behavior.修复多分片分块扩散忽略采样器 / CFG 调度 / 动态阈值参数——synthesizeMultiStreaming现将samplerName、cfgScheduleOpts与dynamicThresholdOpts传递给每个 chunk,使多分片输出与单分片行为一致。 - Fixed onChunkMel errors silently swallowed — errors in the per-chunk audio callback now propagate with context instead of being caught and logged;
committedFramesonly advances after successful callback return, and a post-loop completeness check throws explicitly if frames are missing.修复onChunkMel 错误被静默吞没——每 chunk 音频回调中的错误现会带上下文抛出,而非被捕获后仅记录日志;committedFrames仅在回调成功返回后前进,循环结束后还会显式检查帧完整性。 - Fixed notes beyond 30 s segment boundary dropped in
synthesizeMultiStreaming— the function now usesfilledNotesdirectly instead of discarding segments after the first 30 s, fixing silence after ~30 s in long fragments.修复超过 30 秒段边界的音符被丢弃——synthesizeMultiStreaming现直接使用filledNotes而非丢弃首段之后的段落,修复了长分片约 30 秒后静音的问题。 - Fixed streaming playback ending prematurely when vocal finishes before accompaniment — accompaniment sources are now counted as active sources with their own
onended, and the fallback stop uses the max vocal/accompaniment frontier.修复人声先于伴奏结束时流式播放提前停止——伴奏源现被计为活动源并设有独立onended,兜底停止使用人声与伴奏前沿的最大值。 - Fixed MIDI lyric decoding — added
decodeMidiTextwith BOM/UTF-8 detection and heuristic legacy charset picking (gb18030 / shift_jis / big5 / windows-1252), plusrepairMojibaketo reverse UTF-8-as-GBK lyric corruption.修复MIDI 歌词解码——新增decodeMidiText,支持 BOM/UTF-8 检测与启发式遗留字符集选择(gb18030 / shift_jis / big5 / windows-1252),并新增repairMojibake修复 UTF-8 被当作 GBK 解码的乱码歌词。 - Fixed MIDI import inserting synthetic pitch=0 SP notes for gaps — MIDI silence now stays as an empty interval so imported scores and F0/autoShift stats are clean.修复MIDI 导入为间隔插入合成 pitch=0 SP 音符——MIDI 静音现保持为空间隔,使导入的谱面与 F0 / autoShift 统计数据保持干净。
- Fixed per-segment autoShift causing adjacent phrases to alternate ±12 semitones — replaced per-fragment local autoShift segmentation with one global shift per fragment, preventing pitch discontinuities across inference chunks.修复逐段 autoShift 导致相邻乐句交替 ±12 半音——用每个分片一次全局位移替代逐段 autoShift 分割,防止推理 chunk 间的音高不连续。
- Fixed export progress resetting per fragment — the status percentage and progress bar now stay on the same whole-export scale instead of resetting per fragment.修复导出进度逐分片重置——状态百分比与进度条现保持在整个导出规模的尺度上,而非逐分片重置。
- Fixed playhead not visible during playback — added auto-follow scroll to keep the playhead visible, and removed the old auto-scroll that pinned the playhead to the viewport.修复播放时播放头不可见——新增自动跟随滚动以保持播放头可见,并移除了将播放头固定在视口的旧自动滚动。
- Fixed MIDI note bars disappearing when fragment is dragged to another singer — note bars now remain visible across singer reassignment.修复分片拖拽到另一歌手时 MIDI 音符条消失——音符条在歌手重新分配后保持可见。
- Fixed timeline UI not refreshing after importing accompaniment audio.修复导入伴奏音频后时间线界面不刷新。
- Fixed cfg=0 not skipping unconditional prediction — JavaScript's falsy-0 semantics made an explicit
cfg=0fall back to the default CFG strength, silently doubling inference time. Now uses an explicit!== undefinedcheck.修复cfg=0 未跳过无条件预测——JavaScript 的 falsy-0 语义使显式cfg=0回退到默认 CFG 强度,静默倍增推理时间。现改用显式!== undefined检查。 - Fixed WebNN tensor leak on partial encoder failure — replaced
Promise.allwithPromise.allSettledfor parallel encoders so resolved output tensors are disposed on partial failure. Wrapped preflow/condEmb and vocoder input/output tensors in try/finally.修复WebNN 编码器部分失败时张量泄漏——将并行编码器的Promise.all替换为Promise.allSettled,使部分失败时已解析的输出张量也能被释放。preflow/condEmb 与声码器输入/输出张量均包裹在 try/finally 中。 - Fixed audio pitch/speed distortion when device sample rate differs from 24 kHz — added linear resampling with
sourceSampleRateto the audio worker and native playback path.修复设备采样率与 24 kHz 不同时音频变调/变速——在 audio worker 与原生播放路径中新增带sourceSampleRate的线性重采样。 - Fixed misleading WASAPI exclusive mode labels — corrected labels to "native low-latency mode (decibri)" and fixed descriptions to match actual shared-mode backend behavior.修复WASAPI 独占模式标签误导——将标签更正为"原生低延迟模式 (decibri)",并修正描述以匹配实际的共享模式后端行为。
- Fixed vibrato F0 formula mismatch between the main timeline and the fragment editor — both now use the same additive modulation formula.修复主时间线与分片编辑器之间颤音 F0 公式不一致——两者现使用相同的叠加调制公式。
- Fixed pause button not resuming playback — the pause button now toggles between pause and resume.修复暂停按钮无法恢复播放——暂停按钮现可在暂停与恢复之间切换。
- Fixed long-fragment freeze from pitch curve analysis — eliminated O(steps × n²) computation via caching and binary search.修复音高曲线分析导致的长分片卡顿——通过缓存与二分查找消除了 O(steps × n²) 计算。
Security 安全
- Path validation for model file reads — WebNN model file reads now validate paths via
isPathAllowed+isSystemPath+.onnxsuffix + 2 GB size cap.模型文件读取路径校验——WebNN 模型文件读取现通过isPathAllowed+isSystemPath+.onnx后缀 + 2 GB 大小上限进行路径校验。 - Prefix confusion prevention —
isPathAllowednow usespath.sepsuffix matching so/home/userno longer matches/home/userevil.前缀混淆防护——isPathAllowed现使用path.sep后缀匹配,使/home/user不再匹配/home/userevil。 - Singer file write validation —
saveSingerFileenforcesisPathAllowedbefore writing.歌手文件写入校验——saveSingerFile在写入前强制执行isPathAllowed校验。 - Update installer confinement — the update installer is confined to
UPDATE_TMP_DIR; download URLs are validated against a GitHub host whitelist; all redirect hops are validated againstALLOWED_DOWNLOAD_HOSTS;http://plaintext downloads are rejected.更新安装程序隔离——更新安装程序被限制在UPDATE_TMP_DIR目录;下载 URL 经 GitHub 主机白名单校验;所有重定向跳转经ALLOWED_DOWNLOAD_HOSTS校验;拒绝http://明文下载。 - Downloaded model verification — downloaded ONNX models are verified by a size + hash framework.下载模型校验——下载的 ONNX 模型通过大小 + 哈希框架进行校验。
- Settings trust boundary —
normalizeSettings()applies enum whitelist + numeric range + structural validation at disk load and IPC save paths.设置信任边界——normalizeSettings()在磁盘加载与 IPC 保存路径上应用枚举白名单 + 数值范围 + 结构校验。 - Shell folder reveal hardened —
shell:showItemInFolderno longer auto-authorizes untrusted paths.Shell 文件夹展示加固——shell:showItemInFolder不再自动授权不可信路径。
Documentation 文档
- Added a new Note Effects: Vibrato & Fade section to the Fragment Editor guide, documenting the right-click note menu, all vibrato/fade parameters, presets, visual indicators, and compatibility with pitch curves.分片编辑器指南新增音符效果:颤音与渐强渐弱章节,文档化右键音符菜单、所有颤音 / 渐变参数、预设、视觉指示以及与音高曲线的兼容性。
- Added Singer Files Documentation covering the
.sxssingerfile format, creation workflow, and compatibility.新增歌手文件文档,涵盖.sxssinger文件格式、创建流程与兼容性。 - Split Singer Market terms into standalone EN (legally controlling) and ZH (reference translation) pages with cross-links, and added a footer link from the homepage.将歌手市场使用条款拆分为独立的英文(法律控制版本)与中文(参考翻译)页面并交叉链接,首页页脚新增入口。
- Documented switchable diffusion samplers (Euler / Heun / Extrapolated Euler / STORK-2) across user, developer, and wiki docs, including NFE/step, chunked-inference caveats, and the export dialog sampler override.在用户、开发者与 wiki 文档中全面文档化可切换扩散采样器(Euler / Heun / 外推 Euler / STORK-2),包括 NFE/步、分块推理注意事项与导出对话框采样器覆盖。
- Corrected the Kanji Settings access path: right-clicking a note body now opens the note context menu; the Kanji Settings menu is reached by right-clicking the group bracket/label, or via the Kanji Settings button inside the note menu.更正汉字设置入口:右键音符本体现打开音符右键菜单;汉字设置菜单通过右键分组连接线 / 标签进入,或在音符菜单内点击汉字设置按钮进入。
- Documented the Auto Shift checkbox in the Fragment Editor toolbar.补充文档化分片编辑器工具栏中的 Auto Shift 复选框。
- Added a Remotion-based introduction video project for SXSEditor with four scenes (title, key features, workflow, closing).新增基于 Remotion 的 SXSEditor 介绍视频项目,包含四个场景(标题、核心功能、工作流、结尾)。
v1.0.8 v1.0.8
New Features 新功能
- Draggable playhead with seek — the playhead on the main page, audio preprocess page, and fragment editor can now be dragged to any position to start playback from there. A tooltip shows the current time while dragging, and playback resumes from the dropped position using cached audio when possible.可拖拽播放头跳转——主页面、音频预处理页面与分片编辑器的播放头现可拖拽到任意位置开始播放。拖拽时显示当前时间提示,松开后尽可能复用缓存音频从该位置继续播放。
- diffStep chunked inference for faster preview — a new diffStep chunked inference setting splits the diffusion loop into chunks so audio can be streamed per chunk during preview, dramatically reducing time-to-first-audio for long fragments.diffStep 分块推理加速预览——新增「diffStep 分块推理」设置,将扩散循环切分为多个 chunk,预览时可按 chunk 流式推送音频,大幅缩短长分片的首音到达时间。
- Time-ordered multi-fragment streaming for Play All — Play All now interleaves inference chunks across all fragments in global time order, so multiple fragments are synthesized and played back as one continuous timeline instead of sequentially.Play All 多分片时间顺序流式播放——Play All 现按全局时间顺序在所有分片间交错推理 chunk,多个分片作为一条连续时间线合成与播放,而非顺序逐个处理。
- Per-chunk audio streaming via onChunkMel — the preview path now streams audio per diffusion chunk through a new
onChunkMelcallback, enabling true streaming synthesis instead of waiting for the entire diffusion loop to finish.通过 onChunkMel 按 chunk 流式推送音频——预览路径现通过新的onChunkMel回调按 diffusion chunk 流式推送音频,实现真正的流式合成,无需等待整个扩散循环完成。 - Comprehensive Japanese pronunciation optimization — Japanese pronunciation has been comprehensively tuned. The default Japanese vocalization mode is now Hybrid Phonemes, and the hybrid mode now also covers Cantonese
yue_phonemes.日语发音全面优化——日语发音已全面调校。默认日语发声方式改为「混合音素」,混合模式还新增粤语yue_音素覆盖。 - Expanded kanji dictionary to all 2136 Jōyō kanji — the Japanese g2p kanji dictionary now covers all 2136 commonly-used kanji, greatly reducing the chance of unresolved kanji in Japanese lyrics.汉字字典扩展至全部 2136 个常用汉字——日语 g2p 汉字字典现覆盖全部 2136 个常用汉字,大幅降低日语歌词中出现未解析汉字的概率。
- MIDI import BPM / time signature sync prompt — when importing a MIDI file, SXSEditor now asks whether to sync the project's BPM and time signature from the file, instead of always silently applying them.MIDI 导入 BPM / 拍号同步提示——导入 MIDI 文件时,SXSEditor 现会询问是否从文件同步项目的 BPM 与拍号,而非始终静默应用。
- ORT session options exposed as settings — advanced ONNX Runtime session options are now user-configurable in Settings, letting power users tune execution providers and thread counts.ORT session 选项开放为设置——高级 ONNX Runtime session 选项现可在设置中由用户配置,便于进阶用户调校执行提供器与线程数。
- Model status overview in Settings — a new model status overview section in Settings shows installed precisions and versions at a glance, and refreshes after settings load to reflect the active precision.设置页模型状态总览——设置页新增模型状态总览分区,一目了然显示已安装精度与版本;设置加载后会刷新以反映当前生效精度。
- Base model precision separated from diffusion models — base model precision is now configured independently from diffusion models, so a single base precision can be reused across multiple diffusion model precisions.基础模型精度与扩散模型分离——基础模型精度现与扩散模型独立配置,单个基础精度可被多个扩散模型精度复用。
- Rebuilt landing page — the official website's landing page was rebuilt with a new template, bilingual CN/EN support, and a Chinese 洛天依 demo audio.官网首页重建——官网首页已基于新模板重建,支持中英双语并提供中文洛天依演示音频。
Performance 性能优化
- Startup optimization v2 — heavy modules are now deferred until after the splash window paints, the
app:getVersionregression is fixed, audio / model / update IPC is deferred, and unused Chromium features (spellcheck, etc.) are disabled for faster cold start.启动优化 v2——重型模块推迟到 splash 窗口绘制完成后再加载,修复了app:getVersion回归,音频 / 模型 / 更新 IPC 推迟初始化,并禁用了未使用的 Chromium 特性(拼写检查等)以加速冷启动。 - Inline SVG splash for instant first paint — the splash screen SVG is now inlined into
splash.htmlfor an instant first paint instead of waiting for an external file.Splash SVG 内联首帧即时绘制——启动画面 SVG 现内联到splash.html中,首帧即时绘制,无需等待外部文件加载。 - Long-fragment playhead drag & fragment move lag fixed — playhead dragging on long fragments and moving fragments on the timeline are now smooth, eliminating the previous lag.长分片播放头拖拽与分片移动卡顿修复——长分片上的播放头拖拽与时间线上的分片移动现已流畅,消除了之前的卡顿。
Bug Fixes 缺陷修复
- Fixed vocal audio playing earlier than MIDI notes — vocals were starting at the fragment's start position instead of the first note's position within the fragment, causing a visible offset between MIDI notes and audio. All playback / export paths (streaming Play All, non-streaming Play All, fragment editor playback, fragment export, and full-project export) are now aligned with MIDI note positions.修复歌声比 MIDI 音符更早出现——歌声此前从分片起点开始播放,而非分片内首个音符的位置,导致 MIDI 音符与音频之间出现明显偏移。所有播放 / 导出路径(流式 Play All、非流式 Play All、分片编辑器播放、分片导出、整项目导出)现均与 MIDI 音符位置对齐。
- Fixed segmented streaming playback incompleteness — late-arriving chunks were previously scheduled at wrong times, causing playback to end prematurely. A new "waiting for inference" UI now pauses the playhead at the buffer frontier until the next chunk arrives.修复分段流式播放不完整——此前延迟到达的 chunk 被错误调度,导致播放提前结束。新增「等待推理」UI 会在缓冲前沿暂停播放头,直到下一个 chunk 到达。
- Fixed comprehensive chunked streaming inference issues — multiple issues in the chunked streaming inference path are resolved, making streaming preview reliable across fragment boundaries.修复流式分块推理的多个问题——流式分块推理路径中的多个问题已解决,流式预览在分片边界处也能可靠工作。
- Fixed playhead jumping back to start after dragging near the end — dragging the playhead close to the end of a fragment no longer snaps it back to position 0.修复播放头拖拽到末尾后跳回起点——将播放头拖到分片末尾附近时不再跳回 0 位置。
- Fixed playhead not animating on streaming chunk arrival in the fragment editor — the playhead rAF loop is now started when the first streaming chunk arrives, so the canvas redraws and the playhead moves during streaming playback.修复分片编辑器流式 chunk 到达时播放头不动——首个流式 chunk 到达时即启动播放头 rAF 循环,流式播放期间画布会重绘、播放头会移动。
- Fixed preprocess playhead sticking to the view on scroll / zoom — the preprocess playhead no longer follows the viewport on scroll / zoom; scrollbars were added and the minimum zoom was lowered for better navigation.修复预处理播放头在滚动 / 缩放时跟随视图——预处理播放头不再在滚动 / 缩放时跟随视口;新增滚动条并降低了最小缩放比例,便于导航。
- Fixed track-level lyrics dropped by @tonejs/midi — track-level lyrics that were previously lost during MIDI import are now restored.修复@tonejs/midi 丢弃轨道级歌词——此前 MIDI 导入时丢失的轨道级歌词现已恢复。
- Fixed FP16 / FP32 input type mismatch — the inference pipeline now auto-retries with corrected dummy inputs when an FP16 / FP32 input type mismatch is detected, instead of failing the synthesis outright.修复FP16 / FP32 输入类型不匹配——推理管道在检测到 FP16 / FP32 输入类型不匹配时会自动用修正后的 dummy inputs 重试,而非直接合成失败。
- Fixed model overview precision race after settings load — the model status overview now refreshes after settings are loaded, so it correctly reflects the active precision instead of a stale one.修复设置加载后模型总览精度竞态——模型状态总览现会在设置加载完成后刷新,正确反映当前生效精度而非过期值。
Security 安全
- Scrubbed ModelScope credentials from git history — any accidentally committed ModelScope credentials were scrubbed from git history, and safeguards were added to prevent future leaks.清除 git 历史中的 ModelScope 凭据——已从 git 历史中清除误提交的 ModelScope 凭据,并新增防护以防止未来再次泄漏。
v1.0.6 v1.0.6
Bug Fixes 缺陷修复
- Fixed model download percentage overflow — progress percentages are now clamped to [0, 100] to prevent values exceeding 100% during download.修复模型下载百分比溢出——进度百分比现在限制在 [0, 100] 范围内,防止下载过程中超过 100%。
- Fixed inaccurate remote file size detection — switched from HEAD requests (which return 404 on ModelScope CDN) to
Range: bytes=0-0requests that return the correct file size via theContent-Rangeheader.修复远程文件大小检测不准确——从 HEAD 请求(在 ModelScope CDN 上返回 404)改为Range: bytes=0-0请求,通过Content-Range头返回正确的文件大小。 - Fixed file size display anomalies caused by floating-point precision errors in
formatBytes— switched toMath.log2for accurate unit selection.修复formatBytes中浮点精度误差导致的文件大小显示异常——改用Math.log2进行准确的单位选择。 - Fixed SiFiGAN download progress resetting to 0 for each file — progress is now accumulated across all files in the download batch.修复SiFiGAN 下载进度每个文件重置为 0——进度现在在下载批次的所有文件中累计。
v1.0.5 v1.0.5
New Features 新功能
- Japanese support (experimental) — initial experimental support for Japanese vocals, with kanji / kana auto-grouping in the fragment editor and a hybrid phoneme mode that improves Japanese pronunciation on the base multilingual model.日语支持(实验性)——首次实验性支持日语人声,分片编辑器中提供汉字 / 假名自动分组,以及混合音素模式在基础多语言模型上改善日语发音。
- Fragment selection & deletion — fragments on the timeline can be selected with a click; press Delete or use the right-click context menu to remove them.片段选择与删除——时间线上的片段可点击选中;按 Delete 或右键菜单可删除。
- ACG default theme & UI overhaul — comprehensive UI optimization with the ACG theme as the new default.ACG 默认主题与界面重构——全面 UI 优化,ACG 主题成为新的默认主题。
- Right-click pitch smoothing control — right-click a pitch anchor point to tune its smoothing strength individually.右键音高平滑度控制——右键点击音高锚点可单独调整其平滑强度。
- Export dialog with precision selection — a dedicated export dialog lets you pick precision and shows per-file progress.带精度选择的导出对话框——专用导出对话框可挑选精度并显示每个文件的进度。
- Singer Creator toolbar Save button — a dedicated Save button is now available in the Singer Creator toolbar.歌手创建器工具栏保存按钮——歌手创建器工具栏新增专用 Save 按钮。
- Window popup animations & timeline scroll swap — windows now open with a popup animation; the timeline scroll direction was swapped to match user expectations.窗口弹出动效与时间线滚动方向调整——窗口打开时增加弹出动效;时间线滚动方向已调整以符合用户预期。
- Per-precision model version tracking — each precision (FP32 / FP16 / INT8 / INT8-NPU) now has its own version metadata; switching precisions no longer invalidates unrelated cache entries.按精度模型版本追踪——每种精度(FP32 / FP16 / INT8 / INT8-NPU)现在拥有独立的版本元数据;切换精度不再使无关缓存条目失效。
- In-app update checker for app & models — a new Update section in Settings checks both the application build (via GitHub Releases, selectable nightly / release channel) and installed models (main / JP / SiFiGAN) for new versions. On startup it auto-checks at most once every 24h and, when an update is found, pops a dedicated notification window with Update now (opens the installer / model download), Skip this version, and Don't remind me actions; a manual Check now button is also available.应用与模型应用内更新检查——设置页新增「更新」分区,同时检查应用本体(通过 GitHub Releases,可选 nightly / release 频道)与已安装模型(main / JP / SiFiGAN)的新版本。启动时每 24 小时至多自动检查一次,发现更新时弹出专用提示窗口,提供「立即更新」(打开安装包 / 模型下载)、「跳过本次更新」、「不再提醒」操作;同时提供手动「立即检查更新」按钮。
- Animated custom checkboxes — native checkboxes are replaced with animated custom checkboxes across settings dialogs.动画自定义复选框——设置对话框中的原生复选框已替换为带动画的自定义复选框。
- Kanji / kana auto-grouping in fragment editor — when a fragment already contains Japanese kana, any kanji in the same fragment is automatically treated as Japanese and split into ordered kana notes. A connecting bracket with the kanji label is drawn above the group. Right-click the bracket, label, or any kana in the group to toggle the whole group between Chinese (single kanji note) and Japanese (kana group). Kana notes can be moved in pitch and time, but cannot be deleted individually — deleting any kana removes the entire group. New notes cannot be inserted inside a group's time span.分片编辑器汉字 / 假名自动分组——当分片中已存在日语假名时,同一分片内的所有汉字会被自动识别为日语并按顺序切分为假名音符。分组上方绘制带汉字标签的连接线。右键点击连接线、标签或分组内任一假名,可将整个分组在中文(单个汉字音符)与日语(假名分组)之间切换。假名音符允许音高与时间移动,但不允许单独删除——删除任一假名即删除整个分组。分组时间范围内也不允许插入新音符。
- Hybrid Japanese phoneme mode — a new Hybrid Phonemes option in Settings → Japanese Vocalization improves Japanese pronunciation on the base multilingual model: ら-row uses ARPAbet L (acoustically closer to the Japanese tap /ɾ/ than R /ɹ/), お-column uses AO (a pure vowel, not the OW diphthong /oʊ/). No extra model download required; fully compatible with the per-note phoneme boundary editor.混合日语音素模式——设置 → 日语发声方式中新增 混合音素 选项,在基础多语言模型上改进日语发音:ら行使用 ARPAbet L(比 R /ɹ/ 更接近日语弹音 /ɾ/),お段使用 AO(纯元音,非双元音 OW /oʊ/)。无需额外下载模型;完全兼容逐音符音素边界编辑器。
- Bilingual documentation website — the official website now ships bilingual EN / 中文 docs with automatic language switching.双语文档官网——官网现提供 EN / 中文 双语文档,支持自动语言切换。
Bug Fixes 缺陷修复
- Fixed the pitch-brush Smoothing slider having no effect; pitch curves now respect the slider value.修复了画笔平滑滑块无效的问题;音高曲线现在会按滑块值平滑。
- Fixed missing modules in the packaged build.修复了打包构建缺失模块的问题。
- Fixed lyrics entered inline not refreshing the note display until the next click.修复了内联输入的歌词不刷新音符显示(直到下次点击才刷新)的问题。
- Fixed the Singer Creator preview playhead drifting out of sync with audible audio playback.修复了歌手创建器预览游标与音频播放不同步(漂移)的问题。
- Fixed the synthesis cache not invalidating on singer switch by including
singerIdin the cache key.修复了切换歌手时合成缓存未失效的问题——将singerId加入缓存键。 - Added fallback paths and debug logging for
phone_set.jsonloading.为phone_set.json加载新增回退路径与调试日志。