Skip to content

v1 版本路线图 ​

本页记录从已发布的 v0.9.9 基线迈向 LWE v1 的维护中开发方向。发布后请删除或折叠过时版本小节;当产品范围、已验证运行时支持或发布优先级变化时,应同步更新本页。

v1 目标 ​

LWE v1 应成为可信赖的 Linux Wallpaper Engine 迁移应用,而不是宣称广泛运行时兼容的产品。

v1 目标包括:

  • 基于 Tauri 2 和 SvelteKit 的 Linux 桌面应用;
  • 由 Rust 后端负责 Workshop、Library、Desktop、Settings、兼容性、持久化和运行时集成服务;
  • 以 Wallpaper Engine 创意工坊内容作为主要内容来源;
  • 视频类壁纸是主要运行时目标;
  • 场景类壁纸逐项验证,原生 2D 子集可实验性播放;未知特性或无效资源会阻断应用;
  • 网页类壁纸可用于元数据识别和兼容性报告,尚无播放后端;
  • Wayland + niri 是已验证桌面目标;
  • 英文和简体中文用户可见文档与文案持续维护。

版本序列 ​

版本主题主要结果
v0.7.0支持矩阵锁定产品事实保持一致并有测试覆盖。
v0.8.0运行时强化视频应用、清除和恢复在 niri 上可靠工作。
v0.8.5Library 工作流强化日常 Library 工作流安全且清晰。
v0.9.0Workshop 清晰度发现和 Steam 同步预期诚实明确。
v0.9.5诊断与发布准备支持能力和发布姿态准备就绪。
v0.9.6预览性能已发布:Library 和 Workshop 卡片网格使用受控缩略图资源,而不是原始预览媒体。
v0.9.7Workshop 浏览打磨已发布:Workshop 导航、缓存搜索恢复和少量结果布局更流畅。
v0.9.8后台功耗画像已发布:运行时和后台刷新减少不必要工作,复用热快照,并暴露轻量快照来源诊断。
v0.9.9Wayland 能力基础设施已发布:由 Wayland 协议能力决定动态壁纸是否可用;缺少必要协议时优雅降级。
v0.9.10AppImage 打包修复固定 CLI/工具链并在发布前验证。
当前开发实验性原生 2D Scene本地资源验证、范围有限的渲染器与逐项播放门控。
v1.0.0-rc.1首个候选版范围冻结并完成端到端验证。
v1.0.0-rc.2可选阻塞修复候选版仅在 rc.1 发现发布阻塞问题时使用。
v1.0.0稳定 v1诚实、可靠、视频优先的稳定版。

当前开发:实验性原生 2D Scene ​

原生场景路径读取已验证版本的场景包和未打包项目资源,定位本机原版 Wallpaper Engine 资源,在应用前准备纹理和着色器。兼容性报告和播放共用 PreparedScene::prepare 门控。缓存报告仅保留摘要,实际应用会重新验证当前资源。

当前子集包含固定正交图片层与受限共面 perspective 路径、受支持材质/特效、sprite/rope 粒子及事件子系统、四 pass LDR 泛光和单条 FLAC 循环图层。单图片 TEXS0002 粒子图集现保留序列/随机帧选择与序列帧插值;有界平面湍流、透明度/尺寸振荡和角运动已实现。Bool/slider/color/combo 选择及 combo 条件可见性共用校验与分配原子持久化。下文 Miku 路径增加空默认图片属性、有界 BC3 动画帧区域、私有历史及受限文字/字体渲染。纯标量脚本保留 CPU 路径,另一条有界 worker 添加限定的动态图片/音频生命周期。Fullscreen/passthrough 输入、genericimage2 0/30/31 模式与真实十六档立体声 uniform 保留已验收的 2.5D Space 路径,动态脚本消费真实 64 档 average 音频。活动/倾斜相机、parent 绑定、更广泛脚本/宿主 API、未知包装/组件、更广文字/动画形状、3D/骨骼层、多图片 TEXS、视频纹理及 HDR 继续阻断。准备成功仅允许实验性尝试;共面 perspective 映射、原引擎视觉/FFT/噪声一致性和日用就绪仍未验证。

验收记录须注明桌面、GPU、壁纸特性和真实显示器数量,检查反复应用/清除、Scene ↔ Video 切换及已保存分配恢复。多显示器隔离需要真实多显示器硬件。Wayland 与 niri 上的视频仍是主要运行时目标。2026-10-09 Scene 记录覆盖单显示器上的 3337606455,并保留当时 3258032485 的相机阻断;2026-10-10 开发记录单独追踪新版本。原引擎视觉 A/B 尚未执行。

当前 P0 API SceneInventory::collect 观察已建模的静态引用、包内 JSON/TEX/着色器与项目元数据、资源来源、可达与仅存在于包内的声明、纹理结构、粒子/骨骼/parent 声明及结构未知项。它把 user/value 绑定与 JS 分开,也把 HDR 与 bloom 分开。每次遍历都受资源/文档/着色器、节点/深度、报告、mip 与动画帧总预算限制;资源结构循环在分配前消耗剩余预算。预算耗尽或资源失败会形成部分报告,不产生“已支持”结论。脚本/着色器/文字正文和私有标量值不导出,未知或文字子树中看似资源的字符串也省略。PKG 范围读取与指纹使用已索引的同一 descriptor 并核验元数据一致性,不宣称文件系统不可变快照。

最终 scene-inventory-p0.json 覆盖 11 项(2,695,798 字节),11 个 PKG 的 SHA-256 均匹配基线。可达声明包括五个项目中的 31 处 JS、五个项目中的 20 处 puppet,三个项目存在层级声明。资源检查通过 18 个测试和 clippy,独立复核无剩余隐私/预算/指纹阻断。这些声明数量不计为已迁移项目。

P1 已实现的部分按每输出截止时间限帧,停止稳定静态/暂停时的 draw/swap/frame-callback 循环,并把当前/候选/回滚 Scene 资源计入引擎总计 512 MiB 的逻辑 RGBA 纹理/FBO/粒子 VBO 预算。临时、命名特效和泛光目标均计入,驱动开销、EGL 缓冲和视频资源除外。EGL 生命周期清理及单次初始视频加载已实现。可持久化并实时接入的 FPS/电池控制通过隔离 15 → 30 FPS 桌面服务测试,每秒约 14.70 → 29.60 次完成 swap,后端和分配未替换;有限原生 Settings/保存/重启和中文布局检查也通过。实际电池/交流电转换、VRAM/功耗、24 小时运行、十次真实休眠恢复、安装包及独立多显示器验收仍未完成。

后续目标:场景壁纸可以日常正常使用 ​

以完整壁纸和普通桌面操作衡量进展。成功解码纹理、编译着色器、收到 IPC 成功响应或渲染第一帧都不足以通过验收。合格的壁纸应正确显示原有图层与动态效果,提供受支持的属性设置,经历正常桌面生命周期后仍可用,并在失败时保留上次保存的分配。

首批迁移样本为本地已检查的 11 个 Scene 项目。2026-10-09 的门控通过一个项目,并报告十个首项阻断:六个脚本/绑定、三个相机和一个 HDR。这些历史首项阻断不代表完整依赖清单,也不是本次扩展后的兼容数量。当时检查的 291 个 TEX 中有 286 个成功解码,剩余五个涉及 TEXS/视频。P0 有界 inventory 现会独立报告更多声明与未知项,不判定播放资格。以上历史比例都不能用于估计整个 Workshop 的兼容率。

历史 2026-10-10 只读 CPU 门控复跑通过 3258032485、3337606455 和 3659880761(3/11),八项首项阻断为:3232289987、3241857956、3420277613、3578699777、3718622170 的 SceneScript,2798622011 的相机,2454418355 的 HDR,以及 3485147659 的图层数量上限。11 个原包哈希均与 P0 一致。复用已记录的 scene_prepare 编译产物,没有构建或启动桌面。3659880761 原始包准备出 7 个渲染图层、5 个特效和 21 个 pass,默认 engine-only 桌面 Probe 另行记录。此前 2/11 和泛光阻断属于历史快照;3/11 本地 CPU 结果不是 Workshop 兼容率、完整依赖列表、原生 UI 或日用验收。

