Files
ECC/skills/taste-application/workflows/taste-prop3d.json
T
928c1dea72 feat(tasteforge): package reusable workflows and preserve native edits (#3033)
* feat: bundle standalone taste distillation and application workflows

* docs: fix imported taste skill markdown lint

* docs: align Turkish agent catalog with taste skills

* refactor: make ECC the canonical reusable video engine

* fix: preserve video duration when applying image overlays

* fix: preserve background colors in image compositing

* fix: report best-effort duration targets and shortfalls

* feat: ship verified Fusion presets with compatibility provenance

* feat(tasteforge): preserve native edits in application bundles

* feat(tasteforge): compile local preservation without hosted input

* fix: update js-yaml to patched 4.3.2

* test: report bounded Stop wrapper failure diagnostics

* fix(tasteforge): fail closed on unsafe output names, missing overlays and cadence

- cli: default report and spec paths are derived from pack name and profile
  genre; require the manifest's name pattern before using either as a
  filename part so a traversal string cannot write outside cwd/out.
- apply_local: a pack without cadence.json, or with no measured shots and
  no explicit mean_shot, raises instead of silently planning 1.0s shots and
  reporting a measured cadence.
- legacy apply: a missing overlay aborts before any paid upload; forge()
  would have rejected it after every take was generated.
- requirements-live: pin fal-client>=0.13.0, the first release whose
  subscribe() accepts client_timeout.

Addresses the five P1 findings from the independent review of #3033.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015fxHRsydPqEcYngGbqkgt1

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-10 15:31:36 +01:00

103 lines
2.2 KiB
JSON

{
"name": "taste-prop3d",
"title": "taste-prop3d",
"contents": {
"name": "workflow",
"nodes": {
"node-plate": {
"type": "run",
"id": "node-plate",
"depends": [
"input"
],
"metadata": {
"position": {
"x": 380,
"y": 0
}
},
"app": "fal-ai/nano-banana-pro",
"input": {
"prompt": "$input.prop",
"num_images": 1,
"aspect_ratio": "1:1",
"output_format": "png"
}
},
"node-3d": {
"type": "run",
"id": "node-3d",
"depends": [
"node-plate"
],
"metadata": {
"position": {
"x": 800,
"y": 0
}
},
"app": "fal-ai/hunyuan-3d/v3.1/pro/image-to-3d",
"input": {
"input_image_url": "$node-plate.images.0.url",
"generate_type": "Normal",
"enable_pbr": true,
"face_count": 300000
}
},
"output": {
"type": "display",
"id": "output",
"depends": [
"node-3d"
],
"input": {},
"metadata": {
"position": {
"x": 1220,
"y": 0
}
},
"fields": {
"mesh_glb": "$node-3d.model_glb",
"mesh_obj": "$node-3d.model_urls.obj",
"preview": "$node-3d.thumbnail",
"plate": "$node-plate.images.0"
}
}
},
"output": {
"mesh_glb": "$node-3d.model_glb",
"mesh_obj": "$node-3d.model_urls.obj",
"preview": "$node-3d.thumbnail",
"plate": "$node-plate.images.0"
},
"schema": {
"input": {
"prop": {
"name": "prompt",
"label": "Prop description (append the plate rules)",
"description": "Prop description (append the plate rules)",
"required": true,
"defaultValue": "",
"examples": [],
"ui": {
"field": "textarea"
},
"type": "string",
"modelId": "node-plate"
}
},
"output": {}
},
"version": "1",
"metadata": {
"input": {
"position": {
"x": 0,
"y": 0
}
}
}
}
}