封面

feat(visualizer): 添加持久保存的手动随机样式- #601 #601

2026-10-13 19:34:26
✨ 心情:激动

第一次提pr,不知道能过不过的了。
位置:feat(visualizer): 添加持久保存的手动随机样式 by DuXingXY · Pull Request #601 · chthollyphile/folia-major

做了什么

  • 新增「随机样式」按钮,随机选择歌词动画及其参数。

  • 新增「全随机开关」:关闭时只随机歌词样式和动画参数;开启后也随机字体、背景等外观设置,保留字幕相关配置。

问题与行为

实现与社区插件ai自动调整歌词动画参数不同的功能,此功能可以逐项调整不便于尝试新的外观,来达到类似于抽卡的效果,解决歌词动画设置复杂而又无从下手的困境从而替你做出选择。本 PR 增加一次性的「随机样式」动作:默认只随机歌词动画模式及参数,开启「全随机」后才同时随机通用外观和独立背景设置。

点击按钮后,结果通过现有设置 setter 持久保存;切歌、暂停和重启继续沿用,直到再次点击随机、手动修改指定设置或应用其他外观配置。手动修改只更新指定字段。操作会关闭现有「每首歌随机歌词动画」选项,防止下一首覆盖刚生成的结果。

实现范围

  • 播放器外观区、外观设置和歌词调参台共用范围开关与随机按钮,命令面板提供相同动作。调参台先提交正在编辑的滑块草稿再随机。

  • 范围开关默认关闭;单独切换范围不改变外观。偏好接入已有 JSON、短码、OBS 外观配置和设置同步,旧配置缺少该字段时保留当前值。

  • 候选模式来自实时 registry,遵循减少动态效果与壁纸模式偏好,并在存在其他兼容模式时避免重复当前模式。

  • 字幕设置、已有上传字体和图片内容、URL 列表保持;全部随机只改变外观参数和已有资源选择,自定义字体元数据及文件保留。

验证

使用 Node 24.14.1 / Chromium 完成验证:

  • Windows:本地验证通过。

  • Linux(Ubuntu 24.04 x64):GitHub Actions 验证通过。

  • macOS 26.6 arm64:GitHub Actions 验证通过。

三个平台均通过:

  • npm run typecheck。

  • 核心随机、命令注册/契约和视觉配置导入导出:4 个测试文件,121 项单测。

  • test/component/manualRandomStyle.spec.ts:6 项浏览器回归,覆盖两种随机范围、切歌/暂停后保持结果、再次随机、单字段修改、重载恢复和真实歌词预览入口。

本地完整 diff 经工具辅助审查,发现的导入确认字段名称遗漏已修正git diff --check 通过。

[Linux / macOS 验证记录](https://github.com/DuXingXY/folia-dx/actions/runs/38382603077),测试源码固定为本 PR 提交 550a65a3。

上述验证针对本次差异,未运行全量单测或正式打包。Linux/macOS 的 Electron 原生窗口、桌面歌词和壁纸集成尚需实机验证。

后续 PR

本 PR 作为系列第一项,仅建立手动随机及其配置接入。后续计划提交:

收藏预设与命名:保存当前外观、应用/删除收藏、行内重命名及收藏备份;复用本 PR 的外观基础。

该后续 PR 将在本 PR 合并后基于最新主线整理和验证,保持低于建议规模。