初始项目决定实施顺序的已知依赖
3337606455Shine 基线;2026-10-10 已通过完整原生鼠标 Tauri UI/关闭隐藏/重启恢复/清除验收,原版对照与日用验收仍待完成。
3258032485Shake;原版二进制证据确认了受限静态正交相机重置,2026-10-10 完整原生鼠标 UI/关闭隐藏/重启恢复/清除流程通过。原引擎视觉 A/B 与日用验收仍待完成。
3659880761无 JavaScript 或骨骼。默认播放为 6 个可见粒子根系统加 5 个子系统、WaterRipple/Shake/Iris、LDR 泛光及两条作者配置的单 FLAC 循环层。第七个 Reactive 根系统为字面量 visible:false,保持隐藏,启用音频分析仍阻断。原始包准备、有限 engine-only Probe,以及默认原生 UI 应用/Running/隐藏/重启/恢复/清除和 Settings 15 → 30 FPS 流程通过,英/中文截图已人工复核。原生属性事务和十二秒自有全屏恢复已通过;遮挡 callback/暂停未测量,原版 A/B、真实休眠/锁屏和日用验收仍待完成。
3241857956、3420277613、3718622170脚本/文字等各项目依赖;3718622170 还需视频/动态资源。选第一张脚本项目前须检查完整依赖图。
2454418355、2798622011、3232289987、3485147659、3578699777模型 JSON 中实际包含 puppet 引用,此外还各有相机/特效/粒子/音频/脚本依赖。这些项目需要骨骼路径;仅凭该引用不能判定为真正 3D 内容。

创意工坊验收目标 ​

实现目标是让 Steam 创意工坊的原始 Scene 项目走通真实 LWE Library 与 Desktop 流程。内置项目用于集中检查材质和渲染器,它们播放成功不能替代工坊验收。新增支持须进入共用的包读取、准备和运行时路径,不按壁纸 ID 写专用分支。完整样本须保留所需图层、动画、音频与交互;省略不支持的行为或把 Scene 换成录制视频不算适配完成。

下一组发现样本包含四个具有不同高级依赖的公开 Scene 项目。2026-10-10 已通过现有正版 Steam 会话取得全部原包,先收到下载完成回调,再核验实际文件。十二个原始文件合计 144,299,366 字节,SHA-256 与私有副本一致,验证期间源文件稳定;订阅集合未变。下载内容及着色器/脚本正文保持在 Git 之外。原有十一项保持为独立、固定的基线样本集。2.5D Space 首先通过有限真实引擎和原生 LWE UI 验收(当时本组 1/4),保留原始图层与特效。当时 Yakuza、Predator 和 Disbelief Y 首项阻断于更广泛的 SceneScript 要求。当前 Yakuza 扩展已通过有限原始项目 CPU/GPU 与原生 UI 检查,另通过真实私有输出采集/FFT/脚本/离屏 GPU 音频检查;Predator 与 Disbelief Y 继续超出有界子集。这些本地结果不能估计整个 Workshop 的兼容率。

工坊项目选样目的
Yakuza Audio Responsive(2228594093)作者明确说明的 SceneScript 音频条与可配置控件。
2.5D Space(2903458386)六层滚动图像、音频脉冲/色差与泛光;描述不能证明使用真实 3D 模型。
Predator(3143988185)Puppet Warp、音频响应与 4K 资源压力。
Disbelief Y(3407827570)精灵表素材、文字/时钟、音频条和可拖动媒体控件;精灵表素材不等于已确认 TEXS 编码。

下载完成、原始文件哈希、有界依赖清单及准备阻塞分别记录,与播放验收区分。每个项目最终须通过 LWE 核验实际画面、作者控件、暂停恢复、替换清除和持久化后的重启恢复;所需音频与交互单独检查。构建通过、静态清单完成或仅显示第一帧不能完成这个目标。

首个已获取样本 Yakuza 暴露了较旧的 PKGV0009 包。完整 30 项目录及负载范围符合现有有界目录结构;25 项 JSON 与五项纹理头均在不改变原始字节的条件下完成检查。读取器现在用相同的路径、范围、重叠和大小校验接纳这一已核验版本,并加入畸形输入回归;其他未核验版本仍拒绝。该快照中准备阻塞从包结构推进到 SceneScript,当前扩展另记录于下文。静态检查发现 64 档音频注册与动态创建图片层,因此不能用十一项作者对象推定实际运行图层数或开销。这是读取与依赖证据,不是播放支持。

Space 完成了 PKGV0018 目录结构核验,包含 49 项、28 个 JSON 文档及九项纹理头;这一精确版本复用读取器校验与畸形输入回归。目前它也通过共用的准备/运行时路径。包结构核验本身仍不能判断播放资格。

**2.5D Space 是本组新增工坊样本中首个完成完整路径的项目:**未修改的原包保留十个图片图层、十一个特效和二十四个 pass,包括八个 Scroll 实例、音频 Pulse/色差,以及四 pass 自定义泛光。通用泛光、HDR 与相机运动默认关闭,项目自定义泛光则保持启用。十四段原始脚本通过七十个数值属性用例,十二个原始着色器程序以 GL 130 链接成功,真实立体声 monitor 采集通过暂停/恢复与清理检查。全部二十个控件的真实编辑、保存失败回滚/重试、新进程恢复、重置、Settings 与有限全屏恢复也通过。最终有限引擎 Probe 在 30 FPS 上限下约 27.25 swap/s,暂停期间 draw/swap/callback 均为零并成功恢复。已通过的二十六项 GPU 像素比较及单独核实的音频到画面流程在 Space 记录中单独追踪;Windows 视觉/FFT 一致性与 P1 长时间运行仍未完成。Yakuza 动态图片/音频子集现已有有限 CPU/GPU/原生 UI 验收,另通过真实私有输出采集/FFT/脚本/离屏 GPU 音频检查;当前 Miku 帧/历史工作另记于下文。

Predator 作为后续变形与资源目标:81 个对象、29 个布偶模型引用、67 个特效实例、可达动画纹理共 152 帧,以及 MP3 播放列表和音频脚本。Disbelief Y 覆盖文字/字体、层级、光标拖动、媒体事件及 38 段脚本;其已检查纹理没有 TEXS,因此仅实现动画纹理也不能使它正常工作。静态发现有边界:内置纹理的未知结构、不透明动态行为及未解释字段仍在私有报告中明确保留,不能据此证明语义已穷尽。

区分四个里程碑:

  • 开发进展:一张真实壁纸取得正确、完整的播放能力,并增加回归样本。
  • 首个本机日用里程碑:3337606455、3258032485、3659880761 在当前单输出 niri/680M 机器上通过画面对照、真实界面、长期运行、功耗与恢复验收。P3 后即可达到,不必等待骨骼支持或其他硬件。
  • 扩展 2D 候选版:明确声明的能力范围与更大的固定样本集通过下文验收。扩大显示器/GPU 支持声明时补对应硬件证据。
  • 首批迁移完成:初始 11 张全部正确播放,包括它们需要的高级特性。被阻断或静默省略图层的项目不计为迁移完成。日用里程碑可以先于这一里程碑,但必须列出确切支持范围。

Yakuza 扩展(2026-10-12) ​

共用路径现已实现有界 init/update/applyUserProperties、有限 Vec3 与图片层状态、仅初始化期间的图片模型 createLayer(path)、真实 64 档 Float32Array average 缓冲、经验证的 combo 选择及条件可见性。单图片粒子图集插值和新增平面粒子组件补上独立资源/粒子缺口。共用 genericimage2 图片适配还接纳缺省 VERSION 的旧版 Brightness/Alpha 与显式 VERSION 1/2 Color4,保留现有几何及 combo 接口门控。资源与执行预算继续执行,缺少 API 或不支持形状严格阻断;原始脚本/资产保持在 Git 外,不按壁纸 ID 替代作者行为。

未修改的原始 Yakuza 已通过四个背景(Majima_1、Kiryu_1、YakuzaDragon、Majima_2)各搭配 av/0 的全部 CPU 准备。五组完整 GPU 用例保留 64 个音频条 handle/63 个创建层、66–67 个渲染层与 67–68 个 pass;二十五项像素比较与十五轮 worker 销毁/重建通过,包含原始图片 color/alpha/可见性断言。注入音频使开启音频条的隔离区域改变 8,070 像素,关闭时差异为零;暂停强制重绘及 resize 后回原尺寸保留像素。真实单输出 niri/AMD 680M 原生流程通过三个属性编辑/保存、真实 PermissionDenied 回滚/重试、新进程恢复、完整重置、Settings 15 → 30 FPS、十二秒全屏恢复及清除,最终构建截图已阅、清理无错误。最终 Space 离屏 GPU 回归另通过全部二十六项比较,保留原始十层/十一个特效/二十四个 pass 结构。独立自有静音输出 monitor 采集 → 64 档 FFT average → LWE 脚本 worker → 离屏音频条 GPU 也通过,暂停保留像素、停止播放后回到静音;用户当前音乐/视频路由及 Windows 一致性未验证。共面 perspective 仅限固定正交投影、origin Z=0、无 X/Y 旋转及无相机运动/视差;平面等价属于数学推断,原引擎逐层/视觉一致性尚未证实,详见本轮记录。

用户明确延后物理休眠恢复,因为它会挂起 Codex。本批不发起休眠,也不把休眠作为完成条件;它仍是未验证的未来 P1 目标。真实多显示器、安装包、硬件电池/功耗、Windows A/B、高级脚本、骨骼与 HDR 保留各自未完成要求。

Miku 完整图(2026-10-13) ​

