dsh-background-by-model 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,19 @@
1
1
  # Changelog
2
2
 
3
- > The full release history lives here; the **Recent optimizations** section of [README.md](./README.md#recent-optimizations) lists only the two most recent releases (v0.8.0 / v0.7.10).
3
+ > The full release history lives here; the **Recent optimizations** section of [README.md](./README.md#recent-optimizations) lists only the two most recent releases (v0.8.1 / v0.8.0).
4
+
5
+ ## v0.8.1
6
+
7
+ - **The wallpaper layer gains a brightness slider, next to opacity and blur** — the two existing sliders could take a picture down and frost it, but nothing could lift one: an underexposed photo, a night shot or a dim monitor meant editing the file before it went in. The new **背景亮度 / Background brightness** slider sits between them (`0–200%`, `100%` untouched, double-click to reset) and belongs to the rule, exactly like the other two, so each model's wallpaper keeps its own exposure. A festival wallpaper's brightness is yours as well, like its opacity and framing; its slot, mode and colors stay the definition's.
8
+ - **The two effects that share `filter` are composed in ONE place (a fix waiting to happen)** — brightness and blur are one CSS property, so a second assignment anywhere would have left whichever ran last and silently dropped the other. There is now a single `wpFilter()` that builds the string from the active rule (brightness first, blur second, and the neutral brightness left out so an untouched wallpaper keeps the empty `filter` it always had), and both the full apply and the live drag write through it. The old standalone `setWpBlur` helper had no callers and is now the parameterless `setWpFilter`.
9
+ - **`brightness` is optional in the shape on purpose** — every config written before this release lacks the key, and the absence has to keep meaning "the picture as it was saved" all the way to the render layer: `normalizeRule` leaves the key off rather than baking a default in (so an upgrade never rewrites a rule list to state what its owner was already looking at), and `rBrightness` is the one place the absence becomes `100`. A literal `undefined` there would have been copied over the live rule by `Object.assign`, which copies keys and not values — the slider reading 100 while the layer held nothing.
10
+ - **`SCHEMA_VERSION` moves to 7** — the field is new on the node side too, and a schema-6 sanitizer rebuilds each rule from the keys it knows, so a brightness the user just dragged would survive in memory until the next reload and then be gone in silence. Nothing has to be lifted the other way: an absent key already means untouched. A theme file exported by this build carries version 7 in the same change, and a v6 profile still imports.
11
+ - **Every page the centre column shows gets ONE opacity slider (插件页面)** — 插件, 自动化任务 and the pages a plugin registers of its own (上下文洞察) each bring their own root element and class name, so the item could not be a selector: it is whatever the main slot has mounted, which is what lets one row cover a page that does not exist yet. It is located as the child of `[data-slot="main"]` — a `display:contents` anchor with no box of its own, so the walk steps through box-less elements rather than settling on the first child — and the chat view, the slot's other occupant, is excluded by its own scrollport marker. Opacity only: the frost behind the column is the main background's blur. It ships at 0, where the plugin writes nothing at all.
12
+ - **A page is tinted through a variable, never an inline style** — the surface is a plugin-owned `--dsh-any-bg-page` read by a rule the plugin already injects, and a page carries only a `data-dab-page` attribute that is dropped again at zero. Nothing is stashed, so nothing can be restored wrong: `.t-XoWW_page`'s own `background: var(--dsw-alias-bg-base)` simply applies again, and the rule's fallback is that same host token, so a mark that outlived its variable could not leave a transparent hole.
13
+ - **The interface parts are found by name, not by position** — the frame grew a bottom row and a drag handle after the overlay, which quietly turned "the three children before the overlay" into "the centre column, the collapsed right column and the bottom row": the part sliders wrote where nobody looks and the conversation frame stopped answering its slider. Each column is now named by the class suffix its CSS module keeps across builds, and the right column by the host's own `data-rightbar-col`, with the positional answer only as the `??` fallback.
14
+ - **The Interface page loses every blur slider, and the capability behind them** — ten surfaces each carried a `0–60 px` frost, and none of them did anything worth keeping: what a blurred column frosted was the wallpaper behind it, which the wallpaper layer's own blur already does per rule, and what a blurred panel frosted was a backdrop nobody reads once the panel is translucent. The sliders, the `blurs` field, the underlays, the four plugin-owned CSS variables and the whole `setBlurs` channel are gone together, so the page is opacity and nothing else. The wallpaper's own 背景模糊 is untouched: a rule field, on the other page, and the one doing the visible work.
15
+ - **`SCHEMA_VERSION` lands on 9: a field added, then one removed** — the page tint is new, and a schema-7 sanitizer rebuilds the config from the keys it knows, so an alpha dragged onto a page would be gone at the next reload in silence (8). The per-surface blur then left the shape entirely, and that step reads the same mechanism backwards: a schema-8 sanitizer would re-add `blurs` from its own defaults — input & controls at 60 px — for a build that no longer has the slider (9). Neither direction needs a lift: an absent `pageOpacity` is the untouched zero, and an absent `blurs` is the state a schema-9 build wants.
16
+ - **Gates** — `check:node` pins the brightness round trip (the 200 % ceiling, the 0 floor, junk falling back to 100), the absent key surviving a write, and a config that still carries `blurs` loading with the field dropped in silence — a migration, not drift. `check:image-mode` pins the single composer behind all four filter assignments and the page item (the slot anchor, the box-less walk, the conversation's marker, the shipped zero, both apply sites), and its closing section requires the blur field, its writers, its channel and its dictionary key to be absent together with the announced shape past 8. `pnpm test` is ten checks, all passing.
4
17
 
5
18
  ## v0.8.0
6
19
 
package/CHANGELOG.zh.md CHANGED
@@ -1,6 +1,19 @@
1
1
  # 更新日志
2
2
 
3
- > 这里保留完整的历史记录;[README.zh.md](./README.zh.md#近期优化) 的「近期优化」一节只列最近两个版本(v0.8.0 / v0.7.10)。
3
+ > 这里保留完整的历史记录;[README.zh.md](./README.zh.md#近期优化) 的「近期优化」一节只列最近两个版本(v0.8.1 / v0.8.0)。
4
+
5
+ ## v0.8.1
6
+
7
+ - **壁纸层多了一条亮度滑块,就在透明度与模糊旁边** —— 原来那两条能把画面压暗、能起雾,却没有任何东西能把它提亮:曝光不足的照片、夜景、或者一块偏暗的屏幕,都只能先去改文件再放进来。新的**背景亮度**滑块夹在两者之间(`0–200%`,`100%` 即原图,双击复位),和另外两条一样属于规则,所以每个模型的壁纸各自保留自己的曝光。节日壁纸的亮度同样是你的,跟它的透明度和取景一样;槽位、布局模式和颜色仍然取自定义。
8
+ - **共用 `filter` 的两个效果现在只在一处合成(一个迟早会发生的坑)** —— 亮度和模糊是同一个 CSS 属性,任何第二处赋值都会让最后执行的那个生效、另一个被静默丢掉。现在只有 `wpFilter()` 一个函数从当前规则拼出这个字符串(亮度在前、模糊在后,中性亮度不写出来,于是没动过的壁纸仍然是它一直以来的空 `filter`),完整应用与拖动时的实时更新都走它。原来那个没有调用者的 `setWpBlur` 变成了不带参数的 `setWpFilter`。
9
+ - **`brightness` 在形状里是「可缺省」的,这是刻意的** —— 这个发行版之前的每份配置都没有这个键,而这个「没有」必须一路保持「图片原样」的含义:`normalizeRule` 选择不写这个键,而不是把一个默认值烤进去(所以升级永远不会重写某人的规则表去声明他本来就在看的东西),`rBrightness` 是唯一把「缺省」变成 `100` 的地方。那里若写成字面的 `undefined`,会被 `Object.assign` 覆盖到活的规则上——它复制的是键而不是值——于是滑块读作 100,而渲染层手里什么都没有。
10
+ - **`SCHEMA_VERSION` 升到 7** —— 这个字段在 node 半边也是新的,而 schema-6 的 sanitizer 会按它知道的键重建每条规则,所以用户刚拖出来的亮度会先在内存里活着、下次刷新后无声消失。反方向不需要任何抬升:键不在本来就意味着没动过。这一版导出的主题文件同样带 version 7,而 v6 的推荐配置照样能导入。
11
+ - **主区里的每一个整页现在有一条透明度滑块(插件页面)** —— 插件、自动化任务,以及任何插件自己注册的页(上下文洞察),每一页都带着自己的根元素和类名,所以这一条不可能是选择器:它认的是主区槽里当前挂着的那一个,而这也正是「一行管住一个还不存在的页」成立的原因。页面按 `[data-slot="main"]` 的子元素定位——锚点自己是 `display:contents`、没有盒子,所以走查会穿过没有盒子的元素——对话视图是同一个槽的另一个占用者,用它自己的滚动标记排除。刻意只做透明度:主区背后的磨砂已经是「主背景」那条模糊在做的事。它出厂就是 0,此时插件什么都不写。
12
+ - **接管页面走变量,永远不写内联样式** —— 底色是插件自己的 `--dsh-any-bg-page`,由插件本来就会注入的那条规则读取,页面上只多一个 `data-dab-page` 属性,回到 0 就摘掉。没有任何东西被存下来,也就不可能还原错:`.t-XoWW_page` 本来就从 `var(--dsw-alias-bg-base)` 取色,那句声明会重新生效;而规则的回退值就是这枚宿主 token,所以万一某个标记活得比变量久,也不会留下一个透明的洞。
13
+ - **界面各分区按名字找,不按位置找** —— 框架在覆盖层之后又长出了底栏和拖拽手柄,于是「覆盖层之前的那三个子元素」悄悄变成了「中间列、被折叠的右列和底栏」:分区滑块写到了没人看的元素上,对话框对它的滑块彻底不响应。现在每一列按它 CSS module 跨构建保留的类名后缀来命名,右列按宿主自己发布的 `data-rightbar-col`,旧的位置答案只作为 `??` 兜底。
14
+ - **「界面」页的模糊度滑块全没了,连同它们底下那套能力** —— 十块分区各带一条 `0–60 px` 起雾,而没有一条在留下用户真正想要的东西:被雾住的那一列,磨的是它背后的壁纸,而这件事壁纸层自己的模糊早就按规则在做;被雾住的面板,雾的是一块一旦半透明就没人再看的底色。滑块、`blurs` 字段、内联底层、四个插件自有 CSS 变量和整条 `setBlurs` 通道一起删掉,于是这一页只剩透明度。壁纸自己的「背景模糊」一个字没动 —— 它是规则字段、在另一页上,也正是那个真正看得见的效果。
15
+ - **`SCHEMA_VERSION` 落在 9:先加一个字段,再删一个** —— 页面底色是新字段,而 schema-7 的 sanitizer 会按它知道的键重建配置,所以刚拖到页面上的 alpha 会在下次刷新后无声消失(8)。随后界面各分区的模糊整个离开了形状,而这一步是同一个机制倒过来读:schema-8 的 sanitizer 会把 `blurs` 按它自己的默认值加回来 —— 输入框与控件 60 px —— 交给一个已经没有这条滑块的构建(9)。两个方向都不需要抬升:`pageOpacity` 缺省就是没动过的 0,`blurs` 缺省正是 schema-9 构建想要的状态。
16
+ - **门禁** —— `check:node` 钉住亮度往返(200% 上限、0 下限、垃圾值回落到 100)、键缺省时的写回,以及一份还带着 `blurs` 的配置被读入时字段静默消失(这是迁移,不是漂移)。`check:image-mode` 钉住四处 filter 赋值背后唯一的合成函数,以及「插件页面」自己那几条(槽锚点、穿过没有盒子的元素、出厂的 0、两处应用点);末尾新增一节要求模糊字段、写入方、通道与词典键一起不存在,并要求宿主自称的形状越过 8。`check:code-plate` 要求代码块那一行渲染在一个没有模糊行的页面上。`pnpm test` 十道全过。
4
17
 
5
18
  ## v0.8.0
6
19
 
package/README.md CHANGED
@@ -9,7 +9,7 @@ English | [中文](README.zh.md)
9
9
 
10
10
  > Forked from [`Tkingxiao/dsh-any-background`](https://github.com/Tkingxiao/dsh-any-background) and renamed to `dsh-background-by-model`.
11
11
 
12
- A **DeepSeek Harness** appearance plugin built around an **ordered list of model rules**: each rule carries its own images, opacity and blur, and each image its own layout mode, framing and theme color. Switch the model and the background switches with it, through the global [switch effect](#switch-effect-global) you choose on the Config page.
12
+ A **DeepSeek Harness** appearance plugin built around an **ordered list of model rules**: each rule carries its own images, opacity, brightness and blur, and each image its own layout mode, framing and theme color. Switch the model and the background switches with it, through the global [switch effect](#switch-effect-global) you choose on the Config page.
13
13
 
14
14
  > **v0.3.0 was a breaking release** — video wallpapers, generated backgrounds and the single global theme color were removed. See the [v0.3.0 entry in CHANGELOG.md](./CHANGELOG.md#v030).
15
15
 
@@ -61,7 +61,7 @@ One interface, one config — only the current model differs:
61
61
  <p align="center">
62
62
  <img src="https://cdn.jsdelivr.net/gh/HarmlessFunny/assets@v0.1.0/dsh-background-by-model/rule-editor.webp" alt="One rule's editor" width="660">
63
63
  <br/>
64
- <em>One rule on the Model Background tab · the wallpaper, its opacity and its blur belong to the rule; the layout mode, the framing and the theme color belong to the image being edited</em>
64
+ <em>One rule on the Model Background tab · the wallpaper, its opacity, its brightness and its blur belong to the rule; the layout mode, the framing and the theme color belong to the image being edited</em>
65
65
  </p>
66
66
 
67
67
  <p align="center">
@@ -74,7 +74,7 @@ One interface, one config — only the current model differs:
74
74
 
75
75
  An ordered list of rules, matched first-hit against the current model's name, with rule 1 as the fallback.
76
76
 
77
- - **Rules** — add, remove, reorder and name them; each carries its own match string, opacity and blur.
77
+ - **Rules** — add, remove, reorder and name them; each carries its own match string, opacity, brightness and blur.
78
78
  - **Images per rule** — a filmstrip filled by file picker, drag & drop or a list of URLs; reorder it, promote one to first, or replace one in place (which keeps its position in the rotation). A rule may also hold none, and an empty rule still matches while it has a theme color of its own, so emptying one is a visible state rather than a trap.
79
79
  - **Live match readout** — the Model Background tab shows which model was read and which rule it resolved to.
80
80
  - **Import / export** — the whole rule set as `dsh-background-by-model-theme.json` with every image inlined; files written by earlier releases still import.
@@ -116,11 +116,11 @@ One switch on the Config page and nothing else: on 中秋节 and 国庆节 the w
116
116
  - **Theme color** — HSL wheel, numeric input, **Extract from this image** and an eyedropper. It belongs to the **image**, and an image with none follows the system theme rather than inheriting its rule's.
117
117
  - **Layout mode** — fit / fill / stretch / tile / center, stored per image; disabled on a rule that holds no picture, rather than hidden.
118
118
  - **Framing** — drag to pan and scroll to zoom, editable in fit mode only, stored per image and stable across window resizes.
119
- - **Background opacity** `0–100%` and **background blur** `0–60 px`, both per rule.
119
+ - **Background opacity** `0–100%`, **background brightness** `0–200%` (`100%` is the picture as saved) and **background blur** `0–60 px`, all three per rule. They treat the wallpaper layer only — the Interface tab's opacity treats interface surfaces.
120
120
 
121
121
  ### Global settings (Interface tab)
122
122
 
123
- - **Opacity and blur per interface part** — main background, left panel, right panel, cards & menus, input & controls, settings panel, conversation text box and trajectory page, each with its own slider.
123
+ - **Opacity per interface part** — main background, left panel, right panel, cards & menus, input & controls, settings panel, conversation text box, trajectory page and every plugin page, each with its own slider.
124
124
  - **A fresh install already looks like the author's own profile**, so a first run needs no download to look right.
125
125
  - **Independent of the theme color** — a rule with no color keeps every one of these sliders live.
126
126
 
@@ -139,8 +139,8 @@ Settings → **Theme** now has three tabs:
139
139
 
140
140
  | Tab | Scope | Contents |
141
141
  | --- | --- | --- |
142
- | **Interface** | Global, shared by every model | Opacity & blur for the main background, left panel, right panel, cards & panels, input & controls, settings panel, conversation text box and trajectory page |
143
- | **Model Background** | Per rule, per image | The ordered rule list, the live match readout, and each rule's images (filmstrip), **per-image layout mode, framing and theme color**, plus the rule's opacity, blur and [rotation](#image-rotation) |
142
+ | **Interface** | Global, shared by every model | Opacity for the main background, left panel, right panel, cards & panels, input & controls, settings panel, conversation text box, trajectory page and every plugin page |
143
+ | **Model Background** | Per rule, per image | The ordered rule list, the live match readout, and each rule's images (filmstrip), **per-image layout mode, framing and theme color**, plus the rule's opacity, brightness, blur and [rotation](#image-rotation) |
144
144
  | **Config** | — | The global [switch effect](#switch-effect-global), the whole rule set as a file — [recommended profile](#recommended-profile), import and export (`dsh-background-by-model-theme.json`) — plus the single [holiday background](#holiday-backgrounds) switch |
145
145
 
146
146
  The old **Color** tab is gone — the theme color is now a property of each rule — and the old **Background** tab became **Model Background**.
@@ -270,16 +270,19 @@ The effect is **Instant**, or the duration is `0` — an effect and a duration a
270
270
 
271
271
  > Only the two most recent releases are listed here; older ones live in [CHANGELOG.md](./CHANGELOG.md).
272
272
 
273
+ ### v0.8.1
274
+
275
+ - **The wallpaper layer has a brightness slider now**, between opacity and blur (`0–200%`, `100%` untouched, double-click to reset), stored per rule like the other two. They could dim a picture and frost it; nothing could lift an underexposed one.
276
+ - **Brightness and blur share one `filter`, composed in a single function** — a second assignment would have silently dropped one of them. Both the full apply and the live drag write through it.
277
+ - **Every page the centre column shows is one row now (插件页面)**, opacity only: 插件, 自动化任务 and any page a plugin registers of its own are located by the slot they mount in rather than by name, so a page that does not exist yet is already covered. It ships at zero, where the plugin writes nothing at all.
278
+ - **The interface parts are found by name instead of by position** — the frame grew rows after the overlay, and "the three children before it" had quietly become the wrong columns, so the part sliders were writing where nobody looks.
279
+ - **The Interface tab's blur sliders are gone, and so is the capability behind them** — what they frosted was the wallpaper behind a column (the wallpaper layer's own blur already does that, per rule) or a backdrop nobody reads once a panel is translucent. The tab is opacity only now.
280
+
273
281
  ### v0.8.0
274
282
 
275
283
  - **The bundle is built when the tarball is packed, not committed** — `lib/` was ~1 MB of generated JavaScript per release and effectively all of this repository's growth; it is now gitignored and built by `prepack`, so what npm serves is always built from the tagged source.
276
284
  - **Installing straight from a GitHub checkout is gone** — that tree has no `lib/` and nothing in it builds one, so npm is the only source. Releases also now come from GitHub Actions over OIDC and carry build provenance.
277
285
 
278
- ### v0.7.10
279
-
280
- - **The festival art's cache is keyed by the pinned release** — `holiday-cache/<tag>/<asset>`, so a build pinning a new tag starts from a directory nobody has written to instead of being answered with the previous generation's bytes.
281
- - **A superseded generation is pruned**, at the end of a successful cache write and never before it, so a release that turns out to be unreachable cannot cost you the art you already have.
282
-
283
286
  ## Star History
284
287
 
285
288
  [![Star History Chart](https://api.star-history.com/chart?repos=HarmlessFunny/dsh-background-by-model&type=timeline&legend=bottom-right)](https://www.star-history.com/?repos=HarmlessFunny%2Fdsh-background-by-model&type=timeline&legend=bottom-right)
package/README.zh.md CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  > 派生自 [`Tkingxiao/dsh-any-background`](https://github.com/Tkingxiao/dsh-any-background),并重命名为 `dsh-background-by-model`。
11
11
 
12
- 一个 **DeepSeek Harness** 外观插件,核心是一份**有序的模型规则列表**:每条规则自带壁纸(可多张)、透明度与模糊度,**每张图各有自己的布局模式、取景与主题色**。切换模型即切换背景,切换过程走你在「配置」页选定的全局[切换效果](#切换效果全局)。
12
+ 一个 **DeepSeek Harness** 外观插件,核心是一份**有序的模型规则列表**:每条规则自带壁纸(可多张)、透明度、亮度与模糊度,**每张图各有自己的布局模式、取景与主题色**。切换模型即切换背景,切换过程走你在「配置」页选定的全局[切换效果](#切换效果全局)。
13
13
 
14
14
  > **v0.3.0 是破坏性更新** —— 视频背景、生成式背景与全局主题色均已被移除。详见 [CHANGELOG.zh.md 的 v0.3.0 条目](./CHANGELOG.zh.md#v030)。
15
15
 
@@ -61,7 +61,7 @@
61
61
  <p align="center">
62
62
  <img src="https://cdn.jsdelivr.net/gh/HarmlessFunny/assets@v0.1.0/dsh-background-by-model/rule-editor.webp" alt="单条规则的编辑器" width="660">
63
63
  <br/>
64
- <em>「模型背景」页的单条规则 · 壁纸、透明度与模糊度属于这条规则;布局模式、取景与主题色属于它正在编辑的那张图</em>
64
+ <em>「模型背景」页的单条规则 · 壁纸、透明度、亮度与模糊度属于这条规则;布局模式、取景与主题色属于它正在编辑的那张图</em>
65
65
  </p>
66
66
 
67
67
  <p align="center">
@@ -74,7 +74,7 @@
74
74
 
75
75
  一份有序的规则列表,按当前模型名先命中者胜,第 1 条兼任兜底。
76
76
 
77
- - **规则** —— 增删、排序、命名;每条自带匹配串、透明度与模糊度。
77
+ - **规则** —— 增删、排序、命名;每条自带匹配串、透明度、亮度与模糊度。
78
78
  - **每条规则多张图** —— 胶片条可用文件选择、拖放或一行一个网址填入;可排序、设为第一张、或原地替换(替换会保住它在轮换里的位置)。规则也可以一张图都没有,而只要它还有自己的主题色,空规则依旧参与匹配,所以「清空」是一个看得见的状态,而不是一个陷阱。
79
79
  - **实时匹配状态** —— 「模型背景」页会显示读到的是哪个模型、落在哪条规则上。
80
80
  - **导入 / 导出** —— 整套规则导出为 `dsh-background-by-model-theme.json`,图片全部内联;旧版本写出的文件仍可导入。
@@ -116,11 +116,11 @@
116
116
  - **主题色** —— HSL 色轮、数值输入、**从本图提取**与吸管。它属于**图片**,没有自己颜色的图跟随系统主题,而不是继承规则色。
117
117
  - **布局模式** —— 适应 / 填充 / 拉伸 / 平铺 / 居中,逐图保存;规则没有图片时这排是禁用而不是隐藏。
118
118
  - **取景** —— 拖动平移、滚轮缩放,只在适应模式下可编辑,逐图保存,窗口缩放后保持一致。
119
- - **背景透明度** `0–100%` 与**背景模糊** `0–60 px`,两者都按规则。
119
+ - **背景透明度** `0–100%`、**背景亮度** `0–200%`(`100%` 即原图)与**背景模糊** `0–60 px`,三者都按规则。它们只作用于壁纸层;「界面」页的透明度作用于界面各区域。
120
120
 
121
121
  ### 全局设置(「界面」页)
122
122
 
123
- - **每个界面部件各自的透明度与模糊度** —— 主背景、左侧栏、右侧栏、卡片与菜单、输入框与控件、设置面板、对话文本框、轨迹页,各有一条滑块。
123
+ - **每个界面部件各自的透明度** —— 主背景、左侧栏、右侧栏、卡片与菜单、输入框与控件、设置面板、对话文本框、轨迹页与每一个插件页,各有一条滑块。
124
124
  - **新装出来就已经是作者本人那套外观**,所以第一次运行不需要下载任何东西。
125
125
  - **与主题色无关** —— 规则没有主题色时,这些滑块全部照常可用。
126
126
 
@@ -139,8 +139,8 @@
139
139
 
140
140
  | 选项卡 | 作用范围 | 内容 |
141
141
  | --- | --- | --- |
142
- | **界面** | 全局,所有模型共用 | 主背景、左侧栏、右侧栏、卡片面板、输入框与控件、设置面板、对话文本框、轨迹页的透明度与模糊度 |
143
- | **模型背景** | 每条规则、每张图片 | 有序规则列表、实时匹配状态,以及每条规则的图片(胶片条)、**逐图布局模式 / 取景 / 主题色**,加上规则自己的透明度、模糊度与[多图轮换](#多图轮换) |
142
+ | **界面** | 全局,所有模型共用 | 主背景、左侧栏、右侧栏、卡片面板、输入框与控件、设置面板、对话文本框、轨迹页与每一个插件页的透明度 |
143
+ | **模型背景** | 每条规则、每张图片 | 有序规则列表、实时匹配状态,以及每条规则的图片(胶片条)、**逐图布局模式 / 取景 / 主题色**,加上规则自己的透明度、亮度、模糊度与[多图轮换](#多图轮换) |
144
144
  | **配置** | — | 全局[切换效果](#切换效果全局)、整套规则的进出 —— [推荐配置](#推荐配置)与导入 / 导出(`dsh-background-by-model-theme.json`)—— 外加[节日特殊背景](#节日特殊背景)那一个开关 |
145
145
 
146
146
  原先的**「色彩」**选项卡已删除 —— 主题色改为规则与图片各自的属性 —— 原**「背景」**选项卡改造成**「模型背景」**。
@@ -270,16 +270,19 @@ pnpm test # 构建 lib/、类型检查、跑十道检查
270
270
 
271
271
  > 这里只列最近两个版本;更早的版本见 [CHANGELOG.zh.md](./CHANGELOG.zh.md)。
272
272
 
273
+ ### v0.8.1
274
+
275
+ - **壁纸层多了亮度滑块**,夹在透明度与模糊之间(`0–200%`,`100%` 即原图,双击复位),和另外两条一样按规则保存。它们能把画面压暗、能起雾,却没有任何东西能把一张曝光不足的图提亮。
276
+ - **亮度与模糊共用一个 `filter`,只在唯一的函数里合成** —— 第二处赋值会让其中一个被静默丢掉,所以完整应用与拖动时的实时更新都走同一个函数。
277
+ - **主区里的每一个整页现在是一行(插件页面)**,只做透明度:插件、自动化任务,以及任何插件自己注册的页,都按它挂载的槽来认而不是按名字,所以一个还不存在的页也已经被覆盖。它出厂就是 0,此时插件什么都不写。
278
+ - **界面各分区按名字找,不按位置找** —— 框架在覆盖层之后又长出了行,「覆盖层之前的那三个子元素」悄悄变成了错的列,分区滑块一直在往没人看的地方写。
279
+ - **「界面」页的模糊度滑块删掉了,连同它们底下那套能力** —— 被雾住的那一列,磨的其实是它背后的壁纸(这件事壁纸层自己的模糊早就按规则在做);被雾住的面板,雾的是一块一旦半透明就没人再看的底色。这一页现在只剩透明度。
280
+
273
281
  ### v0.8.0
274
282
 
275
283
  - **构建产物在打包时生成,不再提交进仓库** —— `lib/` 是每次发版约 1 MB 的生成代码,也几乎就是这个仓库增长的全部;现在它被 gitignore 挡住、由 `prepack` 生成,所以 npm 上发出去的永远是从被打 tag 的那份源码构建出来的。
276
284
  - **不能再直接从 GitHub 仓库安装了** —— 那棵树里没有 `lib/`,也没有任何东西会去构建它,所以只剩 npm 一个来源。发版也改由 GitHub Actions 走 OIDC 完成,并附带构建 provenance。
277
285
 
278
- ### v0.7.10
279
-
280
- - **节日画的缓存现在按所钉的发行版做键** —— `holiday-cache/<tag>/<asset>`,于是钉了新 tag 的构建从一个没人写过的目录开始,而不是被告知上一代的字节就是答案。
281
- - **被取代的那一代会被清掉**,在一次成功的缓存写入末尾、绝不在之前,所以一个取不到的发行版不会让用户丢掉他已经有的画。
282
-
283
286
  ## Star History
284
287
 
285
288
  [![Star History Chart](https://api.star-history.com/chart?repos=HarmlessFunny/dsh-background-by-model&type=timeline&legend=bottom-right)](https://www.star-history.com/?repos=HarmlessFunny%2Fdsh-background-by-model&type=timeline&legend=bottom-right)