从左侧选择一个壁纸开始渲染

          

          
          
        

使用说明(本页自写)

这是 wallpaper-engine-web-loader 的浏览器端测试台:一个静态页面 + WebGL2, 不装 Wallpaper Engine、不装任何 Windows 依赖,就能实时渲染 scene.pkg / .mpkg 场景壁纸。 本仓库不分发任何真实壁纸,默认载入的是我们自己用算术生成的合成样例。

界面怎么读

区域是什么
顶部 tab(控制台 / 说明 / 壁纸设置)三个页面:控制台=渲染与调试;说明=本页;壁纸设置=壁纸自带选项与对应 API 的对照表
左侧「选择壁纸」壁纸库列表(本机后端提供,或点「选择文件夹」在浏览器里扫描本地目录)
左侧「壁纸参数」当前壁纸 project.json 里声明的可自定义项(滑条 / 勾选 / 取色 / 下拉 / 文本、条件隐藏项)
右侧「设置1」分辨率 / 适应方式 / DPR / FPS 上限 / 音量 / 系统实况 / 指针注入 / 鼠标尾迹 / 暂停·重挂载·释放·新窗口·滤镜
右侧「壁纸」渲染舞台(iframe 内跑渲染器);右上角有全屏按钮
右侧「控制台」渲染器日志与 /diag 诊断流;顶栏按钮可收起,拖动上沿可调高度
底部状态栏库数量 / 当前壁纸 / 分辨率 / DPR / 帧率上限 / 实测 FPS

三步开始

  1. 点顶部 设置 → 语言 选中文/英文;主题一行给了两个开关(深色 / 浅色,不再有"跟随系统"),点旁边的太阳/月亮按钮则在两者之间来回切。
  2. 壁纸:默认已载入合成样例;要换自己的,点「选择文件夹」(纯前端扫描,文件不离开浏览器)或把壁纸放进本机后端配置的库目录。
  3. 调参:选中壁纸后在左侧「壁纸参数」里改;右侧「设置1」调分辨率 / FPS / 音量等运行参数。

顶部壁纸切换栏(设置1 上方)

那一行就是「切换栏」:当前壁纸是第一个 tab(标题即壁纸名),后面是本页补丁按壁纸库生成的其它壁纸 tab, 最右边的 会切到「选择未选中的壁纸」——它把左侧列表切到「选择壁纸」并过滤掉当前项, 你在左边点一个就完成切换。

壁纸设置(第 3 个 tab)

那张表把 Wallpaper Engine 自带的壁纸选项(翻转 / 播放速度 / 显示颜色选项:亮度·对比度·饱和度·色调偏移 …) 与本页能改它的方式一一对上:能改的给出 API / JSON 键 / 查询参数,WE 自带不需要写的明确标「自带,无需实现」。

在线版(GitHub Pages)会少什么