共享图片/帧/历史/脚本/文字路径现可准备未修改的 Hatsune Miku | GLITCHED HOLOGRAM 原包(3420277613),保留十一个声明、十个渲染层、五个效果和含全局 bloom 的二十五个默认 pass。安全图片属性保留作者空选择与实例材质后备资源,group 仍是非值元数据。所有权与失败契约见 Scene 图片、动画帧与历史缓冲,另有纹理共享与动画图集资源。

先前全图集估算超出两项资源门控。当前工作集解码有界区域,共享实际不可变来源 owner,仅在最后一个读取者结束后复用目标,并将冻结回滚历史封装到有界 CPU 快照。最终源码的完整软件 EGL oracle 已通过两组可见八帧图集、三个私有历史、暂停、同项目候选、精确回滚/解冻与清理归零。CPU 预留峰值 525,312,699 字节及旧代/候选 GPU 并集 525,624,984 字节(501.28 MiB)低于各自 512 MiB 门控;它们是生产逻辑计费,不包含测试专用 readback 分配、总 RSS 或实测 VRAM。冻结时将 79,833,600 字节历史移入封闭 CPU 快照;若保留在 GPU,会需要 605,458,584 字节而被拒绝,仅共享不足以满足预算。全部五个原脚本与 Atami 字体通过最终源码的独立 CPU 检查,二十六项 Space 软件 EGL 比较也通过。

独立 AMD 硬件离屏验收现已通过真实私有 Pulse 采集到原十六/六十四频段 VM 与原 shader 像素,包括准确暂停输出、采集重连和清理。CPU 选项检查通过 Glitch OFF/POOF,并保留作者隐藏图层行为;这两个分支尚无原生像素验收。英/中文图片控件在真实 380 像素原生视口内显示完整,现有窄窗口 catalog toolbar 溢出不在此检查范围内。

有限 1920×1080 嵌套 niri/AMD 680M 引擎 probe 保留全部默认效果与作者资源分辨率。30 FPS 上限下,三十秒仅达到 4.53 FPS,随后三十秒暂停的 draw/swap/callback 均为零,恢复及清除/退出通过。功能完整不代表已达到 30 FPS 或日用就绪。最终原生流程通过十七项步骤:完整效果选项与 CRT 编辑、真实文件选择器取消/选择、删除复制选图来源、原子保存失败/回滚/重试、Settings 上限实时更新、关闭隐藏、新进程图片/选项恢复、全部默认重置、自有全屏遮挡恢复及目标清除。英/中文图片控件与自有进程/工作区清理检查也通过。准确证据级别与独立复现的 llvmpipe 标量数组 uniform 问题见 Miku 记录,相同 AMD 对照已通过。按明确指令继续跳过物理休眠/恢复。Windows A/B、物理多显示器、安装包及 Miku 长期运行各有独立证据要求。

Miku 性能迭代(2026-10-14) ​

已合并的 Miku 实现现作为独立调度调查的基线。惰性 REA/编辑器资源读取支持来源计时的 sprite 定位、零 dt 重画声明及有序历史/复制/合并的存活区间,但不能证明原生 Windows 时钟/上传/FBO 调度,也不能据此开放新 host API、效果结构或 copy-to-swap 简化。未改变的已验证动画帧区域/view 复用原已实现,不是本批新增优化。

调度修改将 FPS 截止时间锚定到最后一次成功 swap,并独立每 8 ms 重试未完成的 Scene 准备,Video 保留原 decoder 策略。动画区域 key 现以封闭编码内容、准备 namespace/来源及帧/ROI/解码契约推导,避免重扫 RGBA,六项 CPU 隔离回归通过。全部原效果、资产、资源分辨率及 512 MiB CPU/GPU 门控保留。最终相同 profile 的 release A–B–B–A 对比实测 5.80–5.97 → 9.70–9.87 FPS,合计 swap/时间为 5.8833 → 9.7833 FPS(约 +66.29%)。三十秒暂停、清除/退出及身份检查通过,逻辑 GPU 计划保持 500,230,580 字节。最终源码完整默认软件 EGL oracle 通过两组可见八帧、三个独立历史、暂停/resize/回滚/解冻及计费归零,保留此前 CPU/GPU 上界,六项 AMD 历史及两项共享检查也通过。温热纯 CPU key benchmark 不能预测 FPS,有限嵌套结果不能证明 30 FPS、长期稳定、物理输出或 Windows 一致性;原生 UI 保存/恢复与安装包流程未复测。本次迭代与上文 2026-10-13 验收身份分开,性能记录说明证据边界及测量条件。物理休眠/恢复继续跳过。

Miku worker 通知迭代(2026-10-14) ​

独立新迭代以已合并的 9278023 为起点,增加 renderer 私有合并 result-ready 提示,仅移除 Scene 准备重试延迟,保留成功 swap 的 FPS 截止时间、暂停/idle、代次隔离及 Video decoder 策略。CPU codec 还将 checked 行几何外提并直接复制完整内部 BC3 行,裁切、endian/舍入、输出全写入和 84 字节 scratch 预留保留。原资源/效果/历史及 512 MiB 门控不变。

最终纯 CPU 微对比解码时间约下降 22.49%,全部十六原帧/十六邻域 DDS 比较通过,分配上限不变。仅 codec 与通知的短阶段因基线波动保留为诊断,不是稳定独立 FPS 效应,百分比不能相加。主要三十秒 release A–D–D–A 对比为 9.9666 → 12.1333 FPS(约 +21.74%),采样 texture worker CPU 约下降 20.47%,尝试次数/秒增加。暂停/清除/恢复/join 及身份门禁通过,最终完整默认软件 EGL 帧/历史/回滚 oracle 和八项 AMD 历史/共享检查也通过。独立嵌套 engine-only 检查还通过暂停 Miku → 一次 draw 静态替换 → idle/清除/join,原默认画面经过复核,身份不变。CPU/GPU 上界及清理保持不变。发布到 loop dispatch 延迟不含解码/呈现,旧探针缺失字段记为未测。独立worker 通知记录说明阶段/profile 和采样边界。此前日期证据保持原样,物理休眠/恢复继续跳过,不宣称 30 FPS/日用或新增 UI/物理输出/安装包/Windows/长期运行验收。

下一步从当前实测 12.13 FPS 基线继续归因剩余帧时间,区分 worker packet 准备/消费、纹理上传及 GPU 执行。保持通用运行时、完整原默认图、资源分辨率和预算;仅完成到 dispatch 及 CPU wall 计数不能确定 GPU 成本。

Scene CPU 准备重叠(2026-10-14) ​

以已合并的 b092cbfc955887150bb869922eb8b6ece0553300 为起点,新迭代使用现有 VM/timed worker 和资源上限,在 callback/FPS 等待期间重叠准备下一个 CPU packet;GPU view 安装与 packet/历史消费仍受门控。仅已呈现过的 active configured 输出可进入,排除暂停/idle、apply/commit/rollback、冻结/隔离及未确认 swap,序号/时间/PCM 绑定同一 epoch,seq0 resize 不再 rebase 已呈现时钟。

Timed ahead 限制为单引擎 session;多个 session 使用 VM ahead 加原 gated timed decoder,并取消预备 timed 工作,避免 callback 被阻止时长期持有跨 session 的共享 producer permit。最终嵌套 AMD680M release A–B–B–A 在 1920×1080/完整默认配置/30 FPS cap/私有 PCM/2 ms 状态查询压力下观察到 11.6833 → 14.7333 FPS(+26.1056%),单轮范围为 11.4333–11.9333 → 14.3000–15.1666。空绘制尝试从 2,527 次降为零,texture worker 采样 CPU 随吞吐上升,不能称为 CPU 占用下降。每 variant 仅两轮三十秒动画,暂停/恢复/清理/身份门禁通过,不代表稳定或长期收益。

workspace 检查通过:ordinary 559 项(含两项 doctest)、36 项 ignored,另显式执行十四项 AMD 自建 GPU 检查(六 ahead、六历史、两共享)。完整原 Miku 另在软件 EGL 通过八帧/三历史/暂停/回滚/清理,八个输出及二十四个历史像素 hash 匹配已合并 #109 oracle,CPU/GPU 上界仍低于 512 MiB。原生 engine-only 暂停换源恰好一次 draw/swap,后续静态播放 idle、自有子进程全部退出。旧记录保持原样,原效果/分辨率、已验收 replay/历史与资源门控保留,不代表物理多屏、30 FPS/日用、新 UI/安装包/Windows 或长时验收。物理休眠/恢复继续跳过,独立CPU 重叠记录说明身份和证据范围。

下一步从当前完整默认 14.73 FPS 基线,在现有 query/内存预算内对二十五个 pass 轮转稀疏 GPU 采样,把 layer/stage/pass 关联 owner+序号+时间;确认 CRT、运动模糊或合成热点后,再结合 REA 原版 shader/material/editor 证据优化共用执行路径,保持全部效果/分辨率/预算。这些归因仍为计划。此前私有稀疏 GPU 诊断提示 aggregate draw/composite 约 61 ms,但不是本轮生产候选测时,也不是精确或等价阶段,仅用于选择后续受控量测。

