diffusers-workflow 0.4.0b1__tar.gz → 0.4.0b5__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.
Files changed (385) hide show
  1. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/MANIFEST.in +1 -0
  2. diffusers_workflow-0.4.0b5/PKG-INFO +298 -0
  3. diffusers_workflow-0.4.0b5/README.md +223 -0
  4. diffusers_workflow-0.4.0b5/diffusers_workflow.egg-info/PKG-INFO +298 -0
  5. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/diffusers_workflow.egg-info/SOURCES.txt +103 -24
  6. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/diffusers_workflow.egg-info/requires.txt +1 -1
  7. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/arguments.py +143 -22
  8. diffusers_workflow-0.4.0b5/dw/assets.py +130 -0
  9. diffusers_workflow-0.4.0b5/dw/docs/ACCELERATION.md +352 -0
  10. diffusers_workflow-0.4.0b5/dw/docs/AGENT_LOOP.md +86 -0
  11. diffusers_workflow-0.4.0b5/dw/docs/DEPENDENCIES.md +91 -0
  12. diffusers_workflow-0.4.0b5/dw/docs/IP_ADAPTER.md +109 -0
  13. diffusers_workflow-0.4.0b5/dw/docs/LORAS.md +131 -0
  14. diffusers_workflow-0.4.0b5/dw/docs/MCP.md +483 -0
  15. diffusers_workflow-0.4.0b5/dw/docs/PROMPT_WEIGHTING.md +78 -0
  16. diffusers_workflow-0.4.0b5/dw/docs/QUANTIZATION.md +230 -0
  17. diffusers_workflow-0.4.0b5/dw/docs/RECIPES_24GB.md +190 -0
  18. diffusers_workflow-0.4.0b5/dw/docs/RELEASING.md +66 -0
  19. diffusers_workflow-0.4.0b5/dw/docs/REMOTE.md +114 -0
  20. diffusers_workflow-0.4.0b5/dw/docs/REPL_COMMANDS.md +121 -0
  21. diffusers_workflow-0.4.0b5/dw/docs/REPL_WORKER_GUIDE.md +51 -0
  22. diffusers_workflow-0.4.0b5/dw/docs/SECURITY.md +225 -0
  23. diffusers_workflow-0.4.0b5/dw/docs/SECURITY_QUICKREF.md +112 -0
  24. diffusers_workflow-0.4.0b5/dw/docs/SERVER.md +567 -0
  25. diffusers_workflow-0.4.0b5/dw/docs/TASKS.md +1375 -0
  26. diffusers_workflow-0.4.0b5/dw/docs/TESTING.md +71 -0
  27. diffusers_workflow-0.4.0b5/dw/docs/WORKFLOW_GUIDE.md +1686 -0
  28. diffusers_workflow-0.4.0b5/dw/docs/WORKSPACES.md +305 -0
  29. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/events.py +32 -0
  30. diffusers_workflow-0.4.0b5/dw/for_each.py +409 -0
  31. diffusers_workflow-0.4.0b5/dw/host_memory.py +258 -0
  32. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/introspection.py +43 -0
  33. diffusers_workflow-0.4.0b5/dw/locations.py +541 -0
  34. diffusers_workflow-0.4.0b5/dw/media_info.py +198 -0
  35. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/pipeline_processors/chain.py +11 -4
  36. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/pipeline_processors/pipeline.py +470 -116
  37. diffusers_workflow-0.4.0b5/dw/pipeline_processors/remote.py +46 -0
  38. diffusers_workflow-0.4.0b5/dw/plan.py +435 -0
  39. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/previous_results.py +131 -6
  40. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/prompts.py +47 -33
  41. diffusers_workflow-0.4.0b5/dw/realize.py +244 -0
  42. diffusers_workflow-0.4.0b5/dw/reference_limits.py +210 -0
  43. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/repl.py +27 -5
  44. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/repl_commands.py +38 -3
  45. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/repl_worker.py +30 -0
  46. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/result.py +246 -24
  47. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/run.py +44 -3
  48. diffusers_workflow-0.4.0b5/dw/runs.py +419 -0
  49. diffusers_workflow-0.4.0b5/dw/schema.py +281 -0
  50. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/security.py +203 -9
  51. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/serve.py +112 -5
  52. diffusers_workflow-0.4.0b5/dw/server/app.py +3276 -0
  53. diffusers_workflow-0.4.0b5/dw/server/catalog_shape.py +407 -0
  54. diffusers_workflow-0.4.0b5/dw/server/exports.py +468 -0
  55. diffusers_workflow-0.4.0b5/dw/server/guides.py +226 -0
  56. diffusers_workflow-0.4.0b5/dw/server/jobs.py +1300 -0
  57. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/mcp_mount.py +4 -0
  58. diffusers_workflow-0.4.0b1/dw/server/ui/assets/cssMode-DIA5LESv.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/cssMode-BQ03gENP.js +1 -1
  59. diffusers_workflow-0.4.0b1/dw/server/ui/assets/editor.api-CuOF-U_A.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/editor.api-CzvLX8mb.js +1 -1
  60. diffusers_workflow-0.4.0b1/dw/server/ui/assets/freemarker2-xMcLxHzc.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/freemarker2-C8c7lwsP.js +1 -1
  61. diffusers_workflow-0.4.0b1/dw/server/ui/assets/handlebars-Dbt47IUh.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/handlebars-7APo_5hD.js +1 -1
  62. diffusers_workflow-0.4.0b1/dw/server/ui/assets/html-C4QoqgED.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/html-JgrkBemQ.js +1 -1
  63. diffusers_workflow-0.4.0b1/dw/server/ui/assets/htmlMode-BQ_x-rQl.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/htmlMode-BH9VsgGh.js +1 -1
  64. diffusers_workflow-0.4.0b5/dw/server/ui/assets/index-B1DfbIuu.js +37 -0
  65. diffusers_workflow-0.4.0b5/dw/server/ui/assets/index-CRVAbEJ9.css +1 -0
  66. diffusers_workflow-0.4.0b1/dw/server/ui/assets/javascript-yDlADdyl.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/javascript-BrFJ1H6j.js +1 -1
  67. diffusers_workflow-0.4.0b1/dw/server/ui/assets/jsonMode-X4znCY4b.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/jsonMode-C10gRe-2.js +1 -1
  68. diffusers_workflow-0.4.0b1/dw/server/ui/assets/liquid-CAaCQzwu.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/liquid-CjfGWTAZ.js +1 -1
  69. diffusers_workflow-0.4.0b1/dw/server/ui/assets/lspLanguageFeatures-CTJIGm94.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/lspLanguageFeatures-O-lB5SDv.js +1 -1
  70. diffusers_workflow-0.4.0b1/dw/server/ui/assets/mdx-ByHLng1y.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/mdx-D7b-hMTY.js +1 -1
  71. diffusers_workflow-0.4.0b1/dw/server/ui/assets/monaco-LJZc6TiS.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/monaco-DBnxML20.js +4 -4
  72. diffusers_workflow-0.4.0b1/dw/server/ui/assets/python-BCT_lvfW.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/python-NfJjzkPL.js +1 -1
  73. diffusers_workflow-0.4.0b1/dw/server/ui/assets/razor-Bw9oTolL.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/razor-CgQtwMBj.js +1 -1
  74. diffusers_workflow-0.4.0b1/dw/server/ui/assets/tsMode-BGvHTpYz.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/tsMode-BuMW6Qar.js +1 -1
  75. diffusers_workflow-0.4.0b1/dw/server/ui/assets/typescript-mwKKpQXP.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/typescript-Bfmxt754.js +1 -1
  76. diffusers_workflow-0.4.0b1/dw/server/ui/assets/workers-BOhWN9wu.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/workers-BSu9lD5s.js +1 -1
  77. diffusers_workflow-0.4.0b1/dw/server/ui/assets/xml-DuQ6E6P7.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/xml-BJ2IwGRC.js +1 -1
  78. diffusers_workflow-0.4.0b1/dw/server/ui/assets/yaml-D7o22x0f.js → diffusers_workflow-0.4.0b5/dw/server/ui/assets/yaml-Cq85tEmC.js +1 -1
  79. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/index.html +2 -2
  80. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/settings.py +12 -0
  81. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/step_cache.py +12 -3
  82. diffusers_workflow-0.4.0b5/dw/subfolders.py +107 -0
  83. diffusers_workflow-0.4.0b5/dw/task_domains.py +218 -0
  84. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/audio_utils.py +397 -50
  85. diffusers_workflow-0.4.0b5/dw/tasks/compose_text.py +74 -0
  86. diffusers_workflow-0.4.0b5/dw/tasks/concat_videos.py +221 -0
  87. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/dissolve_videos.py +33 -5
  88. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/gather.py +16 -4
  89. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/image_utils.py +2 -2
  90. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/interpolate_frames.py +8 -1
  91. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/model_cache.py +16 -0
  92. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/pair_audio.py +29 -6
  93. diffusers_workflow-0.4.0b5/dw/tasks/speech_generation.py +105 -0
  94. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/stabilize.py +1 -1
  95. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/task.py +34 -1
  96. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/text_generation.py +3 -15
  97. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/video_utils.py +76 -10
  98. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/teacache.py +6 -1
  99. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/validate.py +14 -1
  100. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/variables.py +168 -1
  101. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/worker.py +155 -18
  102. diffusers_workflow-0.4.0b5/dw/workflow.py +1536 -0
  103. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/workflow_schema.json +114 -18
  104. diffusers_workflow-0.4.0b5/dw/workflow_sources.py +307 -0
  105. diffusers_workflow-0.4.0b5/dw/workflows/h3_context_ir.json +57 -0
  106. diffusers_workflow-0.4.0b5/dw/workspace.py +723 -0
  107. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw_mcp/__main__.py +12 -1
  108. diffusers_workflow-0.4.0b5/dw_mcp/assets.py +225 -0
  109. diffusers_workflow-0.4.0b5/dw_mcp/authoring.py +48 -0
  110. diffusers_workflow-0.4.0b5/dw_mcp/catalog.py +247 -0
  111. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw_mcp/client.py +170 -21
  112. diffusers_workflow-0.4.0b5/dw_mcp/diagnose.py +313 -0
  113. diffusers_workflow-0.4.0b5/dw_mcp/exports.py +43 -0
  114. diffusers_workflow-0.4.0b5/dw_mcp/guides.py +35 -0
  115. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw_mcp/media.py +107 -15
  116. diffusers_workflow-0.4.0b5/dw_mcp/server.py +1058 -0
  117. diffusers_workflow-0.4.0b5/dw_mcp/workspaces.py +130 -0
  118. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/pyproject.toml +24 -5
  119. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_argument_updates.py +21 -26
  120. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_arguments.py +106 -10
  121. diffusers_workflow-0.4.0b5/tests/test_assets.py +156 -0
  122. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_audio_utils.py +313 -21
  123. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_cache_blocks.py +0 -2
  124. diffusers_workflow-0.4.0b5/tests/test_catalog_shape.py +719 -0
  125. diffusers_workflow-0.4.0b5/tests/test_catalog_structure.py +517 -0
  126. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_chain.py +0 -2
  127. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_cli.py +21 -0
  128. diffusers_workflow-0.4.0b5/tests/test_compose_text.py +50 -0
  129. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_concat_videos.py +244 -6
  130. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_configuration_schema.py +3 -1
  131. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_device.py +0 -1
  132. diffusers_workflow-0.4.0b5/tests/test_dialogue_short_voices.py +130 -0
  133. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_diffusion_upscale.py +2 -6
  134. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_dissolve_videos.py +44 -0
  135. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_events.py +18 -3
  136. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_examples.py +39 -8
  137. diffusers_workflow-0.4.0b5/tests/test_for_each.py +943 -0
  138. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_gather.py +6 -6
  139. diffusers_workflow-0.4.0b5/tests/test_h3_context_ir.py +129 -0
  140. diffusers_workflow-0.4.0b5/tests/test_hf_placement.py +14 -0
  141. diffusers_workflow-0.4.0b5/tests/test_host_memory.py +209 -0
  142. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_integration.py +5 -2
  143. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_introspection.py +93 -0
  144. diffusers_workflow-0.4.0b5/tests/test_job_progress.py +215 -0
  145. diffusers_workflow-0.4.0b5/tests/test_jobs_listing.py +202 -0
  146. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_jobs_reused.py +16 -0
  147. diffusers_workflow-0.4.0b5/tests/test_library_sources.py +249 -0
  148. diffusers_workflow-0.4.0b5/tests/test_locations.py +476 -0
  149. diffusers_workflow-0.4.0b5/tests/test_ltx_prompt_library.py +72 -0
  150. diffusers_workflow-0.4.0b5/tests/test_mcp_assets.py +312 -0
  151. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_mcp_authoring.py +65 -2
  152. diffusers_workflow-0.4.0b5/tests/test_mcp_catalog.py +259 -0
  153. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_mcp_client.py +61 -0
  154. diffusers_workflow-0.4.0b5/tests/test_mcp_diagnose.py +670 -0
  155. diffusers_workflow-0.4.0b5/tests/test_mcp_exports.py +117 -0
  156. diffusers_workflow-0.4.0b5/tests/test_mcp_guides.py +93 -0
  157. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_mcp_main.py +0 -2
  158. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_mcp_media.py +121 -6
  159. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_mcp_server.py +218 -3
  160. diffusers_workflow-0.4.0b5/tests/test_mcp_workspaces.py +291 -0
  161. diffusers_workflow-0.4.0b5/tests/test_media_info.py +255 -0
  162. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_mix_audio.py +21 -7
  163. diffusers_workflow-0.4.0b5/tests/test_modular_progress.py +325 -0
  164. diffusers_workflow-0.4.0b5/tests/test_output_references.py +179 -0
  165. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_pair_audio.py +24 -0
  166. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_pipeline_caching.py +105 -29
  167. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_pipeline_components.py +215 -1
  168. diffusers_workflow-0.4.0b5/tests/test_plan.py +597 -0
  169. diffusers_workflow-0.4.0b5/tests/test_plugin_skills.py +460 -0
  170. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_previous_results.py +190 -0
  171. diffusers_workflow-0.4.0b5/tests/test_prompt_references.py +54 -0
  172. diffusers_workflow-0.4.0b5/tests/test_realize.py +343 -0
  173. diffusers_workflow-0.4.0b5/tests/test_reference_limits.py +138 -0
  174. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_repl_commands.py +2 -2
  175. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_repl_reorganization.py +6 -6
  176. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_repl_worker.py +36 -1
  177. diffusers_workflow-0.4.0b5/tests/test_rerun_new_seed.py +153 -0
  178. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_result.py +386 -3
  179. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_result_output_naming.py +0 -2
  180. diffusers_workflow-0.4.0b5/tests/test_runs.py +735 -0
  181. diffusers_workflow-0.4.0b5/tests/test_schema.py +735 -0
  182. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_security.py +51 -0
  183. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_segment.py +0 -1
  184. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_serve_main.py +5 -0
  185. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_server.py +1872 -31
  186. diffusers_workflow-0.4.0b5/tests/test_server_exports.py +416 -0
  187. diffusers_workflow-0.4.0b5/tests/test_server_guides.py +271 -0
  188. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_server_info.py +17 -0
  189. diffusers_workflow-0.4.0b5/tests/test_server_jobs.py +259 -0
  190. diffusers_workflow-0.4.0b5/tests/test_server_workspaces.py +1005 -0
  191. diffusers_workflow-0.4.0b5/tests/test_speech_generation.py +163 -0
  192. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_step.py +2 -2
  193. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_step_cache.py +7 -0
  194. diffusers_workflow-0.4.0b5/tests/test_subfolders.py +141 -0
  195. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_task.py +6 -6
  196. diffusers_workflow-0.4.0b5/tests/test_task_domains.py +286 -0
  197. diffusers_workflow-0.4.0b5/tests/test_template_subfolders.py +92 -0
  198. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_tensor_image.py +0 -1
  199. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_type_helpers.py +0 -2
  200. diffusers_workflow-0.4.0b5/tests/test_validate_arguments.py +387 -0
  201. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_variables.py +141 -1
  202. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_video_utils.py +49 -2
  203. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_worker.py +30 -0
  204. diffusers_workflow-0.4.0b5/tests/test_worker_execute.py +337 -0
  205. diffusers_workflow-0.4.0b5/tests/test_workflow.py +1223 -0
  206. diffusers_workflow-0.4.0b5/tests/test_workflow_sources.py +174 -0
  207. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_workflow_step_cache.py +64 -1
  208. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_workflow_trust.py +158 -0
  209. diffusers_workflow-0.4.0b5/tests/test_workspace.py +254 -0
  210. diffusers_workflow-0.4.0b1/PKG-INFO +0 -364
  211. diffusers_workflow-0.4.0b1/README.md +0 -289
  212. diffusers_workflow-0.4.0b1/diffusers_workflow.egg-info/PKG-INFO +0 -364
  213. diffusers_workflow-0.4.0b1/dw/pipeline_processors/remote.py +0 -18
  214. diffusers_workflow-0.4.0b1/dw/schema.py +0 -43
  215. diffusers_workflow-0.4.0b1/dw/server/app.py +0 -1476
  216. diffusers_workflow-0.4.0b1/dw/server/jobs.py +0 -700
  217. diffusers_workflow-0.4.0b1/dw/server/ui/assets/index-BCNGRglb.css +0 -1
  218. diffusers_workflow-0.4.0b1/dw/server/ui/assets/index-C14JKFhY.js +0 -28
  219. diffusers_workflow-0.4.0b1/dw/tasks/concat_videos.py +0 -112
  220. diffusers_workflow-0.4.0b1/dw/workflow.py +0 -733
  221. diffusers_workflow-0.4.0b1/dw/workflows/augment_prompt.json +0 -65
  222. diffusers_workflow-0.4.0b1/dw/workflows/describe_image.json +0 -58
  223. diffusers_workflow-0.4.0b1/dw/workflows/h3_context_ir.json +0 -57
  224. diffusers_workflow-0.4.0b1/dw_mcp/authoring.py +0 -37
  225. diffusers_workflow-0.4.0b1/dw_mcp/catalog.py +0 -91
  226. diffusers_workflow-0.4.0b1/dw_mcp/diagnose.py +0 -139
  227. diffusers_workflow-0.4.0b1/dw_mcp/server.py +0 -439
  228. diffusers_workflow-0.4.0b1/tests/test_mcp_catalog.py +0 -119
  229. diffusers_workflow-0.4.0b1/tests/test_mcp_diagnose.py +0 -334
  230. diffusers_workflow-0.4.0b1/tests/test_schema.py +0 -282
  231. diffusers_workflow-0.4.0b1/tests/test_worker_execute.py +0 -165
  232. diffusers_workflow-0.4.0b1/tests/test_workflow.py +0 -340
  233. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/LICENSE +0 -0
  234. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/diffusers_workflow.egg-info/dependency_links.txt +0 -0
  235. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/diffusers_workflow.egg-info/entry_points.txt +0 -0
  236. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/diffusers_workflow.egg-info/top_level.txt +0 -0
  237. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/__init__.py +0 -0
  238. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/cache_blocks.json +0 -0
  239. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/cache_blocks.py +0 -0
  240. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/community_pipelines/pipeline_flux_rf_inversion.py +0 -0
  241. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/hub_cache.py +0 -0
  242. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/log_setup.py +0 -0
  243. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/pipeline_processors/config_objects.py +0 -0
  244. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/prompt_schema.json +0 -0
  245. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/prompt_weighting.py +0 -0
  246. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/__init__.py +0 -0
  247. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/enhancers.py +0 -0
  248. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/netinfo.py +0 -0
  249. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/abap-08VXUWAP.js +0 -0
  250. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/apex-BWPQTe0t.js +0 -0
  251. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/azcli-Bc_sGQ0U.js +0 -0
  252. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/bat-i0X4ZdIN.js +0 -0
  253. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/bicep-B5-_aFwp.js +0 -0
  254. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/cameligo-DMUM7wLl.js +0 -0
  255. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/clojure-Cm7r79vr.js +0 -0
  256. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/codicon-Brq4_Ui5.ttf +0 -0
  257. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/coffee-Ba7i2nA0.js +0 -0
  258. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/cpp-C7h46wYY.js +0 -0
  259. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/csharp-BKxtCVv1.js +0 -0
  260. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/csp-bTuwJoIa.js +0 -0
  261. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/css-DIMkf-bt.js +0 -0
  262. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/css.worker-B3ciXF_0.js +0 -0
  263. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/cypher-CVaqCwHa.js +0 -0
  264. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/dart-onAF5SnQ.js +0 -0
  265. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/dockerfile-DZFCIeNp.js +0 -0
  266. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/ecl-D05T4iGw.js +0 -0
  267. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/editor-jjEx9u7D.css +0 -0
  268. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/editor.worker-q-txB4vs.js +0 -0
  269. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/elixir-6RTg0lbw.js +0 -0
  270. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/flow9-C5_-GSwl.js +0 -0
  271. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/fsharp-C8Ef5oNN.js +0 -0
  272. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/go-C-y9NEjX.js +0 -0
  273. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/graphql-fmXr3nnJ.js +0 -0
  274. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/hcl-CpzslTdj.js +0 -0
  275. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/html.worker-C93Ht9o9.js +0 -0
  276. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/ini-sBoK_t0W.js +0 -0
  277. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/java-BEtHBSE6.js +0 -0
  278. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/json.worker-B2V3pomh.js +0 -0
  279. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/julia-Bri6UV-V.js +0 -0
  280. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/kotlin-BOotOW0E.js +0 -0
  281. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/less-B9JPFI3C.js +0 -0
  282. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/lexon-CfSJPG6W.js +0 -0
  283. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/lua-CsQS60Ue.js +0 -0
  284. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/m3-D-oSqn_W.js +0 -0
  285. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/markdown-Cimd5fb3.js +0 -0
  286. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/mips-CIPQ_RoX.js +0 -0
  287. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/monaco--ixms01u.css +0 -0
  288. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/msdax-DauUninz.js +0 -0
  289. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/mysql-SOo6toE5.js +0 -0
  290. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/objective-c-FvmIjYaQ.js +0 -0
  291. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/pascal-DrH0SRf2.js +0 -0
  292. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/pascaligo-D-ptJ9y-.js +0 -0
  293. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/perl-oz_6vUea.js +0 -0
  294. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/pgsql-DTj74zXo.js +0 -0
  295. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/php-nr791fC2.js +0 -0
  296. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/pla-CopQ2nXW.js +0 -0
  297. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/postiats-43DmfD33.js +0 -0
  298. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/powerquery-D3hlyOfw.js +0 -0
  299. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/powershell-DmHpPYUd.js +0 -0
  300. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/protobuf-C531GsRP.js +0 -0
  301. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/pug-Z5eAx3Zn.js +0 -0
  302. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/qsharp-DkqhCAOL.js +0 -0
  303. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/r-BwWrilGY.js +0 -0
  304. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/redis-ClamHrr6.js +0 -0
  305. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/redshift-DT7zqm-g.js +0 -0
  306. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/restructuredtext-BYgofb2h.js +0 -0
  307. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/ruby-DezsRK8O.js +0 -0
  308. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/rust-DdL9SqIa.js +0 -0
  309. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/sb-CcwsVR0C.js +0 -0
  310. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/scala-DHpiXF5c.js +0 -0
  311. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/scheme-BeGwcela.js +0 -0
  312. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/scss-gp-XZpBa.js +0 -0
  313. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/shell-CC2rA5mh.js +0 -0
  314. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/solidity-BEEn4gHE.js +0 -0
  315. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/sophia-CRfGWb83.js +0 -0
  316. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/sparql-D_Lu-MrJ.js +0 -0
  317. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/sql-NEE52Syq.js +0 -0
  318. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/st-DbInun42.js +0 -0
  319. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/swift-Bxkupp3x.js +0 -0
  320. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +0 -0
  321. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/tcl-DISqw1ZD.js +0 -0
  322. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/ts.worker-D7T1-Ig5.js +0 -0
  323. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/twig-De2hgUGE.js +0 -0
  324. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/typespec-B8J7ngcE.js +0 -0
  325. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/vb-DV3o63ZY.js +0 -0
  326. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/ui/assets/wgsl-DpFanUEy.js +0 -0
  327. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/server/updater.py +0 -0
  328. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/step.py +0 -0
  329. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/background_remover.py +0 -0
  330. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/borders.py +0 -0
  331. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/depth_estimator.py +0 -0
  332. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/diffusion_upscale.py +0 -0
  333. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/format_messages.py +0 -0
  334. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/image_to_text.py +0 -0
  335. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/qr_code.py +0 -0
  336. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/restore_faces.py +0 -0
  337. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/rife_model.py +0 -0
  338. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/segment.py +0 -0
  339. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/tensor_image.py +0 -0
  340. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/text_sections.py +0 -0
  341. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/upscale.py +0 -0
  342. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/tasks/zoe_depth.py +0 -0
  343. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/teacache_models.json +0 -0
  344. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/test.py +0 -0
  345. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/type_helpers.py +0 -0
  346. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw/workflows/test.json +0 -0
  347. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw_mcp/__init__.py +0 -0
  348. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw_mcp/models.py +0 -0
  349. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/dw_mcp/prompts.py +0 -0
  350. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/setup.cfg +0 -0
  351. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_borders.py +0 -0
  352. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_component_pruning.py +0 -0
  353. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_config_objects.py +0 -0
  354. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_depth_estimator.py +0 -0
  355. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_device_helpers.py +0 -0
  356. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_device_portability.py +0 -0
  357. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_docs_links.py +0 -0
  358. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_hub_cache.py +0 -0
  359. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_image_to_text.py +0 -0
  360. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_image_utils.py +0 -0
  361. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_interpolate_frames.py +0 -0
  362. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_list_images.py +0 -0
  363. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_mcp_models.py +0 -0
  364. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_mcp_prompts.py +0 -0
  365. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_model_cache.py +0 -0
  366. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_modular_pipeline.py +0 -0
  367. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_offload_placement.py +0 -0
  368. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_phase_events.py +0 -0
  369. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_prompt_parser.py +0 -0
  370. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_prompt_weighting.py +0 -0
  371. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_prompts.py +0 -0
  372. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_recenter_crop.py +0 -0
  373. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_repl_ergonomics.py +0 -0
  374. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_repl_hierarchical.py +0 -0
  375. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_resize_bucket.py +0 -0
  376. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_scheduler_config.py +0 -0
  377. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_server_downloads.py +0 -0
  378. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_server_mcp.py +0 -0
  379. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_stabilize.py +0 -0
  380. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_strip_exif_and_watermark.py +0 -0
  381. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_task_discovery.py +0 -0
  382. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_teacache.py +0 -0
  383. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_text_generation.py +0 -0
  384. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_text_sections.py +0 -0
  385. {diffusers_workflow-0.4.0b1 → diffusers_workflow-0.4.0b5}/tests/test_updater.py +0 -0
