@mcptoolshop/style-dataset-lab 2.3.0 → 3.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/CHANGELOG.md +125 -0
- package/README.md +36 -8
- package/bin/sdlab.js +129 -0
- package/lib/adapters/comfyui-runner.js +170 -0
- package/lib/adapters/comfyui-workflows.js +163 -0
- package/lib/batch-compiler.js +118 -0
- package/lib/batch-modes.js +111 -0
- package/lib/batch-runs.js +168 -0
- package/lib/batch-sheet-render.js +206 -0
- package/lib/brief-compiler.js +598 -0
- package/lib/brief-render.js +205 -0
- package/lib/critique-engine.js +413 -0
- package/lib/critique-render.js +171 -0
- package/lib/generated-provenance.js +87 -0
- package/lib/paths.js +31 -0
- package/lib/refine-briefs.js +329 -0
- package/lib/reingest-selected.js +173 -0
- package/lib/run-summary.js +131 -0
- package/lib/runtime-runs.js +168 -0
- package/lib/selections.js +323 -0
- package/lib/workflow-profiles.js +161 -0
- package/package.json +6 -3
- package/scripts/batch-generate.js +167 -0
- package/scripts/batch-sheet.js +46 -0
- package/scripts/batch-show.js +86 -0
- package/scripts/brief-compile.js +134 -0
- package/scripts/brief-show.js +52 -0
- package/scripts/critique-show.js +50 -0
- package/scripts/critique.js +70 -0
- package/scripts/doctor.js +169 -1
- package/scripts/init.js +22 -0
- package/scripts/refine.js +119 -0
- package/scripts/reingest-selected.js +78 -0
- package/scripts/reingest.js +7 -1
- package/scripts/run-generate.js +76 -0
- package/scripts/run-list.js +58 -0
- package/scripts/run-show.js +63 -0
- package/scripts/select.js +118 -0
- package/scripts/selection-show.js +88 -0
- package/scripts/workflow-list.js +61 -0
- package/scripts/workflow-show.js +96 -0
- package/templates/domains/architecture/workflows/profiles/environment-moodboard.json +62 -0
- package/templates/domains/architecture/workflows/profiles/interior-variant-pack.json +60 -0
- package/templates/domains/character-design/workflows/profiles/character-portrait-set.json +61 -0
- package/templates/domains/character-design/workflows/profiles/expression-sheet.json +59 -0
- package/templates/domains/creature-design/workflows/profiles/creature-portrait-set.json +61 -0
- package/templates/domains/creature-design/workflows/profiles/silhouette-exploration.json +58 -0
- package/templates/domains/game-art/workflows/profiles/character-portrait-set.json +62 -0
- package/templates/domains/game-art/workflows/profiles/environment-moodboard.json +61 -0
- package/templates/domains/vehicle-mech/workflows/profiles/variant-pack.json +60 -0
- package/templates/domains/vehicle-mech/workflows/profiles/vehicle-silhouette-pack.json +59 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* workflow-show.js — Show details of a workflow profile.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* sdlab workflow show character-portrait-set --project star-freight
|
|
8
|
+
* sdlab workflow show character-portrait-set --json
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { parseArgs } from '../lib/args.js';
|
|
12
|
+
import { getProjectRoot } from '../lib/paths.js';
|
|
13
|
+
import { getWorkflowProfile } from '../lib/workflow-profiles.js';
|
|
14
|
+
|
|
15
|
+
export async function run(argv = process.argv.slice(2)) {
|
|
16
|
+
const { flags, positionals } = parseArgs(argv, {
|
|
17
|
+
flags: {
|
|
18
|
+
project: { type: 'string', default: 'star-freight' },
|
|
19
|
+
json: { type: 'boolean' },
|
|
20
|
+
},
|
|
21
|
+
positionals: ['workflowId'],
|
|
22
|
+
deprecated: { game: 'project' },
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const workflowId = positionals[0];
|
|
26
|
+
if (!workflowId) {
|
|
27
|
+
console.log('Usage: sdlab workflow show <workflow-id> [--project <name>]');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const projectRoot = getProjectRoot(flags.project);
|
|
32
|
+
const profile = await getWorkflowProfile(projectRoot, workflowId);
|
|
33
|
+
|
|
34
|
+
if (flags.json) {
|
|
35
|
+
console.log(JSON.stringify(profile, null, 2));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
console.log(`\x1b[1msdlab workflow show\x1b[0m — ${workflowId}\n`);
|
|
40
|
+
console.log(` Label: ${profile.label}`);
|
|
41
|
+
if (profile.description) {
|
|
42
|
+
console.log(` Description: ${profile.description}`);
|
|
43
|
+
}
|
|
44
|
+
console.log(` Lane: ${profile.lane_id}`);
|
|
45
|
+
console.log(` Subject: ${profile.subject_mode || 'optional'}`);
|
|
46
|
+
console.log(` Output mode: ${profile.output_mode}`);
|
|
47
|
+
console.log(` Output count: ${profile.output_count}`);
|
|
48
|
+
console.log('');
|
|
49
|
+
|
|
50
|
+
console.log(' \x1b[1mPrompt strategy:\x1b[0m');
|
|
51
|
+
console.log(` Style prefix: ${profile.prompt_strategy.style_prefix.join(', ')}`);
|
|
52
|
+
console.log(` Structure: ${profile.prompt_strategy.structure}`);
|
|
53
|
+
console.log(` Must include: ${profile.prompt_strategy.must_include.join(', ')}`);
|
|
54
|
+
if (profile.prompt_strategy.optional_blocks?.length > 0) {
|
|
55
|
+
console.log(` Optional: ${profile.prompt_strategy.optional_blocks.join(', ')}`);
|
|
56
|
+
}
|
|
57
|
+
console.log('');
|
|
58
|
+
|
|
59
|
+
console.log(' \x1b[1mNegative strategy:\x1b[0m');
|
|
60
|
+
console.log(` Must avoid: ${profile.negative_strategy.must_avoid.join(', ')}`);
|
|
61
|
+
if (profile.negative_strategy.lane_specific_avoid?.length > 0) {
|
|
62
|
+
console.log(` Lane avoid: ${profile.negative_strategy.lane_specific_avoid.join(', ')}`);
|
|
63
|
+
}
|
|
64
|
+
console.log('');
|
|
65
|
+
|
|
66
|
+
console.log(' \x1b[1mCanon focus:\x1b[0m');
|
|
67
|
+
console.log(` ${profile.canon_focus.join(', ')}`);
|
|
68
|
+
console.log('');
|
|
69
|
+
|
|
70
|
+
console.log(' \x1b[1mDrift guards:\x1b[0m');
|
|
71
|
+
for (const guard of profile.drift_guards) {
|
|
72
|
+
console.log(` ⚠ ${guard}`);
|
|
73
|
+
}
|
|
74
|
+
console.log('');
|
|
75
|
+
|
|
76
|
+
console.log(' \x1b[1mRuntime defaults:\x1b[0m');
|
|
77
|
+
const rd = profile.runtime_defaults;
|
|
78
|
+
console.log(` Adapter: ${rd.adapter_target}`);
|
|
79
|
+
if (rd.width) console.log(` Size: ${rd.width}×${rd.height || rd.width}`);
|
|
80
|
+
if (rd.steps) console.log(` Steps: ${rd.steps}`);
|
|
81
|
+
if (rd.cfg) console.log(` CFG: ${rd.cfg}`);
|
|
82
|
+
if (rd.sampler) console.log(` Sampler: ${rd.sampler}`);
|
|
83
|
+
if (rd.seed_mode) console.log(` Seed mode: ${rd.seed_mode}`);
|
|
84
|
+
|
|
85
|
+
if (profile.required_reference_roles?.length > 0) {
|
|
86
|
+
console.log('');
|
|
87
|
+
console.log(` \x1b[1mRequired references:\x1b[0m ${profile.required_reference_roles.join(', ')}`);
|
|
88
|
+
}
|
|
89
|
+
if (profile.preferred_reference_tags?.length > 0) {
|
|
90
|
+
console.log(` \x1b[1mPreferred tags:\x1b[0m ${profile.preferred_reference_tags.join(', ')}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (process.argv[1] && (process.argv[1].endsWith('workflow-show.js') || process.argv[1].endsWith('workflow-show'))) {
|
|
95
|
+
run().catch((err) => { console.error(err.message || err); process.exit(1); });
|
|
96
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"workflow_id": "environment-moodboard",
|
|
3
|
+
"label": "Environment Moodboard",
|
|
4
|
+
"description": "Explore architectural mood, palette, and spatial atmosphere.",
|
|
5
|
+
"lane_id": "exterior",
|
|
6
|
+
"subject_mode": "optional",
|
|
7
|
+
"output_mode": "moodboard",
|
|
8
|
+
"output_count": 6,
|
|
9
|
+
"required_reference_roles": [],
|
|
10
|
+
"preferred_reference_tags": ["exterior", "approved"],
|
|
11
|
+
"prompt_strategy": {
|
|
12
|
+
"style_prefix": [
|
|
13
|
+
"architectural concept art moodboard",
|
|
14
|
+
"strong spatial atmosphere",
|
|
15
|
+
"painterly rendering"
|
|
16
|
+
],
|
|
17
|
+
"structure": "style_prefix, lane_goal, canon_focus, controlled_variation",
|
|
18
|
+
"must_include": [
|
|
19
|
+
"spatial composition",
|
|
20
|
+
"material palette",
|
|
21
|
+
"lighting atmosphere"
|
|
22
|
+
],
|
|
23
|
+
"optional_blocks": [
|
|
24
|
+
"time of day note",
|
|
25
|
+
"weather note",
|
|
26
|
+
"era note"
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
"negative_strategy": {
|
|
30
|
+
"must_avoid": [
|
|
31
|
+
"anachronistic elements",
|
|
32
|
+
"wrong architectural era",
|
|
33
|
+
"clean sterile surfaces",
|
|
34
|
+
"modern materials in historical context"
|
|
35
|
+
],
|
|
36
|
+
"lane_specific_avoid": [
|
|
37
|
+
"character focus"
|
|
38
|
+
],
|
|
39
|
+
"subject_specific_avoid": []
|
|
40
|
+
},
|
|
41
|
+
"canon_focus": [
|
|
42
|
+
"palette",
|
|
43
|
+
"material_language",
|
|
44
|
+
"lighting",
|
|
45
|
+
"scale_logic",
|
|
46
|
+
"era_logic"
|
|
47
|
+
],
|
|
48
|
+
"drift_guards": [
|
|
49
|
+
"architectural era must remain consistent",
|
|
50
|
+
"material palette must match project canon",
|
|
51
|
+
"scale must read correctly"
|
|
52
|
+
],
|
|
53
|
+
"runtime_defaults": {
|
|
54
|
+
"adapter_target": "comfyui",
|
|
55
|
+
"width": 1024,
|
|
56
|
+
"height": 1024,
|
|
57
|
+
"steps": 30,
|
|
58
|
+
"cfg": 6.5,
|
|
59
|
+
"sampler": "dpmpp_2m",
|
|
60
|
+
"seed_mode": "random"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"workflow_id": "interior-variant-pack",
|
|
3
|
+
"label": "Interior Variant Pack",
|
|
4
|
+
"description": "Generate interior space variations exploring layout, mood, and materials.",
|
|
5
|
+
"lane_id": "interior",
|
|
6
|
+
"subject_mode": "optional",
|
|
7
|
+
"output_mode": "variant_pack",
|
|
8
|
+
"output_count": 4,
|
|
9
|
+
"required_reference_roles": [],
|
|
10
|
+
"preferred_reference_tags": ["interior", "approved"],
|
|
11
|
+
"prompt_strategy": {
|
|
12
|
+
"style_prefix": [
|
|
13
|
+
"interior space concept art",
|
|
14
|
+
"atmospheric spatial rendering",
|
|
15
|
+
"functional layout emphasis"
|
|
16
|
+
],
|
|
17
|
+
"structure": "style_prefix, lane_goal, canon_focus, controlled_variation",
|
|
18
|
+
"must_include": [
|
|
19
|
+
"spatial function",
|
|
20
|
+
"material palette",
|
|
21
|
+
"lighting mood"
|
|
22
|
+
],
|
|
23
|
+
"optional_blocks": [
|
|
24
|
+
"furniture note",
|
|
25
|
+
"activity note"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"negative_strategy": {
|
|
29
|
+
"must_avoid": [
|
|
30
|
+
"empty featureless rooms",
|
|
31
|
+
"modern furniture in period setting",
|
|
32
|
+
"over-cluttered composition"
|
|
33
|
+
],
|
|
34
|
+
"lane_specific_avoid": [
|
|
35
|
+
"exterior views dominating"
|
|
36
|
+
],
|
|
37
|
+
"subject_specific_avoid": []
|
|
38
|
+
},
|
|
39
|
+
"canon_focus": [
|
|
40
|
+
"material_language",
|
|
41
|
+
"lighting",
|
|
42
|
+
"composition",
|
|
43
|
+
"era_logic",
|
|
44
|
+
"surface_wear"
|
|
45
|
+
],
|
|
46
|
+
"drift_guards": [
|
|
47
|
+
"materials must match architectural era",
|
|
48
|
+
"lighting must serve spatial mood",
|
|
49
|
+
"wear must read authentically"
|
|
50
|
+
],
|
|
51
|
+
"runtime_defaults": {
|
|
52
|
+
"adapter_target": "comfyui",
|
|
53
|
+
"width": 1024,
|
|
54
|
+
"height": 1024,
|
|
55
|
+
"steps": 30,
|
|
56
|
+
"cfg": 6.5,
|
|
57
|
+
"sampler": "dpmpp_2m",
|
|
58
|
+
"seed_mode": "random"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"workflow_id": "character-portrait-set",
|
|
3
|
+
"label": "Character Portrait Set",
|
|
4
|
+
"description": "Generate portrait candidates for a named character.",
|
|
5
|
+
"lane_id": "portrait",
|
|
6
|
+
"subject_mode": "required",
|
|
7
|
+
"output_mode": "portrait_set",
|
|
8
|
+
"output_count": 4,
|
|
9
|
+
"required_reference_roles": ["anchor"],
|
|
10
|
+
"preferred_reference_tags": ["portrait", "approved"],
|
|
11
|
+
"prompt_strategy": {
|
|
12
|
+
"style_prefix": [
|
|
13
|
+
"character portrait concept art",
|
|
14
|
+
"high fidelity facial detail",
|
|
15
|
+
"clean readable silhouette"
|
|
16
|
+
],
|
|
17
|
+
"structure": "style_prefix, subject_identity, lane_goal, canon_focus, controlled_variation",
|
|
18
|
+
"must_include": [
|
|
19
|
+
"subject identity",
|
|
20
|
+
"costume logic",
|
|
21
|
+
"facial detail"
|
|
22
|
+
],
|
|
23
|
+
"optional_blocks": [
|
|
24
|
+
"lighting note",
|
|
25
|
+
"expression note"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"negative_strategy": {
|
|
29
|
+
"must_avoid": [
|
|
30
|
+
"off-model face",
|
|
31
|
+
"extra accessories",
|
|
32
|
+
"ornamental drift"
|
|
33
|
+
],
|
|
34
|
+
"lane_specific_avoid": [
|
|
35
|
+
"full body composition",
|
|
36
|
+
"background complexity"
|
|
37
|
+
],
|
|
38
|
+
"subject_specific_avoid": []
|
|
39
|
+
},
|
|
40
|
+
"canon_focus": [
|
|
41
|
+
"silhouette",
|
|
42
|
+
"costume_logic",
|
|
43
|
+
"palette",
|
|
44
|
+
"anatomy",
|
|
45
|
+
"gesture"
|
|
46
|
+
],
|
|
47
|
+
"drift_guards": [
|
|
48
|
+
"preserve face structure",
|
|
49
|
+
"preserve age read",
|
|
50
|
+
"preserve canonical materials"
|
|
51
|
+
],
|
|
52
|
+
"runtime_defaults": {
|
|
53
|
+
"adapter_target": "comfyui",
|
|
54
|
+
"width": 1024,
|
|
55
|
+
"height": 1024,
|
|
56
|
+
"steps": 30,
|
|
57
|
+
"cfg": 6.5,
|
|
58
|
+
"sampler": "dpmpp_2m",
|
|
59
|
+
"seed_mode": "increment"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"workflow_id": "expression-sheet",
|
|
3
|
+
"label": "Expression Sheet",
|
|
4
|
+
"description": "Produce multiple expressions while preserving subject identity.",
|
|
5
|
+
"lane_id": "expression_sheet",
|
|
6
|
+
"subject_mode": "required",
|
|
7
|
+
"output_mode": "expression_sheet",
|
|
8
|
+
"output_count": 6,
|
|
9
|
+
"required_reference_roles": ["anchor"],
|
|
10
|
+
"preferred_reference_tags": ["expression", "approved"],
|
|
11
|
+
"prompt_strategy": {
|
|
12
|
+
"style_prefix": [
|
|
13
|
+
"character expression sheet",
|
|
14
|
+
"consistent identity across expressions",
|
|
15
|
+
"head and shoulders framing"
|
|
16
|
+
],
|
|
17
|
+
"structure": "style_prefix, subject_identity, canon_focus, controlled_variation",
|
|
18
|
+
"must_include": [
|
|
19
|
+
"subject identity",
|
|
20
|
+
"facial expression variety",
|
|
21
|
+
"consistent costume"
|
|
22
|
+
],
|
|
23
|
+
"optional_blocks": [
|
|
24
|
+
"emotion label"
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
"negative_strategy": {
|
|
28
|
+
"must_avoid": [
|
|
29
|
+
"face structure drift",
|
|
30
|
+
"hairstyle drift",
|
|
31
|
+
"costume mutation",
|
|
32
|
+
"age drift"
|
|
33
|
+
],
|
|
34
|
+
"lane_specific_avoid": [
|
|
35
|
+
"full body composition"
|
|
36
|
+
],
|
|
37
|
+
"subject_specific_avoid": []
|
|
38
|
+
},
|
|
39
|
+
"canon_focus": [
|
|
40
|
+
"anatomy",
|
|
41
|
+
"gesture",
|
|
42
|
+
"costume_logic",
|
|
43
|
+
"palette"
|
|
44
|
+
],
|
|
45
|
+
"drift_guards": [
|
|
46
|
+
"face structure must remain identical",
|
|
47
|
+
"hairstyle must not change",
|
|
48
|
+
"costume must not mutate"
|
|
49
|
+
],
|
|
50
|
+
"runtime_defaults": {
|
|
51
|
+
"adapter_target": "comfyui",
|
|
52
|
+
"width": 1024,
|
|
53
|
+
"height": 1024,
|
|
54
|
+
"steps": 30,
|
|
55
|
+
"cfg": 6.5,
|
|
56
|
+
"sampler": "dpmpp_2m",
|
|
57
|
+
"seed_mode": "increment"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"workflow_id": "creature-portrait-set",
|
|
3
|
+
"label": "Creature Portrait Set",
|
|
4
|
+
"description": "Generate creature concept candidates exploring anatomy and silhouette.",
|
|
5
|
+
"lane_id": "concept",
|
|
6
|
+
"subject_mode": "required",
|
|
7
|
+
"output_mode": "portrait_set",
|
|
8
|
+
"output_count": 4,
|
|
9
|
+
"required_reference_roles": ["anchor"],
|
|
10
|
+
"preferred_reference_tags": ["concept", "approved"],
|
|
11
|
+
"prompt_strategy": {
|
|
12
|
+
"style_prefix": [
|
|
13
|
+
"creature concept art",
|
|
14
|
+
"strong anatomical read",
|
|
15
|
+
"distinctive silhouette"
|
|
16
|
+
],
|
|
17
|
+
"structure": "style_prefix, subject_identity, lane_goal, canon_focus, controlled_variation",
|
|
18
|
+
"must_include": [
|
|
19
|
+
"species identity",
|
|
20
|
+
"anatomy logic",
|
|
21
|
+
"silhouette clarity"
|
|
22
|
+
],
|
|
23
|
+
"optional_blocks": [
|
|
24
|
+
"scale reference note",
|
|
25
|
+
"locomotion note"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"negative_strategy": {
|
|
29
|
+
"must_avoid": [
|
|
30
|
+
"human anatomy default",
|
|
31
|
+
"generic dragon",
|
|
32
|
+
"over-ornamentation",
|
|
33
|
+
"anatomical impossibility"
|
|
34
|
+
],
|
|
35
|
+
"lane_specific_avoid": [
|
|
36
|
+
"environment focus",
|
|
37
|
+
"multiple creatures"
|
|
38
|
+
],
|
|
39
|
+
"subject_specific_avoid": []
|
|
40
|
+
},
|
|
41
|
+
"canon_focus": [
|
|
42
|
+
"anatomy",
|
|
43
|
+
"silhouette",
|
|
44
|
+
"material_language",
|
|
45
|
+
"palette"
|
|
46
|
+
],
|
|
47
|
+
"drift_guards": [
|
|
48
|
+
"preserve species anatomy",
|
|
49
|
+
"preserve silhouette proportions",
|
|
50
|
+
"preserve surface material language"
|
|
51
|
+
],
|
|
52
|
+
"runtime_defaults": {
|
|
53
|
+
"adapter_target": "comfyui",
|
|
54
|
+
"width": 1024,
|
|
55
|
+
"height": 1024,
|
|
56
|
+
"steps": 30,
|
|
57
|
+
"cfg": 6.5,
|
|
58
|
+
"sampler": "dpmpp_2m",
|
|
59
|
+
"seed_mode": "increment"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"workflow_id": "silhouette-exploration",
|
|
3
|
+
"label": "Silhouette Exploration",
|
|
4
|
+
"description": "Explore silhouette variations for a creature design.",
|
|
5
|
+
"lane_id": "concept",
|
|
6
|
+
"subject_mode": "optional",
|
|
7
|
+
"output_mode": "silhouette_sheet",
|
|
8
|
+
"output_count": 8,
|
|
9
|
+
"required_reference_roles": [],
|
|
10
|
+
"preferred_reference_tags": ["silhouette", "concept"],
|
|
11
|
+
"prompt_strategy": {
|
|
12
|
+
"style_prefix": [
|
|
13
|
+
"creature silhouette exploration",
|
|
14
|
+
"high contrast shape language",
|
|
15
|
+
"varied proportions and mass distribution"
|
|
16
|
+
],
|
|
17
|
+
"structure": "style_prefix, lane_goal, canon_focus, controlled_variation",
|
|
18
|
+
"must_include": [
|
|
19
|
+
"silhouette variety",
|
|
20
|
+
"readable shape at small scale",
|
|
21
|
+
"consistent design family"
|
|
22
|
+
],
|
|
23
|
+
"optional_blocks": [
|
|
24
|
+
"size class note",
|
|
25
|
+
"locomotion type note"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"negative_strategy": {
|
|
29
|
+
"must_avoid": [
|
|
30
|
+
"uniform silhouettes",
|
|
31
|
+
"human proportions",
|
|
32
|
+
"over-detailed rendering"
|
|
33
|
+
],
|
|
34
|
+
"lane_specific_avoid": [
|
|
35
|
+
"color distraction",
|
|
36
|
+
"background complexity"
|
|
37
|
+
],
|
|
38
|
+
"subject_specific_avoid": []
|
|
39
|
+
},
|
|
40
|
+
"canon_focus": [
|
|
41
|
+
"silhouette",
|
|
42
|
+
"anatomy",
|
|
43
|
+
"scale_logic"
|
|
44
|
+
],
|
|
45
|
+
"drift_guards": [
|
|
46
|
+
"shapes must remain readable at thumbnail scale",
|
|
47
|
+
"design family cohesion across variants"
|
|
48
|
+
],
|
|
49
|
+
"runtime_defaults": {
|
|
50
|
+
"adapter_target": "comfyui",
|
|
51
|
+
"width": 1024,
|
|
52
|
+
"height": 1024,
|
|
53
|
+
"steps": 30,
|
|
54
|
+
"cfg": 6.5,
|
|
55
|
+
"sampler": "dpmpp_2m",
|
|
56
|
+
"seed_mode": "random"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"workflow_id": "character-portrait-set",
|
|
3
|
+
"label": "Character Portrait Set",
|
|
4
|
+
"description": "Generate a focused portrait candidate pack for a named character.",
|
|
5
|
+
"lane_id": "character",
|
|
6
|
+
"subject_mode": "required",
|
|
7
|
+
"output_mode": "portrait_set",
|
|
8
|
+
"output_count": 4,
|
|
9
|
+
"required_reference_roles": ["anchor"],
|
|
10
|
+
"preferred_reference_tags": ["portrait", "approved"],
|
|
11
|
+
"prompt_strategy": {
|
|
12
|
+
"style_prefix": [
|
|
13
|
+
"character portrait concept art",
|
|
14
|
+
"clean readable silhouette",
|
|
15
|
+
"consistent identity"
|
|
16
|
+
],
|
|
17
|
+
"structure": "style_prefix, subject_identity, lane_goal, canon_focus, controlled_variation",
|
|
18
|
+
"must_include": [
|
|
19
|
+
"subject identity",
|
|
20
|
+
"costume logic",
|
|
21
|
+
"palette fidelity"
|
|
22
|
+
],
|
|
23
|
+
"optional_blocks": [
|
|
24
|
+
"lighting note",
|
|
25
|
+
"gesture note"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"negative_strategy": {
|
|
29
|
+
"must_avoid": [
|
|
30
|
+
"off-model face",
|
|
31
|
+
"extra accessories",
|
|
32
|
+
"ornamental drift",
|
|
33
|
+
"generic fantasy styling"
|
|
34
|
+
],
|
|
35
|
+
"lane_specific_avoid": [
|
|
36
|
+
"cropped silhouette",
|
|
37
|
+
"muddy facial read"
|
|
38
|
+
],
|
|
39
|
+
"subject_specific_avoid": []
|
|
40
|
+
},
|
|
41
|
+
"canon_focus": [
|
|
42
|
+
"silhouette",
|
|
43
|
+
"costume_logic",
|
|
44
|
+
"palette",
|
|
45
|
+
"faction_read",
|
|
46
|
+
"gesture"
|
|
47
|
+
],
|
|
48
|
+
"drift_guards": [
|
|
49
|
+
"preserve face structure",
|
|
50
|
+
"preserve canonical materials",
|
|
51
|
+
"do not add non-canon ornament"
|
|
52
|
+
],
|
|
53
|
+
"runtime_defaults": {
|
|
54
|
+
"adapter_target": "comfyui",
|
|
55
|
+
"width": 1024,
|
|
56
|
+
"height": 1024,
|
|
57
|
+
"steps": 30,
|
|
58
|
+
"cfg": 6.5,
|
|
59
|
+
"sampler": "dpmpp_2m",
|
|
60
|
+
"seed_mode": "increment"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"workflow_id": "environment-moodboard",
|
|
3
|
+
"label": "Environment Moodboard",
|
|
4
|
+
"description": "Explore environment palette, lighting, and spatial mood.",
|
|
5
|
+
"lane_id": "environment",
|
|
6
|
+
"subject_mode": "optional",
|
|
7
|
+
"output_mode": "moodboard",
|
|
8
|
+
"output_count": 6,
|
|
9
|
+
"required_reference_roles": [],
|
|
10
|
+
"preferred_reference_tags": ["environment", "approved"],
|
|
11
|
+
"prompt_strategy": {
|
|
12
|
+
"style_prefix": [
|
|
13
|
+
"environment concept art moodboard",
|
|
14
|
+
"painterly atmospheric rendering",
|
|
15
|
+
"strong spatial depth"
|
|
16
|
+
],
|
|
17
|
+
"structure": "style_prefix, lane_goal, canon_focus, controlled_variation",
|
|
18
|
+
"must_include": [
|
|
19
|
+
"spatial composition",
|
|
20
|
+
"palette adherence",
|
|
21
|
+
"lighting mood"
|
|
22
|
+
],
|
|
23
|
+
"optional_blocks": [
|
|
24
|
+
"time of day note",
|
|
25
|
+
"weather note"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"negative_strategy": {
|
|
29
|
+
"must_avoid": [
|
|
30
|
+
"random architecture style shifts",
|
|
31
|
+
"off-era props",
|
|
32
|
+
"wrong lighting mood",
|
|
33
|
+
"clean sterile surfaces"
|
|
34
|
+
],
|
|
35
|
+
"lane_specific_avoid": [
|
|
36
|
+
"character focus competing with environment"
|
|
37
|
+
],
|
|
38
|
+
"subject_specific_avoid": []
|
|
39
|
+
},
|
|
40
|
+
"canon_focus": [
|
|
41
|
+
"palette",
|
|
42
|
+
"material_language",
|
|
43
|
+
"lighting",
|
|
44
|
+
"scale_logic",
|
|
45
|
+
"era_logic"
|
|
46
|
+
],
|
|
47
|
+
"drift_guards": [
|
|
48
|
+
"palette must stay within project range",
|
|
49
|
+
"architecture style must match era logic",
|
|
50
|
+
"no modern or off-era props"
|
|
51
|
+
],
|
|
52
|
+
"runtime_defaults": {
|
|
53
|
+
"adapter_target": "comfyui",
|
|
54
|
+
"width": 1024,
|
|
55
|
+
"height": 1024,
|
|
56
|
+
"steps": 30,
|
|
57
|
+
"cfg": 6.5,
|
|
58
|
+
"sampler": "dpmpp_2m",
|
|
59
|
+
"seed_mode": "random"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"workflow_id": "variant-pack",
|
|
3
|
+
"label": "Vehicle Variant Pack",
|
|
4
|
+
"description": "Generate controlled design variants for a named vehicle subject.",
|
|
5
|
+
"lane_id": "exterior",
|
|
6
|
+
"subject_mode": "required",
|
|
7
|
+
"output_mode": "variant_pack",
|
|
8
|
+
"output_count": 4,
|
|
9
|
+
"required_reference_roles": ["anchor"],
|
|
10
|
+
"preferred_reference_tags": ["exterior", "approved"],
|
|
11
|
+
"prompt_strategy": {
|
|
12
|
+
"style_prefix": [
|
|
13
|
+
"vehicle design variant concept art",
|
|
14
|
+
"consistent form language",
|
|
15
|
+
"controlled variation"
|
|
16
|
+
],
|
|
17
|
+
"structure": "style_prefix, subject_identity, lane_goal, canon_focus, controlled_variation",
|
|
18
|
+
"must_include": [
|
|
19
|
+
"vehicle identity",
|
|
20
|
+
"form language continuity",
|
|
21
|
+
"material palette"
|
|
22
|
+
],
|
|
23
|
+
"optional_blocks": [
|
|
24
|
+
"color scheme note",
|
|
25
|
+
"loadout variant note"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"negative_strategy": {
|
|
29
|
+
"must_avoid": [
|
|
30
|
+
"silhouette drift from reference",
|
|
31
|
+
"wrong faction materials",
|
|
32
|
+
"scale inconsistency"
|
|
33
|
+
],
|
|
34
|
+
"lane_specific_avoid": [
|
|
35
|
+
"interior focus"
|
|
36
|
+
],
|
|
37
|
+
"subject_specific_avoid": []
|
|
38
|
+
},
|
|
39
|
+
"canon_focus": [
|
|
40
|
+
"silhouette",
|
|
41
|
+
"material_language",
|
|
42
|
+
"palette",
|
|
43
|
+
"faction_read",
|
|
44
|
+
"scale_logic"
|
|
45
|
+
],
|
|
46
|
+
"drift_guards": [
|
|
47
|
+
"preserve core silhouette from reference",
|
|
48
|
+
"preserve faction material language",
|
|
49
|
+
"preserve scale relationship"
|
|
50
|
+
],
|
|
51
|
+
"runtime_defaults": {
|
|
52
|
+
"adapter_target": "comfyui",
|
|
53
|
+
"width": 1024,
|
|
54
|
+
"height": 1024,
|
|
55
|
+
"steps": 30,
|
|
56
|
+
"cfg": 6.5,
|
|
57
|
+
"sampler": "dpmpp_2m",
|
|
58
|
+
"seed_mode": "increment"
|
|
59
|
+
}
|
|
60
|
+
}
|