Scene GPU pass 调查(2026-10-14) ​

以已合并 4cb9fe14dcea8534a84f4198f3871af56c0a7139 为基线,有界私有 AMD query 归因已完成:四十六 catalog site、四十共同采样 site,原二十一 stage 加四 bloom logical pass 保留。Layer 8 material/composite 和原 Simple Audio Bars 稀疏均值约 4.98、4.61 ms;三个历史 copy site 约 1–2 ms,属于 GPU copy 区间而非 CPU readback。三十二 query/八 slot/512 records 保持有界,不同帧均值不能相加,CPU begin 分类也不是精确 GPU phase。A/P 的 15.0666 → 14.8500 FPS(−1.4381%)包含不同二进制临时 hook 和采样,不是优化收益。

标量 material 尝试因无收益被拒(15.132597 → 14.833289 FPS,观察 −1.977906%),与更早较宽整数 Count=3 一像素 LSB 精度拒绝独立;两者均已恢复/归档,不交付,也不复用为 Blend 验收证据。

本轮实现的共用编译路径仅匹配完整 canonical LWE 自有 image/text 源码及 metadata,把固定整数 Blend 0/1/2 编译为 typed 常量;其他模板/模式保留 uniform,原艺术公式/参数、ColorMode、prepared source/plan、资源/copy、效果/分辨率、运行时输入、worker/slot 及 512 MiB 上限不变。独立 release A–B–B–A 观察到 14.783306 → 15.365691 FPS(+3.9395%),范围 14.7666–14.8000 → 15.1666–15.5647。每 variant 仅两轮三十秒且私有 tone/silence epoch 相位不同步,不代表稳定/普遍/显著收益;暂停/恢复/清除/join/身份门禁通过,不合并 CPU wall 与旧 GPU site 均值,也不加此前百分比。

最终源码检查通过:ordinary 562 项(含两项 doctest)、37 项 ignored,另显式执行十六 GPU 测试(一个含十二内部 case 的新增 AMD 模板测试、六 ahead、六历史、两共享、一个完整原图软件 oracle)。八输出/二十四历史像素 hash 匹配 #110,CPU/GPU 上界和零清理保持;完整软件、小型 AMD fixture 与嵌套原生吞吐分别报告,独立原生 engine-only 暂停/恢复、暂停换静态源一次 draw/swap、idle/清除/join、1920×1080 截图及自有 helper/音频默认值/焦点恢复检查也通过。见独立 GPU pass 记录。此前证据保持原样,不宣称 30 FPS/日用、物理/UI/安装包/Windows 或长时验收,物理休眠/恢复继续跳过。

下一步优先评估历史复制复用 Named/History 来源的现有 FBO,保留 Input 回退路径、ownership 和 replay/rollback 行为;全帧 blit 已使用现有 FBO,其输入 liveness 单独评估后再改执行;Layer 8 ColorMode 28 与原 Simple Audio Bars 继续作为主线,保留艺术原公式、完整效果/分辨率及预算。此处是计划,不代表 copy 优化已完成。

Scene 历史 copy FBO 复用(2026-10-14) ​

以已合并 #111 5df7317b9cbe85608cc848b811c74a217d042b1a 为基线,本轮仅对 Named/History copy 源借用经验证的已有 READ FBO;Input/alias-preservation 和其他来源保留临时 attachment,full-frame blit 原本已用现有 FBO。全部 blit、NEAREST、顺序、尺寸、资源/generation/history owner 和 512 MiB 上限保留。三项新增 opt-in 回归覆盖临时/复用及恢复像素精确一致、历史推进及暂停/resize/freeze-thaw/resume、修改 GL 前拒绝 feedback/尺寸不符。最终源码通过 workspace 562 ordinary(含两 doctest)、40 ignored,另显式执行十九 GPU(copy 三、自有模板一、ahead 六、历史六、共享二、完整原图软件一);ignored 不算通过。完整原图软件保持 10/5/25、八输出/二十四历史 hash 严格同 #111/#110,CPU/GPU 上界低于 512 MiB,结束清理零。

独立原生 release A–B–B–A 观察 14.716643 → 15.233300 FPS(+3.5107%),范围 14.6000–14.8333 → 15.1666–15.3000,两 B 均高于两 A;每 variant 仅两轮三十秒、私有 tone/silence epoch 相位未同步,不代表稳定/普遍/显著收益,不加此前百分比。暂停/恢复/清除/join/身份门禁通过,CPU wall 不当 GPU elapsed,旧不同 site 均值不相加;原生吞吐、小型 AMD 与完整软件证明分别报告,B1 geometry 仅中途快照。所有像素 blit 仍执行,减少的是符合条件来源的临时 FBO 设置。

独立原生 engine-only 暂停/恢复、暂停换静态源一次 draw/swap、idle/清除/join、1920×1080 截图复核及自有 helper 退出/宿主音频默认值/焦点恢复另通过三十一功能、十五清理检查;不作为 UI/会话保存或连续逐轮观察验收。

新增原 PE REA 证据保留三十一条静态记录,观察通用 target-handle cache、named lookup 后才 create 和尺寸相关 resize;不证明原 History/view/copy 语义、OpenGL 行为或 GPU/FPS 成本,LWE 验证独立,原反编译源码不导入。见独立历史 FBO 记录。下一步继续以 Layer 8 ColorMode 28 与原 Simple Audio Bars 为主线做有界逐 pass 归因,保持原艺术公式、完整效果/分辨率、资源和预算,不预设进一步收益。此前证据保持原样,不宣称 30 FPS/日用、物理/UI/安装包/Windows 或长时验收,物理休眠/恢复继续跳过。

实施顺序与阶段出口 ​

下表保留未来完整阶段的验收目标,其中物理休眠恢复已明确移出当前批次。有界 P0 inventory、首批 P1 运行时/设置、受限 P2 相机与可编辑属性持久化,以及默认混合项目 CPU/GPU 路径已实现。默认和属性编辑器原生 UI(包括真实保存失败/重试及十二秒自有全屏恢复)已通过,其他生命周期验收仍未完成,没有标记任何完整阶段或日用里程碑完成。不支持的行为仍门控,已实现路径仍需通过所列验收。

阶段交付内容通过条件
P0:建立正确性基线用有界 inventory 独立观察声明/阻断项及结构位置,区分声明式用户属性与 JS、可达资源与包内未用资源。建立自建样本及原版 Wallpaper Engine 对照。验证真实 Tauri 窗口的 Library → 选择显示器 → Apply → Desktop 反馈 → 关闭重开流程。11 张均有依赖报告,明确覆盖范围、预算耗尽及未知/动态引用。记录对照条件,核验相机、坐标/UV 方向、透明度、遮罩、图层顺序、混合和定时效果。通过真实 UI 验证 Shine 的可见应用与保存恢复,保留普通桌面的焦点/点击/工作区行为,并记录缺失的原版对照环境。静态 inventory 不证明运行时依赖穷尽。
P1:保证运行时可靠实现实际帧截止时间,停止静态/暂停时不必要的回调,接通播放/功耗设置,定义暂停、锁屏与休眠策略。跨显示器及当前/候选/回滚渲染器统一核算资源。增加可观察错误状态、有限恢复和指标。通过 100 次 Scene ↔ Video 切换、24 小时 Scene 连续运行与 10 次休眠恢复,无状态丢失、残留画面、重复音频或持续资源累积。记录帧耗时、唤醒、CPU/GPU 负载与内存趋势。30 FPS 设置实际限制呈现;在记录的 680M 机器上先以渲染耗时 p95 ≤33.3 ms 为 30 FPS 预算。宣称 60 FPS 须另验 ≤16.7 ms 预算及实际呈现。暂停时钟停止,恢复时不追赶跳跃。
P2:补全普通 2D 语义保留原版静态加载器证据确认的受限规范相机分支;有证据后再扩展坐标变换、层级、尺寸/纹理标志、深度/顺序与材质行为。添加声明式属性绑定,以及目标项目需要的常用水流、水波、透明度、滚动和摆动效果。宣称视觉一致或日用就绪前,完成 3258032485 和 Shine 基线的原引擎画面对照。原版静态证据支持受限相机门控变更,不能替代视觉对照。修改属性能更新目标对象/效果,并按相应规则持久化。每项新增能力均有正向渲染样本与不支持/错误样本,视频/Shine 行为不回退。
P3:跑通真实混合项目完成并验证 3659880761 的属性、粒子/材质/时间、特效、LDR 泛光和音频。下一张完整壁纸需要时再添加文字/字体、TEXS 动态纹理/视频、HDR 等资源。接纳大项目前优化 FBO 生命周期与复用。保留作者默认配置:6 个可见根系统及全部 5 个子系统、所有活动特效、默认泛光和两条循环音轨及其音量。Reactive 保持作者隐藏状态,启用其 FFT 行为需要真实音频分析实现。绑定和音频经历编辑、暂停、切换及恢复后仍正常。记录生命周期、透明度/尺寸/运动、材质和限制。关闭作者开启的特性不算合格播放,不要求强制开启作者隐藏层。原版噪声/子系统/rope 与完整画面 A/B、真实休眠/锁屏及日用检查仍待完成。
P4:SceneScript 与交互纯标量 CPU 准备与新增有界动态图片/音频 worker 使用 QuickJS 和 Oxc AST 校验;更广泛 ECMAScript/Wallpaper Engine API 继续明确阻断,应用与渲染仍由 Rust 主导。实现脚本生命周期、属性变化、场景/图层/特效访问、所需输入/音频/时间 API 和限定范围的存储。定义执行、内存、取消与失败边界。目标项目的真实脚本通过行为样本与原版对照。无限循环、异常、超量分配或 worker 退出不能冻结 UI 或损坏已保存状态。必要平台输入有经过验证的来源;缺少 API 或输入继续明确阻断。先验收一张完整含脚本项目,再扩充 API。
P5:高级迁移与发布实现初始样本剩余的模型/骨骼与高级渲染依赖;宣称 3D 支持前用单独的自建 3D 样本验收。验收真实多屏生命周期及可安装候选版,再扩充独立项目风格和 GPU 平台。首批 11/11 完整迁移后才能宣称该里程碑完成。扩展 2D 候选版至少验收来自三种不同内容/特性组合的 10 张完整真实 2D 壁纸,并覆盖至少 20 个正向/阻断样本。记录确切支持项目与能力组合;通过完整 CI、包验证、新用户启动与发布冒烟清单。