线上是纯静态托管,没有本机 Node 后端:壁纸库列表 / 属性保存 / 删除 / 打开所在文件夹 / 渲染器诊断流/api/*/diag)全部不可用 —— 这是设计如此,不是故障,页面会把这些控件置灰并写明原因。 「选择文件夹」纯前端扫描照常可用,默认壁纸仍是合成样例。完整功能请在本仓库源码目录跑 node server/we-scene-demo-server.mjs 8899(或 bash start-demo.sh)。

许可与归属

  • 本仓库渲染器:GPL-3.0-or-later;第三方与参考资料逐条登记在 THIRD-PARTY.md
  • 命名说明:本项目有两个名称:WEwebLoader;npm 包名与仓库名仍是 wallpaper-engine-web-loader
  • 本页是 WebWallGL 静态构建产物的补丁版再分发,上游 oneincase/webwallglMIT © 2026 oneincase),许可全文随页分发: LICENSE-webwallgl-MIT.txtLICENSE-webwallgl
  • 图标 Lucide(ISC);合成样例由 tools/make-sample.mjs 生成,无第三方内容。

User guide (written for this page)

This is the browser-side test bench of wallpaper-engine-web-loader: one static page plus WebGL2 renders Wallpaper Engine scene.pkg / .mpkg wallpapers live — no Wallpaper Engine install, no Windows dependencies. This repository redistributes no real wallpaper; the default is a synthetic sample we generate ourselves.

Reading the layout

AreaWhat it is
Top tabs (Console / Guide / Wallpaper settings)Three pages: console (render + debug), this guide, and the table mapping Wallpaper Engine's own wallpaper options to the API that changes them
Left “Choose wallpaper”The library list (from the local Node backend, or scanned in-browser via “Choose folder”)
Left “Wallpaper parameters”The customizable items declared in the wallpaper's project.json
Right “Settings 1”Resolution / fit / DPR / FPS cap / volume / live system / pointer injection / mouse trail / pause · remount · release · new window · filter
Right “Wallpaper”The render stage (the renderer runs inside an iframe); fullscreen button top-right
Right “Console”Renderer log and the /diag stream; collapse with the button, drag the top edge to resize
Status barLibrary counts / current wallpaper / resolution / DPR / FPS cap / measured FPS

Three steps to start

  1. Top Settings → Language; the Theme row gives two explicit switches (dark / light — there is no “follow system” mode any more), and the sun/moon button toggles between the two.
  2. Wallpaper: the synthetic sample is already loaded; use “Choose folder” for your own (read in-browser, files never leave it).
  3. Tune: wallpaper-specific knobs on the left, runtime knobs (resolution / FPS / volume) in “Settings 1”.

Wallpaper switcher (above “Settings 1”)

The current wallpaper is the first tab (its title is the wallpaper name); further tabs are generated from the library by this page's patch, and the at the right jumps to “choose another wallpaper” — it switches the left list to “Choose wallpaper”, filters out the current item, and one click there performs the switch.

Wallpaper settings (third tab)

The table pairs Wallpaper Engine's own wallpaper options (flip / playback rate / colour options: brightness, contrast, saturation, hue shift …) with how this page changes them: an API, a JSON key or a query parameter where one exists; “built-in, nothing to implement” where Wallpaper Engine already owns it.

What the online (GitHub Pages) build lacks

Online is plain static hosting with no local Node backend, so the library listing, property saving, deleting, reveal-in-folder and the diagnostics stream (/api/*, /diag) are unavailable — by design, not a failure; those controls are greyed out with the reason shown. “Choose folder” still works and the default wallpaper remains the synthetic sample. For the full bench run node server/we-scene-demo-server.mjs 8899 in the source tree.

Licence & attribution

  • This repository's renderer: GPL-3.0-or-later; third-party components are itemised in THIRD-PARTY.md.
  • Naming note: this product is now called WEwebLoader; the upstream project is still WebWallGL (oneincase/webwallgl, MIT) — its attribution and licence are unchanged.
  • This page is a patched redistribution of the WebWallGL static build by oneincase/webwallgl (MIT © 2026 oneincase); both licence copies ship with the page: LICENSE-webwallgl-MIT.txt, LICENSE-webwallgl.
  • Icons: Lucide (ISC). The synthetic sample is generated by tools/make-sample.mjs and carries no third-party content.

壁纸设置 ↔ 对应 API

三类来源分清楚:WE 自带 无需我们实现; 本页已实现 给出可直接用的 API;需实现 给出计划中的键名与挂点。 右侧「设置1」里出现的开关就是本页的实现面;「壁纸参数」里的项来自壁纸自己的 project.json

1. Wallpaper Engine 自带的壁纸选项

WE 里的名字WE 内部键(本机 ui_zh-chs.json 实测)本页怎么改(API / 键 / 参数)状态
翻转(水平翻转)ui_browse_properties_alignment_flip_horizontally渲染输出整体 transform: scaleX(-1)__wp.setDisplay({flipH:true}) / ?fliph=1(对应 CSS 变量 --mpw-flip-h需实现
对齐方式 / 缩放ui_browse_properties_alignment · …_alignment_zoom已实现:工具条「分辨率 / 适应方式」(#fit)+ ?fit=cover|contain|stretch;缩放走壁纸 project.json → general.zoom 与相机层 zoom已实现
播放速度 0.5–2×ui_browse_properties_playback_rate全局动画/视频时间倍率:__wp.setPlaybackRate(1.5) / ?rate=1.5(乘到动画 dt 与 video.playbackRate需实现
显示颜色选项(总开关)ui_browse_properties_show_color_options打开后才显示下面四项;关闭时四项不参与滤镜:__wp.setDisplay({colorOptions:false})需实现
亮度 / 对比度 / 饱和度 / 色调偏移ui_browse_properties_brightness · _contrast · _saturation · _hue_shift合成一条 CSS filter 挂在渲染输出上:brightness(b) contrast(c) saturate(s) hue-rotate(h deg);API __wp.setDisplay({brightness:1.1, contrast:1.05, saturation:1.2, hue:15}),查询参数 ?bright=1.1&contrast=1.05&satur=1.2&hue=15。做法与 DSH 插件一致(插件就是 CSS filter,见 dsh-mpkg-wallpaper/lib/client.js 的「画面亮度」段)需实现
音量 / 静音ui_browse_monitors_mute · WE 全局音量已实现:工具条「音量」滑条 #volume;页面内 __wp.setVolume(0.5)已实现
对动作做出反应(视差/陀螺仪)ui_browse_properties_parallax不做(用户口径:无陀螺仪 / 不做这项);若将来做,走指针注入通道 __wp.pushPointer(x,y) 已有不做
录音(WE 自带录屏 / 录音音量)ui_settings_hotkeys_action_recording · ui_settings_recording_volumeWE 客户端自带功能,不在页面内实现;要录屏用系统/浏览器自带录制(MediaRecorder 可后续按需加)自带

2. 壁纸自己的可调项(project.json → general.properties

本页怎么改状态
滑条 / 勾选 / 取色 / 下拉 / 文本 / 分组标题 / 条件隐藏左侧「壁纸参数」面板直接改;等价的 URL 形式 ?props=name:value,…(本机后端会落盘保存)已实现
粒子层 / 动画层 / 文本层覆盖属性面板里同名项(visible/alpha/color/brightness/origin/scale/size/parallaxDepth/text已实现

3. 运行参数(不属于 WE,但调试常用)

参数API / 控件
逻辑分辨率 / 适应方式 / DPR#resolution · #fit · #dpr;查询参数 ?res=1920x1080&fit=cover&dpr=1
FPS 上限#fps(无上限 = 跟随显示器)
系统实况(歌名 / 频谱)#live-system;本机后端读 media-control,频谱走麦克风
指针注入 / 鼠标尾迹#pointer-push · #trail-on;坐标通道 __wp.pushPointer(x,y)
质量档位 / AA / 滤镜?q=low|mid|high · ?aa=fxaa|msaa4 · #fx

4. 怎么自己试

// 浏览器控制台(先选中一张壁纸,等 __wp 就绪)
const wp = document.querySelector('#frame').contentWindow.__wp
wp.setDisplay({ brightness: 1.15, contrast: 1.05, saturation: 1.2, hue: 12 })  // 颜色选项
wp.setDisplay({ flipH: true })                                                // 翻转
wp.setPlaybackRate(1.5)                                                       // 播放速度
wp.setVolume(0.4)                                                             // 音量
wp.pushPointer(0.5, 0.5)                                                      // 指针(归一化坐标)

说明:上表中标 需实现 的 API 是本页下一步要接的键名(写成文档先定契约, 实现后本页会把状态改成「已实现」并补一条门禁)。WE 自带项不需要我们写任何代码。

Wallpaper settings ↔ the API that changes them

Three sources, kept apart: WE built-in (nothing for us to implement), implemented here (the API you can call today), to implement (agreed key names and the hook point). The toggles in “Settings 1” are this page's implementation surface; the items in “Wallpaper parameters” come from the wallpaper's own project.json.

1. Wallpaper Engine's own wallpaper options

Name in WEWE's internal key (measured from this machine's ui_zh-chs.json)How this page changes itStatus
Flip (horizontal)ui_browse_properties_alignment_flip_horizontallyWhole output transform: scaleX(-1): __wp.setDisplay({flipH:true}) / ?fliph=1to implement
Alignment / zoomui_browse_properties_alignment · …_alignment_zoomImplemented: toolbar “Resolution / fit” (#fit) and ?fit=cover|contain|stretch; zoom follows project.json → general.zoom and camera-layer zoomimplemented
Playback rate 0.5–2×ui_browse_properties_playback_rateGlobal time multiplier: __wp.setPlaybackRate(1.5) / ?rate=1.5 (multiplies animation dt and video.playbackRate)to implement
Show colour options (master)ui_browse_properties_show_color_optionsWhen off, the four below are excluded from the filter chain: __wp.setDisplay({colorOptions:false})to implement
Brightness / contrast / saturation / hue shift…_brightness · …_contrast · …_saturation · …_hue_shiftOne CSS filter on the render output: brightness() contrast() saturate() hue-rotate(); __wp.setDisplay({brightness:1.1,contrast:1.05,saturation:1.2,hue:15}), query ?bright=…&contrast=…&satur=…&hue=…. Same approach the DSH plugin already uses (CSS filter — see its “screen brightness” section)to implement
Volume / muteui_browse_monitors_mute · WE global volumeImplemented: toolbar “Volume” slider #volume; in-page __wp.setVolume(0.5)implemented
React to motion (parallax / gyroscope)ui_browse_properties_parallaxNot doing (no gyroscope); the pointer channel __wp.pushPointer(x,y) already exists if wanted laterN/A
Recording (WE recorder / recording volume)ui_settings_hotkeys_action_recording · ui_settings_recording_volumeOwned by the WE client; not implemented in-page (system/browser recording is the alternative)built-in

2. The wallpaper's own properties (project.json → general.properties)

ItemHow to change itStatus
Slider / checkbox / colour / combo / text / group / condition-hiddenThe left “Wallpaper parameters” panel; URL form ?props=name:value,… (the local backend persists it)implemented
Particle / animation / text layer overridesSame-name items in the properties panelimplemented

3. Runtime parameters (not WE's, but the usual debugging knobs)

ParameterAPI / control
Logical resolution / fit / DPR#resolution · #fit · #dpr; query ?res=1920x1080&fit=cover&dpr=1
FPS cap#fps (uncapped = follow the display)
Live system (title / spectrum)#live-system; the local backend reads media-control, the spectrum comes from the microphone
Pointer injection / mouse trail#pointer-push · #trail-on; coordinate channel __wp.pushPointer(x,y)
Quality tiers / AA / filter?q=low|mid|high · ?aa=fxaa|msaa4 · #fx

4. Try it yourself

// Browser console (pick a wallpaper first and wait for __wp)
const wp = document.querySelector('#frame').contentWindow.__wp
wp.setDisplay({ brightness: 1.15, contrast: 1.05, saturation: 1.2, hue: 12 })
wp.setDisplay({ flipH: true })
wp.setPlaybackRate(1.5)
wp.setVolume(0.4)
wp.pushPointer(0.5, 0.5)

Rows marked to implement are the key names this page will wire next (documented first as a contract; when implemented the status flips to “implemented” and a gate covers it). Wallpaper Engine's own options need no code from us.