Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@
<sub>暗色 · 真实注入截图(未发送输入已在截图时遮蔽,仅预览)</sub>
</p>

这组人物素材留在源码仓库用于参考与权利核验,不进入公开 DMG / Setup.exe;公开安装包只预置已确认
可分发的 Gothic Void Crusade。普通用户仍可从菜单里的「更换背景图」导入自己有权使用的纯背景,
这组人物素材留在源码仓库用于参考与权利核验,不进入公开 DMG / Setup.exe;公开 macOS 安装包预置已确认
可分发的 Gothic Void Crusade 与原创「青蓝虚拟歌姬」。普通用户仍可从菜单里的「更换背景图」导入自己有权使用的纯背景,
保存后继续一键切换。

> 可下载的用户源图是 [`docs/images/presets/arina-hashimoto-source.png`](./docs/images/presets/arina-hashimoto-source.png)(`1672 × 941`);源码参考预设使用 [`macos/presets/preset-arina-hashimoto/background.jpg`](./macos/presets/preset-arina-hashimoto/background.jpg)(规范化派生 `2560 × 1440`)。上面两个效果图包含真实 UI,**只作预览,绝不能当背景导入**。背景为用户提供的 AI 生成示例,不代表 OpenAI/Codex 官方视觉或背书;未确认人物与素材权利前不得把它打进公开安装包。
Expand Down
6 changes: 6 additions & 0 deletions macos/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## 未发布

### 新增

- 新增可公开分发的「青蓝虚拟歌姬」浅色预设,随 macOS 安装包播种,并用固定素材与元数据哈希保护已审核内容。

## 1.3.3 — 2026-07-23

### 修复
Expand Down
10 changes: 10 additions & 0 deletions macos/NOTICE.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,16 @@ this MIT-licensed project. It is the redistributable default artwork included in
the public macOS and Windows installers. Its name and artwork do not imply
OpenAI/Codex affiliation or endorsement.

## Cyan Virtual Diva

`presets/preset-cyan-virtual-diva/background.jpg` is maintainer-supplied
original artwork depicting a fictional adult virtual singer. It was created
for this project without an identifiable real-person likeness, named
third-party character, or official OpenAI/Codex artwork. The maintainer grants
permission to redistribute the image and its theme metadata as part of Codex
Dream Skin source archives and public installers. The preset does not imply
OpenAI/Codex affiliation or endorsement.

## Arina Hashimoto reference material

The following user/maintainer-supplied files are excluded from the MIT software license:
Expand Down
4 changes: 2 additions & 2 deletions macos/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@ CDP is powerful and unauthenticated on loopback. Prefer Restore when you are don

## Bundled presets

The public DMG seeds **Gothic Void Crusade**, contributed through PR #134, as
its redistributable default. A source checkout also contains the
The public DMG seeds **Gothic Void Crusade**, contributed through PR #134, and
the original **青蓝虚拟歌姬 / Cyan Virtual Diva** light preset. A source checkout also contains the
**桥本有菜 / Arina Hashimoto** reference material, but the public app bundle
deliberately excludes it until independent likeness and redistribution rights
are confirmed.
Expand Down
11 changes: 7 additions & 4 deletions macos/presets/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@

## 内置实测预设

当前内置 `preset-gothic-void-crusade/`(Gothic Void Crusade)与
`preset-arina-hashimoto/`(桥本有菜 / Arina Hashimoto)两套实机验证主题。
前者是社区作者提供的原创哥特科幻背景;后者使用一张
当前内置 `preset-gothic-void-crusade/`(Gothic Void Crusade)、
`preset-cyan-virtual-diva/`(青蓝虚拟歌姬)与
`preset-arina-hashimoto/`(桥本有菜 / Arina Hashimoto)三套实机验证主题。
前两套是可进入公开安装包的原创虚构作品;后者使用一张
`2560 × 1440`(16:9)纯背景:左侧低信息留白承载 Codex 原生标题,人物和花卉主视觉集中在右侧。浅色与暗色截图均来自真实 Codex 注入,不是 AI 绘制的整窗 UI。

青蓝虚拟歌姬背景为维护者提供的原创虚构成年角色作品,未使用真人肖像、第三方角色名称或官方 Codex/OpenAI 素材;`2400 × 1350` JPEG 与主题元数据按贡献声明授权随本项目公开安装包再分发。具体哈希由 macOS 构建脚本锁定,素材声明见 [`../NOTICE.md`](../NOTICE.md)。

来源尺寸必须如实区分:归档的用户源图(不随 preset 播种)是 `1672 × 941` PNG;preset 内的 `background.jpg` 保持其近 16:9 构图,标准化导出为 `2560 × 1440` JPEG,并不代表补回或新增了源图细节。派生文件使用 `sips -z 1440 2560 -s format jpeg -s formatOptions 90` 生成。

