@waterwx/dsh-novel-forge 2.0.0-alpha.1 → 2.0.0
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/README.md +286 -285
- package/lib/client.js +19561 -19439
- package/lib/index.js +8159 -4456
- package/lib/types/action-guard.d.ts +61 -0
- package/lib/types/ai-scan.d.ts +0 -6
- package/lib/types/assets.d.ts +20 -9
- package/lib/types/assistant.d.ts +29 -0
- package/lib/types/author-assets.d.ts +1 -3
- package/lib/types/bookshelf.d.ts +13 -3
- package/lib/types/client/api.d.ts +136 -27
- package/lib/types/client/chip-prefs.d.ts +36 -0
- package/lib/types/client/docx.d.ts +2 -2
- package/lib/types/client/llmLive.d.ts +31 -0
- package/lib/types/client/locales.d.ts +15 -70
- package/lib/types/client/mount.d.ts +0 -2
- package/lib/types/client/panel/AiTag.d.ts +1 -0
- package/lib/types/client/panel/AssistantTab.d.ts +4 -1
- package/lib/types/client/panel/AuthorHome.d.ts +13 -11
- package/lib/types/client/panel/BookAnalysisView.d.ts +4 -0
- package/lib/types/client/panel/CmdPalette.d.ts +12 -0
- package/lib/types/client/panel/CreateBookView.d.ts +5 -1
- package/lib/types/client/panel/DirectorView.d.ts +7 -0
- package/lib/types/client/panel/IdeaInspirationView.d.ts +6 -0
- package/lib/types/client/panel/KnowledgeBaseView.d.ts +4 -0
- package/lib/types/client/panel/LiveFeedLog.d.ts +13 -0
- package/lib/types/client/panel/MarketRadarView.d.ts +5 -0
- package/lib/types/client/panel/ModelManager.d.ts +2 -2
- package/lib/types/client/panel/NovelPanel.d.ts +6 -1
- package/lib/types/client/panel/PageHeader.d.ts +18 -0
- package/lib/types/client/panel/PromptSlotsView.d.ts +11 -0
- package/lib/types/client/panel/SettingsView.d.ts +12 -9
- package/lib/types/client/panel/ShelfView.d.ts +10 -1
- package/lib/types/client/panel/SubPage.d.ts +27 -0
- package/lib/types/client/panel/TensionView.d.ts +18 -0
- package/lib/types/client/panel/TimelineView.d.ts +18 -0
- package/lib/types/client/panel/helpers.d.ts +5 -3
- package/lib/types/client/panel/market-radar-state.d.ts +56 -0
- package/lib/types/client/panel/toast.d.ts +2 -0
- package/lib/types/client/panel/views.d.ts +21 -35
- package/lib/types/client/run-status.d.ts +21 -0
- package/lib/types/client/sidebar-entry.d.ts +0 -2
- package/lib/types/docx-core.d.ts +16 -0
- package/lib/types/docx.d.ts +2 -3
- package/lib/types/engine.d.ts +78 -103
- package/lib/types/global-assets.d.ts +6 -0
- package/lib/types/home.d.ts +11 -0
- package/lib/types/index.d.ts +26 -12
- package/lib/types/llm-live.d.ts +70 -0
- package/lib/types/llm-retry.d.ts +38 -0
- package/lib/types/market-radar-scan.d.ts +18 -0
- package/lib/types/market-radar-sources.d.ts +31 -0
- package/lib/types/migrate-output.d.ts +25 -0
- package/lib/types/model-capability.d.ts +93 -0
- package/lib/types/output-budget.d.ts +86 -0
- package/lib/types/prompt-slots.d.ts +57 -0
- package/lib/types/prompting.d.ts +10 -0
- package/lib/types/protocol.d.ts +816 -601
- package/lib/types/revision.d.ts +76 -0
- package/lib/types/routes.d.ts +9 -3
- package/lib/types/run.d.ts +23 -1
- package/lib/types/settings-persist.d.ts +59 -0
- package/lib/types/snapshots.d.ts +46 -0
- package/lib/types/stage-contract.d.ts +58 -0
- package/lib/types/tension.d.ts +53 -0
- package/lib/types/timeline.d.ts +37 -0
- package/package.json +50 -25
- package/src/action-guard.ts +127 -0
- package/src/ai-scan.ts +0 -24
- package/src/assets.ts +1801 -879
- package/src/assistant.ts +1098 -770
- package/src/author-assets.ts +131 -147
- package/src/bookshelf.ts +193 -167
- package/src/client/api.ts +767 -617
- package/src/client/chip-prefs.ts +121 -0
- package/src/client/docx.ts +32 -69
- package/src/client/index.ts +2 -0
- package/src/client/llmLive.ts +111 -0
- package/src/client/locales.ts +15 -274
- package/src/client/mount.tsx +3 -2
- package/src/client/panel/AdaptModeView.tsx +535 -520
- package/src/client/panel/AiTag.tsx +7 -0
- package/src/client/panel/AssetsTab.tsx +448 -458
- package/src/client/panel/AssistantTab.tsx +355 -301
- package/src/client/panel/AuthorAssetsView.tsx +205 -207
- package/src/client/panel/AuthorHome.tsx +309 -204
- package/src/client/panel/BookAnalysisView.tsx +63 -0
- package/src/client/panel/CmdPalette.tsx +102 -0
- package/src/client/panel/CreateBookView.tsx +366 -352
- package/src/client/panel/DirectorView.tsx +200 -0
- package/src/client/panel/GlobalAssetLibraryView.tsx +168 -172
- package/src/client/panel/IdeaInspirationView.tsx +76 -0
- package/src/client/panel/ImportModal.tsx +302 -302
- package/src/client/panel/KnowledgeBaseView.tsx +125 -0
- package/src/client/panel/LiveFeedLog.tsx +204 -0
- package/src/client/panel/MarketRadarView.tsx +415 -0
- package/src/client/panel/ModelManager.tsx +205 -205
- package/src/client/panel/NovelPanel.tsx +3144 -2205
- package/src/client/panel/PageHeader.tsx +37 -0
- package/src/client/panel/ProgressConsole.tsx +63 -64
- package/src/client/panel/PromptSlotsView.tsx +97 -0
- package/src/client/panel/ReaderView.tsx +306 -306
- package/src/client/panel/RunPanel.tsx +56 -24
- package/src/client/panel/SettingsView.tsx +175 -106
- package/src/client/panel/ShelfView.tsx +63 -39
- package/src/client/panel/SubPage.tsx +42 -0
- package/src/client/panel/TensionView.tsx +212 -0
- package/src/client/panel/TimelineView.tsx +208 -0
- package/src/client/panel/WorldTab.tsx +202 -202
- package/src/client/panel/helpers.ts +7 -5
- package/src/client/panel/market-radar-state.ts +79 -0
- package/src/client/panel/panel.module.css +5767 -4360
- package/src/client/panel/toast.ts +51 -0
- package/src/client/panel/views.tsx +316 -314
- package/src/client/run-status.ts +171 -0
- package/src/client/sidebar-entry.ts +3 -3
- package/src/docx-core.ts +53 -0
- package/src/docx.ts +44 -83
- package/src/engine.ts +1197 -1638
- package/src/global-assets.ts +58 -0
- package/src/home.ts +33 -0
- package/src/index.ts +181 -101
- package/src/llm-live.ts +245 -0
- package/src/llm-retry.ts +77 -0
- package/src/market-radar-scan.ts +35 -0
- package/src/market-radar-sources.ts +173 -0
- package/src/migrate-output.ts +76 -0
- package/src/model-capability.ts +215 -0
- package/src/novel-context.ts +286 -287
- package/src/output-budget.ts +147 -0
- package/src/prompt-slots.ts +125 -0
- package/src/prompting.ts +26 -0
- package/src/protocol.ts +835 -614
- package/src/revision.ts +283 -0
- package/src/routes.ts +1286 -910
- package/src/run.ts +113 -17
- package/src/settings-persist.ts +114 -0
- package/src/snapshots.ts +174 -0
- package/src/stage-contract.ts +186 -0
- package/src/tension.ts +251 -0
- package/src/timeline.ts +159 -0
- package/assets/styles/arcane-thick-3d.webp +0 -0
- package/assets/styles/chinese-ink.webp +0 -0
- package/assets/styles/clay-stopmotion-3d.webp +0 -0
- package/assets/styles/dark-ghibli.webp +0 -0
- package/assets/styles/dark-gothic-3d.webp +0 -0
- package/assets/styles/film-photo.webp +0 -0
- package/assets/styles/guofeng-heavy.webp +0 -0
- package/assets/styles/guoman-2d-gufeng.webp +0 -0
- package/assets/styles/guoman-3d-tianyuan.webp +0 -0
- package/assets/styles/guoman-3d-xuanhuan.webp +0 -0
- package/assets/styles/horror-game-3d.webp +0 -0
- package/assets/styles/hyperreal-3d.webp +0 -0
- package/assets/styles/japan-cel-dark.webp +0 -0
- package/assets/styles/korean-webtoon.webp +0 -0
- package/assets/styles/low-cyberpunk-3d.webp +0 -0
- package/assets/styles/nextgen-cg.webp +0 -0
- package/assets/styles/noir-film.webp +0 -0
- package/assets/styles/openworld-survival.webp +0 -0
- package/assets/styles/paper-cut-3d.webp +0 -0
- package/assets/styles/pixar-adult-3d.webp +0 -0
- package/assets/styles/pop-marvel-2d.webp +0 -0
- package/assets/styles/sandiao-qban.webp +0 -0
- package/assets/styles/shinkai-anime.webp +0 -0
- package/assets/styles/tactical-stealth.webp +0 -0
- package/assets/styles/urban-lightreal-3d.webp +0 -0
- package/assets/styles/vaporwave-3d.webp +0 -0
- package/assets/styles/vhs90.webp +0 -0
- package/lib/types/client/panel/BookshelfBar.d.ts +0 -11
- package/lib/types/client/panel/FlowGuide.d.ts +0 -22
- package/lib/types/client/panel/MangaRoleLibrary.d.ts +0 -20
- package/lib/types/client/panel/MangaWorkspace.d.ts +0 -12
- package/lib/types/client/panel/ModelPicker.d.ts +0 -11
- package/lib/types/client/panel/ProgressHomeView.d.ts +0 -5
- package/lib/types/client/panel/PropLibrary.d.ts +0 -8
- package/lib/types/client/panel/SceneLibrary.d.ts +0 -16
- package/lib/types/client/panel/StoryboardTab.d.ts +0 -19
- package/lib/types/client/panel/StyleCard.d.ts +0 -8
- package/lib/types/client/panel/StyleGallery.d.ts +0 -1
- package/lib/types/comic-presets.d.ts +0 -12
- package/lib/types/manga-genre-rules.d.ts +0 -22
- package/lib/types/prompt-utils.d.ts +0 -35
- package/lib/types/review-policy.d.ts +0 -97
- package/lib/types/shot-language.d.ts +0 -46
- package/lib/types/story-beat-language.d.ts +0 -35
- package/lib/types/style-library.d.ts +0 -33
- package/skills/chapter-batch/SKILL.md +0 -81
- package/src/client/mount.tsx._new +0 -97
- package/src/client/mount.tsx._nf +0 -97
- package/src/client/mount.tsx._tmp +0 -97
- package/src/client/panel/BookshelfBar.tsx +0 -170
- package/src/client/panel/FlowGuide.tsx +0 -84
- package/src/client/panel/MangaRoleLibrary.tsx +0 -1002
- package/src/client/panel/MangaWorkspace.tsx +0 -715
- package/src/client/panel/ProgressHomeView.tsx +0 -87
- package/src/client/panel/PropLibrary.tsx +0 -175
- package/src/client/panel/SceneLibrary.tsx +0 -453
- package/src/client/panel/StoryboardTab.tsx +0 -472
- package/src/client/panel/StyleCard.tsx +0 -90
- package/src/client/panel/StyleGallery.tsx +0 -58
- package/src/comic-presets.ts +0 -67
- package/src/manga-genre-rules.ts +0 -87
- package/src/prompt-utils.ts +0 -73
- package/src/review-policy.ts +0 -161
- package/src/shot-language.ts +0 -181
- package/src/story-beat-language.ts +0 -130
- package/src/style-library.ts +0 -84
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 编剧词库(剧情骨架规范化基准)。
|
|
3
|
-
* 骨架的 function(叙事功能)与 emotion(情绪走向)统一从这里取值(英文 id),
|
|
4
|
-
* 生成提示词/展示时用 zh 中文。
|
|
5
|
-
* 目的:让"叙事功能/情绪"有标准词表,避免 LLM 自由发挥导致情绪链漂移。
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
/** 叙事功能(对应节拍在剧情中的作用)。 */
|
|
9
|
-
export type StoryFunctionId =
|
|
10
|
-
| 'exposition' | 'conflict' | 'turn' | 'climax'
|
|
11
|
-
| 'resolve' | 'foreshadow' | 'character'
|
|
12
|
-
|
|
13
|
-
/** 情绪词(低→高能量的情绪阶,角色在节拍中的主要情绪点)。 */
|
|
14
|
-
export type EmotionId =
|
|
15
|
-
// 起:低能量
|
|
16
|
-
| 'calm' | 'indifferent' | 'expectant' | 'curious' | 'alert'
|
|
17
|
-
// 承:蓄势
|
|
18
|
-
| 'suppressed' | 'enduring' | 'worried' | 'irritable' | 'uneasy'
|
|
19
|
-
// 转:激化
|
|
20
|
-
| 'terrified' | 'angry' | 'collapsing' | 'resolute' | 'grieved'
|
|
21
|
-
// 合:落点
|
|
22
|
-
| 'relieved' | 'bittersweet' | 'triumphant' | 'reborn' | 'numb'
|
|
23
|
-
|
|
24
|
-
export interface BeatLangEntry<T extends string> {
|
|
25
|
-
id: T
|
|
26
|
-
/** 中文(展示用)。 */
|
|
27
|
-
zh: string
|
|
28
|
-
/** 英文(英文平台适配用)。 */
|
|
29
|
-
en: string
|
|
30
|
-
/** 一句话说明。 */
|
|
31
|
-
hint: string
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/** 叙事功能词表。 */
|
|
35
|
-
export const STORY_FUNCTIONS: readonly BeatLangEntry<StoryFunctionId>[] = [
|
|
36
|
-
{ id: 'exposition', zh: '铺垫', en: 'exposition', hint: '介绍背景/人物/悬念' },
|
|
37
|
-
{ id: 'conflict', zh: '冲突', en: 'conflict', hint: '矛盾显现/加剧' },
|
|
38
|
-
{ id: 'turn', zh: '转折', en: 'turning point', hint: '剧情反转/方向改变' },
|
|
39
|
-
{ id: 'climax', zh: '高潮', en: 'climax', hint: '冲突顶峰/揭示' },
|
|
40
|
-
{ id: 'resolve', zh: '收束', en: 'resolution', hint: '矛盾化解/结果' },
|
|
41
|
-
{ id: 'foreshadow', zh: '伏笔', en: 'foreshadowing', hint: '埋下后续线索' },
|
|
42
|
-
{ id: 'character', zh: '人物塑造', en: 'characterization', hint: '展现人物特质/转变' },
|
|
43
|
-
]
|
|
44
|
-
|
|
45
|
-
/** 情绪词表(按能量/阶段排序)。 */
|
|
46
|
-
export const EMOTIONS: readonly BeatLangEntry<EmotionId>[] = [
|
|
47
|
-
// 起:低能量
|
|
48
|
-
{ id: 'calm', zh: '平静', en: 'calm', hint: '无波澜' },
|
|
49
|
-
{ id: 'indifferent', zh: '淡然', en: 'indifferent', hint: '不在乎' },
|
|
50
|
-
{ id: 'expectant', zh: '期待', en: 'expectant', hint: '有所期盼' },
|
|
51
|
-
{ id: 'curious', zh: '好奇', en: 'curious', hint: '想要探究' },
|
|
52
|
-
{ id: 'alert', zh: '警觉', en: 'alert', hint: '察觉到异样' },
|
|
53
|
-
// 承:蓄势
|
|
54
|
-
{ id: 'suppressed', zh: '压抑', en: 'suppressed', hint: '情绪被压制' },
|
|
55
|
-
{ id: 'enduring', zh: '隐忍', en: 'enduring', hint: '强忍着' },
|
|
56
|
-
{ id: 'worried', zh: '担忧', en: 'worried', hint: '担心后果' },
|
|
57
|
-
{ id: 'irritable', zh: '焦躁', en: 'irritable', hint: '烦躁不耐' },
|
|
58
|
-
{ id: 'uneasy', zh: '不安', en: 'uneasy', hint: '心里没底' },
|
|
59
|
-
// 转:激化
|
|
60
|
-
{ id: 'terrified', zh: '惊惧', en: 'terrified', hint: '极度恐惧' },
|
|
61
|
-
{ id: 'angry', zh: '愤怒', en: 'angry', hint: '强烈不满' },
|
|
62
|
-
{ id: 'collapsing', zh: '崩溃', en: 'collapsing', hint: '情绪失控' },
|
|
63
|
-
{ id: 'resolute', zh: '决绝', en: 'resolute', hint: '下定狠心' },
|
|
64
|
-
{ id: 'grieved', zh: '痛心', en: 'grieved', hint: '悲伤心痛' },
|
|
65
|
-
// 合:落点
|
|
66
|
-
{ id: 'relieved', zh: '释然', en: 'relieved', hint: '放下包袱' },
|
|
67
|
-
{ id: 'bittersweet', zh: '悲凉', en: 'bittersweet', hint: '苦涩无奈' },
|
|
68
|
-
{ id: 'triumphant', zh: '得意', en: 'triumphant', hint: '占据上风' },
|
|
69
|
-
{ id: 'reborn', zh: '重生', en: 'reborn', hint: '脱胎换骨' },
|
|
70
|
-
{ id: 'numb', zh: '麻木', en: 'numb', hint: '失去感知' },
|
|
71
|
-
]
|
|
72
|
-
|
|
73
|
-
export interface StoryBeatLanguage {
|
|
74
|
-
function: StoryFunctionId
|
|
75
|
-
emotion: EmotionId[]
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/** 从中文归一化叙事功能(未知回退 exposition)。 */
|
|
79
|
-
export function normalizeStoryFunction(text: string | undefined): StoryFunctionId {
|
|
80
|
-
if (text === undefined || text === '') return 'exposition'
|
|
81
|
-
const t = text.trim()
|
|
82
|
-
if (t.includes('铺垫')) return 'exposition'
|
|
83
|
-
if (t.includes('冲突')) return 'conflict'
|
|
84
|
-
if (t.includes('转折')) return 'turn'
|
|
85
|
-
if (t.includes('高潮')) return 'climax'
|
|
86
|
-
if (t.includes('收束')) return 'resolve'
|
|
87
|
-
if (t.includes('伏笔')) return 'foreshadow'
|
|
88
|
-
if (t.includes('人物塑造')) return 'character'
|
|
89
|
-
return 'exposition'
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/** 从中文文本归一化情绪词列表(可含→箭头链)。 */
|
|
93
|
-
export function normalizeEmotions(text: string | undefined): EmotionId[] {
|
|
94
|
-
if (text === undefined || text === '') return ['calm']
|
|
95
|
-
const t = text.trim()
|
|
96
|
-
const out: EmotionId[] = []
|
|
97
|
-
const push = (id: EmotionId) => { if (!out.includes(id)) out.push(id) }
|
|
98
|
-
if (t.includes('平静')) push('calm')
|
|
99
|
-
if (t.includes('淡然')) push('indifferent')
|
|
100
|
-
if (t.includes('期待')) push('expectant')
|
|
101
|
-
if (t.includes('好奇')) push('curious')
|
|
102
|
-
if (t.includes('警觉')) push('alert')
|
|
103
|
-
if (t.includes('压抑')) push('suppressed')
|
|
104
|
-
if (t.includes('隐忍')) push('enduring')
|
|
105
|
-
if (t.includes('担忧')) push('worried')
|
|
106
|
-
if (t.includes('焦躁')) push('irritable')
|
|
107
|
-
if (t.includes('不安')) push('uneasy')
|
|
108
|
-
if (t.includes('惊惧')) push('terrified')
|
|
109
|
-
if (t.includes('愤怒')) push('angry')
|
|
110
|
-
if (t.includes('崩溃')) push('collapsing')
|
|
111
|
-
if (t.includes('决绝')) push('resolute')
|
|
112
|
-
if (t.includes('痛心')) push('grieved')
|
|
113
|
-
if (t.includes('释然')) push('relieved')
|
|
114
|
-
if (t.includes('悲凉')) push('bittersweet')
|
|
115
|
-
if (t.includes('得意')) push('triumphant')
|
|
116
|
-
if (t.includes('重生')) push('reborn')
|
|
117
|
-
if (t.includes('麻木')) push('numb')
|
|
118
|
-
if (out.length === 0) push('calm')
|
|
119
|
-
return out
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/** 叙事功能中文。 */
|
|
123
|
-
export function functionZh(id: StoryFunctionId | undefined): string {
|
|
124
|
-
return STORY_FUNCTIONS.find(e => e.id === id)?.zh ?? '铺垫'
|
|
125
|
-
}
|
|
126
|
-
/** 情绪中文(箭头连接)。 */
|
|
127
|
-
export function emotionZh(ids: EmotionId[] | undefined): string {
|
|
128
|
-
if (ids === undefined || ids.length === 0) return '平静'
|
|
129
|
-
return EMOTIONS.filter(e => ids.includes(e.id)).map(e => e.zh).join('→')
|
|
130
|
-
}
|
package/src/style-library.ts
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 风格库(内置模板):漫剧方案的视觉基底 + 可叠加滤镜。
|
|
3
|
-
* 关键词针对即梦 Seedream 优化:画风定义 + 质感描述 + 光影色彩 + 即梦质量词(8K/五官清晰/真实材质)。
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
export type StyleCategory = '3d' | 'game' | '2d' | 'craft' | 'film'
|
|
7
|
-
|
|
8
|
-
export interface ArtStyle {
|
|
9
|
-
id: string
|
|
10
|
-
/** 风格名(用户可见)。 */
|
|
11
|
-
name: string
|
|
12
|
-
category: StyleCategory
|
|
13
|
-
/** 特点一句话(卡片展示)。 */
|
|
14
|
-
traits: string
|
|
15
|
-
/** 风格关键词/前缀(生成角色图/视频提示词时套用)。 */
|
|
16
|
-
keywords: string
|
|
17
|
-
/** 是否可作为滤镜叠加在基底风格之上(影视实验类;缺省 false)。 */
|
|
18
|
-
stackable?: boolean
|
|
19
|
-
/** 默认推荐排序权重(0-1,推荐池排序参考)。 */
|
|
20
|
-
weight?: number
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export const STYLE_CATEGORIES: ReadonlyArray<{ id: StyleCategory; label: string; icon: string; desc: string }> = [
|
|
24
|
-
{ id: '3d', label: '3D 类', icon: '🧊', desc: '人物稳定性最好,视频不易崩脸,含仿真人/国漫/欧美' },
|
|
25
|
-
{ id: 'game', label: '游戏 3D', icon: '🎮', desc: '游戏渲染质感与镜头语言(生存/恐怖/潜行)' },
|
|
26
|
-
{ id: '2d', label: '2D 绘画', icon: '✏️', desc: '手绘感,含国漫/日漫/韩漫/沙雕Q版' },
|
|
27
|
-
{ id: 'craft', label: '国风/工艺', icon: '🏮', desc: '国风与传统工艺质感' },
|
|
28
|
-
]
|
|
29
|
-
|
|
30
|
-
/** 内置风格模板(基底 21 个 + 滤镜 3 个)。 */
|
|
31
|
-
export const STYLE_LIBRARY: ArtStyle[] = [
|
|
32
|
-
// ---------------- 3D 类 ----------------
|
|
33
|
-
{ id: 'hyperreal-3d', name: '超写实仿真人 3D', category: '3d', traits: '红果2026重点扶持,真人肤质+电影级渲染,国产网剧质感,分成最高', keywords: '超写实3D仿真人,真人肤质纹理,电影级渲染,国产网剧质感,细腻皮肤,真实毛发,8K高清,五官清晰面部稳定,人体结构正常,真实材质', weight: 1.0 },
|
|
34
|
-
{ id: 'guoman-3d-xuanhuan', name: '3D 国漫玄幻', category: '3d', traits: '红果主力形态,仙侠建模+东方美学,男性向修仙逆袭爆款画风', keywords: '3D国漫玄幻风格,仙侠建模,东方美学,精致古风服饰,特效氛围感拉满,硬朗立体光影,高饱和色彩,8K超精细建模,五官清晰面部稳定,真实材质', weight: 1.0 },
|
|
35
|
-
{ id: 'guoman-3d-tianyuan', name: '3D 古风田园治愈', category: '3d', traits: '当下大火慢节奏长线,开荒经营/美食创业/市井烟火,清新治愈', keywords: '3D古风田园,清新治愈画风,暖色调,市井烟火气,美食场景细节,柔和自然光,温暖通透,8K高清,五官清晰面部稳定,真实材质', weight: 0.9 },
|
|
36
|
-
{ id: 'urban-lightreal-3d', name: '现代都市轻写实 3D', category: '3d', traits: '都市言情/职场/甜宠通用,真实街景+时尚穿搭,冷暖对比光影', keywords: '3D现代都市轻写实,都市夜景,时尚穿搭,真实街景,冷暖对比光影,生活质感,8K高清,五官清晰面部稳定,真实材质纹理', weight: 0.9 },
|
|
37
|
-
{ id: 'pixar-adult-3d', name: '成人向皮克斯 3D', category: '3d', traits: 'CG 三维渲染,材质细腻,微表情表现力强;需压制 Q 版可爱感', keywords: '3D皮克斯动画,成人写实CGI,电影光影,拒绝Q版,8K超精细建模,五官清晰面部稳定,真实材质纹理', weight: 0.85 },
|
|
38
|
-
{ id: 'arcane-thick-3d', name: '双城之战美漫厚涂 3D', category: '3d', traits: '粗重轮廓线,高对比硬阴影,材质粗粝,悲剧、压抑、科幻题材适配高', keywords: '双城之战美术,3D美漫厚涂,强轮廓光影,暗调粗粝渲染,8K高清,五官清晰面部稳定,真实材质', weight: 0.8 },
|
|
39
|
-
{ id: 'nextgen-cg', name: '次世代游戏 CG', category: '3d', traits: '接近真人的三维渲染,照片级布料、皮肤材质,冷峻写实', keywords: '次世代游戏CG渲染,超写实3D,真实物理材质,电影布光,8K高清,五官清晰面部稳定', weight: 0.8 },
|
|
40
|
-
{ id: 'low-cyberpunk-3d', name: '底层赛博朋克 3D', category: '3d', traits: '锈蚀工业、破碎霓虹、屏幕噪点;避开华丽高楼,偏向破败底层', keywords: '底层赛博朋克3D,废土工业,破碎霓虹,画面噪点色散,8K高清,五官清晰面部稳定,真实材质', weight: 0.75 },
|
|
41
|
-
{ id: 'vaporwave-3d', name: '复古蒸汽波 3D', category: '3d', traits: '粉-蓝-紫霓虹轮廓、90 年代复古网格、胶片色散颗粒,颓废疏离', keywords: '3D复古蒸汽波,90年代三维渲染,霓虹轮廓光,胶片颗粒,8K高清,五官清晰面部稳定', weight: 0.7 },
|
|
42
|
-
{ id: 'dark-gothic-3d', name: '暗黑哥特 3D', category: '3d', traits: '大面积阴影、冷青色调、衰败破败质感,适合幽暗密闭空间', keywords: '3D暗黑哥特,冷青暗光,衰败质感,大面积阴影,8K高清,五官清晰面部稳定,真实材质', weight: 0.7 },
|
|
43
|
-
{ id: 'clay-stopmotion-3d', name: '黏土 / 定格 3D', category: '3d', traits: '捏塑颗粒肌理,手工定格质感;可做压抑向,不局限可爱风', keywords: '3D黏土定格渲染,泥塑肌理,电影打光,8K高清,五官清晰', weight: 0.6 },
|
|
44
|
-
// ---------------- 游戏 3D ----------------
|
|
45
|
-
{ id: 'openworld-survival', name: '开放世界生存游戏风', category: 'game', traits: '场景破败感强,货架、仓库、管线、灰尘、锈蚀明显;人物带一点"生存者"气质;适合探索感、逃亡感、世界观展示', keywords: '开放世界生存游戏风格,废土场景,破败仓库,锈蚀金属货架,灰尘粒子,冷色写实光影,8K高清,五官清晰面部稳定,真实材质', weight: 0.8 },
|
|
46
|
-
{ id: 'horror-game-3d', name: '恐怖游戏 3D', category: 'game', traits: '大面积阴影,荧光灯频闪,空间压抑;适合悬疑、压迫、精神异常段落', keywords: '恐怖游戏 3D 风格,昏暗仓库,老旧荧光灯,硬阴影,压迫空间,冷灰蓝调,低饱和,8K高清,五官清晰面部稳定', weight: 0.75 },
|
|
47
|
-
{ id: 'tactical-stealth', name: '战术潜行游戏风', category: 'game', traits: '低视角、第三人称镜头感;人物在货架之间移动,光影克制;适合紧张剧情', keywords: '战术潜行游戏视角,第三人称镜头,货架通道,冷色暗光,真实3D渲染,紧张压迫氛围,8K高清,五官清晰面部稳定,真实材质', weight: 0.7 },
|
|
48
|
-
// ---------------- 2D 类 ----------------
|
|
49
|
-
{ id: 'guoman-2d-gufeng', name: '2D 国漫古风', category: '2d', traits: '国产2D主流,古言/仙侠/重生虐恋女性向爆款,精致线条+东方色彩', keywords: '2D国漫古风,精致线条,东方色彩美学,仙侠氛围,飘逸服饰,唯美意境,干净勾线,8K高清,五官清晰', weight: 1.0 },
|
|
50
|
-
{ id: 'korean-webtoon', name: '韩漫条漫风', category: '2d', traits: '修长人物,低饱和高级灰,氛围感强,都市向漫剧爆款画风', keywords: '韩漫2D绘画,精致人物,低饱和灰调,氛围感插画,8K高清,五官清晰,干净线条', weight: 0.9 },
|
|
51
|
-
{ id: 'japan-cel-dark', name: '日系赛璐璐动画', category: '2d', traits: '干净勾线,硬阴影;分明亮版、暗调悲剧版(边缘行者质感)', keywords: '日系赛璐璐动画,清晰轮廓线,硬阴影,暗调都市动画,8K高清,五官清晰', weight: 0.85 },
|
|
52
|
-
{ id: 'shinkai-anime', name: '新海诚动画风', category: '2d', traits: '极致环境光影、丁达尔、空气中尘埃粒子,擅长雨夜、夜景外景', keywords: '新海诚动画渲染,细腻环境光,漂浮尘埃粒子,8K高清,五官清晰,干净线条', weight: 0.8 },
|
|
53
|
-
{ id: 'pop-marvel-2d', name: '波普美漫', category: '2d', traits: '网点半调、强撞色,线条张扬,节奏冲击力强', keywords: '平行宇宙波普美漫,网点半调,漫画粗线条,8K高清,五官清晰', weight: 0.75 },
|
|
54
|
-
{ id: 'dark-ghibli', name: '暗黑吉卜力手绘', category: '2d', traits: '手绘水彩肌理;强制关闭温暖治愈,做残酷冷调版本', keywords: '吉卜力手绘动画,暗黑写实,水彩肌理,拒绝暖光治愈,8K高清,五官清晰,干净线条', weight: 0.7 },
|
|
55
|
-
{ id: 'sandiao-qban', name: '沙雕 Q 版搞笑', category: '2d', traits: '表情包动态漫主流,低成本高产量,夸张表情+大头小身,搞笑解压', keywords: 'Q版卡通沙雕风格,夸张表情,大头小身,简洁线条,明亮色块,搞笑解压,扁平化设计,8K高清', weight: 0.7 },
|
|
56
|
-
// ---------------- 影视实验质感(可叠加滤镜) ----------------
|
|
57
|
-
{ id: 'noir-film', name: '黑色电影 Noir', category: 'film', traits: '高反差黑白,只保留少量色彩作为视觉锚点,张力极强', keywords: '黑色电影,大部分黑白,局部保留色彩,硬侧光,胶片颗粒', stackable: true, weight: 1.0 },
|
|
58
|
-
{ id: 'vhs90', name: 'VHS 90 录像带复古', category: 'film', traits: '扫描线、色彩偏移、磁带噪点,模拟老旧档案录像', keywords: 'VHS录像带质感,扫描线,色彩偏移,磁带噪点', stackable: true, weight: 0.9 },
|
|
59
|
-
{ id: 'film-photo', name: '胶片电影写真', category: 'film', traits: '电影机拍摄质感,轻微颗粒,景深虚化,无夸张特效', keywords: '电影写真质感,35mm胶片,胶片颗粒,浅景深', stackable: true, weight: 0.85 },
|
|
60
|
-
// ---------------- 国风 / 特殊工艺 ----------------
|
|
61
|
-
{ id: 'chinese-ink', name: '新中式水墨动画', category: 'craft', traits: '水墨晕染,留白写意', keywords: '水墨动画渲染,写意晕染,国风2D,8K高清,五官清晰,干净线条', weight: 1.0 },
|
|
62
|
-
{ id: 'paper-cut-3d', name: '纸雕定格', category: 'craft', traits: '多层纸张镂空叠层,光影穿透纸面', keywords: '立体纸雕定格,纸张肌理,层叠镂空光影,8K高清,五官清晰', weight: 0.9 },
|
|
63
|
-
{ id: 'guofeng-heavy', name: '工笔重彩国风', category: 'craft', traits: '精细线条,矿物颜料质感,古典华美', keywords: '工笔重彩,国风2D绘画,矿物颜料质感,精细勾线,8K高清,五官清晰', weight: 0.8 },
|
|
64
|
-
]
|
|
65
|
-
|
|
66
|
-
/** 按分类取风格。 */
|
|
67
|
-
export function stylesByCategory(category: StyleCategory): ArtStyle[] {
|
|
68
|
-
return STYLE_LIBRARY.filter(s => s.category === category)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/** 取单个风格(未找到返回 undefined)。 */
|
|
72
|
-
export function findStyle(id: string): ArtStyle | undefined {
|
|
73
|
-
return STYLE_LIBRARY.find(s => s.id === id)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/** 按基底 + 滤镜拼接风格关键词(角色图/分镜/视频提示词共用;缺省回退 3D 动漫)。 */
|
|
77
|
-
export function styleKeywords(styleId?: string, filterId?: string): string {
|
|
78
|
-
const parts: string[] = []
|
|
79
|
-
const base = styleId !== undefined ? findStyle(styleId) : undefined
|
|
80
|
-
if (base !== undefined) parts.push(base.keywords)
|
|
81
|
-
const filter = filterId !== undefined ? findStyle(filterId) : undefined
|
|
82
|
-
if (filter !== undefined) parts.push(filter.keywords)
|
|
83
|
-
return parts.join(',') || '3D动漫,超精细建模,电影光影'
|
|
84
|
-
}
|