diffusers-workflow 0.4.0b5__tar.gz → 0.4.0b6__tar.gz
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.
- {diffusers_workflow-0.4.0b5/diffusers_workflow.egg-info → diffusers_workflow-0.4.0b6}/PKG-INFO +3 -2
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6/diffusers_workflow.egg-info}/PKG-INFO +3 -2
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/diffusers_workflow.egg-info/SOURCES.txt +42 -21
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/diffusers_workflow.egg-info/requires.txt +2 -1
- diffusers_workflow-0.4.0b6/dw/adapter_compatibility.py +226 -0
- diffusers_workflow-0.4.0b6/dw/content_types.py +105 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/MCP.md +3 -3
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/RECIPES_24GB.md +14 -3
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/SERVER.md +59 -7
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/WORKFLOW_GUIDE.md +129 -3
- diffusers_workflow-0.4.0b6/dw/elision.py +306 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/events.py +86 -2
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/introspection.py +116 -8
- diffusers_workflow-0.4.0b6/dw/kernel_availability.py +208 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/pipeline_processors/pipeline.py +138 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/plan.py +93 -3
- diffusers_workflow-0.4.0b6/dw/reference_names.py +125 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/result.py +148 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/schema.py +3 -1
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/security.py +83 -5
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/app.py +474 -97
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/catalog_shape.py +74 -2
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/jobs.py +62 -2
- diffusers_workflow-0.4.0b6/dw/server/observed_cost.py +335 -0
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/cssMode-BQ03gENP.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/cssMode-1t4O7A8b.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/editor.api-CzvLX8mb.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/editor.api-C2mqCHa9.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/freemarker2-C8c7lwsP.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/freemarker2-Cb6RGT42.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/handlebars-7APo_5hD.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/handlebars-LzK4_SEF.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/html-JgrkBemQ.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/html-Biz_qd50.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/htmlMode-BH9VsgGh.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/htmlMode-CP4Kjl0x.js +1 -1
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/index-Bt8BlCkf.js +41 -0
- diffusers_workflow-0.4.0b6/dw/server/ui/assets/index-D9tEUhx5.css +1 -0
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/javascript-BrFJ1H6j.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/javascript-DX4-t0BE.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/jsonMode-C10gRe-2.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/jsonMode-hZa_qOEa.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/liquid-CjfGWTAZ.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/liquid-BRkTuJ_A.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/lspLanguageFeatures-O-lB5SDv.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/lspLanguageFeatures-Dvt5tod9.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/mdx-D7b-hMTY.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/mdx-Bdet7qev.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/monaco-DBnxML20.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/monaco-QRyCMGAv.js +4 -4
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/python-NfJjzkPL.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/python-DO0uJyUr.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/razor-CgQtwMBj.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/razor-CkfVe6oz.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/tsMode-BuMW6Qar.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/tsMode-z26QXNyE.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/typescript-Bfmxt754.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/typescript-DIdNc_uc.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/workers-BSu9lD5s.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/workers-Ce8CDVu5.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/xml-BJ2IwGRC.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/xml-Djj2U0Rl.js +1 -1
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/yaml-Cq85tEmC.js → diffusers_workflow-0.4.0b6/dw/server/ui/assets/yaml-CePLO71e.js +1 -1
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/index.html +2 -2
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/task_domains.py +1 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/audio_utils.py +43 -1
- diffusers_workflow-0.4.0b6/dw/tasks/pair_audio.py +181 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/task.py +34 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/video_utils.py +50 -0
- diffusers_workflow-0.4.0b6/dw/variable_constraints.py +444 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/worker.py +38 -1
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/workflow.py +172 -3
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/workflow_schema.json +98 -23
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/workspace.py +5 -2
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/assets.py +5 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/authoring.py +28 -7
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/catalog.py +30 -8
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/diagnose.py +27 -11
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/server.py +82 -20
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/pyproject.toml +11 -2
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_audio_utils.py +94 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_catalog_shape.py +1 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_catalog_structure.py +79 -8
- diffusers_workflow-0.4.0b6/tests/test_content_types.py +132 -0
- diffusers_workflow-0.4.0b6/tests/test_elision.py +499 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_events.py +144 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_examples.py +5 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_for_each.py +15 -2
- diffusers_workflow-0.4.0b6/tests/test_h3_adapters.py +195 -0
- diffusers_workflow-0.4.0b6/tests/test_h3_schedule.py +152 -0
- diffusers_workflow-0.4.0b6/tests/test_job_warnings.py +46 -0
- diffusers_workflow-0.4.0b6/tests/test_kernel_availability.py +255 -0
- diffusers_workflow-0.4.0b6/tests/test_lora_alpha.py +128 -0
- diffusers_workflow-0.4.0b6/tests/test_ltx2_diffusion_decode.py +97 -0
- diffusers_workflow-0.4.0b6/tests/test_ltx2_ic_loras.py +166 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_ltx_prompt_library.py +52 -1
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_catalog.py +10 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_server.py +83 -0
- diffusers_workflow-0.4.0b6/tests/test_observed_cost.py +594 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_output_references.py +37 -0
- diffusers_workflow-0.4.0b6/tests/test_pair_audio_fit.py +149 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_pipeline_caching.py +207 -1
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_pipeline_components.py +68 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_plan.py +153 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_plugin_skills.py +41 -21
- diffusers_workflow-0.4.0b6/tests/test_reference_names.py +103 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_result.py +275 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server.py +301 -3
- diffusers_workflow-0.4.0b6/tests/test_server_downloads.py +283 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server_exports.py +14 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server_workspaces.py +30 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_task_discovery.py +12 -5
- diffusers_workflow-0.4.0b6/tests/test_task_signature_errors.py +146 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_validate_arguments.py +56 -0
- diffusers_workflow-0.4.0b6/tests/test_variable_constraints.py +566 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_video_utils.py +52 -1
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_worker_execute.py +61 -4
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_workflow.py +7 -1
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_workflow_step_cache.py +5 -0
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/index-B1DfbIuu.js +0 -37
- diffusers_workflow-0.4.0b5/dw/server/ui/assets/index-CRVAbEJ9.css +0 -1
- diffusers_workflow-0.4.0b5/dw/tasks/pair_audio.py +0 -81
- diffusers_workflow-0.4.0b5/tests/test_server_downloads.py +0 -123
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/LICENSE +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/MANIFEST.in +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/README.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/diffusers_workflow.egg-info/dependency_links.txt +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/diffusers_workflow.egg-info/entry_points.txt +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/diffusers_workflow.egg-info/top_level.txt +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/__init__.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/arguments.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/assets.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/cache_blocks.json +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/cache_blocks.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/community_pipelines/pipeline_flux_rf_inversion.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/ACCELERATION.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/AGENT_LOOP.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/DEPENDENCIES.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/IP_ADAPTER.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/LORAS.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/PROMPT_WEIGHTING.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/QUANTIZATION.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/RELEASING.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/REMOTE.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/REPL_COMMANDS.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/REPL_WORKER_GUIDE.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/SECURITY.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/SECURITY_QUICKREF.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/TASKS.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/TESTING.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/docs/WORKSPACES.md +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/for_each.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/host_memory.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/hub_cache.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/locations.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/log_setup.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/media_info.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/pipeline_processors/chain.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/pipeline_processors/config_objects.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/pipeline_processors/remote.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/previous_results.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/prompt_schema.json +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/prompt_weighting.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/prompts.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/realize.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/reference_limits.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/repl.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/repl_commands.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/repl_worker.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/run.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/runs.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/serve.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/__init__.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/enhancers.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/exports.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/guides.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/mcp_mount.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/netinfo.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/abap-08VXUWAP.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/apex-BWPQTe0t.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/azcli-Bc_sGQ0U.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/bat-i0X4ZdIN.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/bicep-B5-_aFwp.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/cameligo-DMUM7wLl.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/clojure-Cm7r79vr.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/codicon-Brq4_Ui5.ttf +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/coffee-Ba7i2nA0.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/cpp-C7h46wYY.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/csharp-BKxtCVv1.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/csp-bTuwJoIa.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/css-DIMkf-bt.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/css.worker-B3ciXF_0.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/cypher-CVaqCwHa.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/dart-onAF5SnQ.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/dockerfile-DZFCIeNp.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/ecl-D05T4iGw.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/editor-jjEx9u7D.css +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/editor.worker-q-txB4vs.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/elixir-6RTg0lbw.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/flow9-C5_-GSwl.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/fsharp-C8Ef5oNN.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/go-C-y9NEjX.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/graphql-fmXr3nnJ.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/hcl-CpzslTdj.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/html.worker-C93Ht9o9.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/ini-sBoK_t0W.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/java-BEtHBSE6.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/json.worker-B2V3pomh.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/julia-Bri6UV-V.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/kotlin-BOotOW0E.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/less-B9JPFI3C.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/lexon-CfSJPG6W.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/lua-CsQS60Ue.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/m3-D-oSqn_W.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/markdown-Cimd5fb3.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/mips-CIPQ_RoX.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/monaco--ixms01u.css +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/msdax-DauUninz.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/mysql-SOo6toE5.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/objective-c-FvmIjYaQ.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/pascal-DrH0SRf2.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/pascaligo-D-ptJ9y-.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/perl-oz_6vUea.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/pgsql-DTj74zXo.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/php-nr791fC2.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/pla-CopQ2nXW.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/postiats-43DmfD33.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/powerquery-D3hlyOfw.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/powershell-DmHpPYUd.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/protobuf-C531GsRP.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/pug-Z5eAx3Zn.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/qsharp-DkqhCAOL.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/r-BwWrilGY.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/redis-ClamHrr6.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/redshift-DT7zqm-g.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/restructuredtext-BYgofb2h.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/ruby-DezsRK8O.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/rust-DdL9SqIa.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/sb-CcwsVR0C.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/scala-DHpiXF5c.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/scheme-BeGwcela.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/scss-gp-XZpBa.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/shell-CC2rA5mh.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/solidity-BEEn4gHE.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/sophia-CRfGWb83.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/sparql-D_Lu-MrJ.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/sql-NEE52Syq.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/st-DbInun42.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/swift-Bxkupp3x.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/tcl-DISqw1ZD.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/ts.worker-D7T1-Ig5.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/twig-De2hgUGE.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/typespec-B8J7ngcE.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/vb-DV3o63ZY.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/ui/assets/wgsl-DpFanUEy.js +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/server/updater.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/settings.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/step.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/step_cache.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/subfolders.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/background_remover.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/borders.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/compose_text.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/concat_videos.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/depth_estimator.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/diffusion_upscale.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/dissolve_videos.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/format_messages.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/gather.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/image_to_text.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/image_utils.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/interpolate_frames.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/model_cache.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/qr_code.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/restore_faces.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/rife_model.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/segment.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/speech_generation.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/stabilize.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/tensor_image.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/text_generation.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/text_sections.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/upscale.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/tasks/zoe_depth.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/teacache.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/teacache_models.json +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/test.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/type_helpers.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/validate.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/variables.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/workflow_sources.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/workflows/h3_context_ir.json +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw/workflows/test.json +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/__init__.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/__main__.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/client.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/exports.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/guides.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/media.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/models.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/prompts.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/dw_mcp/workspaces.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/setup.cfg +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_argument_updates.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_arguments.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_assets.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_borders.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_cache_blocks.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_chain.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_cli.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_component_pruning.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_compose_text.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_concat_videos.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_config_objects.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_configuration_schema.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_depth_estimator.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_device.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_device_helpers.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_device_portability.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_dialogue_short_voices.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_diffusion_upscale.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_dissolve_videos.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_docs_links.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_gather.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_h3_context_ir.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_hf_placement.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_host_memory.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_hub_cache.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_image_to_text.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_image_utils.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_integration.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_interpolate_frames.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_introspection.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_job_progress.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_jobs_listing.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_jobs_reused.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_library_sources.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_list_images.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_locations.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_assets.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_authoring.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_client.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_diagnose.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_exports.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_guides.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_main.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_media.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_models.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_prompts.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mcp_workspaces.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_media_info.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_mix_audio.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_model_cache.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_modular_pipeline.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_modular_progress.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_offload_placement.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_pair_audio.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_phase_events.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_previous_results.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_prompt_parser.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_prompt_references.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_prompt_weighting.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_prompts.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_realize.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_recenter_crop.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_reference_limits.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_repl_commands.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_repl_ergonomics.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_repl_hierarchical.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_repl_reorganization.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_repl_worker.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_rerun_new_seed.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_resize_bucket.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_result_output_naming.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_runs.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_scheduler_config.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_schema.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_security.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_segment.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_serve_main.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server_guides.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server_info.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server_jobs.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_server_mcp.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_speech_generation.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_stabilize.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_step.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_step_cache.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_strip_exif_and_watermark.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_subfolders.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_task.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_task_domains.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_teacache.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_template_subfolders.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_tensor_image.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_text_generation.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_text_sections.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_type_helpers.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_updater.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_variables.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_worker.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_workflow_sources.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_workflow_trust.py +0 -0
- {diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/tests/test_workspace.py +0 -0
{diffusers_workflow-0.4.0b5/diffusers_workflow.egg-info → diffusers_workflow-0.4.0b6}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: diffusers-workflow
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.0b6
|
|
4
4
|
Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
|
|
5
5
|
Author: dkackman
|
|
6
6
|
License: Apache-2.0
|
|
@@ -19,7 +19,7 @@ License-File: LICENSE
|
|
|
19
19
|
Requires-Dist: torch>=2.13.0
|
|
20
20
|
Requires-Dist: torchvision>=0.28.0
|
|
21
21
|
Requires-Dist: diffusers>=0.40.0
|
|
22
|
-
Requires-Dist: transformers
|
|
22
|
+
Requires-Dist: transformers!=5.17.0,>=5.16.1
|
|
23
23
|
Requires-Dist: accelerate>=1.14.0
|
|
24
24
|
Requires-Dist: peft>=0.20.0
|
|
25
25
|
Requires-Dist: safetensors>=0.8.0
|
|
@@ -36,6 +36,7 @@ Requires-Dist: bitsandbytes>=0.50.2; sys_platform == "linux"
|
|
|
36
36
|
Requires-Dist: controlnet-aux>=0.0.10
|
|
37
37
|
Requires-Dist: opencv-python-headless>=5.0.0.93
|
|
38
38
|
Requires-Dist: kornia>=0.8.3
|
|
39
|
+
Requires-Dist: kernels>=0.17.0
|
|
39
40
|
Requires-Dist: spandrel>=0.4.2
|
|
40
41
|
Requires-Dist: facexlib>=0.3.0
|
|
41
42
|
Requires-Dist: numpy>=2.5.2
|
{diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6/diffusers_workflow.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: diffusers-workflow
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.0b6
|
|
4
4
|
Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
|
|
5
5
|
Author: dkackman
|
|
6
6
|
License: Apache-2.0
|
|
@@ -19,7 +19,7 @@ License-File: LICENSE
|
|
|
19
19
|
Requires-Dist: torch>=2.13.0
|
|
20
20
|
Requires-Dist: torchvision>=0.28.0
|
|
21
21
|
Requires-Dist: diffusers>=0.40.0
|
|
22
|
-
Requires-Dist: transformers
|
|
22
|
+
Requires-Dist: transformers!=5.17.0,>=5.16.1
|
|
23
23
|
Requires-Dist: accelerate>=1.14.0
|
|
24
24
|
Requires-Dist: peft>=0.20.0
|
|
25
25
|
Requires-Dist: safetensors>=0.8.0
|
|
@@ -36,6 +36,7 @@ Requires-Dist: bitsandbytes>=0.50.2; sys_platform == "linux"
|
|
|
36
36
|
Requires-Dist: controlnet-aux>=0.0.10
|
|
37
37
|
Requires-Dist: opencv-python-headless>=5.0.0.93
|
|
38
38
|
Requires-Dist: kornia>=0.8.3
|
|
39
|
+
Requires-Dist: kernels>=0.17.0
|
|
39
40
|
Requires-Dist: spandrel>=0.4.2
|
|
40
41
|
Requires-Dist: facexlib>=0.3.0
|
|
41
42
|
Requires-Dist: numpy>=2.5.2
|
{diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/diffusers_workflow.egg-info/SOURCES.txt
RENAMED
|
@@ -9,15 +9,19 @@ diffusers_workflow.egg-info/entry_points.txt
|
|
|
9
9
|
diffusers_workflow.egg-info/requires.txt
|
|
10
10
|
diffusers_workflow.egg-info/top_level.txt
|
|
11
11
|
dw/__init__.py
|
|
12
|
+
dw/adapter_compatibility.py
|
|
12
13
|
dw/arguments.py
|
|
13
14
|
dw/assets.py
|
|
14
15
|
dw/cache_blocks.json
|
|
15
16
|
dw/cache_blocks.py
|
|
17
|
+
dw/content_types.py
|
|
18
|
+
dw/elision.py
|
|
16
19
|
dw/events.py
|
|
17
20
|
dw/for_each.py
|
|
18
21
|
dw/host_memory.py
|
|
19
22
|
dw/hub_cache.py
|
|
20
23
|
dw/introspection.py
|
|
24
|
+
dw/kernel_availability.py
|
|
21
25
|
dw/locations.py
|
|
22
26
|
dw/log_setup.py
|
|
23
27
|
dw/media_info.py
|
|
@@ -28,6 +32,7 @@ dw/prompt_weighting.py
|
|
|
28
32
|
dw/prompts.py
|
|
29
33
|
dw/realize.py
|
|
30
34
|
dw/reference_limits.py
|
|
35
|
+
dw/reference_names.py
|
|
31
36
|
dw/repl.py
|
|
32
37
|
dw/repl_commands.py
|
|
33
38
|
dw/repl_worker.py
|
|
@@ -47,6 +52,7 @@ dw/teacache_models.json
|
|
|
47
52
|
dw/test.py
|
|
48
53
|
dw/type_helpers.py
|
|
49
54
|
dw/validate.py
|
|
55
|
+
dw/variable_constraints.py
|
|
50
56
|
dw/variables.py
|
|
51
57
|
dw/worker.py
|
|
52
58
|
dw/workflow.py
|
|
@@ -87,6 +93,7 @@ dw/server/guides.py
|
|
|
87
93
|
dw/server/jobs.py
|
|
88
94
|
dw/server/mcp_mount.py
|
|
89
95
|
dw/server/netinfo.py
|
|
96
|
+
dw/server/observed_cost.py
|
|
90
97
|
dw/server/updater.py
|
|
91
98
|
dw/server/ui/index.html
|
|
92
99
|
dw/server/ui/assets/abap-08VXUWAP.js
|
|
@@ -103,45 +110,45 @@ dw/server/ui/assets/csharp-BKxtCVv1.js
|
|
|
103
110
|
dw/server/ui/assets/csp-bTuwJoIa.js
|
|
104
111
|
dw/server/ui/assets/css-DIMkf-bt.js
|
|
105
112
|
dw/server/ui/assets/css.worker-B3ciXF_0.js
|
|
106
|
-
dw/server/ui/assets/cssMode-
|
|
113
|
+
dw/server/ui/assets/cssMode-1t4O7A8b.js
|
|
107
114
|
dw/server/ui/assets/cypher-CVaqCwHa.js
|
|
108
115
|
dw/server/ui/assets/dart-onAF5SnQ.js
|
|
109
116
|
dw/server/ui/assets/dockerfile-DZFCIeNp.js
|
|
110
117
|
dw/server/ui/assets/ecl-D05T4iGw.js
|
|
111
118
|
dw/server/ui/assets/editor-jjEx9u7D.css
|
|
112
|
-
dw/server/ui/assets/editor.api-
|
|
119
|
+
dw/server/ui/assets/editor.api-C2mqCHa9.js
|
|
113
120
|
dw/server/ui/assets/editor.worker-q-txB4vs.js
|
|
114
121
|
dw/server/ui/assets/elixir-6RTg0lbw.js
|
|
115
122
|
dw/server/ui/assets/flow9-C5_-GSwl.js
|
|
116
|
-
dw/server/ui/assets/freemarker2-
|
|
123
|
+
dw/server/ui/assets/freemarker2-Cb6RGT42.js
|
|
117
124
|
dw/server/ui/assets/fsharp-C8Ef5oNN.js
|
|
118
125
|
dw/server/ui/assets/go-C-y9NEjX.js
|
|
119
126
|
dw/server/ui/assets/graphql-fmXr3nnJ.js
|
|
120
|
-
dw/server/ui/assets/handlebars-
|
|
127
|
+
dw/server/ui/assets/handlebars-LzK4_SEF.js
|
|
121
128
|
dw/server/ui/assets/hcl-CpzslTdj.js
|
|
122
|
-
dw/server/ui/assets/html-
|
|
129
|
+
dw/server/ui/assets/html-Biz_qd50.js
|
|
123
130
|
dw/server/ui/assets/html.worker-C93Ht9o9.js
|
|
124
|
-
dw/server/ui/assets/htmlMode-
|
|
125
|
-
dw/server/ui/assets/index-
|
|
126
|
-
dw/server/ui/assets/index-
|
|
131
|
+
dw/server/ui/assets/htmlMode-CP4Kjl0x.js
|
|
132
|
+
dw/server/ui/assets/index-Bt8BlCkf.js
|
|
133
|
+
dw/server/ui/assets/index-D9tEUhx5.css
|
|
127
134
|
dw/server/ui/assets/ini-sBoK_t0W.js
|
|
128
135
|
dw/server/ui/assets/java-BEtHBSE6.js
|
|
129
|
-
dw/server/ui/assets/javascript-
|
|
136
|
+
dw/server/ui/assets/javascript-DX4-t0BE.js
|
|
130
137
|
dw/server/ui/assets/json.worker-B2V3pomh.js
|
|
131
|
-
dw/server/ui/assets/jsonMode-
|
|
138
|
+
dw/server/ui/assets/jsonMode-hZa_qOEa.js
|
|
132
139
|
dw/server/ui/assets/julia-Bri6UV-V.js
|
|
133
140
|
dw/server/ui/assets/kotlin-BOotOW0E.js
|
|
134
141
|
dw/server/ui/assets/less-B9JPFI3C.js
|
|
135
142
|
dw/server/ui/assets/lexon-CfSJPG6W.js
|
|
136
|
-
dw/server/ui/assets/liquid-
|
|
137
|
-
dw/server/ui/assets/lspLanguageFeatures-
|
|
143
|
+
dw/server/ui/assets/liquid-BRkTuJ_A.js
|
|
144
|
+
dw/server/ui/assets/lspLanguageFeatures-Dvt5tod9.js
|
|
138
145
|
dw/server/ui/assets/lua-CsQS60Ue.js
|
|
139
146
|
dw/server/ui/assets/m3-D-oSqn_W.js
|
|
140
147
|
dw/server/ui/assets/markdown-Cimd5fb3.js
|
|
141
|
-
dw/server/ui/assets/mdx-
|
|
148
|
+
dw/server/ui/assets/mdx-Bdet7qev.js
|
|
142
149
|
dw/server/ui/assets/mips-CIPQ_RoX.js
|
|
143
150
|
dw/server/ui/assets/monaco--ixms01u.css
|
|
144
|
-
dw/server/ui/assets/monaco-
|
|
151
|
+
dw/server/ui/assets/monaco-QRyCMGAv.js
|
|
145
152
|
dw/server/ui/assets/msdax-DauUninz.js
|
|
146
153
|
dw/server/ui/assets/mysql-SOo6toE5.js
|
|
147
154
|
dw/server/ui/assets/objective-c-FvmIjYaQ.js
|
|
@@ -156,10 +163,10 @@ dw/server/ui/assets/powerquery-D3hlyOfw.js
|
|
|
156
163
|
dw/server/ui/assets/powershell-DmHpPYUd.js
|
|
157
164
|
dw/server/ui/assets/protobuf-C531GsRP.js
|
|
158
165
|
dw/server/ui/assets/pug-Z5eAx3Zn.js
|
|
159
|
-
dw/server/ui/assets/python-
|
|
166
|
+
dw/server/ui/assets/python-DO0uJyUr.js
|
|
160
167
|
dw/server/ui/assets/qsharp-DkqhCAOL.js
|
|
161
168
|
dw/server/ui/assets/r-BwWrilGY.js
|
|
162
|
-
dw/server/ui/assets/razor-
|
|
169
|
+
dw/server/ui/assets/razor-CkfVe6oz.js
|
|
163
170
|
dw/server/ui/assets/redis-ClamHrr6.js
|
|
164
171
|
dw/server/ui/assets/redshift-DT7zqm-g.js
|
|
165
172
|
dw/server/ui/assets/restructuredtext-BYgofb2h.js
|
|
@@ -179,15 +186,15 @@ dw/server/ui/assets/swift-Bxkupp3x.js
|
|
|
179
186
|
dw/server/ui/assets/systemverilog-Bz4Y3fRF.js
|
|
180
187
|
dw/server/ui/assets/tcl-DISqw1ZD.js
|
|
181
188
|
dw/server/ui/assets/ts.worker-D7T1-Ig5.js
|
|
182
|
-
dw/server/ui/assets/tsMode-
|
|
189
|
+
dw/server/ui/assets/tsMode-z26QXNyE.js
|
|
183
190
|
dw/server/ui/assets/twig-De2hgUGE.js
|
|
184
|
-
dw/server/ui/assets/typescript-
|
|
191
|
+
dw/server/ui/assets/typescript-DIdNc_uc.js
|
|
185
192
|
dw/server/ui/assets/typespec-B8J7ngcE.js
|
|
186
193
|
dw/server/ui/assets/vb-DV3o63ZY.js
|
|
187
194
|
dw/server/ui/assets/wgsl-DpFanUEy.js
|
|
188
|
-
dw/server/ui/assets/workers-
|
|
189
|
-
dw/server/ui/assets/xml-
|
|
190
|
-
dw/server/ui/assets/yaml-
|
|
195
|
+
dw/server/ui/assets/workers-Ce8CDVu5.js
|
|
196
|
+
dw/server/ui/assets/xml-Djj2U0Rl.js
|
|
197
|
+
dw/server/ui/assets/yaml-CePLO71e.js
|
|
191
198
|
dw/tasks/audio_utils.py
|
|
192
199
|
dw/tasks/background_remover.py
|
|
193
200
|
dw/tasks/borders.py
|
|
@@ -247,6 +254,7 @@ tests/test_compose_text.py
|
|
|
247
254
|
tests/test_concat_videos.py
|
|
248
255
|
tests/test_config_objects.py
|
|
249
256
|
tests/test_configuration_schema.py
|
|
257
|
+
tests/test_content_types.py
|
|
250
258
|
tests/test_depth_estimator.py
|
|
251
259
|
tests/test_device.py
|
|
252
260
|
tests/test_device_helpers.py
|
|
@@ -255,11 +263,14 @@ tests/test_dialogue_short_voices.py
|
|
|
255
263
|
tests/test_diffusion_upscale.py
|
|
256
264
|
tests/test_dissolve_videos.py
|
|
257
265
|
tests/test_docs_links.py
|
|
266
|
+
tests/test_elision.py
|
|
258
267
|
tests/test_events.py
|
|
259
268
|
tests/test_examples.py
|
|
260
269
|
tests/test_for_each.py
|
|
261
270
|
tests/test_gather.py
|
|
271
|
+
tests/test_h3_adapters.py
|
|
262
272
|
tests/test_h3_context_ir.py
|
|
273
|
+
tests/test_h3_schedule.py
|
|
263
274
|
tests/test_hf_placement.py
|
|
264
275
|
tests/test_host_memory.py
|
|
265
276
|
tests/test_hub_cache.py
|
|
@@ -269,11 +280,16 @@ tests/test_integration.py
|
|
|
269
280
|
tests/test_interpolate_frames.py
|
|
270
281
|
tests/test_introspection.py
|
|
271
282
|
tests/test_job_progress.py
|
|
283
|
+
tests/test_job_warnings.py
|
|
272
284
|
tests/test_jobs_listing.py
|
|
273
285
|
tests/test_jobs_reused.py
|
|
286
|
+
tests/test_kernel_availability.py
|
|
274
287
|
tests/test_library_sources.py
|
|
275
288
|
tests/test_list_images.py
|
|
276
289
|
tests/test_locations.py
|
|
290
|
+
tests/test_lora_alpha.py
|
|
291
|
+
tests/test_ltx2_diffusion_decode.py
|
|
292
|
+
tests/test_ltx2_ic_loras.py
|
|
277
293
|
tests/test_ltx_prompt_library.py
|
|
278
294
|
tests/test_mcp_assets.py
|
|
279
295
|
tests/test_mcp_authoring.py
|
|
@@ -293,9 +309,11 @@ tests/test_mix_audio.py
|
|
|
293
309
|
tests/test_model_cache.py
|
|
294
310
|
tests/test_modular_pipeline.py
|
|
295
311
|
tests/test_modular_progress.py
|
|
312
|
+
tests/test_observed_cost.py
|
|
296
313
|
tests/test_offload_placement.py
|
|
297
314
|
tests/test_output_references.py
|
|
298
315
|
tests/test_pair_audio.py
|
|
316
|
+
tests/test_pair_audio_fit.py
|
|
299
317
|
tests/test_phase_events.py
|
|
300
318
|
tests/test_pipeline_caching.py
|
|
301
319
|
tests/test_pipeline_components.py
|
|
@@ -309,6 +327,7 @@ tests/test_prompts.py
|
|
|
309
327
|
tests/test_realize.py
|
|
310
328
|
tests/test_recenter_crop.py
|
|
311
329
|
tests/test_reference_limits.py
|
|
330
|
+
tests/test_reference_names.py
|
|
312
331
|
tests/test_repl_commands.py
|
|
313
332
|
tests/test_repl_ergonomics.py
|
|
314
333
|
tests/test_repl_hierarchical.py
|
|
@@ -341,6 +360,7 @@ tests/test_subfolders.py
|
|
|
341
360
|
tests/test_task.py
|
|
342
361
|
tests/test_task_discovery.py
|
|
343
362
|
tests/test_task_domains.py
|
|
363
|
+
tests/test_task_signature_errors.py
|
|
344
364
|
tests/test_teacache.py
|
|
345
365
|
tests/test_template_subfolders.py
|
|
346
366
|
tests/test_tensor_image.py
|
|
@@ -349,6 +369,7 @@ tests/test_text_sections.py
|
|
|
349
369
|
tests/test_type_helpers.py
|
|
350
370
|
tests/test_updater.py
|
|
351
371
|
tests/test_validate_arguments.py
|
|
372
|
+
tests/test_variable_constraints.py
|
|
352
373
|
tests/test_variables.py
|
|
353
374
|
tests/test_video_utils.py
|
|
354
375
|
tests/test_worker.py
|
{diffusers_workflow-0.4.0b5 → diffusers_workflow-0.4.0b6}/diffusers_workflow.egg-info/requires.txt
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
torch>=2.13.0
|
|
2
2
|
torchvision>=0.28.0
|
|
3
3
|
diffusers>=0.40.0
|
|
4
|
-
transformers
|
|
4
|
+
transformers!=5.17.0,>=5.16.1
|
|
5
5
|
accelerate>=1.14.0
|
|
6
6
|
peft>=0.20.0
|
|
7
7
|
safetensors>=0.8.0
|
|
@@ -17,6 +17,7 @@ gguf>=0.19.0
|
|
|
17
17
|
controlnet-aux>=0.0.10
|
|
18
18
|
opencv-python-headless>=5.0.0.93
|
|
19
19
|
kornia>=0.8.3
|
|
20
|
+
kernels>=0.17.0
|
|
20
21
|
spandrel>=0.4.2
|
|
21
22
|
facexlib>=0.3.0
|
|
22
23
|
numpy>=2.5.2
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"""The LoRA a step loads has to be trained for the path that step runs.
|
|
2
|
+
|
|
3
|
+
MiniMax-H3 ships one repository holding two checkpoint partitions -
|
|
4
|
+
`transformer/` for the `t2va` and `fl2va` workflows, `transformer_ref/` for
|
|
5
|
+
`ref2va` - and a separate turbo adapter trained against each. Handing the
|
|
6
|
+
FL2VA adapter to a `ref2va` step is the one H3 misconfiguration that never
|
|
7
|
+
shows up as a failure: a `ref2va` step holds `transformer_ref` alone, so
|
|
8
|
+
diffusers loads whatever it is given straight onto it, the run succeeds, and
|
|
9
|
+
the only symptom is identity retention that quietly is not as good as it
|
|
10
|
+
should be. Four templates carried exactly that mistake and nothing ever
|
|
11
|
+
complained (#149, #155).
|
|
12
|
+
|
|
13
|
+
Everything a pipeline itself would refuse is refused by the pipeline. This
|
|
14
|
+
is the other kind: a request the pipeline accepts and answers wrongly, which
|
|
15
|
+
costs a whole render to discover and cannot be seen in the output. So it is
|
|
16
|
+
checked where it is free - `validation_errors`, so `POST /api/validate` and
|
|
17
|
+
the pre-queue check both refuse it, at the JSON path the value sits at.
|
|
18
|
+
|
|
19
|
+
What is *not* written here: the adapter file names. `lora_weight_name` is a
|
|
20
|
+
free string and a future reference-trained checkpoint cannot be predicted, so
|
|
21
|
+
an unrecognised name is a warning naming the rule rather than a refusal - the
|
|
22
|
+
default inverts from "anything passes" to "the one documented mistake is
|
|
23
|
+
caught", and someone testing `my-new-ref-lora.safetensors` still gets
|
|
24
|
+
through. What *is* written here is a vendor naming convention (`ref2v` /
|
|
25
|
+
`fl2v` in the file name) that no diffusers symbol declares; the workflow
|
|
26
|
+
names and the partition each one denoises against are diffusers' own, and
|
|
27
|
+
`tests/test_h3_adapters.py` pins them to it.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
import logging
|
|
31
|
+
|
|
32
|
+
from .for_each import MEMBER_SEPARATOR, render_path
|
|
33
|
+
|
|
34
|
+
logger = logging.getLogger("dw")
|
|
35
|
+
|
|
36
|
+
# The `workflow=` values MiniMaxH3Blocks._workflow_map declares, split by the
|
|
37
|
+
# transformer partition each one denoises against - a `ref2va` step loads
|
|
38
|
+
# `transformer_ref` and nothing else, every other H3 workflow loads
|
|
39
|
+
# `transformer`. A workflow name not listed here is not checked
|
|
40
|
+
REFERENCE_WORKFLOWS = frozenset({"ref2va"})
|
|
41
|
+
KEYFRAME_WORKFLOWS = frozenset({"t2va", "fl2va"})
|
|
42
|
+
H3_WORKFLOWS = REFERENCE_WORKFLOWS | KEYFRAME_WORKFLOWS
|
|
43
|
+
|
|
44
|
+
# The token MiniMax puts in an adapter's file name to say which partition it
|
|
45
|
+
# was trained against. `ref2v` first: it is the longer match and a name
|
|
46
|
+
# carrying both is ambiguous rather than a keyframe adapter
|
|
47
|
+
REFERENCE_TOKEN = "ref2v"
|
|
48
|
+
KEYFRAME_TOKEN = "fl2v"
|
|
49
|
+
|
|
50
|
+
LORAS_KEY = "loras"
|
|
51
|
+
WEIGHT_NAME_KEY = "weight_name"
|
|
52
|
+
WORKFLOW_KEY = "workflow"
|
|
53
|
+
FROM_PRETRAINED_KEY = "from_pretrained_arguments"
|
|
54
|
+
VARIABLE_PREFIX = "variable:"
|
|
55
|
+
# Values another pass resolves; one still spelled out here is not this
|
|
56
|
+
# pass's complaint
|
|
57
|
+
_UNRESOLVED_PREFIXES = ("variable:", "item:", "previous_result:", "gather:")
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _trained_for(weight_name):
|
|
61
|
+
"""Which partition an adapter's file name says it was trained against -
|
|
62
|
+
'reference', 'keyframe', or None when the name says neither."""
|
|
63
|
+
lowered = weight_name.lower()
|
|
64
|
+
if REFERENCE_TOKEN in lowered:
|
|
65
|
+
return "reference"
|
|
66
|
+
if KEYFRAME_TOKEN in lowered:
|
|
67
|
+
return "keyframe"
|
|
68
|
+
return None
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _problem(workflow, weight_name):
|
|
72
|
+
"""(severity, message) for one adapter on one step, or None when the
|
|
73
|
+
pairing is right."""
|
|
74
|
+
trained = _trained_for(weight_name)
|
|
75
|
+
wants = "reference" if workflow in REFERENCE_WORKFLOWS else "keyframe"
|
|
76
|
+
if trained == wants:
|
|
77
|
+
return None
|
|
78
|
+
if trained is None:
|
|
79
|
+
return (
|
|
80
|
+
"warning",
|
|
81
|
+
f"'{weight_name}' names neither '{REFERENCE_TOKEN}' nor "
|
|
82
|
+
f"'{KEYFRAME_TOKEN}', so it cannot be checked against this "
|
|
83
|
+
f"step's '{workflow}' workflow. A '{workflow}' step denoises "
|
|
84
|
+
f"against the "
|
|
85
|
+
f"'{'transformer_ref' if wants == 'reference' else 'transformer'}' "
|
|
86
|
+
f"partition, and an adapter trained against the other one loads "
|
|
87
|
+
f"onto it without error and only degrades the result",
|
|
88
|
+
)
|
|
89
|
+
return (
|
|
90
|
+
"error",
|
|
91
|
+
f"'{weight_name}' is trained against the "
|
|
92
|
+
f"'{'transformer_ref' if trained == 'reference' else 'transformer'}' "
|
|
93
|
+
f"partition and this step runs the '{workflow}' workflow, which "
|
|
94
|
+
f"denoises against "
|
|
95
|
+
f"'{'transformer_ref' if wants == 'reference' else 'transformer'}'. "
|
|
96
|
+
f"MiniMax-H3 loads it anyway and the run succeeds - the only symptom "
|
|
97
|
+
f"is a worse result - so it is refused here. Use an adapter trained "
|
|
98
|
+
f"for this workflow (its name carries "
|
|
99
|
+
f"'{REFERENCE_TOKEN if wants == 'reference' else KEYFRAME_TOKEN}')",
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def _lora_problems(steps, source_indices, written=None, supplied=()):
|
|
104
|
+
"""Every adapter/workflow mismatch in an expanded step list, as
|
|
105
|
+
(severity, path, message).
|
|
106
|
+
|
|
107
|
+
`written` is the definition as the author wrote it and `supplied` the
|
|
108
|
+
argument names the caller passed: when the value arrived through a
|
|
109
|
+
variable the caller set, the path reported is `arguments.<name>`, where
|
|
110
|
+
they wrote it, rather than the step it landed in.
|
|
111
|
+
"""
|
|
112
|
+
written_steps = (written or {}).get("steps")
|
|
113
|
+
found = []
|
|
114
|
+
for index, step in enumerate(steps):
|
|
115
|
+
if not isinstance(step, dict):
|
|
116
|
+
continue
|
|
117
|
+
pipeline = step.get("pipeline")
|
|
118
|
+
if not isinstance(pipeline, dict):
|
|
119
|
+
continue
|
|
120
|
+
source = (
|
|
121
|
+
source_indices[index]
|
|
122
|
+
if source_indices is not None and index < len(source_indices)
|
|
123
|
+
else index
|
|
124
|
+
)
|
|
125
|
+
from_pretrained = pipeline.get(FROM_PRETRAINED_KEY)
|
|
126
|
+
workflow = (
|
|
127
|
+
from_pretrained.get(WORKFLOW_KEY)
|
|
128
|
+
if isinstance(from_pretrained, dict)
|
|
129
|
+
else None
|
|
130
|
+
)
|
|
131
|
+
if workflow not in H3_WORKFLOWS:
|
|
132
|
+
continue
|
|
133
|
+
loras = pipeline.get(LORAS_KEY)
|
|
134
|
+
if not isinstance(loras, list):
|
|
135
|
+
continue
|
|
136
|
+
name = step.get("name")
|
|
137
|
+
where = (
|
|
138
|
+
f" in member '{name}'"
|
|
139
|
+
if isinstance(name, str) and MEMBER_SEPARATOR in name
|
|
140
|
+
else ""
|
|
141
|
+
)
|
|
142
|
+
for position, lora in enumerate(loras):
|
|
143
|
+
if not isinstance(lora, dict):
|
|
144
|
+
continue
|
|
145
|
+
weight_name = lora.get(WEIGHT_NAME_KEY)
|
|
146
|
+
if not isinstance(weight_name, str) or weight_name.startswith(
|
|
147
|
+
_UNRESOLVED_PREFIXES
|
|
148
|
+
):
|
|
149
|
+
continue
|
|
150
|
+
problem = _problem(workflow, weight_name)
|
|
151
|
+
if problem is None:
|
|
152
|
+
continue
|
|
153
|
+
severity, message = problem
|
|
154
|
+
found.append(
|
|
155
|
+
(
|
|
156
|
+
severity,
|
|
157
|
+
_path_for(written_steps, source, position, supplied)
|
|
158
|
+
or render_path(
|
|
159
|
+
(
|
|
160
|
+
"steps",
|
|
161
|
+
source,
|
|
162
|
+
"pipeline",
|
|
163
|
+
LORAS_KEY,
|
|
164
|
+
position,
|
|
165
|
+
WEIGHT_NAME_KEY,
|
|
166
|
+
)
|
|
167
|
+
),
|
|
168
|
+
message + where,
|
|
169
|
+
)
|
|
170
|
+
)
|
|
171
|
+
return found
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def _path_for(written_steps, source, position, supplied):
|
|
175
|
+
"""`arguments.<name>` when the adapter came from a variable the caller
|
|
176
|
+
set, else None - the value is reported where it was written."""
|
|
177
|
+
if not isinstance(written_steps, list) or source >= len(written_steps):
|
|
178
|
+
return None
|
|
179
|
+
step = written_steps[source]
|
|
180
|
+
pipeline = step.get("pipeline") if isinstance(step, dict) else None
|
|
181
|
+
loras = pipeline.get(LORAS_KEY) if isinstance(pipeline, dict) else None
|
|
182
|
+
if not isinstance(loras, list) or position >= len(loras):
|
|
183
|
+
return None
|
|
184
|
+
entry = loras[position]
|
|
185
|
+
reference = entry.get(WEIGHT_NAME_KEY) if isinstance(entry, dict) else None
|
|
186
|
+
if not isinstance(reference, str) or not reference.startswith(VARIABLE_PREFIX):
|
|
187
|
+
return None
|
|
188
|
+
variable = reference.removeprefix(VARIABLE_PREFIX)
|
|
189
|
+
return f"arguments.{variable}" if variable in (supplied or ()) else None
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
def adapter_errors(workflow_definition, source_indices=None, written=None, supplied=()):
|
|
193
|
+
"""Every adapter loaded onto the wrong checkpoint partition, as
|
|
194
|
+
[{path, message}]. The definition is the expanded, substituted one, so a
|
|
195
|
+
`for_each` member's own adapter is checked as it will run."""
|
|
196
|
+
return [
|
|
197
|
+
{"path": path, "message": message}
|
|
198
|
+
for severity, path, message in _lora_problems(
|
|
199
|
+
workflow_definition.get("steps") or [], source_indices, written, supplied
|
|
200
|
+
)
|
|
201
|
+
if severity == "error"
|
|
202
|
+
]
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def adapter_warnings(
|
|
206
|
+
workflow_definition, source_indices=None, written=None, supplied=()
|
|
207
|
+
):
|
|
208
|
+
"""Every adapter whose name says nothing about what it was trained for,
|
|
209
|
+
as messages - valid, and said out loud because nothing at run time will."""
|
|
210
|
+
return [
|
|
211
|
+
f"{path}: {message}"
|
|
212
|
+
for severity, path, message in _lora_problems(
|
|
213
|
+
workflow_definition.get("steps") or [], source_indices, written, supplied
|
|
214
|
+
)
|
|
215
|
+
if severity == "warning"
|
|
216
|
+
]
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def warn_adapters(workflow_definition):
|
|
220
|
+
"""Say the unrecognised-adapter warning where whoever asked for the run
|
|
221
|
+
can read it - a run started from the CLI or a rerun never passed through
|
|
222
|
+
the validate route."""
|
|
223
|
+
from .events import emit_warning
|
|
224
|
+
|
|
225
|
+
for message in adapter_warnings(workflow_definition):
|
|
226
|
+
emit_warning(message, kind="adapter_unrecognized")
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"""A step's result 'content_type': the MIME type its writer is chosen by.
|
|
2
|
+
|
|
3
|
+
`content_type: "video"` validated clean and then died deep inside a writer,
|
|
4
|
+
in a traceback naming neither the field nor the value (#168) - the same
|
|
5
|
+
shape as #162 in a different field. The writer's own dispatch matches on
|
|
6
|
+
`content_type.startswith("video")`, so the bare word "video" took the video
|
|
7
|
+
branch anyway; having no real MIME type it also had no extension to write,
|
|
8
|
+
and the closest writer imageio could guess from an empty one was not a video
|
|
9
|
+
writer at all.
|
|
10
|
+
|
|
11
|
+
Audio and video each go through exactly one container this engine writes -
|
|
12
|
+
`AUDIO_FORMATS` in `dw/result.py`, and the single `video/mp4` mux - so
|
|
13
|
+
anything else in either family is refused here rather than accepted only to
|
|
14
|
+
mismatch its writer later. image/*, text/* and *.json values stay
|
|
15
|
+
permissive beyond the MIME-shape check: their writer dispatch is a generic
|
|
16
|
+
prefix/suffix match (PIL's own format inference, a literal text or JSON
|
|
17
|
+
write) with no narrower container to enforce a whitelist against.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from .for_each import MEMBER_SEPARATOR, render_path
|
|
21
|
+
from .result import AUDIO_FORMATS, MUXED_VIDEO_CONTENT_TYPE
|
|
22
|
+
from .security import InvalidInputError, validate_content_type
|
|
23
|
+
|
|
24
|
+
CONTENT_TYPE_KEY = "content_type"
|
|
25
|
+
|
|
26
|
+
# Reference prefixes substitution resolves before this pass runs. One still
|
|
27
|
+
# spelled out here is one nothing resolved, and that is the undeclared-
|
|
28
|
+
# variable pass's complaint rather than a shape error
|
|
29
|
+
_UNRESOLVED_PREFIXES = ("variable:", "item:")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def content_type_fault(value):
|
|
33
|
+
"""Why this result 'content_type' is invalid, or None.
|
|
34
|
+
|
|
35
|
+
Raises nothing - callers that already have an InvalidInputError-raising
|
|
36
|
+
check (validate_content_type) can call that directly; this is the
|
|
37
|
+
string-message form `content_type_errors` collects.
|
|
38
|
+
"""
|
|
39
|
+
try:
|
|
40
|
+
validate_content_type(value)
|
|
41
|
+
except InvalidInputError as e:
|
|
42
|
+
return str(e)
|
|
43
|
+
|
|
44
|
+
main_type = value.split("/", 1)[0]
|
|
45
|
+
if main_type == "audio" and value not in AUDIO_FORMATS:
|
|
46
|
+
return (
|
|
47
|
+
f"Invalid content_type: {value!r} - audio can be written as "
|
|
48
|
+
f"{', '.join(sorted(AUDIO_FORMATS))}"
|
|
49
|
+
)
|
|
50
|
+
if main_type == "video" and value != MUXED_VIDEO_CONTENT_TYPE:
|
|
51
|
+
return (
|
|
52
|
+
f"Invalid content_type: {value!r} - video is only written as "
|
|
53
|
+
f"'{MUXED_VIDEO_CONTENT_TYPE}'"
|
|
54
|
+
)
|
|
55
|
+
return None
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def content_type_errors(workflow_definition, source_indices=None):
|
|
59
|
+
"""Every result 'content_type' that no writer will accept, as
|
|
60
|
+
[{path, message}].
|
|
61
|
+
|
|
62
|
+
The definition handed here has already been substituted and expanded,
|
|
63
|
+
so every value in it is literal; a 'variable:' or 'item:' still spelled
|
|
64
|
+
out is left alone. `source_indices`, when given, is the source step
|
|
65
|
+
index of each step - a 'for_each' group turns one written step into
|
|
66
|
+
several, and the path an error carries has to be one the author can
|
|
67
|
+
find in the file they wrote; the member is named in the message.
|
|
68
|
+
"""
|
|
69
|
+
steps = workflow_definition.get("steps")
|
|
70
|
+
if not isinstance(steps, list):
|
|
71
|
+
return []
|
|
72
|
+
|
|
73
|
+
errors = []
|
|
74
|
+
for index, step in enumerate(steps):
|
|
75
|
+
if not isinstance(step, dict):
|
|
76
|
+
continue
|
|
77
|
+
result = step.get("result")
|
|
78
|
+
if not isinstance(result, dict) or CONTENT_TYPE_KEY not in result:
|
|
79
|
+
continue
|
|
80
|
+
value = result[CONTENT_TYPE_KEY]
|
|
81
|
+
if isinstance(value, str) and value.startswith(_UNRESOLVED_PREFIXES):
|
|
82
|
+
continue
|
|
83
|
+
source = (
|
|
84
|
+
source_indices[index]
|
|
85
|
+
if source_indices is not None and index < len(source_indices)
|
|
86
|
+
else index
|
|
87
|
+
)
|
|
88
|
+
name = step.get("name")
|
|
89
|
+
where = (
|
|
90
|
+
f" in member '{name}'"
|
|
91
|
+
if isinstance(name, str) and MEMBER_SEPARATOR in name
|
|
92
|
+
else ""
|
|
93
|
+
)
|
|
94
|
+
fault = content_type_fault(value)
|
|
95
|
+
if fault is not None:
|
|
96
|
+
errors.append(
|
|
97
|
+
{
|
|
98
|
+
"path": render_path(("steps", source, "result", CONTENT_TYPE_KEY)),
|
|
99
|
+
"message": f"{fault}{where}",
|
|
100
|
+
}
|
|
101
|
+
)
|
|
102
|
+
return errors
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
__all__ = ["content_type_errors", "content_type_fault"]
|
|
@@ -226,7 +226,7 @@ when no single workflow covers it.
|
|
|
226
226
|
| `get_health()` | — | Check that the server is alive, and which machine answered: `version`, `device`, whether the worker process is up, the job running now and the queue depth |
|
|
227
227
|
| `get_server_info()` | — | What this installation can do and where it keeps things: `device` (the accelerator a run will use), `version`, the `workspace` this session is working in and the workflow/asset/output/prompt `directories` of *that* workspace, the bind address and port, whether a token is required, and whether MCP is mounted. Check the device before authoring - a CUDA-only choice (bitsandbytes, `torch.compile`, flash attention) is not available on an `mps` or `cpu` server |
|
|
228
228
|
| `list_jobs(limit=20, status=None, workspace=None)` | optional `limit` (newest N), `status` (one state or a comma-separated set of `queued`, `running`, `succeeded`, `failed`, `cancelled`), `workspace` | List queued, running and recent jobs, **newest first**. Bounded by default: the unbounded listing was over a client's tool-result limit on a server with a few months of history, which made it a tool that could not be called at all. `total` says how many matched and `truncated`/`next` say so when the answer was cut - raise `limit` or narrow with `status`. Without `workspace`, a named workspace lists its own jobs and the default one lists every job the server holds |
|
|
229
|
-
| `list_gallery(limit=50, subfolder=None, workspace=None)` | `limit`, `subfolder`, `workspace` | List generated output files, newest first. A name is `<workflow>/<run id>/<file>`, where `<file>` may sit in the subfolder the step chose (`final/episode.mp4`); each entry carries `folder` (the workflow) and `subfolder` (by convention `final` or `intermediate`, `''` when the step chose none, any path the workflow wrote otherwise), and `subfolder="final"` lists only deliverables. Each entry also carries a ready-made `url`, already scoped to the workspace that made it - a hand-built `/outputs/<name>` URL 404s for anything but the default workspace. `workspace` names the workspace for this one call without switching the session to it - the same pin `run_workflow` takes, so a job run into another workspace stays reachable from the session that queued it |
|
|
229
|
+
| `list_gallery(limit=50, subfolder=None, only_orphans=False, workspace=None)` | `limit`, `subfolder`, `only_orphans`, `workspace` | List generated output files, newest first. A name is `<workflow>/<run id>/<file>`, where `<file>` may sit in the subfolder the step chose (`final/episode.mp4`); each entry carries `folder` (the workflow) and `subfolder` (by convention `final` or `intermediate`, `''` when the step chose none, any path the workflow wrote otherwise), and `subfolder="final"` lists only deliverables. Each entry also carries a ready-made `url`, already scoped to the workspace that made it - a hand-built `/outputs/<name>` URL 404s for anything but the default workspace. `only_orphans=True` inverts the call: instead of files, it returns run directories with no media anywhere under them (`runs`, each `{name, mtime}`) - a run whose output was deleted before `delete_output` could remove it by name, or one that failed before writing anything; `subfolder` does not apply in this mode, and `name` is exactly what `delete_output` accepts (#170). `workspace` names the workspace for this one call without switching the session to it - the same pin `run_workflow` takes, so a job run into another workspace stays reachable from the session that queued it |
|
|
230
230
|
| `get_gallery_metadata(name, envelope=False, workspace=None)` | `name`, `workspace` | Get the metadata embedded in a generated file — or, when `name` is an `asset:` reference, what an *input* asset holds (`source` says which; `job` is null for an asset). Reading an input's duration, frame count, fps and sample rate before a run is how a caller learns the `total_frames`, `fps` and `sample_rate` a workflow expects it to supply: the exact workflow and arguments that produced it, and, for audio/video, a `media` block (duration, rate, channels, fps, size, peak/mean dBFS). `envelope=true` adds `media.envelope` — `rms_dbfs` and `peak_dbfs` one entry per second — which is what locates something in a track rather than measuring the whole of it. `workspace` names the workspace for this one call without switching the session to it - the same pin `run_workflow` takes, so a job run into another workspace stays reachable from the session that queued it |
|
|
231
231
|
|
|
232
232
|
### Media
|
|
@@ -249,12 +249,12 @@ The session starts in `default` and stays there unless it is told otherwise.
|
|
|
249
249
|
|
|
250
250
|
| Tool | Arguments | Purpose |
|
|
251
251
|
| --- | --- | --- |
|
|
252
|
-
| `validate_workflow(workflow=None, name=None, workspace=None, arguments=None)` | exactly one of `workflow` (inline definition) or `name` (a stored workflow, as `list_workflows` reports it), optional `workspace`, optional `arguments` | Check a workflow against the schema and against real pipeline signatures. Free and instant. Validating by name uses the workflow file's own directory as the base directory, so it sees what a run would. Returns every schema violation in `errors`, each with the JSON path it sits at, so a draft is fixed in one pass, and a `previous_result:` that names no earlier step is one of them. `warnings` covers what still runs but is probably wrong - a signature mismatch, and, for a list-driven variable, an entry key no step reads, at the entry's path. `workspace` names the workspace for this one call without switching the session to it - use it to pin a job whose `output:` or `asset:` references live in a workspace other than the session's. Pass the same `arguments` you will pass to `run_workflow` and they are checked too - an undeclared or renamed variable name, a value that will not coerce to the declared type, and an `asset:`, `prompt:` or `output:` reference that names nothing this workspace can reach, each reported at `arguments.<name>`. `checked_arguments` lists what was covered, so a `valid: true` about the stored defaults cannot be mistaken for one about your values. A reference set the model would refuse - too many images, videos or audio clips, or, for MiniMax-H3, audio as the only reference - is an error here too, rather than a failure minutes into a run you acknowledged. `run_workflow` makes the same check and refuses a bad argument rather than queuing a job that fails on its first step. A valid answer carries `plan` - the fingerprint, step count, list lengths, `downloads_required
|
|
252
|
+
| `validate_workflow(workflow=None, name=None, workspace=None, arguments=None)` | exactly one of `workflow` (inline definition) or `name` (a stored workflow, as `list_workflows` reports it), optional `workspace`, optional `arguments` | Check a workflow against the schema and against real pipeline signatures. Free and instant. Validating by name uses the workflow file's own directory as the base directory, so it sees what a run would. Returns every schema violation in `errors`, each with the JSON path it sits at, so a draft is fixed in one pass, and a `previous_result:` that names no earlier step is one of them. `warnings` covers what still runs but is probably wrong - a signature mismatch, and, for a list-driven variable, an entry key no step reads, at the entry's path. `workspace` names the workspace for this one call without switching the session to it - use it to pin a job whose `output:` or `asset:` references live in a workspace other than the session's. Pass the same `arguments` you will pass to `run_workflow` and they are checked too - an undeclared or renamed variable name, a value that will not coerce to the declared type, and an `asset:`, `prompt:` or `output:` reference that names nothing this workspace can reach, each reported at `arguments.<name>`. `checked_arguments` lists what was covered, so a `valid: true` about the stored defaults cannot be mistaken for one about your values. A reference set the model would refuse - too many images, videos or audio clips, or, for MiniMax-H3, audio as the only reference - is an error here too, rather than a failure minutes into a run you acknowledged. `run_workflow` makes the same check and refuses a bad argument rather than queuing a job that fails on its first step. A valid answer carries `plan` - the fingerprint, step count, list lengths, `downloads_required`, `estimate` (with `basis`) and `elided_steps` for the arguments given; quote from it. `steps` counts what will run: a step nothing reads and which saves no file does not run, and is named in `elided_steps` instead |
|
|
253
253
|
| `list_workspaces()` | — | The server's workspaces and which one this session is using. Each has its own workflows, assets and outputs; the prompt library is shared by all of them |
|
|
254
254
|
| `use_workspace(name)` | `name` | Work in that workspace for the rest of the session - every later call reads and writes there. This is how to keep your work out of another agent's namespace rather than sharing the default one. Checked against the server, so a typo fails here rather than scoping every later call to nothing |
|
|
255
255
|
| `create_workspace(name, use=False)` | `name`, `use` | Create a workspace. Pass use=true to switch this session to it as well; otherwise the session stays where it was and the result says so |
|
|
256
256
|
| `delete_workspace(name, acknowledged_cost=False)` | `name`, `acknowledged_cost` | Permanently delete a workspace and everything in it. Refuses without the acknowledgement, reporting what it would remove |
|
|
257
|
-
| `list_assets()` | — | The input media on the server, each with the `asset:` reference a workflow argument carries. Look here before asking for a file - what a workflow needs may already be there |
|
|
257
|
+
| `list_assets()` | — | The input media on the server, each with the `asset:` reference a workflow argument carries. Look here before asking for a file - what a workflow needs may already be there. `libraries` names the roots searched and which are writable; `shadowed` lists names a nearer library hides |
|
|
258
258
|
| `keep_output(name, asset_name=None, overwrite=False, shared=False, workspace=None)` | `name`, optional `asset_name`, `overwrite`, `shared`, `workspace` | Keep a generated file as an input asset under a stable `asset:` name, so a later workflow can rely on it. The copy happens on the server: nothing is downloaded or re-uploaded. `asset_name` may name a folder and takes the kept file's extension when it has none; `shared=true` keeps it in the library every workspace shares, which is where a recurring cast belongs. `workspace` names the workspace for this one call without switching the session to it - the same pin `run_workflow` takes, so a job run into another workspace stays reachable from the session that queued it |
|
|
259
259
|
| `upload_asset(file_path, asset_name=None, shared=False)` | `file_path` | Push a local image, video or audio file into the server's asset library and get back its `asset:` reference. The file is read from the machine the MCP server runs on, so this is how an input reaches a dw.serve running somewhere else. `asset_name` stores it under a readable name (`cast/priya-voice.wav`) instead of a random one; `shared=true` puts it in the library every workspace shares |
|
|
260
260
|
| `delete_asset(name)` | `name` | Permanently remove one file from the asset library, by the name `list_assets` reports. Deletes from whichever library holds it - this workspace's own before the shared one; one from a read-only examples library is refused. Any workflow still carrying that `asset:` reference stops loading |
|