- 可导入/可播种的主题素材只有 [`background.jpg`](./preset-arina-hashimoto/background.jpg) 与 [`theme.json`](./preset-arina-hashimoto/theme.json)。
Expand All @@ -23,7 +26,7 @@

```bash
~/.codex/codex-dream-skin-studio/scripts/switch-theme-macos.sh \
--id preset-arina-hashimoto
--id preset-cyan-virtual-diva
```

## 一套预设的结构
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
31 changes: 31 additions & 0 deletions macos/presets/preset-cyan-virtual-diva/theme.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"schemaVersion": 1,
"id": "preset-cyan-virtual-diva",
"name": "青蓝虚拟歌姬",
"brandSubtitle": "CYAN WAVE STAGE",
"tagline": "让灵感沿着光与节拍流动。",
"projectPrefix": "选择项目 · ",
"projectLabel": "◉ 选择项目",
"statusText": "CYAN WAVE ONLINE",
"quote": "BUILD IN YOUR OWN FREQUENCY",
"image": "background.jpg",
"appearance": "light",
"art": {
"focusX": 0.79,
"focusY": 0.44,
"safeArea": "left",
"taskMode": "ambient"
},
"colors": {
"background": "#eef8fc",
"panel": "#f6fcff",
"panelAlt": "#dff4f8",
"accent": "#1abbd0",
"accentAlt": "#54dce2",
"secondary": "#155b8e",
"highlight": "#786ee8",
"text": "#153b55",
"muted": "#5b7788",
"line": "rgba(28, 164, 196, .24)"
}
}
2 changes: 2 additions & 0 deletions macos/scripts/build-dmg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ MOUNTED_APP="$MOUNT/Codex Dream Skin.app"
|| { printf 'Mounted app is missing license notices.\n' >&2; exit 1; }
[ -f "$MOUNTED_APP/Contents/Resources/engine/presets/preset-gothic-void-crusade/theme.json" ] \
|| { printf 'Mounted app is missing the public release preset.\n' >&2; exit 1; }
[ -f "$MOUNTED_APP/Contents/Resources/engine/presets/preset-cyan-virtual-diva/theme.json" ] \
|| { printf 'Mounted app is missing the Cyan Virtual Diva preset.\n' >&2; exit 1; }
[ ! -e "$MOUNTED_APP/Contents/Resources/engine/presets/preset-arina-hashimoto" ] \
|| { printf 'Mounted app contains a rights-restricted preset.\n' >&2; exit 1; }
for excluded in build-client-release.sh build-dmg.sh build-menubar-app.sh build-release.sh \
Expand Down
42 changes: 27 additions & 15 deletions macos/scripts/build-menubar-app.sh
Original file line number Diff line number Diff line change
Expand Up @@ -112,21 +112,33 @@ for name in "${RUNTIME_SCRIPTS[@]}"; do
done
[ -d "$ROOT/assets" ] || { printf 'Engine directory missing: assets\n' >&2; exit 1; }
/usr/bin/rsync -a "$ROOT/assets/" "$ENGINE/assets/"
PUBLIC_PRESET="preset-gothic-void-crusade"
PUBLIC_PRESET_SHA256="b76a7cbe2ff9d923846e931984d243a7ba1f25de8d190b5c6412c809c41aee42"
PUBLIC_PRESET_THEME_SHA256="8316c6ad29e3b84806358ab4a730c7e063b261e379179b9608cf751c282d66a7"
[ -d "$ROOT/presets/$PUBLIC_PRESET" ] \
|| { printf 'Public release preset missing: %s\n' "$PUBLIC_PRESET" >&2; exit 1; }
actual_public_preset_sha256="$(LC_ALL=C /usr/bin/shasum -a 256 \
"$ROOT/presets/$PUBLIC_PRESET/background.jpg" | /usr/bin/awk '{print $1}')"
[ "$actual_public_preset_sha256" = "$PUBLIC_PRESET_SHA256" ] \
|| { printf 'Reviewed public preset hash changed: %s\n' "$actual_public_preset_sha256" >&2; exit 1; }
actual_public_preset_theme_sha256="$(LC_ALL=C /usr/bin/shasum -a 256 \
"$ROOT/presets/$PUBLIC_PRESET/theme.json" | /usr/bin/awk '{print $1}')"
[ "$actual_public_preset_theme_sha256" = "$PUBLIC_PRESET_THEME_SHA256" ] \
|| { printf 'Reviewed public preset metadata hash changed: %s\n' "$actual_public_preset_theme_sha256" >&2; exit 1; }
/bin/mkdir -p "$ENGINE/presets/$PUBLIC_PRESET"
/usr/bin/rsync -a "$ROOT/presets/$PUBLIC_PRESET/" "$ENGINE/presets/$PUBLIC_PRESET/"
copy_public_preset() {
local preset_id="$1"
local expected_image_sha256="$2"
local expected_theme_sha256="$3"
local actual_image_sha256
local actual_theme_sha256
[ -d "$ROOT/presets/$preset_id" ] \
|| { printf 'Public release preset missing: %s\n' "$preset_id" >&2; exit 1; }
actual_image_sha256="$(LC_ALL=C /usr/bin/shasum -a 256 \
"$ROOT/presets/$preset_id/background.jpg" | /usr/bin/awk '{print $1}')"
[ "$actual_image_sha256" = "$expected_image_sha256" ] \
|| { printf 'Reviewed public preset image hash changed: %s %s\n' "$preset_id" "$actual_image_sha256" >&2; exit 1; }
actual_theme_sha256="$(LC_ALL=C /usr/bin/shasum -a 256 \
"$ROOT/presets/$preset_id/theme.json" | /usr/bin/awk '{print $1}')"
[ "$actual_theme_sha256" = "$expected_theme_sha256" ] \
|| { printf 'Reviewed public preset metadata hash changed: %s %s\n' "$preset_id" "$actual_theme_sha256" >&2; exit 1; }
/bin/mkdir -p "$ENGINE/presets/$preset_id"
/usr/bin/rsync -a "$ROOT/presets/$preset_id/" "$ENGINE/presets/$preset_id/"
}
copy_public_preset \
"preset-gothic-void-crusade" \
"b76a7cbe2ff9d923846e931984d243a7ba1f25de8d190b5c6412c809c41aee42" \
"8316c6ad29e3b84806358ab4a730c7e063b261e379179b9608cf751c282d66a7"
copy_public_preset \
"preset-cyan-virtual-diva" \
"124d1f8a74fb580ed8a3412a09087e5cce1a84845a872a399cc540f217f50bef" \
"8ae4995aad670f815431c15aec5bb801d52a6587ba23b98e472f1b54dfccc573"
/bin/cp "$ROOT/VERSION" "$ENGINE/VERSION"
/bin/cp "$ROOT/LICENSE" "$RESOURCES/LICENSE.txt"
/bin/cp "$ROOT/NOTICE.md" "$RESOURCES/NOTICE.md"
Expand Down
15 changes: 15 additions & 0 deletions macos/tests/image-metadata.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,21 @@ assert.deepEqual(readImageMetadata(gothic, ".jpg"), {
taskMode: "ambient",
});

