@forgeax-extension/character-3d 0.1.2
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/SOURCE_PROVENANCE.md +8 -0
- package/dist/assets/index-CIx3aXo1.js +4336 -0
- package/dist/assets/index-CIx3aXo1.js.map +1 -0
- package/dist/assets/index-CmhOHLEB.css +1 -0
- package/dist/hdr/README.md +28 -0
- package/dist/hdr/presets.json +8 -0
- package/dist/index.html +13 -0
- package/forgeax-extension.json +428 -0
- package/marketplace-card.json +56 -0
- package/package.json +59 -0
- package/packages/external-asset-meta/package.json +24 -0
- package/packages/external-asset-meta/src/cook.test.ts +211 -0
- package/packages/external-asset-meta/src/cook.ts +188 -0
- package/packages/external-asset-meta/src/draco3dgltf.d.ts +11 -0
- package/packages/external-asset-meta/src/index.ts +18 -0
- package/packages/external-asset-meta/src/normalize.test.ts +36 -0
- package/packages/external-asset-meta/src/normalize.ts +101 -0
- package/packages/external-asset-meta/src/types.ts +82 -0
- package/schemas/adopt-playable-character.args.json +26 -0
- package/schemas/adopt-playable-character.returns.json +31 -0
- package/schemas/apply-motion.args.json +47 -0
- package/schemas/apply-motion.returns.json +23 -0
- package/schemas/auto-rig.args.json +35 -0
- package/schemas/auto-rig.returns.json +23 -0
- package/schemas/delete-asset.args.json +18 -0
- package/schemas/delete-asset.returns.json +18 -0
- package/schemas/engine-import-status.args.json +18 -0
- package/schemas/engine-import-status.returns.json +50 -0
- package/schemas/export-playable-character.args.json +21 -0
- package/schemas/export-playable-character.returns.json +47 -0
- package/schemas/gen3d-asset-manifest.json +281 -0
- package/schemas/generate-meshy-text-mock.args.json +42 -0
- package/schemas/generate-meshy-text-mock.returns.json +301 -0
- package/schemas/get-credentials.args.json +7 -0
- package/schemas/get-credentials.returns.json +45 -0
- package/schemas/get-playable-profile.args.json +11 -0
- package/schemas/get-playable-profile.returns.json +188 -0
- package/schemas/image-to-3d.args.json +47 -0
- package/schemas/image-to-3d.returns.json +306 -0
- package/schemas/import-to-engine.args.json +18 -0
- package/schemas/import-to-engine.returns.json +35 -0
- package/schemas/list-assets.args.json +22 -0
- package/schemas/list-assets.returns.json +296 -0
- package/schemas/list-motions.args.json +29 -0
- package/schemas/list-motions.returns.json +41 -0
- package/schemas/pose-standardization.args.json +28 -0
- package/schemas/pose-standardization.returns.json +29 -0
- package/schemas/provider-status.args.json +7 -0
- package/schemas/provider-status.returns.json +70 -0
- package/schemas/refine-mesh.args.json +33 -0
- package/schemas/refine-mesh.returns.json +306 -0
- package/schemas/rename-asset.args.json +22 -0
- package/schemas/rename-asset.returns.json +14 -0
- package/schemas/retopo-lowpoly.args.json +34 -0
- package/schemas/retopo-lowpoly.returns.json +24 -0
- package/schemas/score-quality.args.json +36 -0
- package/schemas/score-quality.returns.json +12 -0
- package/schemas/set-credentials.args.json +32 -0
- package/schemas/set-credentials.returns.json +45 -0
- package/schemas/set-playable-motion-mapping.args.json +25 -0
- package/schemas/set-playable-motion-mapping.returns.json +33 -0
- package/schemas/set-playable-profile.args.json +32 -0
- package/schemas/set-playable-profile.returns.json +67 -0
- package/schemas/text-to-3d.args.json +51 -0
- package/schemas/text-to-3d.returns.json +306 -0
- package/schemas/upload-image.args.json +19 -0
- package/schemas/upload-image.returns.json +21 -0
- package/schemas/upload-video.args.json +14 -0
- package/schemas/upload-video.returns.json +14 -0
- package/schemas/views-to-3d.args.json +58 -0
- package/schemas/views-to-3d.returns.json +306 -0
- package/server/adopt-playable-character.ts +291 -0
- package/server/asset-storage.ts +136 -0
- package/server/asset-upload.ts +123 -0
- package/server/audit.ts +58 -0
- package/server/cache.ts +75 -0
- package/server/cos-uploader.ts +141 -0
- package/server/credentials-store.ts +186 -0
- package/server/engine-import.ts +238 -0
- package/server/env.ts +287 -0
- package/server/export-playable-character.ts +364 -0
- package/server/generate.ts +89 -0
- package/server/merge-playable-character.ts +259 -0
- package/server/motion-catalog.ts +137 -0
- package/server/per-game-store.ts +1016 -0
- package/server/providers/gateway-client.ts +171 -0
- package/server/providers/gateway-data.ts +182 -0
- package/server/providers/gateway-models.ts +49 -0
- package/server/providers/hunyuan-rest.ts +317 -0
- package/server/providers/hunyuan-workflow.ts +225 -0
- package/server/providers/meshy-direct-client.ts +223 -0
- package/server/providers/meshy.ts +548 -0
- package/server/providers/rodin-gateway.ts +193 -0
- package/server/providers/rodin.ts +253 -0
- package/server/providers/visvise.ts +329 -0
- package/server/rate-guard.ts +29 -0
- package/server/tool-handlers.ts +2193 -0
- package/shared/catalog.ts +307 -0
- package/shared/manifest.ts +378 -0
- package/shared/meshy-actions.ts +690 -0
- package/shared/playable-preview-url.test.ts +14 -0
- package/shared/playable-preview-url.ts +13 -0
- package/shared/playable-profile.test.ts +127 -0
- package/shared/playable-profile.ts +171 -0
- package/shared/provider-params.test.ts +172 -0
- package/shared/provider-params.ts +389 -0
- package/shared/quality/heuristics.test.ts +84 -0
- package/shared/quality/heuristics.ts +100 -0
- package/shared/rodin-image.test.ts +51 -0
- package/shared/rodin-image.ts +125 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "gen3d:list-assets returns",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"ok": {
|
|
7
|
+
"const": true
|
|
8
|
+
},
|
|
9
|
+
"assets": {
|
|
10
|
+
"type": "array",
|
|
11
|
+
"items": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"properties": {
|
|
14
|
+
"manifestVersion": {
|
|
15
|
+
"const": 1
|
|
16
|
+
},
|
|
17
|
+
"assetId": {
|
|
18
|
+
"type": "string"
|
|
19
|
+
},
|
|
20
|
+
"kind": {
|
|
21
|
+
"enum": [
|
|
22
|
+
"mesh",
|
|
23
|
+
"animation"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"provider": {
|
|
27
|
+
"enum": [
|
|
28
|
+
"meshy",
|
|
29
|
+
"hunyuan_workflow",
|
|
30
|
+
"hunyuan_rest",
|
|
31
|
+
"rodin",
|
|
32
|
+
"visvise"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"providerMode": {
|
|
36
|
+
"enum": [
|
|
37
|
+
"mock",
|
|
38
|
+
"real"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"mode": {
|
|
42
|
+
"enum": [
|
|
43
|
+
"text",
|
|
44
|
+
"image",
|
|
45
|
+
"views",
|
|
46
|
+
"refine"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
"sourceJobId": {
|
|
50
|
+
"type": [
|
|
51
|
+
"string",
|
|
52
|
+
"null"
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
"sourceInputAssetIds": {
|
|
56
|
+
"type": "array",
|
|
57
|
+
"items": {
|
|
58
|
+
"type": "string"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"prompt": {
|
|
62
|
+
"type": [
|
|
63
|
+
"string",
|
|
64
|
+
"null"
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
"files": {
|
|
68
|
+
"type": "array",
|
|
69
|
+
"items": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"properties": {
|
|
72
|
+
"fileId": {
|
|
73
|
+
"type": "string"
|
|
74
|
+
},
|
|
75
|
+
"role": {
|
|
76
|
+
"enum": [
|
|
77
|
+
"source_mesh",
|
|
78
|
+
"rigged_model",
|
|
79
|
+
"preview_image",
|
|
80
|
+
"texture",
|
|
81
|
+
"animation_clip",
|
|
82
|
+
"animated_model"
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
"format": {
|
|
86
|
+
"enum": [
|
|
87
|
+
"glb",
|
|
88
|
+
"fbx",
|
|
89
|
+
"obj",
|
|
90
|
+
"mtl",
|
|
91
|
+
"usdz",
|
|
92
|
+
"stl",
|
|
93
|
+
"png",
|
|
94
|
+
"jpg",
|
|
95
|
+
"mp4"
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
"storageKey": {
|
|
99
|
+
"type": "string"
|
|
100
|
+
},
|
|
101
|
+
"bytes": {
|
|
102
|
+
"type": "integer",
|
|
103
|
+
"minimum": 0
|
|
104
|
+
},
|
|
105
|
+
"sha256": {
|
|
106
|
+
"type": "string"
|
|
107
|
+
},
|
|
108
|
+
"localUrl": {
|
|
109
|
+
"type": [
|
|
110
|
+
"string",
|
|
111
|
+
"null"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"hasSkeleton": {
|
|
115
|
+
"type": "boolean"
|
|
116
|
+
},
|
|
117
|
+
"skeletonProfile": {
|
|
118
|
+
"enum": [
|
|
119
|
+
"humanoid",
|
|
120
|
+
"unknown"
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
"animationInputReady": {
|
|
124
|
+
"type": "boolean"
|
|
125
|
+
},
|
|
126
|
+
"motionType": {
|
|
127
|
+
"type": "integer",
|
|
128
|
+
"minimum": 9,
|
|
129
|
+
"maximum": 16,
|
|
130
|
+
"description": "Present only on role=animated_model files: the motion_retarget v1 motion this clip is (9 跨步 / 10 摔倒 / 11 跳跃 / 12 踢腿 / 13 挥击 / 14 步行 / 15 跑步 / 16 跳舞). Structural so multiple motions coexist per asset. Absent for non-animated roles."
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"required": [
|
|
134
|
+
"fileId",
|
|
135
|
+
"role",
|
|
136
|
+
"format",
|
|
137
|
+
"storageKey",
|
|
138
|
+
"bytes",
|
|
139
|
+
"sha256",
|
|
140
|
+
"localUrl",
|
|
141
|
+
"hasSkeleton",
|
|
142
|
+
"skeletonProfile",
|
|
143
|
+
"animationInputReady"
|
|
144
|
+
],
|
|
145
|
+
"additionalProperties": false
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
"readiness": {
|
|
149
|
+
"type": "object",
|
|
150
|
+
"properties": {
|
|
151
|
+
"hasSourceMesh": {
|
|
152
|
+
"type": "boolean"
|
|
153
|
+
},
|
|
154
|
+
"rigged": {
|
|
155
|
+
"type": "boolean"
|
|
156
|
+
},
|
|
157
|
+
"animated": {
|
|
158
|
+
"type": "boolean"
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
"required": [
|
|
162
|
+
"hasSourceMesh",
|
|
163
|
+
"rigged",
|
|
164
|
+
"animated"
|
|
165
|
+
],
|
|
166
|
+
"additionalProperties": false
|
|
167
|
+
},
|
|
168
|
+
"quality": {
|
|
169
|
+
"type": "object",
|
|
170
|
+
"properties": {
|
|
171
|
+
"geometry": {
|
|
172
|
+
"type": [
|
|
173
|
+
"number",
|
|
174
|
+
"null"
|
|
175
|
+
]
|
|
176
|
+
},
|
|
177
|
+
"topology": {
|
|
178
|
+
"type": [
|
|
179
|
+
"number",
|
|
180
|
+
"null"
|
|
181
|
+
]
|
|
182
|
+
},
|
|
183
|
+
"texture": {
|
|
184
|
+
"type": [
|
|
185
|
+
"number",
|
|
186
|
+
"null"
|
|
187
|
+
]
|
|
188
|
+
},
|
|
189
|
+
"pbr": {
|
|
190
|
+
"type": [
|
|
191
|
+
"number",
|
|
192
|
+
"null"
|
|
193
|
+
]
|
|
194
|
+
},
|
|
195
|
+
"prompt_fidelity": {
|
|
196
|
+
"type": [
|
|
197
|
+
"number",
|
|
198
|
+
"null"
|
|
199
|
+
]
|
|
200
|
+
},
|
|
201
|
+
"total": {
|
|
202
|
+
"type": [
|
|
203
|
+
"number",
|
|
204
|
+
"null"
|
|
205
|
+
]
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
"required": [
|
|
209
|
+
"geometry",
|
|
210
|
+
"topology",
|
|
211
|
+
"texture",
|
|
212
|
+
"pbr",
|
|
213
|
+
"prompt_fidelity",
|
|
214
|
+
"total"
|
|
215
|
+
],
|
|
216
|
+
"additionalProperties": false
|
|
217
|
+
},
|
|
218
|
+
"createdAt": {
|
|
219
|
+
"type": "string"
|
|
220
|
+
},
|
|
221
|
+
"updatedAt": {
|
|
222
|
+
"type": "string"
|
|
223
|
+
},
|
|
224
|
+
"meshyTaskRefs": {
|
|
225
|
+
"type": "object",
|
|
226
|
+
"description": "Meshy preview vs result task ids. Manual refine uses previewTaskId; rig uses resultTaskId.",
|
|
227
|
+
"properties": {
|
|
228
|
+
"previewTaskId": {
|
|
229
|
+
"type": [
|
|
230
|
+
"string",
|
|
231
|
+
"null"
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
"resultTaskId": {
|
|
235
|
+
"type": [
|
|
236
|
+
"string",
|
|
237
|
+
"null"
|
|
238
|
+
]
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
"required": [
|
|
242
|
+
"previewTaskId",
|
|
243
|
+
"resultTaskId"
|
|
244
|
+
],
|
|
245
|
+
"additionalProperties": false
|
|
246
|
+
},
|
|
247
|
+
"visviseRefs": {
|
|
248
|
+
"type": "object",
|
|
249
|
+
"description": "VISVISE COS URLs from generate/rig. Downstream rig/motion must reuse these; do not re-host on ForgeaX COS first.",
|
|
250
|
+
"properties": {
|
|
251
|
+
"meshUrl": {
|
|
252
|
+
"type": [
|
|
253
|
+
"string",
|
|
254
|
+
"null"
|
|
255
|
+
]
|
|
256
|
+
},
|
|
257
|
+
"rigUrl": {
|
|
258
|
+
"type": [
|
|
259
|
+
"string",
|
|
260
|
+
"null"
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
"required": [
|
|
265
|
+
"meshUrl",
|
|
266
|
+
"rigUrl"
|
|
267
|
+
],
|
|
268
|
+
"additionalProperties": false
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
"required": [
|
|
272
|
+
"manifestVersion",
|
|
273
|
+
"assetId",
|
|
274
|
+
"kind",
|
|
275
|
+
"provider",
|
|
276
|
+
"providerMode",
|
|
277
|
+
"mode",
|
|
278
|
+
"sourceJobId",
|
|
279
|
+
"sourceInputAssetIds",
|
|
280
|
+
"prompt",
|
|
281
|
+
"files",
|
|
282
|
+
"readiness",
|
|
283
|
+
"quality",
|
|
284
|
+
"createdAt",
|
|
285
|
+
"updatedAt"
|
|
286
|
+
],
|
|
287
|
+
"additionalProperties": false
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
"required": [
|
|
292
|
+
"ok",
|
|
293
|
+
"assets"
|
|
294
|
+
],
|
|
295
|
+
"additionalProperties": false
|
|
296
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "gen3d:list-motions args",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"description": "Discover selectable motions for the apply-motion step. Zero credits (a GET); quota-safe offline sample when Meshy is not configured. Callers narrow the ~680-entry catalog via query/category/rigType rather than enumerating it.",
|
|
6
|
+
"properties": {
|
|
7
|
+
"slug": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "Active game slug. Injected by the workbench host; required."
|
|
10
|
+
},
|
|
11
|
+
"assetPath": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "Optional. When given, the catalog matches that asset's rig system: a Hunyuan-rigged asset returns the v1 fixed 8; a Meshy-rigged asset returns its rig-compatible actions. Omit to browse the public Meshy catalog."
|
|
14
|
+
},
|
|
15
|
+
"query": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Case-insensitive substring match on the motion label or id."
|
|
18
|
+
},
|
|
19
|
+
"category": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "Exact category filter (e.g. locomotion, gesture, expression)."
|
|
22
|
+
},
|
|
23
|
+
"rigType": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"description": "Exact rig/skeleton type filter (e.g. style_02)."
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"additionalProperties": false
|
|
29
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "gen3d:list-motions returns",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"ok": { "const": true },
|
|
7
|
+
"usedMock": {
|
|
8
|
+
"type": "boolean",
|
|
9
|
+
"description": "True when Meshy was not configured and a deterministic offline sample was returned (zero credits). Always false for the Hunyuan v1 fixed set."
|
|
10
|
+
},
|
|
11
|
+
"system": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"enum": ["hunyuan_v1", "hunyuan_v2", "meshy", "visvise"],
|
|
14
|
+
"description": "Which motion system the catalog belongs to (resolved from the asset's rig provider, default meshy)."
|
|
15
|
+
},
|
|
16
|
+
"total": {
|
|
17
|
+
"type": "integer",
|
|
18
|
+
"description": "Number of motions after filtering."
|
|
19
|
+
},
|
|
20
|
+
"motions": {
|
|
21
|
+
"type": "array",
|
|
22
|
+
"description": "Filtered motion options. Pass a chosen entry's id to gen3d:apply-motion (actionId for Meshy, motionType for Hunyuan v1).",
|
|
23
|
+
"items": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"properties": {
|
|
26
|
+
"system": { "type": "string", "enum": ["hunyuan_v1", "hunyuan_v2", "meshy", "visvise"] },
|
|
27
|
+
"id": { "type": ["integer", "string"] },
|
|
28
|
+
"label": { "type": "string" },
|
|
29
|
+
"category": { "type": ["string", "null"] },
|
|
30
|
+
"rigType": { "type": ["string", "null"] },
|
|
31
|
+
"isFree": { "type": "boolean" },
|
|
32
|
+
"previewGifUrl": { "type": ["string", "null"] }
|
|
33
|
+
},
|
|
34
|
+
"required": ["system", "id", "label", "isFree"],
|
|
35
|
+
"additionalProperties": true
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"required": ["ok", "usedMock", "system", "total", "motions"],
|
|
40
|
+
"additionalProperties": false
|
|
41
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "gen3d:pose-standardization args",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"slug": {
|
|
7
|
+
"type": "string",
|
|
8
|
+
"description": "Active game slug. The standardized image is written to scratch under .forgeax/games/<slug>/.gen3d/tmp/ (a transfer artifact, not an asset). The workbench UI fills this automatically for manual use; an AI/agent caller MUST pass the active game's slug (e.g. 'mini-gta'). Required."
|
|
9
|
+
},
|
|
10
|
+
"imageUrl": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"minLength": 1,
|
|
13
|
+
"description": "URL of a full-body simple/cartoon character portrait to standardize to an A/T-pose. Only simple cartoon full-body images are supported by the provider."
|
|
14
|
+
},
|
|
15
|
+
"footnote": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Optional free-text note passed through to the provider request."
|
|
18
|
+
},
|
|
19
|
+
"provider": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"enum": ["hunyuan_rest", "visvise"],
|
|
22
|
+
"default": "hunyuan_rest",
|
|
23
|
+
"description": "Pose provider. Defaults to hunyuan_rest. Use visvise for VISVISE image-to-3d (visvise-image-pose). Rodin image-to-3d skips this step."
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"required": ["slug", "imageUrl"],
|
|
27
|
+
"additionalProperties": false
|
|
28
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "gen3d:pose-standardization returns",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"ok": { "const": true },
|
|
7
|
+
"usedMock": {
|
|
8
|
+
"type": "boolean",
|
|
9
|
+
"description": "True when no real provider was configured and a deterministic mock image was used (quota-safe fallback)."
|
|
10
|
+
},
|
|
11
|
+
"sourceJobId": {
|
|
12
|
+
"type": ["string", "null"],
|
|
13
|
+
"description": "Remote provider job id, for audit. Null in mock mode. Never a stored-asset reference."
|
|
14
|
+
},
|
|
15
|
+
"storageKey": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Scratch (transfer) key for the standardized image under .forgeax/games/<slug>/.gen3d/tmp/. NOT a 3D asset (no manifest, not in list-assets); use as the upstream input for a later gen3d:image-to-3d call."
|
|
18
|
+
},
|
|
19
|
+
"bytes": { "type": "integer", "minimum": 0 },
|
|
20
|
+
"sha256": { "type": "string" },
|
|
21
|
+
"localUrl": { "type": ["string", "null"] },
|
|
22
|
+
"sourceUrl": {
|
|
23
|
+
"type": ["string", "null"],
|
|
24
|
+
"description": "The provider's temporary output URL the image was downloaded from. Audit only; never the canonical reference."
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"required": ["ok", "usedMock", "sourceJobId", "storageKey", "bytes", "sha256", "localUrl", "sourceUrl"],
|
|
28
|
+
"additionalProperties": false
|
|
29
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "gen3d:provider-status returns",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"ok": { "const": true },
|
|
7
|
+
"quotaSafe": {
|
|
8
|
+
"type": "boolean",
|
|
9
|
+
"description": "True when no real provider is configured, so all generation falls back to mock."
|
|
10
|
+
},
|
|
11
|
+
"realProvidersEnabled": {
|
|
12
|
+
"type": "boolean",
|
|
13
|
+
"description": "True when a real provider (e.g. Hunyuan workflow) is configured and the master switch is on."
|
|
14
|
+
},
|
|
15
|
+
"generatedAt": { "type": "string" },
|
|
16
|
+
"rubric": {
|
|
17
|
+
"type": "array",
|
|
18
|
+
"items": {
|
|
19
|
+
"enum": ["geometry", "topology", "texture", "pbr", "prompt_fidelity"]
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"capabilities": {
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"properties": {
|
|
27
|
+
"providerId": {
|
|
28
|
+
"enum": ["meshy", "hunyuan_workflow", "hunyuan_rest", "rodin", "visvise"]
|
|
29
|
+
},
|
|
30
|
+
"providerName": { "type": "string" },
|
|
31
|
+
"capability": { "type": "string" },
|
|
32
|
+
"sourceStatus": { "type": "string" },
|
|
33
|
+
"exposure": {
|
|
34
|
+
"enum": ["planned", "mock-first", "experimental", "hidden", "blocked"]
|
|
35
|
+
},
|
|
36
|
+
"notes": { "type": "string" }
|
|
37
|
+
},
|
|
38
|
+
"required": ["providerId", "providerName", "capability", "sourceStatus", "exposure", "notes"],
|
|
39
|
+
"additionalProperties": false
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"providers": {
|
|
43
|
+
"type": "array",
|
|
44
|
+
"description": "Runtime provider availability for the UI picker. Meshy is listed but selectable=false (UI hidden). Rodin and VISVISE are selectable when the LiteLLM 3D key is present.",
|
|
45
|
+
"items": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"properties": {
|
|
48
|
+
"providerId": {
|
|
49
|
+
"enum": ["meshy", "hunyuan_workflow", "rodin", "visvise"]
|
|
50
|
+
},
|
|
51
|
+
"providerName": { "type": "string" },
|
|
52
|
+
"configured": { "type": "boolean" },
|
|
53
|
+
"availability": {
|
|
54
|
+
"enum": ["configured", "available", "unavailable", "unknown"]
|
|
55
|
+
},
|
|
56
|
+
"selectable": { "type": "boolean" },
|
|
57
|
+
"reason": { "type": "string" },
|
|
58
|
+
"models": {
|
|
59
|
+
"type": "object",
|
|
60
|
+
"additionalProperties": { "type": "string" }
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"required": ["providerId", "providerName", "configured", "availability", "selectable", "reason", "models"],
|
|
64
|
+
"additionalProperties": false
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"required": ["ok", "quotaSafe", "realProvidersEnabled", "generatedAt", "rubric", "capabilities", "providers"],
|
|
69
|
+
"additionalProperties": false
|
|
70
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "gen3d:refine-mesh args",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"slug": {
|
|
7
|
+
"type": "string",
|
|
8
|
+
"description": "Active game slug. The workbench UI fills this automatically for manual use; an AI/agent caller MUST pass the active game's slug (e.g. 'mini-gta'). Required."
|
|
9
|
+
},
|
|
10
|
+
"assetSlot": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"enum": ["characters", "meshes"],
|
|
13
|
+
"default": "meshes",
|
|
14
|
+
"description": "3D asset slot (subdir under assets/3d/)."
|
|
15
|
+
},
|
|
16
|
+
"assetName": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "Desired base file name (without extension). Sanitized + de-duplicated by the store."
|
|
19
|
+
},
|
|
20
|
+
"previewTaskId": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"minLength": 1,
|
|
23
|
+
"description": "Meshy preview (white-mesh) task id from manifest.meshyTaskRefs.previewTaskId — NOT the auto-refine resultTaskId / sourceJobId. Meshy-only second stage that adds or restyles texture."
|
|
24
|
+
},
|
|
25
|
+
"texturePrompt": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "Optional text guidance for texture generation (<=600 chars)."
|
|
28
|
+
},
|
|
29
|
+
"enablePbr": { "type": "boolean", "default": true }
|
|
30
|
+
},
|
|
31
|
+
"required": ["slug", "previewTaskId"],
|
|
32
|
+
"additionalProperties": false
|
|
33
|
+
}
|