以上数量是暂定的工程门槛。用基线测量校准资源与帧预算,不降低正确性要求,也不保留未经测量的“已支持”结论。验收前固定样本清单,不用更简单的项目替换失败项目来提高比例。阻断样本用于验证拒绝行为,不计入十张完整项目。

运行时与平台决策 ​

  • 保留应用事务:准备 → 第一帧 → 提交 → 原子保存分配 → 最终确认。候选失败恢复上一输入源;过期取消不能撤销已最终确认的分配。分别报告期望分配、当前活动输入源与恢复失败。
  • 根据资源诊断继续归因 100 轮测试中已观察到的 RSS 上升。CPU 准备/释放和后端停止后的 Rust 活跃字节回到小型固定基线,视频/混合模式的 RSS 上升则伴随 glibc 空闲块保留。受控 arena 子进程支持继续调查分配器保留,不构成生产内存修复或原生内存无泄漏结论。仍需覆盖 shell 缓存、驱动分配、swap/文件页和长期上界。P1 日用资源稳定性未通过,逻辑 RGBA/FBO 预算也不是 RSS 或 VRAM 上限。
  • 在已有全局 Scene 预算和单项目限制之上扩展后续资源类型,同时核算两个输出和切换期间的新旧渲染器。限制解码资源、纹理、渲染目标、粒子与脚本;不为未使用的 pass 分配全分辨率临时目标。提高现有图层/pass 上限前先取得代表性测量。
  • 区分不可变资源与每输出的属性状态,先验证默认值、类型、范围和绑定再求值;影响所需能力的值须进入兼容评估/缓存身份。通过已有串行原子写路径按项目/输出保存用户选择,保留无关分配。内嵌音频播放与桌面音频采集/FFT 分别作为能力实现。
  • 分别验证静态、暂停、电池、全屏/遮挡、锁屏、输出断开和休眠恢复。依赖合成器的策略需有受支持的能力来源,缺失时明确说明。对照预期相位检查长期 shader 时间精度,不对全部 shader 任意取模时间。
  • 广泛开放自定义脚本/着色器前,通过原型确定进程归属。脚本/模拟 worker 可向 Rust 渲染器提交受限更新,但不能隔离 GPU/上下文故障。渲染进程须定义输出/表面归属、请求代次、第一帧就绪、取消、资源传递与重启契约,保留应用事务,避免两个音频源同时活动。进程隔离不能保证恢复驱动级 GPU 故障。
  • Wallpaper Engine 的 SceneScript 使用 ECMAScript 2018 与引擎 API。独立 Rust 渲染不要求自行编写 JavaScript 解释器。选依赖前先用原型评估兼容性、可中断性、宿主 API 行为和内存限制。用户属性 中的声明可以在没有全部 SceneScript 能力时支持。
  • Wayland 的 pointer 事件 针对获得焦点的表面。壁纸能接收此类事件不等于其他窗口获得焦点时仍有全局光标来源。鼠标视差/交互须建立合成器专属能力路径,保留正常桌面输入,不静默伪造必要交互。

静态或暂停渲染稳定后,观察 60 秒,不能有自我维持的 draw/swap/frame-callback 循环;调整尺寸与明确的恢复仍可触发重绘。故障验收按已实现的边界注入 shader 编译、分配、swap/上下文、worker 退出和保存失败。UI 须保持响应、保留上次保存分配、显示实际活动/恢复状态,并允许后续再次成功应用。不可恢复的 GPU 故障后不能保证旧壁纸仍可见,恢复能力须单独取得证据。

既有验收证据与实现批次 ​

自动资源/渲染测试使用自建、可分发的样本,Workshop 项目和原版资源保持本地。记录哈希、特性清单和对照结果,不提交其受版权保护的内容。行为以原版 Wallpaper Engine 为基准;OWE 与逆向观察可指导实现,但不能替代原版对照。定时截图尽量控制设置、音频/输入、相机与随机种子,除图像指标外核验可见结构与运动。

P0 加首批 P1/P2 工作已增加有界 inventory、基于原版 wallpaper64.exe REA 观察的受限相机规范化、经验证的直连属性默认值、每输出调度、逻辑负载核算、计数器,以及显式启用的 scene_probe/scene_resources/scripts/scene-ui-smoke.py 工具。11 项报告及 3337606455、3258032485 的完整原生鼠标 UI 流程已记录;频繁状态请求下的 30 FPS swap 完成率/60 秒暂停与静态空闲 Probe 已通过。此前 100 轮混合输入源生命周期切换通过,进程 RSS 同时上升。

贡献者后续记录补充了 EGL 清理和单次初始视频加载、可持久化并实时接入的 FPS/电池实现,以及独立资源诊断:30 轮 CPU、30 轮 Scene、30 轮视频、50 轮混合、20 轮后端重启均通过。CPU 释放后回到 2,177 Rust 活跃字节;重启测试每次后端停止后回到 2,229 字节、四个 FD 和一个线程。视频清除后的 Rust 活跃字节固定为 49,259,而混合模式中 glibc 保留空闲块从 166,546,944 增至 654,284,608 字节。全新诊断子进程设置 MALLOC_ARENA_MAX=2 后通过了 100 轮混合,空闲块增长较小;轮数、内存压力、swap 和文件页驻留差异使其不能作为生产 RSS 收益证明。2026-10-12 的相同输入 30 轮对照确认了空闲页保留:末轮清除后的 RSS 未回收时约 592.5 MiB,显式回收后约 240.8 MiB,单次边界回收耗时约 2.4~4.9 ms。GNU 构建现仅在确实释放输出、候选或回滚资源之后、空闲块达到 64 MiB 时回收已释放的原生堆页,不在逐帧路径调用,也不调整 arena 策略。这控制了内存保留,不证明原生或驱动没有泄漏。 新增 20 轮 3659880761 → 视频 → 3659880761 → 清除 Probe 通过,清除后的 FD/Rust 活跃字节固定且关闭已 join;RSS 与分配器保留仍不足以支持内存稳定或原生无泄漏声明。

实际桌面服务设置测试通过,保存的 15/30 FPS 上限分别测得每秒约 14.70/29.60 次完成 swap,后端和分配保留。电池偏好检查在交流电状态下执行,没有硬件转换。独立原生英文 Settings 15 → 30 FPS/保存/重启流程与中文布局复核在 ui-settings-verified 中通过,完整应用/隐藏/新进程恢复/清除及当时的泛光阻断也通过,清理无错误。

混合项目后续实现了有界粒子/子系统、WaterRipple/Iris、四 pass LDR 泛光和单 FLAC 循环音频,使用独立 Rust 数据结构,Open Wallpaper Engine 仅作为行为参考。原生证据确认泛光使用 RGBA8 目标、floor/最小二像素尺寸、全尺寸 texel 和四 pass 顺序,以及单条循环无随机间隔、图层音量平方。3659880761 最大粒子/顶点/work 为 3,965/26,790/30,980。其 30 FPS engine-only Probe 测得约 27.95 swap/s,暂停六十秒期间 draw/swap/callback 均为零,恢复后约 28.33 swap/s;逻辑 GPU 负载为 134,862,328 字节。私有 Pulse PCM 检查与硬件扬声器、完整服务事务分别记录。

