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
1 change: 1 addition & 0 deletions ASSET_LICENSES.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ under Creative Commons Attribution 4.0 International (CC BY 4.0).
| Nocturne Studio background | Generated specifically for this project, 2026-07-16 | 1600×1000 | CC BY 4.0 |
| Quiet Garden background | Generated specifically for this project, 2026-07-16 | 1600×1000 | CC BY 4.0 |
| Gilded Grandeur background | Generated specifically for this project with the built-in image generation workflow, 2026-07-17 | 1586×992 | CC BY 4.0 |
| Caishen Readable background | Public-safe original Caishen Readable artwork from ChannelerH/codex-skin-packs; no private Codex screenshot or workspace data, 2026-07-22 | 1915×821 | CC BY 4.0 |
| Merry Big Top background | Generated specifically for this project with the built-in image generation workflow, 2026-07-17 | 1586×992 | CC BY 4.0 |
| Moss chameleon calibrated direction atlas | Generated specifically for this project; non-linear direction calibration, shared cropping, chroma-key removal, and exact-alpha WebP encoding, 2026-07-16 | 181 frames across 4 pages | CC BY 4.0 |
| Pico parrot calibrated direction atlas | Generated specifically for this project; natural pose frames retained, background and watermark excluded, 2026-07-17 | 189 frames across 4 pages | CC BY 4.0 |
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
176 changes: 176 additions & 0 deletions packages/theme-core/src/builtins.ts
Original file line number Diff line number Diff line change
Expand Up @@ -881,9 +881,185 @@ export const merryBigTop: ThemeDefinition = {
},
};

export const caishenReadable: ThemeDefinition = {
format: THEME_FORMAT,
id: "codex-styler.caishen-readable",
version: "1.0.0",
metadata: {
name: "Caishen Readable",
description:
"A bright fortune-desk workspace tuned for readable Codex surfaces.",
author: "ChannelerH",
license: "CC-BY-4.0",
tags: ["fortune", "light", "image", "warm", "readable"],
homepage:
"https://codex-theme-gallery.howardhua.chatgpt.site/themes/caishen-readable?utm_source=xuhuanstudio-codex-styler&utm_medium=github-pr&utm_campaign=caishen-readable",
preview: "previews/caishen-readable.png",
},
compatibility: {
styler: { minimumVersion: "0.1.0" },
codex: {
mode: "semantic",
testedVersions: ["26.707.72221", "26.707.91948"],
},
},
variants: {
light: {
...detailedVariant(
variant(
"#f7eadc",
"#fff9ef",
"#241d17",
"#6d5a4b",
"#ddc8af",
"#c15a2a",
"#fff1dc",
0.2,
0.86,
{
layout: "immersive",
iconStyle: "themed",
decorations: "subtle",
},
),
{
canvas: "#f7eadc",
surfaceRaised: "#fffaf1",
surfaceOverlay: "#f6e4cc",
surfaceSunken: "#efd5ba",
control: "#f5dfc6",
controlHover: "#edcfaf",
controlActive: "#e2bd99",
textTertiary: "#826b58",
onAccent: "#fff8ee",
borderSubtle: "#e4cbb1",
borderStrong: "#a97651",
focus: "#c15a2a",
success: "#2f7047",
warning: "#8b5a0d",
danger: "#a33f34",
info: "#2d6689",
added: "#2f7047",
modified: "#8b5a0d",
deleted: "#a33f34",
},
{ intensity: 0.34, parallax: 6, targetFps: 30 },
16,
),
background: {
color: "#f7eadc",
image: "assets/caishen-readable.png",
position: { x: 74, y: 50 },
brightness: 1.08,
blur: 0,
overlay: "#fff1dc",
overlayOpacity: 0.2,
},
},
dark: {
...detailedVariant(
variant(
"#1a120d",
"#251b15",
"#fff0dc",
"#d2bda8",
"#5f4535",
"#f0a24f",
"#120c08",
0.48,
0.76,
{
layout: "immersive",
iconStyle: "themed",
decorations: "subtle",
},
),
{
canvas: "#1a120d",
surfaceRaised: "#302219",
surfaceOverlay: "#39291e",
surfaceSunken: "#160f0b",
control: "#34261d",
controlHover: "#443126",
controlActive: "#553d2d",
textTertiary: "#b99b82",
onAccent: "#2b1608",
borderSubtle: "#4c382b",
borderStrong: "#93684b",
focus: "#f0a24f",
success: "#78c991",
warning: "#e4b661",
danger: "#e77c73",
info: "#83b9df",
added: "#78c991",
modified: "#e4b661",
deleted: "#e77c73",
},
{ intensity: 0.38, parallax: 7, targetFps: 30 },
16,
),
background: {
color: "#1a120d",
image: "assets/caishen-readable.png",
position: { x: 74, y: 50 },
brightness: 0.78,
blur: 0,
overlay: "#120c08",
overlayOpacity: 0.48,
},
},
},
scene: {
layers: [
{
id: "caishen-readable-background",
type: "image",
asset: "assets/caishen-readable.png",
opacity: 1,
blendMode: "normal",
parallax: 7,
},
{
id: "caishen-readable-vignette",
type: "vignette",
opacity: 0.2,
blendMode: "multiply",
parallax: 0,
},
],
entities: [],
},
assets: [
{
id: "caishen-readable-background",
path: "assets/caishen-readable.png",
type: "background",
license: "CC-BY-4.0",
},
{
id: "caishen-readable-preview",
path: "previews/caishen-readable.png",
type: "preview",
license: "CC-BY-4.0",
},
],
locales: {
en: {
name: "Caishen Readable",
description:
"A warm Caishen desk scene with light surfaces kept readable for work.",
},
"zh-CN": {
name: "财神清爽可读",
description: "暖色财神桌面场景,保留浅色高可读工作区表面。",
},
},
};

export const builtinThemes = [
nativeRefined,
gildedGrandeur,
caishenReadable,
merryBigTop,
nocturneStudio,
quietGarden,
Expand Down
1 change: 1 addition & 0 deletions packages/theme-core/src/companions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ export const mossCompanion = calibratedCompanion({
size: 136,
defaultThemeIds: [
"codex-styler.native-refined",
"codex-styler.caishen-readable",
"codex-styler.nocturne-studio",
"codex-styler.quiet-garden",
],
Expand Down
10 changes: 9 additions & 1 deletion packages/theme-core/tests/validation.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,14 @@ describe("built-in themes", () => {
it("declares replaceable shell treatments instead of hard-coded theme ids", () => {
expect(
builtinThemes.map((theme) => theme.variants.dark.appearance.layout),
).toEqual(["native", "editorial", "immersive", "editorial", "immersive"]);
).toEqual([
"native",
"editorial",
"immersive",
"immersive",
"editorial",
"immersive",
]);
expect(
builtinThemes.every(
(theme) => theme.variants.dark.appearance.iconStyle !== undefined,
Expand Down Expand Up @@ -126,6 +133,7 @@ describe("built-in themes", () => {
).toEqual([
"moss-gecko",
"reset-god",
"moss-gecko",
"token-thief",
"moss-gecko",
"moss-gecko",
Expand Down