@melite/models-trellis2-native 0.1.4-alpha → 0.2.0-alpha
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/LICENSE +561 -457
- package/README.md +36 -0
- package/lib/actions.d.ts +1 -2
- package/lib/actions.js +34 -49
- package/lib/index.d.ts +2 -1
- package/lib/index.js +89 -79
- package/package.json +5 -6
package/README.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: TRELLIS.2 Native family — background-removed image to textured GLB through voxel structure, shape, and texture stages, with the mesh action on the ComfyUI engine.
|
|
3
|
+
kind: package-library
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# @melite/models-trellis2-native
|
|
7
|
+
|
|
8
|
+
`@melite/models-trellis2-native` is the model family package for TRELLIS.2 on native ComfyUI (`form_img_to_mesh`, genre 3d): background-removed conditioning flows to a voxel structure, a shape latent, and a texture atlas, saved as a `.glb`. The DECL declares the `mesh` action, a three-resolution variant rail, and the five-file lift-chain provisioning. The estate boot mounts it as a Cordis plugin through `ctx.models.registerFamily` inside `ctx.effect`; the img-to-mesh card binds the action. The lane is this package's own `actions.ts`, pinned to committed goldens.
|
|
9
|
+
|
|
10
|
+
## Declaration
|
|
11
|
+
|
|
12
|
+
Variants: `1024` (default; BF16 at ~12 GB VRAM peak or INT8 ConvRot at ~8 GB), `1536` (hero quality; 16/10 GB), and a hidden fast `512`. Family defaults fix the sampler table (euler/normal structure and shape, euler/simple then euler/normal texture), `steps` 12 / `shape_steps` 20, `cfg` 7.5, remesh at 768 faces decimated to 700k, atlas 4096, AO 1024, normal 2048, `sd3_shift` 5, and `seed` 42. The `mesh` action requires `input_image` — the 3D lift is image-conditioned and takes no text prompt — and its facts door refuses any of the five load keys missing: `unet`, `vae`, `texture_vae`, `clip_vision`, `background_removal`. Provisions pin the weights, including `birefnet.safetensors` from Comfy-Org's BiRefNet repo for background removal. The build runs structure, shape, upsample, remesh, texture, and the atlas/AO/normal bakes, then saves through `MeshToFile3D` + `Save3DAdvanced`.
|
|
13
|
+
|
|
14
|
+
## Model Experience
|
|
15
|
+
|
|
16
|
+
### Request context and condition
|
|
17
|
+
|
|
18
|
+
#### What the model sees
|
|
19
|
+
|
|
20
|
+
- **input_image** — required; the source image the lift conditions on.
|
|
21
|
+
- **resolution / bg_removal** — the closed variant table and the birefnet on/off/auto pick.
|
|
22
|
+
- **sampler rows and seed** — the per-stage sampler/scheduler/steps/cfg table and the sentinel-minted seed.
|
|
23
|
+
|
|
24
|
+
#### Token effect
|
|
25
|
+
|
|
26
|
+
Zero-direct token effect — the fields ride the composed ComfyUI graph; no harness context is spent.
|
|
27
|
+
|
|
28
|
+
#### KV Cache effect
|
|
29
|
+
|
|
30
|
+
Independent — each mesh run is its own engine request; no shared prefix.
|
|
31
|
+
|
|
32
|
+
## Known Limitations and Deferred Work
|
|
33
|
+
|
|
34
|
+
- **No text conditioning** — the lane accepts no prompt; shape intent must come from the image alone.
|
|
35
|
+
- **VRAM peaks are cell-declared** — the 8–16 GB figures are the DECL's measured rows, not runtime guarantees on every GPU.
|
|
36
|
+
- **Image quality ceiling** — background removal and texture fidelity are not verified against the running engine.
|
package/lib/actions.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ export type MeshFacts = {
|
|
|
7
7
|
readonly vae: string;
|
|
8
8
|
readonly texture_vae: string;
|
|
9
9
|
readonly clip_vision: string;
|
|
10
|
-
readonly background_removal: string;
|
|
11
10
|
};
|
|
12
11
|
/** The gated params doc the mesh segment reads (the card's schema
|
|
13
12
|
* walk validated types and bounds — a same-process typed boundary;
|
|
@@ -21,6 +20,6 @@ export type MeshParams = Record<string, unknown>;
|
|
|
21
20
|
* @returns the typed facts the segment factory reads */
|
|
22
21
|
export declare function parseMeshFacts(raw: LaneInputsFacts): MeshFacts;
|
|
23
22
|
/** The mesh action: trellis_t1 — DINOv3 conditioning (the image IS
|
|
24
|
-
* the prompt; negative
|
|
23
|
+
* the prompt; the negative is the conditioning's own output 1). */
|
|
25
24
|
export declare const mesh: ComfyActionSpec<MeshParams, MeshFacts>;
|
|
26
25
|
//# sourceMappingURL=actions.d.ts.map
|
package/lib/actions.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { requireText } from "@melite/comfyui-card-kit/facts";
|
|
2
|
-
import { MESH_RESOLUTIONS,
|
|
2
|
+
import { MESH_RESOLUTIONS, MESH_ATLAS_SIZES, MESH_AO_SIZES, MESH_NORMAL_SIZES, admitMeshLiftShared, isSpell } from "@melite/comfyui-card-kit";
|
|
3
3
|
import { SAMPLER_OPTIONS, SCHEDULER_OPTIONS } from "@melite/comfyui-card-kit/vocab";
|
|
4
4
|
/** The mesh facts door: the resolved lane_inputs parsed into the
|
|
5
5
|
* closed shape — a missing load key refuses field-named here,
|
|
@@ -12,39 +12,19 @@ export function parseMeshFacts(raw) {
|
|
|
12
12
|
vae: requireText(raw, 'vae', 'trellis2-native mesh'),
|
|
13
13
|
texture_vae: requireText(raw, 'texture_vae', 'trellis2-native mesh'),
|
|
14
14
|
clip_vision: requireText(raw, 'clip_vision', 'trellis2-native mesh'),
|
|
15
|
-
background_removal: requireText(raw, 'background_removal', 'trellis2-native mesh'),
|
|
16
15
|
};
|
|
17
16
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const MESH_BG_MODES = ['auto', 'on', 'off'];
|
|
30
|
-
const MESH_BAKE_SIZES = [
|
|
31
|
-
['atlas_size', ['2048', '4096']],
|
|
32
|
-
['ao_size', ['512', '1024']],
|
|
33
|
-
['normal_size', ['1024', '2048']],
|
|
34
|
-
];
|
|
35
|
-
if (!MESH_RESOLUTIONS.includes(String(p.resolution))) {
|
|
36
|
-
throw new Error(`resolution ${JSON.stringify(p.resolution)} is not one of ${MESH_RESOLUTIONS.join('|')} — the variant table is closed`);
|
|
37
|
-
}
|
|
38
|
-
const bg = String(p.bg_removal || 'auto');
|
|
39
|
-
if (!MESH_BG_MODES.includes(bg)) {
|
|
40
|
-
throw new Error(`bg_removal ${JSON.stringify(bg)} is not one of auto|on|off — birefnet either cuts or it doesn't`);
|
|
41
|
-
}
|
|
42
|
-
for (const [k, opts] of MESH_BAKE_SIZES) {
|
|
43
|
-
if (!opts.includes(String(p[k]))) {
|
|
44
|
-
throw new Error(`${k} ${JSON.stringify(p[k])} is not one of ${opts.join('|')} — the bake-size table is closed`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
17
|
+
/** The wired-tensor law (the lanes-image precedent, ported 1:1):
|
|
18
|
+
* a '$name' value names an upstream stage's wired output — the
|
|
19
|
+
* spell IS the tensor and rides node inputs verbatim. ROW-4
|
|
20
|
+
* refuses producer links in Load* file slots, so a spelled image
|
|
21
|
+
* NEVER builds a loader; file paths keep the disk handoff. */
|
|
22
|
+
/** The lift arms' admission slice for THIS family: the SHARED kit
|
|
23
|
+
* seat (the dry-sweep's J4 re-hoist — two families carried this
|
|
24
|
+
* verbatim; the required image and closed sets refuse in the
|
|
25
|
+
* slice, never in the schema). This family adds no private arm
|
|
26
|
+
* (the pixal-only camera_fov row is pixal's, not ours). */
|
|
27
|
+
const admitMeshLift = admitMeshLiftShared;
|
|
48
28
|
/** The dual guided unet + the two VAEs — the lift chain's shared
|
|
49
29
|
* head. Creation order lands the reference renderers' numbering: the SHAPE
|
|
50
30
|
* pair first (CFGOverride.0/RescaleCFG.0), then the STRUCT pair
|
|
@@ -74,15 +54,6 @@ function loadLiftHeads(g, li, p) {
|
|
|
74
54
|
const texVae = g.node('VAELoader', { vae_name: li.texture_vae }).out();
|
|
75
55
|
return { unet, rescaleShape, shifted, shapeVae, texVae };
|
|
76
56
|
}
|
|
77
|
-
/** The birefnet cut (bg_removal auto/on): the cutout MASK from
|
|
78
|
-
* RemoveBackground bridged to IMAGE via MaskToImage (the GPU
|
|
79
|
-
* canary verdict — RemoveBackground outputs MASK, not IMAGE). */
|
|
80
|
-
function cutBackground(g, li, img) {
|
|
81
|
-
const bgm = g.node('LoadBackgroundRemovalModel', { bg_removal_name: li.background_removal }).out();
|
|
82
|
-
const mask = g.node('RemoveBackground', { bg_removal_model: bgm, image: img }).out();
|
|
83
|
-
const src = g.node('MaskToImage', { mask }).out();
|
|
84
|
-
return { src, mask };
|
|
85
|
-
}
|
|
86
57
|
/** The shared structure→shape→upsample→texture→bake→glb chain
|
|
87
58
|
* (_shared_lift_chain verbatim — the model delta lives
|
|
88
59
|
* ENTIRELY in the conditioning pair passed in). */
|
|
@@ -203,7 +174,7 @@ function sharedLiftChain(g, p, heads, pos, neg, prefix) {
|
|
|
203
174
|
}).out();
|
|
204
175
|
}
|
|
205
176
|
/** The mesh action: trellis_t1 — DINOv3 conditioning (the image IS
|
|
206
|
-
* the prompt; negative
|
|
177
|
+
* the prompt; the negative is the conditioning's own output 1). */
|
|
207
178
|
export const mesh = {
|
|
208
179
|
id: "mesh",
|
|
209
180
|
inputs: [],
|
|
@@ -220,7 +191,6 @@ export const mesh = {
|
|
|
220
191
|
{ name: "resolution", type: "enum", options: MESH_RESOLUTIONS },
|
|
221
192
|
{ name: "steps", type: "number", bounds: [4, 60] },
|
|
222
193
|
{ name: "cfg", type: "number", bounds: [1, 15] },
|
|
223
|
-
{ name: "bg_removal", type: "enum", options: MESH_BG_MODES },
|
|
224
194
|
{ name: "shape_steps", type: "number", bounds: [4, 60] },
|
|
225
195
|
{ name: "shape_cfg", type: "number", bounds: [1, 15] },
|
|
226
196
|
{ name: "shape_sampler", type: "enum", options: SAMPLER_OPTIONS },
|
|
@@ -262,13 +232,28 @@ export const mesh = {
|
|
|
262
232
|
? p.input_image
|
|
263
233
|
: g.node('LoadImage', { image: p.input_image }).out();
|
|
264
234
|
const heads = loadLiftHeads(g, li, p);
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
235
|
+
// THE TEMPLATE HAS NO MASK BRIDGE: the crop eats the photo
|
|
236
|
+
// (LoadImage) verbatim — a MaskToImage-sourced crop feeds the
|
|
237
|
+
// silhouette, and the silhouette starves every appearance
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
// "return_type_mismatch ... input_type(MASK)"), so the region
|
|
241
|
+
// rides ImageToMask of the SAME photo — images stay the photo
|
|
242
|
+
// verbatim (appearance features), the region is a real mask.
|
|
243
|
+
const mask = g.node('ImageToMask', { image: img, channel: 'red' }).out();
|
|
244
|
+
const cropped = g.node('ImageCropToMask', {
|
|
245
|
+
images: img, masks: mask,
|
|
246
|
+
pad_factor: 1.1, width: 1024, height: 1024,
|
|
247
|
+
// pin autofills leaves in place (core defaults)
|
|
248
|
+
background: '#000000', grow_mask: 0,
|
|
249
|
+
}).out();
|
|
269
250
|
const clip = g.node('CLIPVisionLoader', { clip_name: li.clip_vision }).out();
|
|
270
|
-
const
|
|
271
|
-
const
|
|
251
|
+
const cond = g.node('Trellis2Conditioning', { clip_vision_model: clip, image: cropped });
|
|
252
|
+
const pos = cond.out(0);
|
|
253
|
+
// the negative IS the conditioning's second output — never a
|
|
254
|
+
// fabricated zero (the zero drops the shared proj pack the
|
|
255
|
+
// template routes as every pass's negative)
|
|
256
|
+
const neg = cond.out(1);
|
|
272
257
|
// Family constant, never a knob (compose stamps the prefix
|
|
273
258
|
// internally; stable).
|
|
274
259
|
return sharedLiftChain(g, p, heads, pos, neg, 'trellis2_native');
|
package/lib/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Plugin } from "@deepseek-ai/cordis";
|
|
2
|
-
import type { ModelDecl } from
|
|
2
|
+
import type { ModelDecl } from '@melite/comfyui-card-kit/model-contract';
|
|
3
3
|
export declare const DECL: ModelDecl;
|
|
4
4
|
export declare const family: Plugin;
|
|
5
5
|
export { mesh } from "./actions.js";
|
|
6
|
+
export { family as default };
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.js
CHANGED
|
@@ -6,8 +6,13 @@ export const DECL = {
|
|
|
6
6
|
"description": "Image to textured 3D mesh (native ComfyUI TRELLIS.2): background-removed conditioning → voxel structure → shape latent → texture atlas, saved as a .glb.",
|
|
7
7
|
"engine": "comfyui",
|
|
8
8
|
"defaults": {
|
|
9
|
+
|
|
10
|
+
// standard / quality, defaulting to standard): the floors ARE the
|
|
11
|
+
// standard tier — 1024 + the template's 768/700k tail (the card
|
|
12
|
+
// schema carries no remesh default, so this row is the raw-compose
|
|
13
|
+
// floor; the surviving 1024 lane stamps none, and the quality
|
|
14
|
+
// recipe's 1536/2048/2M picks override these as patch-only rows).
|
|
9
15
|
"resolution": "1024",
|
|
10
|
-
"bg_removal": "auto",
|
|
11
16
|
"steps": 12,
|
|
12
17
|
"cfg": 7.5,
|
|
13
18
|
"shape_steps": 20,
|
|
@@ -35,7 +40,7 @@ export const DECL = {
|
|
|
35
40
|
"rescale_shape": 0.5,
|
|
36
41
|
"override_struct": 0.667,
|
|
37
42
|
"override_shape": 0.769,
|
|
38
|
-
"seed":
|
|
43
|
+
"seed": -1
|
|
39
44
|
},
|
|
40
45
|
"studio": {
|
|
41
46
|
"tenant": "3d/img-to-mesh",
|
|
@@ -50,101 +55,84 @@ export const DECL = {
|
|
|
50
55
|
"layout": "studio"
|
|
51
56
|
},
|
|
52
57
|
"genre": "3d",
|
|
58
|
+
|
|
59
|
+
// variant row declares its own steps+cfg in resolver_defaults —
|
|
60
|
+
// the family defaults can never substitute for a variant's face.
|
|
61
|
+
// input_image is the user-provided seat.
|
|
62
|
+
"required_defaults": [
|
|
63
|
+
{ "name": "steps", "class": "variant" },
|
|
64
|
+
{ "name": "cfg", "class": "variant" },
|
|
65
|
+
{ "name": "input_image", "class": "user" }
|
|
66
|
+
],
|
|
53
67
|
"variants": [
|
|
54
68
|
{
|
|
55
69
|
"id": "1024",
|
|
56
70
|
"label": "1024",
|
|
57
|
-
"hint": "Standard resolution —
|
|
71
|
+
"hint": "Standard resolution — the fast tier",
|
|
58
72
|
"group": "Variant",
|
|
59
73
|
"route": "trellis2-native",
|
|
74
|
+
// Resolution stays family-owned (one value, one owner — this row
|
|
75
|
+
// IS the lane), but the SAMPLER pair is declared here (the
|
|
76
|
+
// variant-sampler-defaults law): 12 / 7.5 — the official
|
|
77
|
+
|
|
78
|
+
// standard-tier ruling).
|
|
79
|
+
"resolver_defaults": { "steps": 12, "cfg": 7.5 },
|
|
60
80
|
"order": 0,
|
|
61
81
|
"cells": [
|
|
62
82
|
{
|
|
63
|
-
"quant": "
|
|
64
|
-
"label": "BF16",
|
|
65
|
-
"hide_from_dropdown": true,
|
|
66
|
-
"route": "trellis2-native-bf16",
|
|
67
|
-
"vram_peak_gb": 12,
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
"quant": "int8",
|
|
83
|
+
"quant": "int8_convrot",
|
|
71
84
|
"label": "INT8 ConvRot",
|
|
72
85
|
"route": "trellis2-native-int8",
|
|
73
86
|
"vram_peak_gb": 8,
|
|
74
87
|
}
|
|
75
88
|
]
|
|
76
89
|
},
|
|
90
|
+
|
|
91
|
+
// standard, quality on the img to mesh node, defaulting to
|
|
92
|
+
// standard"). Resolution rides ONE seat — the family defaults
|
|
93
|
+
// row's 1024 — so fast and standard leave it unstated and only
|
|
94
|
+
// quality restates the 1536 pick (the card's closed enum owns
|
|
95
|
+
// the vocabulary: 1024 | 1536; the hidden 512 lane was
|
|
96
|
+
// off-envelope and died with its variant row). The remesh tail
|
|
97
|
+
// rides the family defaults row (the floors ARE the standard —
|
|
98
|
+
// the h3 precedent: a recipe stamps only what DIFFERS from the
|
|
99
|
+
// floor). HIGH is the FIRST row and the group default (operator
|
|
100
|
+
|
|
101
|
+
// be run" — the old standard default's output read poor/low
|
|
102
|
+
// quality): 1536 detail + a mid remesh tail, comfortably under
|
|
103
|
+
// a 24GB card. STANDARD is now the stamp-less second row — the
|
|
104
|
+
// calibrated floor as an explicit pick.
|
|
77
105
|
{
|
|
78
|
-
"id": "
|
|
79
|
-
"label": "
|
|
80
|
-
"hint": "
|
|
81
|
-
"group": "
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"resolver_defaults": { "resolution": "1536" },
|
|
85
|
-
"cells": [
|
|
86
|
-
{
|
|
87
|
-
"quant": "bf16",
|
|
88
|
-
"label": "BF16",
|
|
89
|
-
"hide_from_dropdown": true,
|
|
90
|
-
"route": "trellis2-native-1536-bf16",
|
|
91
|
-
"vram_peak_gb": 16,
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
"quant": "int8",
|
|
95
|
-
"label": "INT8 ConvRot",
|
|
96
|
-
"route": "trellis2-native-1536-int8",
|
|
97
|
-
"vram_peak_gb": 10,
|
|
98
|
-
}
|
|
99
|
-
]
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
"id": "512",
|
|
103
|
-
"label": "512",
|
|
104
|
-
"hint": "Fast resolution — props, thumbnails, iteration",
|
|
105
|
-
"group": "Variant",
|
|
106
|
-
"route": "trellis2-native-512",
|
|
107
|
-
"order": 1,
|
|
108
|
-
"hide_from_dropdown": true,
|
|
109
|
-
"cells": [
|
|
110
|
-
{
|
|
111
|
-
"quant": "bf16",
|
|
112
|
-
"label": "BF16",
|
|
113
|
-
"hide_from_dropdown": true,
|
|
114
|
-
"route": "trellis2-native-512-bf16",
|
|
115
|
-
"vram_peak_gb": 8,
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
"quant": "int8",
|
|
119
|
-
"label": "INT8 ConvRot",
|
|
120
|
-
"route": "trellis2-native-512-int8",
|
|
121
|
-
"vram_peak_gb": 5,
|
|
122
|
-
}
|
|
123
|
-
]
|
|
106
|
+
"id": "high",
|
|
107
|
+
"label": "High",
|
|
108
|
+
"hint": "The default — high quality that still runs: 1536 detail + remesh 1024 + 1M faces; the int8 chain peaks well under a 24GB card.",
|
|
109
|
+
"group": "Recipe",
|
|
110
|
+
"wire_defaults": { "resolution": "1536", "remesh_resolution": 1024, "decimate_faces": 1000000 },
|
|
111
|
+
"cells": [],
|
|
124
112
|
},
|
|
125
113
|
{
|
|
126
|
-
"id": "
|
|
127
|
-
"label": "
|
|
128
|
-
"hint": "
|
|
114
|
+
"id": "standard",
|
|
115
|
+
"label": "Standard",
|
|
116
|
+
"hint": "The official template's calibration as the floor: 1024 + remesh 768 + 700k faces.",
|
|
129
117
|
"group": "Recipe",
|
|
130
|
-
"wire_defaults": { "remesh_resolution": 128, "decimate_faces": 10000 },
|
|
131
118
|
"cells": [],
|
|
132
119
|
},
|
|
133
120
|
{
|
|
134
|
-
"id": "
|
|
135
|
-
"label": "
|
|
136
|
-
"hint": "
|
|
121
|
+
"id": "fast",
|
|
122
|
+
"label": "Fast",
|
|
123
|
+
"hint": "Preview tier — remesh 128 + 10k faces at the same 1024 floor; the lightest mesh that still unwraps.",
|
|
137
124
|
"group": "Recipe",
|
|
138
|
-
"wire_defaults": { "remesh_resolution":
|
|
125
|
+
"wire_defaults": { "remesh_resolution": 128, "decimate_faces": 10000 },
|
|
139
126
|
"cells": [],
|
|
140
127
|
},
|
|
141
128
|
{
|
|
142
|
-
"id": "
|
|
143
|
-
"label": "
|
|
144
|
-
"hint": "
|
|
129
|
+
"id": "quality",
|
|
130
|
+
"label": "Quality",
|
|
131
|
+
"hint": "Hero assets — resolution 1536 + remesh 2048 + 2M faces; RemeshMesh wants ~3.6 GiB over a ~19 GiB resident chain (32GB+ VRAM only).",
|
|
145
132
|
"group": "Recipe",
|
|
133
|
+
"wire_defaults": { "resolution": "1536", "remesh_resolution": 2048, "decimate_faces": 2000000 },
|
|
146
134
|
"cells": [],
|
|
147
|
-
}
|
|
135
|
+
},
|
|
148
136
|
],
|
|
149
137
|
"variant_groups": [
|
|
150
138
|
{
|
|
@@ -158,8 +146,8 @@ export const DECL = {
|
|
|
158
146
|
{
|
|
159
147
|
"id": "Recipe",
|
|
160
148
|
"label": "Recipe",
|
|
161
|
-
"tooltip": "One-click
|
|
162
|
-
"default": "
|
|
149
|
+
"tooltip": "One-click mesh tiers — patch-only rows: High (the runnable 1536 default), Fast (preview tail), Standard (the calibrated floor), Quality (1536 hero pass).",
|
|
150
|
+
"default": "high"
|
|
163
151
|
}
|
|
164
152
|
],
|
|
165
153
|
"provisions": [
|
|
@@ -190,22 +178,39 @@ export const DECL = {
|
|
|
190
178
|
"folder": "clip_vision",
|
|
191
179
|
"sha256": "5cb785e458de7c460579082418af81f5c62380c181599344bdc60898c63468ee",
|
|
192
180
|
"size_bytes": 1212559776
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
"name": "birefnet.safetensors",
|
|
196
|
-
"url": "https://huggingface.co/Comfy-Org/BiRefNet/resolve/main/background_removal/birefnet.safetensors",
|
|
197
|
-
"folder": "background_removal",
|
|
198
|
-
"sha256": "9ab37426bf4de0567af6b5d21b16151357149139362e6e8992021b8ce356a154",
|
|
199
|
-
"size_bytes": 444473596
|
|
200
181
|
}
|
|
201
182
|
],
|
|
202
183
|
"lane_inputs": {
|
|
203
|
-
"background_removal": "birefnet.safetensors",
|
|
204
184
|
"clip_vision": "dino_v3_vit_l.safetensors",
|
|
205
185
|
"texture_vae": "trellis_2_texture_vae_bf16.safetensors",
|
|
206
186
|
"unet": "trellis_2_int8_convrot.safetensors",
|
|
207
187
|
"vae": "trellis_2_shape_vae_bf16.safetensors"
|
|
208
188
|
},
|
|
189
|
+
// THE DECLARED HOME (the lane-presence cure): the store folder this
|
|
190
|
+
// pack-specific lane file lives in — the run gate probes it at press
|
|
191
|
+
// instead of dying untyped at the engine.
|
|
192
|
+
"lane_homes": { "texture_vae": "vae" },
|
|
193
|
+
// THE LANE SURFACE (the z-image precedent): exactly the knobs the
|
|
194
|
+
// img-to-mesh card serves — the mesh lift, its shape/texture
|
|
195
|
+
// passes, the remesh/decimate tail, and the per-pass sampler pairs.
|
|
196
|
+
"params": [
|
|
197
|
+
"input_image", "rigged_glb", "target_glb",
|
|
198
|
+
"seed", "resolution", "steps", "cfg",
|
|
199
|
+
"camera_fov",
|
|
200
|
+
"shape_steps", "shape_cfg", "tex1_steps", "tex1_cfg",
|
|
201
|
+
"tex2_steps", "tex2_cfg",
|
|
202
|
+
"remesh_resolution", "remesh_qef", "remesh_drop_inverted",
|
|
203
|
+
"remesh_drop_enclosed", "remesh_fix_poles",
|
|
204
|
+
"decimate_faces", "smooth_angle",
|
|
205
|
+
"atlas_size", "ao_size", "normal_size",
|
|
206
|
+
"struct_sampler", "struct_scheduler",
|
|
207
|
+
"shape_sampler", "shape_scheduler",
|
|
208
|
+
"tex1_sampler", "tex1_scheduler",
|
|
209
|
+
"tex2_sampler", "tex2_scheduler",
|
|
210
|
+
"sd3_shift",
|
|
211
|
+
"rescale_struct", "rescale_shape",
|
|
212
|
+
"override_struct", "override_shape",
|
|
213
|
+
],
|
|
209
214
|
// the mesh action the img-to-mesh card binds (the trellis_t1
|
|
210
215
|
// lane tree).
|
|
211
216
|
"actions": [mesh],
|
|
@@ -218,4 +223,9 @@ export const family = {
|
|
|
218
223
|
},
|
|
219
224
|
};
|
|
220
225
|
export { mesh } from "./actions.js";
|
|
226
|
+
// The Loader-row face: DSH loads plugin rows by bare specifier and
|
|
227
|
+
// unwraps `exports.default ?? exports` (vendor/cordis_plugins/loader
|
|
228
|
+
// unwrapExports) — the default export IS the row-loadable plugin. The
|
|
229
|
+
// named `family` stays the library face (engine loadFamilies).
|
|
230
|
+
export { family as default };
|
|
221
231
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@melite/models-trellis2-native",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"license": "
|
|
3
|
+
"version": "0.2.0-alpha",
|
|
4
|
+
"license": "AGPL-3.0-or-later",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
@@ -11,13 +11,12 @@
|
|
|
11
11
|
"./package.json": "./package.json"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@melite/comfyui-card-kit": "0.
|
|
15
|
-
"@melite/comfyui-cordis": "0.1.4-alpha"
|
|
14
|
+
"@melite/comfyui-card-kit": "0.2.0-alpha"
|
|
16
15
|
},
|
|
17
16
|
"devDependencies": {
|
|
18
17
|
"@types/node": "^22.20.0",
|
|
19
18
|
"typescript": "^5.9.3",
|
|
20
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
19
|
+
"@deepseek-ai/cordis": "^4.0.5"
|
|
21
20
|
},
|
|
22
21
|
"files": [
|
|
23
22
|
"lib/index.js",
|
|
@@ -25,7 +24,7 @@
|
|
|
25
24
|
"lib/**/*.d.ts"
|
|
26
25
|
],
|
|
27
26
|
"peerDependencies": {
|
|
28
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
27
|
+
"@deepseek-ai/cordis": "^4.0.5"
|
|
29
28
|
},
|
|
30
29
|
"scripts": {
|
|
31
30
|
"build": "tsc -p tsconfig.build.json",
|