项目/显示器属性沿同一声明检查与准备门控,执行第一帧/commit 接纳 → 原子保存分配与属性 → Finalize/启用音频;原子保存前的准备、候选接纳或保存失败保留原渲染器和选择,持久保存成功后的状态仍为权威。独立的默认 3659880761 原生 UI 应用/Running/隐藏/重启/恢复/清除与 Settings 流程已通过,实时更新保留 PID/分配字节,新进程恢复偏好,英/中文截图已阅。原生 bool/slider 编辑、真实 PermissionDenied 回滚、重试、新进程属性/控件恢复及完整默认重置已通过。十二秒自有全屏覆盖/揭示后 Running 与粒子变化保留;callback 未测量,不能替代真实休眠/锁屏验收。隔离的原引擎副本/Wine prefix 启动在对照截图前失败(c0000005),清理通过、源文件哈希未变,原版视觉 A/B 仍不可用。这些有限检查没有通过 P1 或日用就绪:24 小时运行、十次真实休眠恢复、硬件电池转换、实测功耗/VRAM、多显示器和安装包验收仍未完成。此前该批不开展广泛 SceneScript API 实现;当前有界 Yakuza 扩展另记录于上文。

首个本机日用里程碑明确限定单屏。宣称多屏支持前,须用两个物理输出验证不同壁纸、独立清除、不同缩放/分辨率、热插拔、重启恢复和单输出失败隔离。扩大 GPU 支持声明前,在另一 GPU 厂商平台复验代表性渲染与恢复。当前机器不能证明多屏或跨厂商兼容。缺少硬件或原版对照环境时,该验收项继续标记未验证,不用 mock 测试替代。供分发的日用候选版还需实际安装包验收,服务测试或开发构建不足以替代。

通过上述门槛后再冻结候选版范围。源代码检查、打包、发布和安装后运行验收是不同结果;发布通过已授权的发布流程执行。

下方 v0.7.0 至 v0.9.10 小节记录各阶段当时的范围和验收要求;其中仅视频的条款属于历史记录,不覆盖当前实验性 Scene 范围。版本是否可用仍以已发布产物为准。

v0.7.0:支持矩阵锁定 ​

主题:让产品事实在所有位置保持一致。

交付内容:

  • 权威支持矩阵:
    • 视频是可运行的首发目标;
    • 场景仅用于元数据识别和兼容性报告;
    • 网页仅用于报告识别;
    • 其他/应用内容不支持运行时工作流。
  • 兼容性策略、Library 投影、Workshop 详情、Desktop apply 和文档保持一致。
  • 场景不再显示为完全支持或可应用。
  • Apply 仅对可运行视频 Library 项启用;对仅识别项目禁用并给出解释。
  • 英文和简体中文文档同步更新。

验收标准:

  • 已同步视频报告为可运行支持。
  • 已同步场景报告为已识别/运行时不支持。
  • 网页报告为运行时不支持。
  • Desktop apply 在调用后端前以清晰原因拒绝非视频内容。
  • 测试覆盖视频、场景、网页、缺少元数据和缺少主资源行为。
  • CI 测试不依赖 Steam 或真实桌面会话。

不得宣称:

  • 场景运行时支持;
  • 网页运行时支持;
  • 泛 Wayland 支持;
  • 超出已验证 Wayland + niri 路径的合成器支持。

v0.8.0:niri 上可靠的视频运行时 ​

主题:让当前运行时路径可靠。

交付内容:

  • 强化将视频应用到选定显示器的流程。
  • 强化按显示器清除。
  • 清除一个显示器时保留其他输出上的壁纸。
  • 启动时恢复已保存分配。
  • 改进 Desktop 运行时状态,包括活动输出、过期状态、恢复失败和后端初始化/运行时错误。
  • 为运行时变更保留有文档说明的手动真实桌面验证清单。

在已验证 Wayland + niri 上的验收标准:

  • LWE 能发现活动显示器。
  • 已同步视频壁纸可见地应用到一个显示器。
  • 在有硬件条件时,多显示器应用可用。
  • 清除一个显示器不会停止其他显示器壁纸。
  • 重启后恢复已保存分配,或报告明确恢复失败。
  • 缺少视频文件、输出不匹配、Wayland layer-shell 失败、EGL 失败和后端超时都会产生可操作错误。

不得宣称:

  • niri 之外的运行时可靠性;
  • 场景或网页运行时支持;
  • CI 已验证桌面运行时行为,除非存在已验证真实桌面 runner。

v0.8.5:Library 工作流强化 ​

主题:让 Library 成为可信赖的日常使用界面。

交付内容:

  • Library 卡片和详情面板清晰展示运行时状态。
  • Apply 控件受可运行状态和显示器可用性限制。
  • 应用、清除和恢复后,已分配显示器标签保持准确。
  • 刷新、应用和清除流程尽可能保留用户上下文。
  • 空状态、过期状态、不可用状态和部分支持状态易于理解。
  • 大型本地库的分页和过滤保持可预期。

验收标准:

  • 可运行视频项目易于识别和应用。
  • 如果 Library 展示仅识别的场景/网页项目,它们不可应用且解释原因。
  • 应用失败不会用死状态替换已填充的详情 UI。
  • Library 命令/单元测试不依赖已安装 Steam。
  • Desktop invalidation 后 Library 状态正确更新。

不得宣称:

  • 所有 Library 项都可运行,除非 UI 强制保证这一点;
  • 仅识别的场景/网页项目可通过重新同步变成可运行支持。

v0.9.0:Workshop 与同步清晰度 ​

主题:让发现和获取预期诚实明确。

交付内容:

  • 围绕 Steam Web API key 设置打磨 Workshop 搜索和过滤。
  • 本地 Workshop 刷新解释已同步、缺少 project.json、缺少主资源和不支持运行时类型。
  • “在 Steam 中打开”明确作为获取/订阅交接。
  • Settings 清晰展示 Steam 集成状态。
  • 在线搜索结果不暗示本地同步或运行时支持。

验收标准:

  • 缺少 Steam API key 时引导用户到 Settings。
  • Steam 未安装、缺少 Wallpaper Engine、没有 Workshop 内容时尽可能产生不同信息。
  • 格式错误的项目元数据不会导致整个目录扫描失败。
  • 场景/网页搜索结果标记为已识别/运行时不支持。
  • 网络和解析测试避免真实 Steam API 调用。

不得宣称:

  • LWE 直接下载 Workshop 内容;
  • 搜索结果可见代表本地内容已同步;
  • Steam 元数据推断是权威结果。

v0.9.5:诊断、持久化与候选版准备 ​

主题:为可支持的 v1 候选版做准备。

交付内容:

  • 用户可复制的诊断界面。
  • 验证语言、主题、Steam API key、登录启动偏好和 Workshop 过滤条件的设置持久化。
  • 敏感值被隐藏。
  • 在文档中加入发布冒烟检查清单。
  • 记录包和发布产物预期。

诊断信息应包括:

  • 可用时显示 LWE 版本和包类型;
  • 可用时显示 OS、会话和合成器线索;
  • 显示器发现结果;
  • 运行时后端状态或最近后端初始化错误;
  • Steam 发现结果;
  • Wallpaper Engine Workshop 内容可用性;
  • 按兼容性/运行时状态统计的 Library 数量;
  • 当前支持范围提醒。

实现说明:除非包管理器或报告者提供信息,否则包类型显示为 unknown/local build;诊断信息不应声称能完美识别环境。

验收标准:

  • 设置在重启后保留。
  • 诊断信息不会暴露 Steam API key。
  • 登录启动不可用状态非致命且可见。
  • .deb、.rpm、.AppImage、AUR stable 和 AUR git 发布路径均有文档说明。
  • 必需 CI 检查已记录且通过。
  • 影响运行时的候选版必须进行手动运行时验证。

不得宣称:

  • 诊断是完美的环境检测;
  • 登录启动适用于所有桌面、会话和包格式;
  • 包安装成功即可保证运行时支持。

v0.9.6:预览性能与缩略图缓存 ​

主题:在存在大量预览资源时,让 Library 和 Workshop 浏览保持流畅。

问题陈述:

  • 当前卡片网格可能直接接收 Workshop 自带的 preview.gif 和较大的 preview.jpg 文件。
  • Tauri 会把本地路径转换成 asset URL,但前端仍然要求 WebView 解码和渲染原始媒体。
  • 当许多卡片同时可见时,动态 GIF 预览尤其昂贵,因为每个文件可能包含大量帧。
  • Wallpaper Engine 公开创作者指导将预览资源视为小型、受控的 UI 媒体。LWE 应遵循同样的产品原则,但不应宣称未公开的 Wallpaper Engine 客户端内部实现。