@@ -1,3 +1,4 @@
1
1
  include dw/*.json
2
2
  recursive-include dw/workflows *.json
3
3
  recursive-include dw/server/ui *
4
+ recursive-include dw/docs *.md
@@ -0,0 +1,298 @@
1
+ Metadata-Version: 2.4
2
+ Name: diffusers-workflow
3
+ Version: 0.4.0b5
4
+ Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
+ Author: dkackman
6
+ License: Apache-2.0
7
+ Project-URL: Homepage, https://github.com/dkackman/diffusers-workflow
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.10
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Requires-Python: >=3.10
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Requires-Dist: torch>=2.13.0
20
+ Requires-Dist: torchvision>=0.28.0
21
+ Requires-Dist: diffusers>=0.40.0
22
+ Requires-Dist: transformers>=5.16.1
23
+ Requires-Dist: accelerate>=1.14.0
24
+ Requires-Dist: peft>=0.20.0
25
+ Requires-Dist: safetensors>=0.8.0
26
+ Requires-Dist: huggingface-hub>=1.29.0
27
+ Requires-Dist: sentencepiece>=0.2.2
28
+ Requires-Dist: protobuf>=7.36.0
29
+ Requires-Dist: ftfy>=6.3.1
30
+ Requires-Dist: torchsde>=0.2.6
31
+ Requires-Dist: torchao>=0.18.0
32
+ Requires-Dist: optimum-quanto>=0.2.7
33
+ Requires-Dist: sdnq>=0.2.5
34
+ Requires-Dist: gguf>=0.19.0
35
+ Requires-Dist: bitsandbytes>=0.50.2; sys_platform == "linux"
36
+ Requires-Dist: controlnet-aux>=0.0.10
37
+ Requires-Dist: opencv-python-headless>=5.0.0.93
38
+ Requires-Dist: kornia>=0.8.3
39
+ Requires-Dist: spandrel>=0.4.2
40
+ Requires-Dist: facexlib>=0.3.0
41
+ Requires-Dist: numpy>=2.5.2
42
+ Requires-Dist: Pillow>=12.3.0
43
+ Requires-Dist: piexif>=1.1.3
44
+ Requires-Dist: imageio>=2.37.4
45
+ Requires-Dist: imageio-ffmpeg>=0.6.0
46
+ Requires-Dist: av>=18.1.0
47
+ Requires-Dist: soundfile>=0.14.0
48
+ Requires-Dist: matplotlib>=3.11.1
49
+ Requires-Dist: qrcode>=8.2
50
+ Requires-Dist: requests>=2.34.2
51
+ Requires-Dist: aiohttp>=3.14.3
52
+ Requires-Dist: beautifulsoup4>=4.15.0
53
+ Requires-Dist: jsonschema>=4.26.0
54
+ Requires-Dist: concurrent-log-handler>=0.9.29
55
+ Requires-Dist: python-dotenv>=1.2.3
56
+ Requires-Dist: packaging>=26.3
57
+ Provides-Extra: server
58
+ Requires-Dist: fastapi>=0.141.1; extra == "server"
59
+ Requires-Dist: uvicorn[standard]>=0.52.4; extra == "server"
60
+ Provides-Extra: mcp
61
+ Requires-Dist: mcp>=2.1.1; extra == "mcp"
62
+ Requires-Dist: httpx>=0.28.1; extra == "mcp"
63
+ Provides-Extra: dev
64
+ Requires-Dist: pytest>=9.1.1; extra == "dev"
65
+ Requires-Dist: pytest-cov>=7.1.0; extra == "dev"
66
+ Requires-Dist: pytest-xdist>=3.8.0; extra == "dev"
67
+ Requires-Dist: pytest-timeout>=2.4.0; extra == "dev"
68
+ Requires-Dist: pytest-mock>=3.15.1; extra == "dev"
69
+ Requires-Dist: pytest-asyncio>=1.4.0; extra == "dev"
70
+ Requires-Dist: httpx>=0.28.1; extra == "dev"
71
+ Requires-Dist: ruff>=0.15.0; extra == "dev"
72
+ Requires-Dist: build; extra == "dev"
73
+ Requires-Dist: mcp>=2.1.1; extra == "dev"
74
+ Dynamic: license-file
75
+
76
+ [![CodeQL](https://github.com/dkackman/diffusers-workflow/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/dkackman/diffusers-workflow/actions/workflows/github-code-scanning/codeql)
77
+
78
+ # diffusers-workflow
79
+
80
+ Your GPU, as something an agent can drive.
81
+
82
+ diffusers-workflow wraps the [Hugging Face Diffusers library](https://github.com/huggingface/diffusers)
83
+ in an engine that runs image, video and audio generation as jobs, and puts
84
+ two front ends on it: an **MCP server**, so Claude Code (or any MCP client)
85
+ can author, run and inspect generations; and a **web UI** for doing the same
86
+ by hand. A CLI and REPL sit underneath for when you want neither.
87
+
88
+ **Python 3.10-3.14 | CUDA (NVIDIA) | MPS (Apple Silicon) | CPU**
89
+
90
+ <picture>
91
+ <source media="(prefers-color-scheme: dark)" srcset="docs/img/ui-workflows-dark.png">
92
+ <img alt="The workflow browser: every workflow as a card with its description, output kinds, and variables" src="docs/img/ui-workflows.png">
93
+ </picture>
94
+
95
+ ## Getting started
96
+
97
+ **1. Install.** The script picks the right torch build for your platform,
98
+ creates a virtual environment and installs everything, MCP server included.
99
+
100
+ ```bash
101
+ # Linux / macOS
102
+ bash ./install.sh
103
+ source ./activate
104
+
105
+ # Windows
106
+ .\install.ps1
107
+ .\venv\scripts\activate
108
+ ```
109
+
110
+ `python -m dw.test` confirms torch and diffusers import and shows which
111
+ accelerator was found.
112
+
113
+ **2. Start the engine.** Leave it running; everything else talks to it.
114
+
115
+ ```bash
116
+ dw-serve
117
+ # diffusers-workflow server on http://127.0.0.1:8765
118
+ ```
119
+
120
+ That address is the web UI. Open it and run `templates/text-to-image` — a
121
+ small, ungated model, so the first generation needs no Hugging Face login and
122
+ downloads only a few GB.
123
+
124
+ **3. Connect Claude Code.** Register the MCP server with the absolute path to
125
+ `dw-mcp` in the venv you just made (the relative path is the one setup detail
126
+ that reliably goes wrong):
127
+
128
+ ```bash
129
+ claude mcp add dw -- "$(pwd)/venv/bin/dw-mcp"
130
+ ```
131
+
132
+ Then, optionally, the [dw plugin](plugins/dw/README.md) — one skill per model
133
+ family that knows which workflow fits a request and the rules that bite:
134
+
135
+ ```
136
+ /plugin marketplace add dkackman/diffusers-workflow
137
+ /plugin install dw@diffusers-workflow
138
+ ```
139
+
140
+ Most of the shipped workflows (Flux, LTX-2, MiniMax...) use **gated** models.
141
+ Request access on the model's Hugging Face page, then `huggingface-cli login`
142
+ once; without it the run fails partway through with a 401/403 from the Hub.
143
+
144
+ > **GPU on another machine?** Start the engine there with `--mcp` and connect
145
+ > over HTTP — nothing to install on the laptop:
146
+ >
147
+ > ```bash
148
+ > # on the GPU box
149
+ > dw-serve --host 0.0.0.0 --token "$DW_API_TOKEN" --mcp --workspace ~/studio
150
+ >
151
+ > # on your laptop
152
+ > claude mcp add --transport http dw http://gpu-box:8765/mcp \
153
+ > --header "Authorization: Bearer $DW_API_TOKEN"
154
+ > ```
155
+ >
156
+ > The server's own **Server** page composes that line for the address you
157
+ > pick. End to end: [Remote GPU server](docs/REMOTE.md).
158
+
159
+ ## Drive it from an agent
160
+
161
+ Then just ask. The agent has 55 tools covering the whole surface — the
162
+ workflow catalog, the real diffusers pipeline signatures, the job queue, the
163
+ gallery, the model cache:
164
+
165
+ ![Claude Code driving the dw MCP server: creating a workspace, authoring a script, and generating from it](docs/img/claude-authoring.png)
166
+
167
+ Generation is the long pass, and the agent stays with it — queuing each shot,
168
+ waiting it out, and reporting what came back:
169
+
170
+ ![The same session hours later: shots rendering one at a time, roughly 30 minutes each, with the agent reporting progress between them](docs/img/claude-generating.png)
171
+
172
+ What a session looks like:
173
+
174
+ - **"What can this box run, and what do I already have?"** — `get_server_info`
175
+ for the accelerator and workspace, `list_workflows` for the catalog with each
176
+ entry's shape, cost and variables, `list_models` for what is already in the
177
+ hub cache. The agent knows the device before it proposes anything CUDA-only.
178
+ - **"Take my Flux workflow, swap in the portrait LoRA, render four at 1024."**
179
+ — `get_workflow`, `get_pipeline_signature` to check the arguments exist,
180
+ `validate_workflow` (free: schema *and* signature checking, no model loads),
181
+ `save_workflow`, `run_workflow`. That last one refuses until the agent passes
182
+ `acknowledged_cost=true`, so it has to tell you what it is about to spend.
183
+ - **"How's it going?"** — `wait_for_job` blocks for a bounded interval instead
184
+ of polling; `get_output_image` brings the result back into the conversation
185
+ so the agent can look at what it made.
186
+ - **"That third frame is the one — keep it and seed the video pass from it."**
187
+ — `keep_output` promotes the file into the asset library under a name you
188
+ pick, and the next workflow references `asset:hero-frame.png`.
189
+
190
+ Everything that costs real GPU time or real disk (`run_workflow`, `rerun_job`,
191
+ `enhance_prompt`, `download_model`, `delete_model`, `update_diffusers`,
192
+ `delete_workspace`) refuses until it is explicitly acknowledged, so an agent
193
+ cannot quietly burn an hour of GPU or delete 40GB of weights.
194
+
195
+ One server holds several **workspaces** — each with its own workflows, assets
196
+ and outputs — so two agents, or an agent and you in the browser, share the GPU
197
+ without saving over each other. An agent calls `use_workspace` once and the
198
+ rest of the session lands there.
199
+
200
+ The complete tool reference, client configuration for other MCP hosts, and the
201
+ troubleshooting table: [MCP Server](docs/MCP.md). Workspaces in depth:
202
+ [Workspaces](docs/WORKSPACES.md).
203
+
204
+ ## The web UI
205
+
206
+ Everything the engine does, in a browser, backed by the same persistent GPU
207
+ worker — models stay loaded between runs.
208
+
209
+ **An editor built from the real pipeline signatures.** Forms and argument
210
+ autocomplete are generated by introspecting diffusers itself, so every knob a
211
+ pipeline exposes is there with its documentation. Validation catches schema
212
+ errors *and* argument typos before any model loads.
213
+
214
+ ![The editor: introspection-driven forms beside live JSON in Monaco](docs/img/ui-editor.png)
215
+
216
+ **A gallery where every image is a recipe.** Outputs carry their full workflow
217
+ and seed; *open as workflow* drops any image back into the editor, ready to
218
+ reproduce or riff on. *Keep as asset* promotes a generated file into the asset
219
+ library for later workflows to build on.
220
+
221
+ ![The gallery with generated images and videos](docs/img/ui-gallery.jpg)
222
+
223
+ **A prompt library** stores a prompt once and lets any workflow reference it,
224
+ with an *Enhance with AI* panel that expands an idea into a full prompt using
225
+ a local language model. **A model manager** inventories the Hugging Face hub
226
+ cache — sizes, last use, free space — and downloads or deletes models with
227
+ live progress.
228
+
229
+ ![The model manager listing cached models with sizes](docs/img/ui-models.png)
230
+
231
+ Jobs queue, stream progress live per denoising step, cancel cooperatively and
232
+ persist to a searchable history. See [Server & Web UI](docs/SERVER.md) for the
233
+ pages and the HTTP API.
234
+
235
+ ## The command line
236
+
237
+ The engine also runs standalone, with no server involved:
238
+
239
+ ```bash
240
+ python -m dw.run workflows/templates/text-to-image.json
241
+ python -m dw.run workflows/templates/text-to-image.json prompt="a cat" num_images_per_prompt=4
242
+ python -m dw.validate workflows/models/flux-dev.json
243
+ ```
244
+
245
+ An interactive REPL (`python -m dw.repl`) keeps models resident between runs
246
+ for 2-4x faster iteration. See [REPL Commands](docs/REPL_COMMANDS.md).
247
+
248
+ ## What's underneath
249
+
250
+ Every front end reads and writes the same thing: a JSON document of named
251
+ steps, each a diffusers pipeline or a utility task, whose arguments reference
252
+ variables, earlier steps' outputs, stored prompts and assets rather than
253
+ hard-coded values. That is what makes text-to-image chain into image-to-video,
254
+ and what makes a generated image reopen as the exact recipe that produced it.
255
+ [workflows/](workflows/) is a corpus of runnable examples across model
256
+ families; the [Workflow Guide](docs/WORKFLOW_GUIDE.md) is the reference when
257
+ you do want to write one.
258
+
259
+ Because a workflow reaches any diffusers pipeline or quantization backend by
260
+ dynamic import, loading one can execute arbitrary Python. Treat a workflow
261
+ file from someone else the way you'd treat a `.py` script — see
262
+ [Trust model](docs/SECURITY.md#trust-model).
263
+
264
+ Under the hood the engine also handles: quantization (BitsAndBytes, TorchAO,
265
+ GGUF, SDNQ, optimum-quanto); inference acceleration (TeaCache,
266
+ FirstBlockCache, FasterCache, MagCache, TaylorSeerCache); LoRA and IP-Adapter;
267
+ A1111-style prompt weighting; long-video chaining with audio-driven length;
268
+ step-output caching, so re-running a fixed-seed workflow finishes instantly;
269
+ and utility tasks for upscaling, face restoration, segmentation, captioning,
270
+ frame interpolation and more.
271
+
272
+ ## Documentation
273
+
274
+ ### Guides
275
+
276
+ - [MCP Server](docs/MCP.md) — The agent tool surface (Claude Code, Claude Desktop)
277
+ - [Server & Web UI](docs/SERVER.md) — The web UI, jobs API, and introspection service
278
+ - [Remote GPU server](docs/REMOTE.md) — Using the server, UI and MCP from another machine
279
+ - [Workspaces](docs/WORKSPACES.md) — Where your content lives, run directories, and several workspaces on one server
280
+ - [Workflow Guide](docs/WORKFLOW_GUIDE.md) — JSON structure, variables, steps, data flow
281
+ - [Quantization](docs/QUANTIZATION.md) — BitsAndBytes, TorchAO, GGUF, SDNQ
282
+ - [Inference Acceleration](docs/ACCELERATION.md) — torch.compile, FirstBlockCache, MagCache, TaylorSeer, TeaCache
283
+ - [Fast on 24GB](docs/RECIPES_24GB.md) — Recommended speed/memory configurations per model family
284
+ - [LoRA](docs/LORAS.md) — Loading and stacking LoRA adapters
285
+ - [IP-Adapter](docs/IP_ADAPTER.md) — Image-prompt conditioning
286
+ - [Prompt Weighting](docs/PROMPT_WEIGHTING.md) — A1111-style syntax
287
+ - [Prompt References](docs/WORKFLOW_GUIDE.md#prompt-references) — The stored prompt library and `prompt:` references
288
+ - [Tasks](docs/TASKS.md) — Image processing, ControlNet preprocessors, utilities
289
+
290
+ ### Reference
291
+
292
+ - [REPL Commands](docs/REPL_COMMANDS.md) — Interactive REPL command reference
293
+ - [Worker Guide](docs/REPL_WORKER_GUIDE.md) — GPU persistence and troubleshooting
294
+ - [Dependencies](docs/DEPENDENCIES.md) — Installation details
295
+ - [Security](docs/SECURITY.md) — Security model
296
+ - [Testing](docs/TESTING.md) — Running the test suite
297
+ - [Releasing](docs/RELEASING.md) — Cutting a release from a version tag
298
+ - [Agent Loop](docs/AGENT_LOOP.md) — What the automated implementer/tester ticket labels mean, for anyone joining an Issue
@@ -0,0 +1,223 @@
1
+ [![CodeQL](https://github.com/dkackman/diffusers-workflow/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/dkackman/diffusers-workflow/actions/workflows/github-code-scanning/codeql)
2
+
3
+ # diffusers-workflow
4
+
5
+ Your GPU, as something an agent can drive.
6
+
7
+ diffusers-workflow wraps the [Hugging Face Diffusers library](https://github.com/huggingface/diffusers)
8
+ in an engine that runs image, video and audio generation as jobs, and puts
9
+ two front ends on it: an **MCP server**, so Claude Code (or any MCP client)
10
+ can author, run and inspect generations; and a **web UI** for doing the same
11
+ by hand. A CLI and REPL sit underneath for when you want neither.
12
+
13
+ **Python 3.10-3.14 | CUDA (NVIDIA) | MPS (Apple Silicon) | CPU**
14
+
15
+ <picture>
16
+ <source media="(prefers-color-scheme: dark)" srcset="docs/img/ui-workflows-dark.png">
17
+ <img alt="The workflow browser: every workflow as a card with its description, output kinds, and variables" src="docs/img/ui-workflows.png">
18
+ </picture>
19
+
20
+ ## Getting started
21
+
22
+ **1. Install.** The script picks the right torch build for your platform,
23
+ creates a virtual environment and installs everything, MCP server included.
24
+
25
+ ```bash
26
+ # Linux / macOS
27
+ bash ./install.sh
28
+ source ./activate
29
+
30
+ # Windows
31
+ .\install.ps1
32
+ .\venv\scripts\activate
33
+ ```
34
+
35
+ `python -m dw.test` confirms torch and diffusers import and shows which
36
+ accelerator was found.
37
+
38
+ **2. Start the engine.** Leave it running; everything else talks to it.
39
+
40
+ ```bash
41
+ dw-serve
42
+ # diffusers-workflow server on http://127.0.0.1:8765
43
+ ```
44
+
45
+ That address is the web UI. Open it and run `templates/text-to-image` — a
46
+ small, ungated model, so the first generation needs no Hugging Face login and
47
+ downloads only a few GB.
48
+
49
+ **3. Connect Claude Code.** Register the MCP server with the absolute path to
50
+ `dw-mcp` in the venv you just made (the relative path is the one setup detail
51
+ that reliably goes wrong):
52
+
53
+ ```bash
54
+ claude mcp add dw -- "$(pwd)/venv/bin/dw-mcp"
55
+ ```
56
+
57
+ Then, optionally, the [dw plugin](plugins/dw/README.md) — one skill per model
58
+ family that knows which workflow fits a request and the rules that bite:
59
+
60
+ ```
61
+ /plugin marketplace add dkackman/diffusers-workflow
62
+ /plugin install dw@diffusers-workflow
63
+ ```
64
+
65
+ Most of the shipped workflows (Flux, LTX-2, MiniMax...) use **gated** models.
66
+ Request access on the model's Hugging Face page, then `huggingface-cli login`
67
+ once; without it the run fails partway through with a 401/403 from the Hub.
68
+
69
+ > **GPU on another machine?** Start the engine there with `--mcp` and connect
70
+ > over HTTP — nothing to install on the laptop:
71
+ >
72
+ > ```bash
73
+ > # on the GPU box
74
+ > dw-serve --host 0.0.0.0 --token "$DW_API_TOKEN" --mcp --workspace ~/studio
75
+ >
76
+ > # on your laptop
77
+ > claude mcp add --transport http dw http://gpu-box:8765/mcp \
78
+ > --header "Authorization: Bearer $DW_API_TOKEN"
79
+ > ```
80
+ >
81
+ > The server's own **Server** page composes that line for the address you
82
+ > pick. End to end: [Remote GPU server](docs/REMOTE.md).
83
+
84
+ ## Drive it from an agent
85
+
86
+ Then just ask. The agent has 55 tools covering the whole surface — the
87
+ workflow catalog, the real diffusers pipeline signatures, the job queue, the
88
+ gallery, the model cache:
89
+
90
+ ![Claude Code driving the dw MCP server: creating a workspace, authoring a script, and generating from it](docs/img/claude-authoring.png)
91
+
92
+ Generation is the long pass, and the agent stays with it — queuing each shot,
93
+ waiting it out, and reporting what came back:
94
+
95
+ ![The same session hours later: shots rendering one at a time, roughly 30 minutes each, with the agent reporting progress between them](docs/img/claude-generating.png)
96
+
97
+ What a session looks like:
98
+
99
+ - **"What can this box run, and what do I already have?"** — `get_server_info`
100
+ for the accelerator and workspace, `list_workflows` for the catalog with each
101
+ entry's shape, cost and variables, `list_models` for what is already in the
102
+ hub cache. The agent knows the device before it proposes anything CUDA-only.
103
+ - **"Take my Flux workflow, swap in the portrait LoRA, render four at 1024."**
104
+ — `get_workflow`, `get_pipeline_signature` to check the arguments exist,
105
+ `validate_workflow` (free: schema *and* signature checking, no model loads),
106
+ `save_workflow`, `run_workflow`. That last one refuses until the agent passes
107
+ `acknowledged_cost=true`, so it has to tell you what it is about to spend.
108
+ - **"How's it going?"** — `wait_for_job` blocks for a bounded interval instead
109
+ of polling; `get_output_image` brings the result back into the conversation
110
+ so the agent can look at what it made.
111
+ - **"That third frame is the one — keep it and seed the video pass from it."**
112
+ — `keep_output` promotes the file into the asset library under a name you
113
+ pick, and the next workflow references `asset:hero-frame.png`.
114
+
115
+ Everything that costs real GPU time or real disk (`run_workflow`, `rerun_job`,
116
+ `enhance_prompt`, `download_model`, `delete_model`, `update_diffusers`,
117
+ `delete_workspace`) refuses until it is explicitly acknowledged, so an agent
118
+ cannot quietly burn an hour of GPU or delete 40GB of weights.
119
+
120
+ One server holds several **workspaces** — each with its own workflows, assets
121
+ and outputs — so two agents, or an agent and you in the browser, share the GPU
122
+ without saving over each other. An agent calls `use_workspace` once and the
123
+ rest of the session lands there.
124
+
125
+ The complete tool reference, client configuration for other MCP hosts, and the
126
+ troubleshooting table: [MCP Server](docs/MCP.md). Workspaces in depth:
127
+ [Workspaces](docs/WORKSPACES.md).
128
+
129
+ ## The web UI
130
+
131
+ Everything the engine does, in a browser, backed by the same persistent GPU
132
+ worker — models stay loaded between runs.
133
+
134
+ **An editor built from the real pipeline signatures.** Forms and argument
135
+ autocomplete are generated by introspecting diffusers itself, so every knob a
136
+ pipeline exposes is there with its documentation. Validation catches schema
137
+ errors *and* argument typos before any model loads.
138
+
139
+ ![The editor: introspection-driven forms beside live JSON in Monaco](docs/img/ui-editor.png)
140
+
141
+ **A gallery where every image is a recipe.** Outputs carry their full workflow
142
+ and seed; *open as workflow* drops any image back into the editor, ready to
143
+ reproduce or riff on. *Keep as asset* promotes a generated file into the asset
144
+ library for later workflows to build on.
145
+
146
+ ![The gallery with generated images and videos](docs/img/ui-gallery.jpg)
147
+
148
+ **A prompt library** stores a prompt once and lets any workflow reference it,
149
+ with an *Enhance with AI* panel that expands an idea into a full prompt using
150
+ a local language model. **A model manager** inventories the Hugging Face hub
151
+ cache — sizes, last use, free space — and downloads or deletes models with
152
+ live progress.
153
+
154
+ ![The model manager listing cached models with sizes](docs/img/ui-models.png)
155
+
156
+ Jobs queue, stream progress live per denoising step, cancel cooperatively and
157
+ persist to a searchable history. See [Server & Web UI](docs/SERVER.md) for the
158
+ pages and the HTTP API.
159
+
160
+ ## The command line
161
+
162
+ The engine also runs standalone, with no server involved:
163
+
164
+ ```bash
165
+ python -m dw.run workflows/templates/text-to-image.json
166
+ python -m dw.run workflows/templates/text-to-image.json prompt="a cat" num_images_per_prompt=4
167
+ python -m dw.validate workflows/models/flux-dev.json
168
+ ```
169
+
170
+ An interactive REPL (`python -m dw.repl`) keeps models resident between runs
171
+ for 2-4x faster iteration. See [REPL Commands](docs/REPL_COMMANDS.md).
172
+
173
+ ## What's underneath
174
+
175
+ Every front end reads and writes the same thing: a JSON document of named
176
+ steps, each a diffusers pipeline or a utility task, whose arguments reference
177
+ variables, earlier steps' outputs, stored prompts and assets rather than
178
+ hard-coded values. That is what makes text-to-image chain into image-to-video,
179
+ and what makes a generated image reopen as the exact recipe that produced it.
180
+ [workflows/](workflows/) is a corpus of runnable examples across model
181
+ families; the [Workflow Guide](docs/WORKFLOW_GUIDE.md) is the reference when
182
+ you do want to write one.
183
+
184
+ Because a workflow reaches any diffusers pipeline or quantization backend by
185
+ dynamic import, loading one can execute arbitrary Python. Treat a workflow
186
+ file from someone else the way you'd treat a `.py` script — see
187
+ [Trust model](docs/SECURITY.md#trust-model).
188
+
189
+ Under the hood the engine also handles: quantization (BitsAndBytes, TorchAO,
190
+ GGUF, SDNQ, optimum-quanto); inference acceleration (TeaCache,
191
+ FirstBlockCache, FasterCache, MagCache, TaylorSeerCache); LoRA and IP-Adapter;
192
+ A1111-style prompt weighting; long-video chaining with audio-driven length;
193
+ step-output caching, so re-running a fixed-seed workflow finishes instantly;
194
+ and utility tasks for upscaling, face restoration, segmentation, captioning,
195
+ frame interpolation and more.
196
+
197
+ ## Documentation
198
+
199
+ ### Guides
200
+
201
+ - [MCP Server](docs/MCP.md) — The agent tool surface (Claude Code, Claude Desktop)
202
+ - [Server & Web UI](docs/SERVER.md) — The web UI, jobs API, and introspection service
203
+ - [Remote GPU server](docs/REMOTE.md) — Using the server, UI and MCP from another machine
204
+ - [Workspaces](docs/WORKSPACES.md) — Where your content lives, run directories, and several workspaces on one server
205
+ - [Workflow Guide](docs/WORKFLOW_GUIDE.md) — JSON structure, variables, steps, data flow
206
+ - [Quantization](docs/QUANTIZATION.md) — BitsAndBytes, TorchAO, GGUF, SDNQ
207
+ - [Inference Acceleration](docs/ACCELERATION.md) — torch.compile, FirstBlockCache, MagCache, TaylorSeer, TeaCache
208
+ - [Fast on 24GB](docs/RECIPES_24GB.md) — Recommended speed/memory configurations per model family
209
+ - [LoRA](docs/LORAS.md) — Loading and stacking LoRA adapters
210
+ - [IP-Adapter](docs/IP_ADAPTER.md) — Image-prompt conditioning
211
+ - [Prompt Weighting](docs/PROMPT_WEIGHTING.md) — A1111-style syntax
212
+ - [Prompt References](docs/WORKFLOW_GUIDE.md#prompt-references) — The stored prompt library and `prompt:` references
213
+ - [Tasks](docs/TASKS.md) — Image processing, ControlNet preprocessors, utilities
214
+
215
+ ### Reference
216
+
217
+ - [REPL Commands](docs/REPL_COMMANDS.md) — Interactive REPL command reference
218
+ - [Worker Guide](docs/REPL_WORKER_GUIDE.md) — GPU persistence and troubleshooting
219
+ - [Dependencies](docs/DEPENDENCIES.md) — Installation details
220
+ - [Security](docs/SECURITY.md) — Security model
221
+ - [Testing](docs/TESTING.md) — Running the test suite
222
+ - [Releasing](docs/RELEASING.md) — Cutting a release from a version tag
223
+ - [Agent Loop](docs/AGENT_LOOP.md) — What the automated implementer/tester ticket labels mean, for anyone joining an Issue