const cyanVirtualDiva = await fs.readFile(path.join(
macosRoot,
"presets",
"preset-cyan-virtual-diva",
"background.jpg",
));
assert.deepEqual(readImageMetadata(cyanVirtualDiva, ".jpg"), {
width: 2400,
height: 1350,
ratio: 2400 / 1350,
wide: true,
aspect: "wide",
taskMode: "ambient",
});

assert.deepEqual(classifyImageDimensions({ width: 2400, height: 1350 }), {
width: 2400,
height: 1350,
Expand Down
12 changes: 11 additions & 1 deletion macos/tests/run-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,14 @@ if ! /usr/bin/grep -F -q "presets/preset-arina-hashimoto/" \
printf 'Standalone release builders must explicitly exclude the restricted Arina preset.\n' >&2
exit 1
fi
for public_release_script in build-menubar-app.sh build-dmg.sh; do
if ! /usr/bin/grep -F -q "preset-cyan-virtual-diva" \
"$ROOT/scripts/$public_release_script"; then
printf 'Public release script must include the Cyan Virtual Diva preset: %s\n' \
"$public_release_script" >&2
exit 1
fi
done
if ! /usr/bin/grep -F -q 'DEPLOY_PREVIOUS' "$ROOT/scripts/install-dream-skin-macos.sh" ||
! /usr/bin/grep -F -q 'rollback_deployed_project' "$ROOT/scripts/install-dream-skin-macos.sh"; then
printf 'The macOS outer installer must roll back a failed engine deployment.\n' >&2
Expand Down Expand Up @@ -281,10 +289,12 @@ fi
[ -f "$themes/preset-gothic-void-crusade/background.jpg" ] || exit 1
[ -f "$themes/preset-arina-hashimoto/theme.json" ] || exit 1
[ -f "$themes/preset-arina-hashimoto/background.jpg" ] || exit 1
[ -f "$themes/preset-cyan-virtual-diva/theme.json" ] || exit 1
[ -f "$themes/preset-cyan-virtual-diva/background.jpg" ] || exit 1
[ -f "$themes/custom-keepme/theme.json" ] || exit 1
for id in $retired; do [ ! -e "$themes/$id" ] || exit 1; done
seeded="$(/usr/bin/find "$themes" -maxdepth 1 -type d -name "preset-*" | /usr/bin/wc -l | /usr/bin/tr -d " ")"
[ "$seeded" -eq 2 ] || exit 1
[ "$seeded" -eq 3 ] || exit 1
' _ "$ROOT"

run_signed_runtime_switch_test() {
Expand Down