交付内容:

  • 引入 LWE 自有的卡片封面缩略图缓存。
  • Library 和本地 Workshop 卡片网格使用静态、受控尺寸的缩略图。
  • 对动态 GIF 预览,为卡片网格生成静态首帧缩略图。
  • 在向卡片网格暴露前,下采样过大的内置预览图。
  • 原始预览媒体仅保留给详情视图或未来显式预览动作,不作为默认网格渲染资源。
  • 将缩略图缓存命名和存储从已退役的 wayvid 术语迁移到 LWE 缓存命名空间。
  • 更新 Tauri asset protocol scope,使前端只能读取所需的 Steam Workshop 路径和 LWE 缩略图缓存路径。
  • 尽可能在暴露卡片数据前生成缩略图;当无法避免冷缓存工作时,应保留已知可用的视觉兜底,避免有预览媒体的项目长期显示占位。
  • 避免每次选择项目时全量重处理列表;尽可能复用当前 Library/Workshop 投影。
  • 添加轻量前端保护,例如 decoding="async" 和稳定图片尺寸。除非静态缩略图仍不足,否则虚拟列表或悬停播放预览作为后续工作处理。

实现说明:

  • 优先复用 crates/lwe-library 中的缩略图代码,但应通过现有 Library/Workshop service 和 assembly 流程接入,而不是从 Svelte 直接调用。
  • 缓存键应包含源路径和足够的文件身份信息,例如修改时间或大小,以便预览变化后重新生成。
  • 缩略图失败应降级到现有占位图,而不是导致整个 Library 或 Workshop 页面失败。
  • 生成的缩略图应足够小以适配卡片网格;当前 UI 可接受约 256-320 px 方形目标尺寸。

验收标准:

  • Library 卡片网格不渲染原始本地 preview.gif 文件。
  • 当已生成缩略图可用时,Library 卡片网格不渲染过大的本地预览图。
  • 在显示最大支持分页数量时,包含大量 GIF 的本地 Workshop 内容仍保持响应。
  • 热缓存下返回 Library 不会重新生成未变化的缩略图。
  • 冷缓存缩略图生成不会让已有预览媒体的项目长期停留在占位图状态。
  • 详情面板仍能一致地显示封面或占位图。
  • 单元测试覆盖缩略图来源选择、GIF 首帧行为、缓存路径命名、过期缓存重新生成和占位降级。
  • 前端测试覆盖缩略图封面路径渲染,同时不回归缺失封面占位行为。
  • 手动验证记录在真实桌面会话中 GIF 密集 Library 的前后对比。

不得宣称:

  • 未经官方文档支持的 Wallpaper Engine 私有客户端实现细节;
  • 卡片网格已完整支持动态预览;
  • 在所有 GPU、磁盘或桌面环境上保证性能;
  • 场景或网页壁纸运行时支持;
  • 独立于 Steam 的 LWE 托管 Workshop 下载。

v0.9.7:Workshop 浏览打磨 ​

主题:在导航和筛选边缘情况下保持 Workshop 页面响应流畅。

交付内容:

  • 恢复缓存的在线 Workshop 搜索结果时,不再跳过本地 Workshop 和 Library 标记刷新工作。
  • 离开页面时清理待执行的 Workshop 搜索防抖计时器。
  • 限制在线 Workshop 搜索结果卡片宽度,避免少量结果时单个卡片横向撑满整个内容区域。
  • 让加载骨架屏网格尺寸与最终结果网格保持一致。

验收标准:

  • 导航到 Workshop 时,在恢复缓存或异步数据期间,页面壳和搜索控件保持响应。
  • 返回已缓存的 Workshop 搜索时,如果本地标记缓存过期,仍会安排必要刷新。
  • 只有一个在线搜索结果时,卡片保持正常比例,而不是变成全宽超大卡片。
  • pnpm check 通过。

不得宣称:

  • Workshop 搜索结果已经同步到本地;
  • LWE 直接下载 Workshop 内容;
  • 所有合成器或 WebView 性能问题都已修复。

v0.9.8:后台运行时功耗画像 ​

状态:已作为 v0.9.8 发布完成。本版本包含更低的空闲渲染工作量、带缓存的监视器发现、普通页面加载和恢复路径可复用的 Workshop/Library 热快照读取、基于 Rustls 的 Workshop HTTP,以及轻量快照来源诊断。真实桌面功耗测量仍与环境相关,不应泛化到已验证 Wayland + niri 设置之外。

主题:降低 LWE 后台运行时的 CPU 唤醒和不必要工作,尤其是在存在活动视频壁纸时。

问题陈述:

  • 当前 engine loop 会按帧间隔唤醒,扫描活动 surface,并为已渲染输出重新注册 frame callback。
  • mpv 渲染路径会在热路径检查新帧并 drain mpv events。
  • 显示器发现可能在每次请求时 shell out 到 niri msg -j outputs。
  • Library 和 Workshop 投影在较便宜的缓存视图足够时,仍可能触发完整目录刷新和兼容性评估。
  • 安全扫描当前通过 Tauri Linux GTK/WebKit 栈报告 glib 告警。应跟踪上游 Tauri/GTK 更新路径,不要用不安全的依赖覆盖来掩盖。

交付内容:

  • 记录以下场景的 idle/background CPU 唤醒和 CPU 占用基线:
    • 应用打开但未运行壁纸;
    • 一个活动视频壁纸;
    • 应用最小化/后台运行且存在活动壁纸;
    • 热缓存后的 Library/Workshop refresh。
  • 增加轻量运行时诊断或日志,暴露 frame pacing、跳帧、活动 surface 数量和后端 event-loop 状态,同时不增加正常路径开销。
  • 尽可能减少逐帧 engine 工作:
    • 当 mpv 没有新帧且 surface 无 resize/state change 时避免渲染;
    • 对未变化 surface 避免重复 EGL make-current/resize/swap;
    • frame callback 只绑定到可见/活动壁纸 surface。
  • 通过短期缓存或显式 invalidation 降低显示器发现成本,避免频繁调用 niri msg -j outputs。
  • 拆分便宜 snapshot 读取和昂贵 Workshop/Library 完整刷新,使页面加载和 restore 流程可复用热投影。
  • 持续维护安全依赖卫生:
    • Workshop HTTP 请求使用 Rustls-backed TLS,而不是 OpenSSL-backed native TLS;
    • 跟踪 Tauri/Linux GTK 依赖更新,寻找脱离易受攻击 glib 0.18.x 的受支持路径。

实现说明:

  • 功耗优化影响运行时,应优先采用小而可测的改动,并保持当前 niri 视频路径可靠。
  • 功耗声明必须基于真实桌面观察。CI 可以覆盖不变量和回归,但不能证明合成器/GPU 功耗行为。
  • 优化时不改变支持范围;场景和网页壁纸仍保持仅识别,除非另行实现并验证。
  • 不要为了让扫描器安静而对 Tauri 的 GTK 栈做不安全 Cargo patch。只有在行为和打包仍通过验证时,才升级 Tauri 或移除受影响功能。

验收标准:

  • 在已验证 Wayland + niri 环境记录优化前后的测量结果。
  • 活动视频壁纸不回归已验证路径上的应用、清除、恢复或多显示器行为。
  • 手动测量显示 idle/background 路径减少了不必要唤醒或降低 CPU 占用。
  • 常规导航中,显示器发现和 Library/Workshop 加载路径避免不必要的重复完整刷新。
  • Workshop HTTP 请求的 cargo tree 中不再出现 OpenSSL/native-tls。

不得宣称:

  • 所有设备都有电池续航改善;
  • 超出已验证 Wayland + niri 路径的合成器支持;
  • 场景/网页运行时支持;
  • 已在本地修复上游 GTK/WebKit/Tauri 漏洞,除非依赖图确实移动到 fixed 版本。

v0.9.9:Wayland 能力基础设施 ​

状态:已作为 v0.9.9 发布完成。本版本增加轻量 Wayland 能力报告、在动态壁纸运行时启动前进行门控、显式输出发现来源边界(保留 niri 作为已验证路径的增强来源)、协议支持与输出发现来源诊断,以及应用壳专用 WebKitGTK 启动 workaround 文档。

主题:让未来桌面兼容以 Wayland 协议能力为中心,而不是以桌面环境名称为中心。

问题陈述:

  • LWE 当前已验证运行时路径是 Wayland + niri,但底层视频运行时更准确地说是 Wayland layer-shell + EGL/mpv 后端。
  • 显示器发现目前只具体实现了 niri msg -j outputs,这会让输出可用性看起来像按桌面名称硬编码,而不是按能力判断。
  • 其他 Wayland 合成器可能暴露足够协议来运行当前轻量运行时,但是否支持应由协议能力和真实验证决定,而不是泛化桌面环境声明。
  • 某些环境(例如 GNOME/Mutter Wayland)可以通过 WebKitGTK workaround 启动应用壳,但可能不暴露动态壁纸所需的 layer-shell 协议。
  • 在准备更广泛 Wayland 兼容时,LWE 不应加入 X11 运行时支持,也不应引入重型桌面环境专属依赖。

