@mcptoolshop/style-dataset-lab 1.2.0 → 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/CHANGELOG.md +45 -0
- package/README.es.md +94 -54
- package/README.fr.md +86 -46
- package/README.hi.md +86 -46
- package/README.it.md +93 -53
- package/README.ja.md +86 -46
- package/README.md +95 -116
- package/README.pt-BR.md +86 -46
- package/README.zh.md +90 -50
- package/bin/sdlab.js +103 -0
- package/lib/args.js +106 -0
- package/lib/comfyui.js +109 -0
- package/lib/config.js +104 -0
- package/lib/deprecation.js +14 -0
- package/lib/paths.js +38 -0
- package/lib/records.js +69 -0
- package/package.json +13 -4
- package/scripts/bulk-curate-wave2-5.js +1 -1
- package/scripts/bulk-curate-waves11-18.js +1 -1
- package/scripts/canon-bind.js +268 -332
- package/scripts/compare.js +40 -30
- package/scripts/curate-wave25.js +1 -1
- package/scripts/curate.js +34 -28
- package/scripts/doctor.js +321 -0
- package/scripts/generate-controlnet.js +36 -121
- package/scripts/generate-identity.js +38 -106
- package/scripts/generate-ipadapter.js +42 -119
- package/scripts/generate.js +22 -81
- package/scripts/init.js +226 -0
- package/scripts/migrate-records.js +15 -21
- package/scripts/painterly-test.js +20 -47
- package/scripts/painterly.js +27 -106
- package/templates/domains/architecture/constitution.json +97 -0
- package/templates/domains/architecture/lanes.json +41 -0
- package/templates/domains/architecture/project.json +20 -0
- package/templates/domains/architecture/rubric.json +40 -0
- package/templates/domains/architecture/terminology.json +19 -0
- package/templates/domains/character-design/constitution.json +88 -0
- package/templates/domains/character-design/lanes.json +35 -0
- package/templates/domains/character-design/project.json +17 -0
- package/templates/domains/character-design/rubric.json +38 -0
- package/templates/domains/character-design/terminology.json +21 -0
- package/templates/domains/creature-design/constitution.json +87 -0
- package/templates/domains/creature-design/lanes.json +41 -0
- package/templates/domains/creature-design/project.json +18 -0
- package/templates/domains/creature-design/rubric.json +39 -0
- package/templates/domains/creature-design/terminology.json +20 -0
- package/templates/domains/game-art/constitution.json +113 -0
- package/templates/domains/game-art/lanes.json +47 -0
- package/templates/domains/game-art/project.json +17 -0
- package/templates/domains/game-art/rubric.json +36 -0
- package/templates/domains/game-art/terminology.json +30 -0
- package/templates/domains/vehicle-mech/constitution.json +87 -0
- package/templates/domains/vehicle-mech/lanes.json +41 -0
- package/templates/domains/vehicle-mech/project.json +17 -0
- package/templates/domains/vehicle-mech/rubric.json +40 -0
- package/templates/domains/vehicle-mech/terminology.json +21 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"group_label": "style_family",
|
|
3
|
+
"id_detection_order": [],
|
|
4
|
+
"prompt_detection_order": [],
|
|
5
|
+
"groups": {},
|
|
6
|
+
"cross_group_patterns": {},
|
|
7
|
+
"edge_defaults": {},
|
|
8
|
+
"null_faction_patterns": [],
|
|
9
|
+
"id_fallbacks": {},
|
|
10
|
+
"faction_context": {},
|
|
11
|
+
"training_profiles": [
|
|
12
|
+
{
|
|
13
|
+
"profile_id": "character-style",
|
|
14
|
+
"intended_use": "Character style consistency LoRA",
|
|
15
|
+
"eligible_lanes": ["portrait", "full_body", "turnaround"],
|
|
16
|
+
"minimum_review_threshold": 0.7,
|
|
17
|
+
"excluded_content": ["rejected"],
|
|
18
|
+
"export_format": "trl"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"rules": [
|
|
4
|
+
{
|
|
5
|
+
"id": "ANA-001",
|
|
6
|
+
"category": "anatomy",
|
|
7
|
+
"desc": "Anatomical plausibility — skeletal and muscular structure supports locomotion and body mass",
|
|
8
|
+
"dims": ["anatomy_accuracy"],
|
|
9
|
+
"rationale_pass": "Anatomy is plausible — structure supports locomotion and mass (${scorePct}%)",
|
|
10
|
+
"rationale_fail": "Anatomy implausible — structure cannot support locomotion or body mass (${scorePct}%)"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "ANA-002",
|
|
14
|
+
"category": "anatomy",
|
|
15
|
+
"desc": "Consistent anatomy across all views and poses — proportions, joint placement, and limb count stable",
|
|
16
|
+
"dims": ["anatomy_accuracy"],
|
|
17
|
+
"rationale_pass": "Anatomy consistent across views — proportions and joints stable (${scorePct}%)",
|
|
18
|
+
"rationale_fail": "Anatomy inconsistent — proportions or joints shift between views (${scorePct}%)"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "SIL-001",
|
|
22
|
+
"category": "silhouette",
|
|
23
|
+
"desc": "Silhouette distinction — creature identifiable by outline alone at reduced scale",
|
|
24
|
+
"dims": ["silhouette_distinction"],
|
|
25
|
+
"rationale_pass": "Silhouette distinctive — creature readable by outline alone (${scorePct}%)",
|
|
26
|
+
"rationale_fail": "Silhouette generic — creature not identifiable by outline (${scorePct}%)"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "SUR-001",
|
|
30
|
+
"category": "surface",
|
|
31
|
+
"desc": "Surface and texture consistency — skin, scales, fur, chitin, or other covering is coherent across the body",
|
|
32
|
+
"dims": ["surface_texture"],
|
|
33
|
+
"rationale_pass": "Surface texture coherent — covering reads consistently across the body (${scorePct}%)",
|
|
34
|
+
"rationale_fail": "Surface texture inconsistent — covering changes illogically across the body (${scorePct}%)"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "EVO-001",
|
|
38
|
+
"category": "ecology",
|
|
39
|
+
"desc": "Evolutionary logic — adaptations serve ecological function, not purely decorative",
|
|
40
|
+
"dims": ["evolutionary_logic"],
|
|
41
|
+
"rationale_pass": "Adaptations make ecological sense — form follows function (${scorePct}%)",
|
|
42
|
+
"rationale_fail": "Adaptations lack ecological logic — features are purely decorative (${scorePct}%)"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "SCL-001",
|
|
46
|
+
"category": "scale",
|
|
47
|
+
"desc": "Scale reference present and readable — creature size clear relative to known objects or figures",
|
|
48
|
+
"dims": ["scale_accuracy"],
|
|
49
|
+
"lanes": ["scale_reference"],
|
|
50
|
+
"rationale_pass": "Scale reference clear — creature size readable against reference (${scorePct}%)",
|
|
51
|
+
"rationale_fail": "Scale reference missing or unreadable — creature size ambiguous (${scorePct}%)"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "LOC-001",
|
|
55
|
+
"category": "locomotion",
|
|
56
|
+
"desc": "Locomotion class reads clearly — biped, quadruped, flying, aquatic, serpentine, or hybrid",
|
|
57
|
+
"dims": ["locomotion_read"],
|
|
58
|
+
"rationale_pass": "Locomotion class clear — movement mode reads from anatomy (${scorePct}%)",
|
|
59
|
+
"rationale_fail": "Locomotion class unclear — cannot determine how creature moves (${scorePct}%)"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "BEH-001",
|
|
63
|
+
"category": "behavior",
|
|
64
|
+
"desc": "Behavioral cues present in pose, expression, or body language — predator, prey, social, solitary",
|
|
65
|
+
"dims": ["behavioral_read"],
|
|
66
|
+
"rationale_pass": "Behavioral cues present — temperament reads from pose and expression (${scorePct}%)",
|
|
67
|
+
"rationale_fail": "Behavioral cues absent — creature pose is neutral and uninformative (${scorePct}%)"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "STY-001",
|
|
71
|
+
"category": "style",
|
|
72
|
+
"desc": "Style consistency across species or creature lineup — rendering, detail level, and design language match",
|
|
73
|
+
"dims": ["style_consistency"],
|
|
74
|
+
"rationale_pass": "Style consistent — creature fits the lineup's design language (${scorePct}%)",
|
|
75
|
+
"rationale_fail": "Style inconsistent — creature looks like it belongs to a different project (${scorePct}%)"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "HAB-001",
|
|
79
|
+
"category": "habitat",
|
|
80
|
+
"desc": "Habitat integration — creature anatomy and coloring fit the environment context",
|
|
81
|
+
"dims": ["habitat_fit"],
|
|
82
|
+
"lanes": ["habitat"],
|
|
83
|
+
"rationale_pass": "Habitat integration reads — creature fits its environment context (${scorePct}%)",
|
|
84
|
+
"rationale_fail": "Habitat mismatch — creature does not fit the environment context (${scorePct}%)"
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"default_lane": "concept",
|
|
3
|
+
"lanes": [
|
|
4
|
+
{
|
|
5
|
+
"id": "concept",
|
|
6
|
+
"label": "Concept / Ideation",
|
|
7
|
+
"description": "Initial creature concepts, sketches, ideation explorations",
|
|
8
|
+
"id_patterns": ["^concept_", "^sketch_", "^ideation_"]
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": "orthographic",
|
|
12
|
+
"label": "Orthographic / Model Sheet",
|
|
13
|
+
"description": "Turnaround views, model sheets, orthographic projections for modelers",
|
|
14
|
+
"id_patterns": ["^ortho_", "^model_sheet_", "^turnaround_"]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "detail_study",
|
|
18
|
+
"label": "Detail Study",
|
|
19
|
+
"description": "Close-up texture studies, anatomical details, surface material explorations",
|
|
20
|
+
"id_patterns": ["^detail_", "^closeup_", "^texture_"]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "action",
|
|
24
|
+
"label": "Action / Locomotion",
|
|
25
|
+
"description": "Action poses, attack stances, locomotion studies, movement keys",
|
|
26
|
+
"id_patterns": ["^action_", "^attack_", "^locomotion_"]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "scale_reference",
|
|
30
|
+
"label": "Scale Reference",
|
|
31
|
+
"description": "Size comparison charts, scale references against humans or known objects",
|
|
32
|
+
"id_patterns": ["^scale_", "^size_", "^comparison_"]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "habitat",
|
|
36
|
+
"label": "Habitat / Environment",
|
|
37
|
+
"description": "Creature in environment context, habitat integration, ecological scenes",
|
|
38
|
+
"id_patterns": ["^habitat_", "^environment_", "^context_"]
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "TEMPLATE",
|
|
3
|
+
"display_name": "TEMPLATE",
|
|
4
|
+
"domain": "creature-design",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"description": "Creature concept art — fantasy creatures, alien species, monsters, wildlife, and mythological beings.",
|
|
7
|
+
"defaults": {
|
|
8
|
+
"checkpoint": "",
|
|
9
|
+
"loras": [],
|
|
10
|
+
"width": 1024,
|
|
11
|
+
"height": 1024,
|
|
12
|
+
"steps": 8,
|
|
13
|
+
"cfg": 2.0,
|
|
14
|
+
"sampler": "dpmpp_sde",
|
|
15
|
+
"scheduler": "karras",
|
|
16
|
+
"comfy_url": "http://127.0.0.1:8188"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dimensions": [
|
|
3
|
+
"anatomy_accuracy",
|
|
4
|
+
"silhouette_distinction",
|
|
5
|
+
"surface_texture",
|
|
6
|
+
"evolutionary_logic",
|
|
7
|
+
"scale_accuracy",
|
|
8
|
+
"locomotion_read",
|
|
9
|
+
"behavioral_read",
|
|
10
|
+
"style_consistency",
|
|
11
|
+
"habitat_fit"
|
|
12
|
+
],
|
|
13
|
+
"thresholds": {
|
|
14
|
+
"approved": {
|
|
15
|
+
"pass": 0.7,
|
|
16
|
+
"partial": 0.5
|
|
17
|
+
},
|
|
18
|
+
"borderline": {
|
|
19
|
+
"pass": 0.7,
|
|
20
|
+
"partial": 0.5
|
|
21
|
+
},
|
|
22
|
+
"rejected": {
|
|
23
|
+
"fail_ceiling": 0.4,
|
|
24
|
+
"partial_ceiling": 0.6
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"failure_to_rules": {
|
|
28
|
+
"broken_anatomy": ["ANA-001"],
|
|
29
|
+
"generic_monster": ["SIL-001"],
|
|
30
|
+
"wrong_texture": ["SUR-001"],
|
|
31
|
+
"impossible_biology": ["EVO-001"],
|
|
32
|
+
"no_scale_reference": ["SCL-001"],
|
|
33
|
+
"unclear_locomotion": ["LOC-001"],
|
|
34
|
+
"no_behavior": ["BEH-001"],
|
|
35
|
+
"style_mismatch": ["STY-001"],
|
|
36
|
+
"habitat_mismatch": ["HAB-001"],
|
|
37
|
+
"inconsistent_anatomy": ["ANA-002"]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"group_label": "species",
|
|
3
|
+
"id_detection_order": [],
|
|
4
|
+
"prompt_detection_order": [],
|
|
5
|
+
"groups": {},
|
|
6
|
+
"cross_group_patterns": {},
|
|
7
|
+
"edge_defaults": {},
|
|
8
|
+
"null_faction_patterns": [],
|
|
9
|
+
"id_fallbacks": {},
|
|
10
|
+
"training_profiles": [
|
|
11
|
+
{
|
|
12
|
+
"profile_id": "creature-style",
|
|
13
|
+
"intended_use": "Creature design consistency LoRA",
|
|
14
|
+
"eligible_lanes": ["concept", "orthographic", "detail_study"],
|
|
15
|
+
"minimum_review_threshold": 0.7,
|
|
16
|
+
"excluded_content": ["rejected"],
|
|
17
|
+
"export_format": "trl"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"rules": [
|
|
4
|
+
{
|
|
5
|
+
"id": "STY-001",
|
|
6
|
+
"category": "style",
|
|
7
|
+
"desc": "Consistent art style across all assets — no style drift between assets",
|
|
8
|
+
"dims": ["style_consistency"],
|
|
9
|
+
"faction_specific": false,
|
|
10
|
+
"rationale_pass": "Art style consistent with project bible (${scorePct}%)",
|
|
11
|
+
"rationale_fail": "Style drifts from project bible — wrong rendering approach (${scorePct}%)"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"id": "CMP-001",
|
|
15
|
+
"category": "composition",
|
|
16
|
+
"desc": "Clear composition and framing appropriate to lane — subject fills frame, readable staging",
|
|
17
|
+
"dims": ["composition"],
|
|
18
|
+
"faction_specific": false,
|
|
19
|
+
"rationale_pass": "Composition clear — subject properly framed and staged (${scorePct}%)",
|
|
20
|
+
"rationale_fail": "Composition fails — subject poorly framed or cluttered (${scorePct}%)"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "SIL-001",
|
|
24
|
+
"category": "silhouette",
|
|
25
|
+
"desc": "Silhouette readable at gameplay scale — identifiable at target resolution",
|
|
26
|
+
"dims": ["silhouette_clarity"],
|
|
27
|
+
"faction_specific": false,
|
|
28
|
+
"rationale_pass": "Silhouette readable at gameplay scale (${scorePct}%)",
|
|
29
|
+
"rationale_fail": "Silhouette unreadable at gameplay scale — details merge or vanish (${scorePct}%)"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "COL-001",
|
|
33
|
+
"category": "color",
|
|
34
|
+
"desc": "Color harmony within project palette — correct hue relationships and saturation level",
|
|
35
|
+
"dims": ["palette_adherence"],
|
|
36
|
+
"faction_specific": false,
|
|
37
|
+
"rationale_pass": "Palette harmonious and within project range (${scorePct}%)",
|
|
38
|
+
"rationale_fail": "Palette dissonant or outside project range (${scorePct}%)"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "MAT-001",
|
|
42
|
+
"category": "material",
|
|
43
|
+
"desc": "Material surfaces read correctly — metal reads as metal, cloth as cloth, no ambiguous surfaces",
|
|
44
|
+
"dims": ["material_fidelity"],
|
|
45
|
+
"faction_specific": true,
|
|
46
|
+
"rationale_pass": "Materials read correctly — surfaces match ${groupMaterial} (${scorePct}%)",
|
|
47
|
+
"rationale_fail": "Materials ambiguous — surfaces don't read as ${groupMaterial} (${scorePct}%)"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "GRP-001",
|
|
51
|
+
"category": "identity",
|
|
52
|
+
"desc": "Style-group differentiation — assets from different groups look visually distinct",
|
|
53
|
+
"dims": ["style_group_read"],
|
|
54
|
+
"faction_specific": true,
|
|
55
|
+
"rationale_pass": "Style group reads clearly — distinct from other groups (${scorePct}%)",
|
|
56
|
+
"rationale_fail": "Style group unreadable — could belong to any group (${scorePct}%)"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "WEA-001",
|
|
60
|
+
"category": "wear",
|
|
61
|
+
"desc": "Wear and aging appropriate to context — not too clean, not over-damaged",
|
|
62
|
+
"dims": ["wear_level"],
|
|
63
|
+
"faction_specific": true,
|
|
64
|
+
"rationale_pass": "Wear level appropriate — matches ${groupWear} (${scorePct}%)",
|
|
65
|
+
"rationale_fail": "Wear level wrong — doesn't match ${groupWear} (${scorePct}%)"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "LGT-001",
|
|
69
|
+
"category": "lighting",
|
|
70
|
+
"desc": "Consistent lighting direction and mood across assets — no conflicting light sources",
|
|
71
|
+
"dims": ["composition", "style_consistency"],
|
|
72
|
+
"faction_specific": false,
|
|
73
|
+
"rationale_pass": "Lighting consistent — direction and mood match project standard (${scorePct}%)",
|
|
74
|
+
"rationale_fail": "Lighting inconsistent — wrong direction or mood (${scorePct}%)"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "GEN-001",
|
|
78
|
+
"category": "originality",
|
|
79
|
+
"desc": "No generic or stock-art appearance — assets must feel authored, not asset-store pulls",
|
|
80
|
+
"dims": ["style_consistency", "style_group_read"],
|
|
81
|
+
"faction_specific": false,
|
|
82
|
+
"rationale_pass": "Asset feels authored and project-specific (${scorePct}%)",
|
|
83
|
+
"rationale_fail": "Asset reads as generic stock art — no project identity (${scorePct}%)"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "SCL-001",
|
|
87
|
+
"category": "scale",
|
|
88
|
+
"desc": "Scale reference present or implied — objects read at correct relative size",
|
|
89
|
+
"dims": ["composition", "detail_quality"],
|
|
90
|
+
"faction_specific": false,
|
|
91
|
+
"rationale_pass": "Scale reads correctly — objects at proper relative size (${scorePct}%)",
|
|
92
|
+
"rationale_fail": "Scale ambiguous — objects don't read at correct size (${scorePct}%)"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "SHP-001",
|
|
96
|
+
"category": "shape",
|
|
97
|
+
"desc": "Shape language matches style group — geometry and proportions follow group vocabulary",
|
|
98
|
+
"dims": ["silhouette_clarity", "style_group_read"],
|
|
99
|
+
"faction_specific": true,
|
|
100
|
+
"rationale_pass": "Shape language compliant — ${groupShapes} (${scorePct}%)",
|
|
101
|
+
"rationale_fail": "Shape language violates group vocabulary — wrong geometry (${scorePct}%)"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"id": "DTL-001",
|
|
105
|
+
"category": "detail",
|
|
106
|
+
"desc": "Detail density appropriate to asset importance and screen size — hero assets get more detail",
|
|
107
|
+
"dims": ["detail_quality"],
|
|
108
|
+
"faction_specific": false,
|
|
109
|
+
"rationale_pass": "Detail density appropriate for asset role (${scorePct}%)",
|
|
110
|
+
"rationale_fail": "Detail density wrong — over-detailed background or under-detailed hero (${scorePct}%)"
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"default_lane": "character",
|
|
3
|
+
"lanes": [
|
|
4
|
+
{
|
|
5
|
+
"id": "character",
|
|
6
|
+
"label": "Character",
|
|
7
|
+
"description": "Character designs, costumes, faction-specific clothing and personal gear",
|
|
8
|
+
"id_patterns": ["^char_", "^chr_", "^npc_", "^pc_", "^hero_", "^villain_"]
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": "environment",
|
|
12
|
+
"label": "Environment",
|
|
13
|
+
"description": "Landscapes, dungeons, towns, overworld locations, architectural exteriors",
|
|
14
|
+
"id_patterns": ["^env_", "^bg_", "^scene_", "^area_", "^map_", "^town_", "^dungeon_"]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "prop",
|
|
18
|
+
"label": "Prop",
|
|
19
|
+
"description": "Interactive objects, quest items, consumables, treasure, story-carrying objects",
|
|
20
|
+
"id_patterns": ["^prop_", "^item_", "^obj_", "^loot_", "^quest_"]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "ui",
|
|
24
|
+
"label": "UI Element",
|
|
25
|
+
"description": "Menu frames, icons, portraits, HUD elements, dialog boxes",
|
|
26
|
+
"id_patterns": ["^ui_", "^icon_", "^hud_", "^portrait_", "^menu_", "^frame_"]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "ship",
|
|
30
|
+
"label": "Ship / Vehicle",
|
|
31
|
+
"description": "Ships, vehicles, mounts, mechanical transports — exterior views",
|
|
32
|
+
"id_patterns": ["^ship_", "^veh_", "^mount_", "^mech_", "^vehicle_"]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "interior",
|
|
36
|
+
"label": "Interior",
|
|
37
|
+
"description": "Indoor spaces, ship interiors, room layouts, environmental storytelling",
|
|
38
|
+
"id_patterns": ["^int_", "^interior_", "^room_", "^cabin_", "^cockpit_"]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "equipment",
|
|
42
|
+
"label": "Equipment",
|
|
43
|
+
"description": "Weapons, armor, tools, wearable gear with faction or class identity",
|
|
44
|
+
"id_patterns": ["^eqp_", "^wpn_", "^weapon_", "^armor_", "^tool_", "^gear_", "^equip_"]
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "TEMPLATE",
|
|
3
|
+
"display_name": "TEMPLATE",
|
|
4
|
+
"domain": "game-art",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"defaults": {
|
|
7
|
+
"checkpoint": "",
|
|
8
|
+
"loras": [],
|
|
9
|
+
"width": 1024,
|
|
10
|
+
"height": 1024,
|
|
11
|
+
"steps": 8,
|
|
12
|
+
"cfg": 2.0,
|
|
13
|
+
"sampler": "dpmpp_sde",
|
|
14
|
+
"scheduler": "karras",
|
|
15
|
+
"comfy_url": "http://127.0.0.1:8188"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dimensions": [
|
|
3
|
+
"silhouette_clarity",
|
|
4
|
+
"palette_adherence",
|
|
5
|
+
"material_fidelity",
|
|
6
|
+
"style_group_read",
|
|
7
|
+
"wear_level",
|
|
8
|
+
"style_consistency",
|
|
9
|
+
"composition",
|
|
10
|
+
"detail_quality"
|
|
11
|
+
],
|
|
12
|
+
"thresholds": {
|
|
13
|
+
"approved": {
|
|
14
|
+
"pass": 0.7,
|
|
15
|
+
"partial": 0.5
|
|
16
|
+
},
|
|
17
|
+
"borderline": {
|
|
18
|
+
"pass": 0.7,
|
|
19
|
+
"partial": 0.5
|
|
20
|
+
},
|
|
21
|
+
"rejected": {
|
|
22
|
+
"fail_ceiling": 0.4,
|
|
23
|
+
"partial_ceiling": 0.6
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"failure_to_rules": {
|
|
27
|
+
"generic_look": ["GEN-001", "GRP-001"],
|
|
28
|
+
"wrong_style": ["STY-001", "GRP-001"],
|
|
29
|
+
"bad_composition": ["CMP-001", "SCL-001"],
|
|
30
|
+
"too_clean": ["WEA-001", "MAT-001"],
|
|
31
|
+
"bad_silhouette": ["SIL-001", "SHP-001"],
|
|
32
|
+
"wrong_palette": ["COL-001"],
|
|
33
|
+
"wrong_material": ["MAT-001"],
|
|
34
|
+
"style_group_unreadable": ["GRP-001", "SHP-001", "COL-001"]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"group_label": "style_group",
|
|
3
|
+
"id_detection_order": [],
|
|
4
|
+
"prompt_detection_order": [],
|
|
5
|
+
"groups": {},
|
|
6
|
+
"cross_group_patterns": {},
|
|
7
|
+
"edge_defaults": {},
|
|
8
|
+
"null_faction_patterns": [
|
|
9
|
+
"generic_fantasy",
|
|
10
|
+
"generic_scifi",
|
|
11
|
+
"stock_art",
|
|
12
|
+
"asset_store",
|
|
13
|
+
"too_clean",
|
|
14
|
+
"photorealistic",
|
|
15
|
+
"anime_style",
|
|
16
|
+
"chibi"
|
|
17
|
+
],
|
|
18
|
+
"id_fallbacks": {},
|
|
19
|
+
"faction_context": {},
|
|
20
|
+
"training_profiles": [
|
|
21
|
+
{
|
|
22
|
+
"profile_id": "style-lora",
|
|
23
|
+
"intended_use": "LoRA fine-tuning for project style",
|
|
24
|
+
"eligible_lanes": ["character", "environment", "prop"],
|
|
25
|
+
"minimum_review_threshold": 0.7,
|
|
26
|
+
"excluded_content": ["rejected", "borderline"],
|
|
27
|
+
"export_format": "trl"
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"rules": [
|
|
4
|
+
{
|
|
5
|
+
"id": "MEC-001",
|
|
6
|
+
"category": "mechanical",
|
|
7
|
+
"desc": "Mechanical plausibility — joints articulate, engines have intake/exhaust, moving parts have clearance",
|
|
8
|
+
"dims": ["mechanical_logic"],
|
|
9
|
+
"rationale_pass": "Mechanical logic holds — joints, engines, and moving parts are plausible (${scorePct}%)",
|
|
10
|
+
"rationale_fail": "Mechanical logic broken — impossible joints, sealed engines, or non-functional moving parts (${scorePct}%)"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "PRO-001",
|
|
14
|
+
"category": "proportion",
|
|
15
|
+
"desc": "Proportion consistency — same vehicle reads at the same scale and mass across all views",
|
|
16
|
+
"dims": ["proportion"],
|
|
17
|
+
"rationale_pass": "Proportions are consistent — vehicle reads at correct scale and mass across views (${scorePct}%)",
|
|
18
|
+
"rationale_fail": "Proportions drift between views — vehicle reads as different size or mass (${scorePct}%)"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "SUR-001",
|
|
22
|
+
"category": "surface",
|
|
23
|
+
"desc": "Surface detail density — panel lines, rivets, wear marks at scale-appropriate density",
|
|
24
|
+
"dims": ["surface_detail"],
|
|
25
|
+
"rationale_pass": "Surface detail is at appropriate density — panel lines and hardware read at scale (${scorePct}%)",
|
|
26
|
+
"rationale_fail": "Surface detail wrong — too sparse, too noisy, or inconsistent density for scale (${scorePct}%)"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "SIL-001",
|
|
30
|
+
"category": "silhouette",
|
|
31
|
+
"desc": "Silhouette readability — vehicle class identifiable from silhouette alone at distance",
|
|
32
|
+
"dims": ["silhouette_read"],
|
|
33
|
+
"rationale_pass": "Silhouette reads clearly — vehicle class identifiable at distance (${scorePct}%)",
|
|
34
|
+
"rationale_fail": "Silhouette is generic or ambiguous — vehicle class not identifiable at distance (${scorePct}%)"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "SCL-001",
|
|
38
|
+
"category": "scale",
|
|
39
|
+
"desc": "Scale reference — cockpit, hatches, or crew figures imply correct crew scale",
|
|
40
|
+
"dims": ["scale_reference"],
|
|
41
|
+
"rationale_pass": "Scale reads correctly — cockpit and access points imply correct crew size (${scorePct}%)",
|
|
42
|
+
"rationale_fail": "Scale is ambiguous or wrong — no crew reference or hatches imply impossible crew size (${scorePct}%)"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "FUN-001",
|
|
46
|
+
"category": "function",
|
|
47
|
+
"desc": "Functional design language — purpose reads from form (transport vs combat vs utility)",
|
|
48
|
+
"dims": ["functional_read"],
|
|
49
|
+
"rationale_pass": "Function reads from form — vehicle purpose is clear from design language (${scorePct}%)",
|
|
50
|
+
"rationale_fail": "Function is unreadable — form does not communicate purpose (${scorePct}%)"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "ACC-001",
|
|
54
|
+
"category": "access",
|
|
55
|
+
"desc": "Access points visible — hatches, ladders, maintenance panels, boarding points",
|
|
56
|
+
"dims": ["access_logic"],
|
|
57
|
+
"lanes": ["exterior", "cockpit"],
|
|
58
|
+
"rationale_pass": "Access points present and logical — hatches, ladders, and panels are placed correctly (${scorePct}%)",
|
|
59
|
+
"rationale_fail": "Access points missing or illogical — crew cannot board, maintain, or operate this vehicle (${scorePct}%)"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "WEA-001",
|
|
63
|
+
"category": "wear",
|
|
64
|
+
"desc": "Wear pattern follows use — high-traffic areas show more damage, sheltered areas less",
|
|
65
|
+
"dims": ["wear_logic"],
|
|
66
|
+
"rationale_pass": "Wear pattern is use-driven — high-traffic and exposed areas show appropriate wear (${scorePct}%)",
|
|
67
|
+
"rationale_fail": "Wear pattern is random — damage does not follow usage or exposure logic (${scorePct}%)"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "STY-001",
|
|
71
|
+
"category": "style",
|
|
72
|
+
"desc": "Style consistency within vehicle class or faction — shared design DNA across the lineup",
|
|
73
|
+
"dims": ["style_consistency"],
|
|
74
|
+
"rationale_pass": "Style is consistent — vehicle shares design DNA with its class or faction (${scorePct}%)",
|
|
75
|
+
"rationale_fail": "Style breaks from class or faction — design language does not match lineup (${scorePct}%)"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "DMG-001",
|
|
79
|
+
"category": "damage",
|
|
80
|
+
"desc": "Damage reads as battle history — scars, repairs, and patches tell a story, not random destruction",
|
|
81
|
+
"dims": ["damage_narrative"],
|
|
82
|
+
"lanes": ["damage_variant"],
|
|
83
|
+
"rationale_pass": "Damage reads as battle history — scars and repairs tell a coherent story (${scorePct}%)",
|
|
84
|
+
"rationale_fail": "Damage is random destruction — no narrative, just noise (${scorePct}%)"
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"default_lane": "exterior",
|
|
3
|
+
"lanes": [
|
|
4
|
+
{
|
|
5
|
+
"id": "exterior",
|
|
6
|
+
"label": "Exterior / Hull",
|
|
7
|
+
"description": "Full vehicle exterior views — hull design, body panels, overall form language",
|
|
8
|
+
"id_patterns": ["^ext_", "^vehicle_", "^hull_"]
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": "cockpit",
|
|
12
|
+
"label": "Cockpit / Cabin",
|
|
13
|
+
"description": "Cockpit interiors, bridge layouts, cabin instruments, pilot seating",
|
|
14
|
+
"id_patterns": ["^cockpit_", "^cabin_", "^bridge_"]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "component",
|
|
18
|
+
"label": "Component / Part Detail",
|
|
19
|
+
"description": "Individual mechanical components — engines, weapons, joints, thrusters, subsystems",
|
|
20
|
+
"id_patterns": ["^component_", "^part_", "^mechanism_"]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "schematic",
|
|
24
|
+
"label": "Schematic / Blueprint",
|
|
25
|
+
"description": "Technical diagrams, orthographic breakdowns, cross-sections, exploded views",
|
|
26
|
+
"id_patterns": ["^schematic_", "^blueprint_", "^diagram_"]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "silhouette_sheet",
|
|
30
|
+
"label": "Silhouette / Profile Sheet",
|
|
31
|
+
"description": "Silhouette studies, profile comparisons, class lineup sheets, scale charts",
|
|
32
|
+
"id_patterns": ["^silhouette_", "^profile_", "^outline_"]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "damage_variant",
|
|
36
|
+
"label": "Damage / Battle Variant",
|
|
37
|
+
"description": "Battle-damaged states, wear progression, field-repaired configurations",
|
|
38
|
+
"id_patterns": ["^damage_", "^battle_", "^wear_"]
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "TEMPLATE",
|
|
3
|
+
"display_name": "TEMPLATE",
|
|
4
|
+
"domain": "vehicle-mech",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"defaults": {
|
|
7
|
+
"checkpoint": "",
|
|
8
|
+
"loras": [],
|
|
9
|
+
"width": 1024,
|
|
10
|
+
"height": 1024,
|
|
11
|
+
"steps": 8,
|
|
12
|
+
"cfg": 2.0,
|
|
13
|
+
"sampler": "dpmpp_sde",
|
|
14
|
+
"scheduler": "karras",
|
|
15
|
+
"comfy_url": "http://127.0.0.1:8188"
|
|
16
|
+
}
|
|
17
|
+
}
|