交付内容:

  • 增加轻量 Wayland 能力报告,检查:
    • 是否存在 Wayland 会话并可连接显示;
    • 是否暴露 wl_compositor、wl_output、zwlr_layer_shell_v1 等必要 globals;
    • 动态壁纸运行时是可用、降级还是不支持;
    • 缺少必要协议时给出用户可理解的不支持原因。
  • 将显示器发现重新表述为输出发现:
    • 保留 niri 作为已验证路径的增强输出信息来源;
    • 为稳定输出身份足够时的通用 Wayland 输出发现预留服务边界;
    • 避免把桌面环境名称作为主要运行时后端。
  • 在启动运行时后端前,用能力报告门控 Desktop apply/restore 路径;缺少必要 Wayland 协议时返回优雅的不支持结果。
  • 扩展诊断信息,包含 Wayland 能力数据:
    • 会话线索;
    • 协议可用性;
    • 输出发现来源;
    • 动态壁纸运行时支持状态和不支持原因。
  • 记录 GNOME/Mutter WebKitGTK 启动 workaround:WEBKIT_DISABLE_DMABUF_RENDERER=1,并明确它只缓解应用壳启动,不代表壁纸运行时支持。
  • 英文和简体中文文档保持诚实支持范围。

实现说明:

  • 保持核心轻量:除非未来规划明确论证,否则不引入桌面环境专属 DBus/plugin 集成。
  • v1 不规划也不实现 X11 壁纸运行时支持。
  • 优先在 lwe-engine 中提供共享 Wayland 能力探测,因为该 crate 已拥有 Wayland client 依赖和 registry 代码。
  • 合成器名称只用于诊断、已知问题提示和手动验证记录。
  • 缺少 zwlr_layer_shell_v1 的合成器应在运行时启动前优雅失败,而不是尝试不可靠的兜底窗口。
  • 在其他 Wayland 能力组合完成手动测试前,已验证路径仍是 Wayland + niri。

验收标准:

  • 诊断信息能在当前设备显示 Wayland 能力报告。
  • 当前已验证 niri 环境的视频应用、清除、恢复和显示器发现不回归。
  • 缺少必要 Wayland 协议时,Desktop apply/restore 在启动壁纸运行时前返回清晰的不支持原因。
  • 文档区分应用壳启动 workaround 和动态壁纸运行时支持。
  • CI 覆盖能力报告格式和不支持门控,不依赖真实合成器。

不得宣称:

  • X11 运行时支持;
  • 未经明确验证的 GNOME/KDE/Hyprland/sway 运行时支持;
  • 应用壳启动兼容等同于动态壁纸运行时兼容;
  • 场景/网页运行时支持;
  • 暴露 layer-shell 的每个 Wayland 合成器都自动完成验证。

v0.9.10:AppImage 打包修复 ​

主题:修复 AppImage 打包,让发布验证可复现。版本可用性以 GitHub Releases 为准;每次发布分别记录桌面及公开产物验收结果。

交付内容:

  • 升级 Tauri 和前端维护依赖,保持产品范围不变;固定 Rust 构建工具链,并以 .tauri-cli-version 作为唯一 Cargo CLI 版本来源。
  • 稳定版和预发布 workflow 在恢复缓存后核验 CLI 精确版本。
  • 在发布产物前拒绝无效的 AppImage .DirIcon、desktop 文件及图标链接;以轻量回归覆盖校验器和 CLI 选择。
  • 必需检查通过后发布稳定补丁版,验证公开的 AppImage,再针对该版本请求 AppImage 目录复测。

验收标准:

  • 发布提交的完整 Quality Check 和打包回归通过;.deb、.rpm 和 .AppImage 构建成功。
  • 本地构建及公开下载的 AppImage 均通过包验证,不含指向构建机器的相关链接。
  • 使用独立配置,在 niri 上另行检查安装、窗口/托盘行为、Workshop/Library IPC,以及视频应用/清除/恢复。
  • 上游 AppImage 目录测试选中新稳定版产物并通过;最终收录仍取决于上游审核。
  • 文档中的已验证目标仍为 Wayland + niri 上的视频壁纸;工具链更新不代表新增 Scene/Web 或其他合成器支持。

v1.0.0-rc.1:首个候选版 ​

主题:冻结范围并端到端验证。

交付内容:

  • 除阻塞问题外冻结功能。
  • 完整审查英文和简体中文文档。
  • 起草带明确支持范围的发布说明。
  • 通过手动 niri 运行时验收。
  • 更新已知限制页面或小节。

验收标准:

  • 全套 CI 通过:
    • pnpm check
    • pnpm test
    • pnpm build
    • pnpm docs:build
    • cargo fmt --all -- --check
    • cargo clippy --workspace --all-targets -- -D warnings
    • cargo check --workspace
    • cargo test --workspace
  • 新安装 → Settings → Workshop/Library → 应用视频 → 清除 → 重启恢复路径完成手动验证。
  • 单独检查符合条件的 Scene 应用/清除、Scene ↔ Video 切换与恢复;被阻断的场景和网页保持不可运行并给出解释。
  • 没有用户可见文案宣称未支持运行时行为。
  • 发布产物构建成功。

不得宣称:

  • v1 final 稳定性;
  • 广泛合成器支持;
  • 完整场景兼容、已验证 2D 子集之外的 Scene 特性或网页运行时支持。

v1.0.0-rc.2:可选阻塞修复候选版 ​

主题:仅修复 rc.1 发现的发布阻塞问题。

允许工作:

  • 数据丢失修复;
  • 安装或启动失败修复;
  • 已验证 niri 上视频或已验收的实验性 Scene 应用/清除/恢复失败修复;
  • 错误支持范围声明修复;
  • 包或发布产物阻塞修复;
  • 严重文档不一致修复。

验收标准:

  • rc.1 阻塞问题已解决。
  • 不增加新功能范围。
  • 对受影响区域重新进行手动验证。

不得宣称超出 rc.1 范围的新能力。

v1.0.0:稳定 v1 ​

主题:可靠、诚实的首个稳定版本。

v1 交付内容:

  • 视频 Wallpaper Engine 壁纸可在已验证 Wayland + niri 路径上运行。
  • 场景提供兼容性报告,逐项验证的 2D 项目可实验性播放;其他场景特性和网页播放仍不可用。
  • Library-first 日常工作流。
  • 通过 Steam 进行 Workshop 发现/获取交接。
  • Desktop 显示器应用、清除和恢复流程。
  • Settings 持久化与诊断。
  • 英文和简体中文维护文档。
  • 发布产物:.deb、.rpm、.AppImage、AUR lwe 和 AUR lwe-git。

v1 验收标准:

  • 全套 CI 通过。
  • 文档构建通过。
  • 新安装路径已记录并验证。
  • 手动真实桌面 niri 验收通过。
  • 符合条件的 2D Scene 单独验收,不支持的场景/网页行为清楚且不可运行。
  • 已知限制已记录。
  • 发布说明准确描述支持范围。

v1 不得宣称:

  • 完整 Wallpaper Engine 兼容;
  • 完整场景运行时兼容或已记录实验性子集之外的特性;
  • 网页壁纸运行时;
  • 创作者/编辑工具;
  • 云或社区功能;
  • 高级自动化;
  • 泛 Wayland 支持;
  • 未经明确验证的 GNOME/KDE/Hyprland/sway 支持;
  • 独立于 Steam 的 LWE 托管 Workshop 下载。

日用可靠性验收(2026-10-12) ​

原可靠性计划使用隔离配置的真实 DesktopService 测试和持久记录器 scripts/scene-reliability.py。固定切换样本为 2903458386、3659880761、3337606455、3258032485,连续运行主样本为 2.5D Space。未来完整目标为同一后端 100 次完整 Scene → Video → Scene 往返、24 小时有实际呈现帧的场景运行,以及十次内核真实休眠恢复后分配保持且画面继续。用户已明确将物理休眠恢复移出本批,因为它会挂起 Codex;本批不执行、不计为通过,不休眠的记录使用 --suspend-cycles 0。时钟空档、锁屏、资源准备、mock 测试和中断片段均不计入有效运行时间。二进制、源码与输入身份、帧耗时直方图、RSS/PSS、原生分配器统计、FD/线程、DRM 指标和自有音频采集均写入本地证据。预热后 RSS/PSS 增长 64 MiB 与 30 FPS 渲染预算是明确验收限额,不扩大硬件支持声明。

独立特权脚本 scripts/scene-suspend-cycles.py 保留供未来明确包含物理恢复验收的任务使用:先设置自有 RTC 唤醒闹钟,再经正常 logind 休眠,保留 inhibitor 和锁屏,核验内核计数/日志并等待正常解锁和健康场景恢复,拒绝覆盖已有 RTC 闹钟或交流电断开。本批不执行该脚本。结束的记录器只能证明实际记录的目标:所需休眠次数为零不能证明物理恢复,短期冒烟或启动 24 小时任务也不算长期验收完成。