diffusers-workflow 0.4.0a12__tar.gz → 0.4.0b1__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 (289) hide show
  1. {diffusers_workflow-0.4.0a12/diffusers_workflow.egg-info → diffusers_workflow-0.4.0b1}/PKG-INFO +5 -3
  2. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/README.md +4 -2
  3. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1/diffusers_workflow.egg-info}/PKG-INFO +5 -3
  4. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/diffusers_workflow.egg-info/SOURCES.txt +39 -21
  5. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/pipeline_processors/chain.py +14 -7
  6. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/previous_results.py +5 -3
  7. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/repl_commands.py +4 -1
  8. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/result.py +40 -1
  9. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/serve.py +35 -3
  10. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/app.py +271 -27
  11. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/jobs.py +74 -10
  12. diffusers_workflow-0.4.0b1/dw/server/mcp_mount.py +91 -0
  13. diffusers_workflow-0.4.0b1/dw/server/netinfo.py +124 -0
  14. diffusers_workflow-0.4.0a12/dw/server/ui/assets/cssMode-CRm5Fmld.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/cssMode-DIA5LESv.js +1 -1
  15. diffusers_workflow-0.4.0a12/dw/server/ui/assets/editor.api-CArwgKCZ.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/editor.api-CuOF-U_A.js +1 -1
  16. diffusers_workflow-0.4.0a12/dw/server/ui/assets/freemarker2-B42MpbWP.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/freemarker2-xMcLxHzc.js +1 -1
  17. diffusers_workflow-0.4.0a12/dw/server/ui/assets/handlebars-BhleeD_A.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/handlebars-Dbt47IUh.js +1 -1
  18. diffusers_workflow-0.4.0a12/dw/server/ui/assets/html-Bi_v7qEe.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/html-C4QoqgED.js +1 -1
  19. diffusers_workflow-0.4.0a12/dw/server/ui/assets/htmlMode-c39yjrZR.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/htmlMode-BQ_x-rQl.js +1 -1
  20. diffusers_workflow-0.4.0a12/dw/server/ui/assets/index-CKHZ9ZUD.css → diffusers_workflow-0.4.0b1/dw/server/ui/assets/index-BCNGRglb.css +1 -1
  21. diffusers_workflow-0.4.0b1/dw/server/ui/assets/index-C14JKFhY.js +28 -0
  22. diffusers_workflow-0.4.0a12/dw/server/ui/assets/javascript-BTuzJzdO.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/javascript-yDlADdyl.js +1 -1
  23. diffusers_workflow-0.4.0a12/dw/server/ui/assets/jsonMode-DY2FmMCP.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/jsonMode-X4znCY4b.js +1 -1
  24. diffusers_workflow-0.4.0a12/dw/server/ui/assets/liquid-iXwDEnQP.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/liquid-CAaCQzwu.js +1 -1
  25. diffusers_workflow-0.4.0a12/dw/server/ui/assets/lspLanguageFeatures-CVXyTq9V.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/lspLanguageFeatures-CTJIGm94.js +1 -1
  26. diffusers_workflow-0.4.0a12/dw/server/ui/assets/mdx-QE70XlV0.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/mdx-ByHLng1y.js +1 -1
  27. diffusers_workflow-0.4.0a12/dw/server/ui/assets/monaco-CzCru1EC.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/monaco-LJZc6TiS.js +4 -4
  28. diffusers_workflow-0.4.0a12/dw/server/ui/assets/python-DxHS-kHp.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/python-BCT_lvfW.js +1 -1
  29. diffusers_workflow-0.4.0a12/dw/server/ui/assets/razor-CT5Qrhwg.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/razor-Bw9oTolL.js +1 -1
  30. diffusers_workflow-0.4.0a12/dw/server/ui/assets/tsMode-qXdDdnF1.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/tsMode-BGvHTpYz.js +1 -1
  31. diffusers_workflow-0.4.0a12/dw/server/ui/assets/typescript-BWfJagji.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/typescript-mwKKpQXP.js +1 -1
  32. diffusers_workflow-0.4.0a12/dw/server/ui/assets/workers-C9vxrwoC.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/workers-BOhWN9wu.js +1 -1
  33. diffusers_workflow-0.4.0a12/dw/server/ui/assets/xml-DhJEwsDK.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/xml-DuQ6E6P7.js +1 -1
  34. diffusers_workflow-0.4.0a12/dw/server/ui/assets/yaml-CiixMxAq.js → diffusers_workflow-0.4.0b1/dw/server/ui/assets/yaml-D7o22x0f.js +1 -1
  35. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/index.html +2 -2
  36. diffusers_workflow-0.4.0b1/dw/step_cache.py +260 -0
  37. diffusers_workflow-0.4.0b1/dw/tasks/audio_utils.py +579 -0
  38. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/concat_videos.py +44 -12
  39. diffusers_workflow-0.4.0b1/dw/tasks/dissolve_videos.py +138 -0
  40. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/gather.py +27 -9
  41. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/image_utils.py +65 -0
  42. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/interpolate_frames.py +13 -3
  43. diffusers_workflow-0.4.0b1/dw/tasks/stabilize.py +121 -0
  44. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/task.py +99 -10
  45. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/video_utils.py +137 -0
  46. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/worker.py +8 -2
  47. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/workflow.py +169 -55
  48. diffusers_workflow-0.4.0b1/dw/workflows/h3_context_ir.json +57 -0
  49. diffusers_workflow-0.4.0b1/dw_mcp/__main__.py +122 -0
  50. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw_mcp/catalog.py +9 -1
  51. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw_mcp/client.py +57 -0
  52. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw_mcp/media.py +53 -0
  53. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw_mcp/server.py +37 -1
  54. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/pyproject.toml +4 -1
  55. diffusers_workflow-0.4.0b1/tests/test_audio_utils.py +469 -0
  56. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_chain.py +28 -0
  57. diffusers_workflow-0.4.0b1/tests/test_concat_videos.py +309 -0
  58. diffusers_workflow-0.4.0b1/tests/test_dissolve_videos.py +97 -0
  59. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_gather.py +96 -8
  60. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_interpolate_frames.py +19 -4
  61. diffusers_workflow-0.4.0b1/tests/test_jobs_reused.py +53 -0
  62. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_mcp_catalog.py +1 -0
  63. diffusers_workflow-0.4.0b1/tests/test_mcp_main.py +138 -0
  64. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_mcp_media.py +182 -0
  65. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_mcp_server.py +17 -0
  66. diffusers_workflow-0.4.0b1/tests/test_mix_audio.py +53 -0
  67. diffusers_workflow-0.4.0b1/tests/test_recenter_crop.py +72 -0
  68. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_result.py +23 -0
  69. diffusers_workflow-0.4.0b1/tests/test_result_output_naming.py +34 -0
  70. diffusers_workflow-0.4.0b1/tests/test_serve_main.py +84 -0
  71. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_server.py +251 -2
  72. diffusers_workflow-0.4.0b1/tests/test_server_downloads.py +123 -0
  73. diffusers_workflow-0.4.0b1/tests/test_server_info.py +177 -0
  74. diffusers_workflow-0.4.0b1/tests/test_server_mcp.py +174 -0
  75. diffusers_workflow-0.4.0b1/tests/test_stabilize.py +110 -0
  76. diffusers_workflow-0.4.0b1/tests/test_step_cache.py +349 -0
  77. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_task.py +56 -0
  78. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_video_utils.py +96 -0
  79. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_worker_execute.py +25 -1
  80. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_workflow.py +22 -0
  81. diffusers_workflow-0.4.0b1/tests/test_workflow_step_cache.py +610 -0
  82. diffusers_workflow-0.4.0a12/dw/server/ui/assets/index-Do_ZJ3yS.js +0 -23
  83. diffusers_workflow-0.4.0a12/dw/tasks/audio_utils.py +0 -266
  84. diffusers_workflow-0.4.0a12/dw/workflows/h3_context_ir.json +0 -57
  85. diffusers_workflow-0.4.0a12/dw_mcp/__main__.py +0 -47
  86. diffusers_workflow-0.4.0a12/tests/test_audio_utils.py +0 -194
  87. diffusers_workflow-0.4.0a12/tests/test_concat_videos.py +0 -133
  88. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/LICENSE +0 -0
  89. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/MANIFEST.in +0 -0
  90. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/diffusers_workflow.egg-info/dependency_links.txt +0 -0
  91. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/diffusers_workflow.egg-info/entry_points.txt +0 -0
  92. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/diffusers_workflow.egg-info/requires.txt +0 -0
  93. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/diffusers_workflow.egg-info/top_level.txt +0 -0
  94. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/__init__.py +0 -0
  95. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/arguments.py +0 -0
  96. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/cache_blocks.json +0 -0
  97. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/cache_blocks.py +0 -0
  98. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/community_pipelines/pipeline_flux_rf_inversion.py +0 -0
  99. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/events.py +0 -0
  100. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/hub_cache.py +0 -0
  101. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/introspection.py +0 -0
  102. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/log_setup.py +0 -0
  103. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/pipeline_processors/config_objects.py +0 -0
  104. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/pipeline_processors/pipeline.py +0 -0
  105. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/pipeline_processors/remote.py +0 -0
  106. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/prompt_schema.json +0 -0
  107. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/prompt_weighting.py +0 -0
  108. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/prompts.py +0 -0
  109. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/repl.py +0 -0
  110. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/repl_worker.py +0 -0
  111. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/run.py +0 -0
  112. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/schema.py +0 -0
  113. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/security.py +0 -0
  114. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/__init__.py +0 -0
  115. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/enhancers.py +0 -0
  116. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/abap-08VXUWAP.js +0 -0
  117. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/apex-BWPQTe0t.js +0 -0
  118. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/azcli-Bc_sGQ0U.js +0 -0
  119. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/bat-i0X4ZdIN.js +0 -0
  120. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/bicep-B5-_aFwp.js +0 -0
  121. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/cameligo-DMUM7wLl.js +0 -0
  122. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/clojure-Cm7r79vr.js +0 -0
  123. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/codicon-Brq4_Ui5.ttf +0 -0
  124. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/coffee-Ba7i2nA0.js +0 -0
  125. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/cpp-C7h46wYY.js +0 -0
  126. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/csharp-BKxtCVv1.js +0 -0
  127. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/csp-bTuwJoIa.js +0 -0
  128. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/css-DIMkf-bt.js +0 -0
  129. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/css.worker-B3ciXF_0.js +0 -0
  130. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/cypher-CVaqCwHa.js +0 -0
  131. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/dart-onAF5SnQ.js +0 -0
  132. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/dockerfile-DZFCIeNp.js +0 -0
  133. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/ecl-D05T4iGw.js +0 -0
  134. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/editor-jjEx9u7D.css +0 -0
  135. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/editor.worker-q-txB4vs.js +0 -0
  136. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/elixir-6RTg0lbw.js +0 -0
  137. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/flow9-C5_-GSwl.js +0 -0
  138. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/fsharp-C8Ef5oNN.js +0 -0
  139. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/go-C-y9NEjX.js +0 -0
  140. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/graphql-fmXr3nnJ.js +0 -0
  141. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/hcl-CpzslTdj.js +0 -0
  142. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/html.worker-C93Ht9o9.js +0 -0
  143. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/ini-sBoK_t0W.js +0 -0
  144. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/java-BEtHBSE6.js +0 -0
  145. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/json.worker-B2V3pomh.js +0 -0
  146. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/julia-Bri6UV-V.js +0 -0
  147. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/kotlin-BOotOW0E.js +0 -0
  148. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/less-B9JPFI3C.js +0 -0
  149. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/lexon-CfSJPG6W.js +0 -0
  150. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/lua-CsQS60Ue.js +0 -0
  151. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/m3-D-oSqn_W.js +0 -0
  152. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/markdown-Cimd5fb3.js +0 -0
  153. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/mips-CIPQ_RoX.js +0 -0
  154. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/monaco--ixms01u.css +0 -0
  155. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/msdax-DauUninz.js +0 -0
  156. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/mysql-SOo6toE5.js +0 -0
  157. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/objective-c-FvmIjYaQ.js +0 -0
  158. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/pascal-DrH0SRf2.js +0 -0
  159. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/pascaligo-D-ptJ9y-.js +0 -0
  160. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/perl-oz_6vUea.js +0 -0
  161. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/pgsql-DTj74zXo.js +0 -0
  162. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/php-nr791fC2.js +0 -0
  163. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/pla-CopQ2nXW.js +0 -0
  164. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/postiats-43DmfD33.js +0 -0
  165. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/powerquery-D3hlyOfw.js +0 -0
  166. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/powershell-DmHpPYUd.js +0 -0
  167. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/protobuf-C531GsRP.js +0 -0
  168. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/pug-Z5eAx3Zn.js +0 -0
  169. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/qsharp-DkqhCAOL.js +0 -0
  170. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/r-BwWrilGY.js +0 -0
  171. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/redis-ClamHrr6.js +0 -0
  172. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/redshift-DT7zqm-g.js +0 -0
  173. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/restructuredtext-BYgofb2h.js +0 -0
  174. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/ruby-DezsRK8O.js +0 -0
  175. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/rust-DdL9SqIa.js +0 -0
  176. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/sb-CcwsVR0C.js +0 -0
  177. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/scala-DHpiXF5c.js +0 -0
  178. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/scheme-BeGwcela.js +0 -0
  179. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/scss-gp-XZpBa.js +0 -0
  180. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/shell-CC2rA5mh.js +0 -0
  181. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/solidity-BEEn4gHE.js +0 -0
  182. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/sophia-CRfGWb83.js +0 -0
  183. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/sparql-D_Lu-MrJ.js +0 -0
  184. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/sql-NEE52Syq.js +0 -0
  185. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/st-DbInun42.js +0 -0
  186. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/swift-Bxkupp3x.js +0 -0
  187. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +0 -0
  188. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/tcl-DISqw1ZD.js +0 -0
  189. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/ts.worker-D7T1-Ig5.js +0 -0
  190. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/twig-De2hgUGE.js +0 -0
  191. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/typespec-B8J7ngcE.js +0 -0
  192. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/vb-DV3o63ZY.js +0 -0
  193. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/ui/assets/wgsl-DpFanUEy.js +0 -0
  194. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/server/updater.py +0 -0
  195. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/settings.py +0 -0
  196. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/step.py +0 -0
  197. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/background_remover.py +0 -0
  198. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/borders.py +0 -0
  199. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/depth_estimator.py +0 -0
  200. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/diffusion_upscale.py +0 -0
  201. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/format_messages.py +0 -0
  202. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/image_to_text.py +0 -0
  203. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/model_cache.py +0 -0
  204. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/pair_audio.py +0 -0
  205. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/qr_code.py +0 -0
  206. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/restore_faces.py +0 -0
  207. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/rife_model.py +0 -0
  208. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/segment.py +0 -0
  209. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/tensor_image.py +0 -0
  210. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/text_generation.py +0 -0
  211. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/text_sections.py +0 -0
  212. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/upscale.py +0 -0
  213. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/tasks/zoe_depth.py +0 -0
  214. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/teacache.py +0 -0
  215. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/teacache_models.json +0 -0
  216. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/test.py +0 -0
  217. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/type_helpers.py +0 -0
  218. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/validate.py +0 -0
  219. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/variables.py +0 -0
  220. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/workflow_schema.json +0 -0
  221. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/workflows/augment_prompt.json +0 -0
  222. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/workflows/describe_image.json +0 -0
  223. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw/workflows/test.json +0 -0
  224. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw_mcp/__init__.py +0 -0
  225. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw_mcp/authoring.py +0 -0
  226. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw_mcp/diagnose.py +0 -0
  227. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw_mcp/models.py +0 -0
  228. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/dw_mcp/prompts.py +0 -0
  229. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/setup.cfg +0 -0
  230. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_argument_updates.py +0 -0
  231. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_arguments.py +0 -0
  232. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_borders.py +0 -0
  233. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_cache_blocks.py +0 -0
  234. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_cli.py +0 -0
  235. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_component_pruning.py +0 -0
  236. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_config_objects.py +0 -0
  237. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_configuration_schema.py +0 -0
  238. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_depth_estimator.py +0 -0
  239. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_device.py +0 -0
  240. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_device_helpers.py +0 -0
  241. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_device_portability.py +0 -0
  242. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_diffusion_upscale.py +0 -0
  243. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_docs_links.py +0 -0
  244. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_events.py +0 -0
  245. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_examples.py +0 -0
  246. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_hub_cache.py +0 -0
  247. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_image_to_text.py +0 -0
  248. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_image_utils.py +0 -0
  249. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_integration.py +0 -0
  250. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_introspection.py +0 -0
  251. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_list_images.py +0 -0
  252. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_mcp_authoring.py +0 -0
  253. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_mcp_client.py +0 -0
  254. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_mcp_diagnose.py +0 -0
  255. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_mcp_models.py +0 -0
  256. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_mcp_prompts.py +0 -0
  257. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_model_cache.py +0 -0
  258. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_modular_pipeline.py +0 -0
  259. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_offload_placement.py +0 -0
  260. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_pair_audio.py +0 -0
  261. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_phase_events.py +0 -0
  262. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_pipeline_caching.py +0 -0
  263. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_pipeline_components.py +0 -0
  264. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_previous_results.py +0 -0
  265. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_prompt_parser.py +0 -0
  266. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_prompt_weighting.py +0 -0
  267. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_prompts.py +0 -0
  268. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_repl_commands.py +0 -0
  269. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_repl_ergonomics.py +0 -0
  270. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_repl_hierarchical.py +0 -0
  271. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_repl_reorganization.py +0 -0
  272. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_repl_worker.py +0 -0
  273. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_resize_bucket.py +0 -0
  274. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_scheduler_config.py +0 -0
  275. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_schema.py +0 -0
  276. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_security.py +0 -0
  277. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_segment.py +0 -0
  278. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_step.py +0 -0
  279. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_strip_exif_and_watermark.py +0 -0
  280. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_task_discovery.py +0 -0
  281. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_teacache.py +0 -0
  282. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_tensor_image.py +0 -0
  283. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_text_generation.py +0 -0
  284. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_text_sections.py +0 -0
  285. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_type_helpers.py +0 -0
  286. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_updater.py +0 -0
  287. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_variables.py +0 -0
  288. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_worker.py +0 -0
  289. {diffusers_workflow-0.4.0a12 → diffusers_workflow-0.4.0b1}/tests/test_workflow_trust.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.4.0a12
3
+ Version: 0.4.0b1
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -91,10 +91,11 @@ A workflow JSON file is portable and easy to hand off — but that same flexibil
91
91
  ## Features
92
92
 
93
93
  - **Web UI** — browse and run workflows, edit them in introspection-driven forms, watch jobs stream live progress, manage generated output and the models on disk. `python -m dw.serve` and open a browser. See [Server & Web UI](docs/SERVER.md).
94
- - **MCP server** — a stdio server that lets an MCP client (Claude Code first) author, validate, save, run and diagnose workflows against a running `dw.serve`. `dw-mcp`. See [MCP Server](docs/MCP.md).
94
+ - **MCP server** — a tool surface that lets an MCP client (Claude Code first) author, validate, save, run and diagnose workflows against a running `dw.serve`: `dw-mcp` over stdio, or mounted at `/mcp` by `dw.serve --mcp` for a client on another machine. See [MCP Server](docs/MCP.md) and [Remote GPU server](docs/REMOTE.md).
95
+ - **Step-output caching** — a step whose resolved arguments and seed are unchanged since the last run in the same process reuses its cached result instead of re-executing. This applies to any `Workflow.run` — REPL iteration and a re-run of a server-submitted job alike, so re-running a fixed-seed workflow from the UI finishes instantly and writes no new output files. The cache holds the most recent 50 steps and is dropped by `memory clear`
95
96
  - **Declarative JSON workflows** with variable substitution and cross-step data flow
96
97
  - **Multi-step pipelines** — chain text-to-image, image-to-video, inpainting, ControlNet
97
- - **Reproducible by construction** — outputs embed their full workflow definition and seed; any image in the gallery reopens as the exact workflow that made it (see [Trust model](docs/SECURITY.md#trust-model) before reopening one someone else sent you)
98
+ - **Reproducible by construction** — outputs embed their full workflow definition and seed; any image in the gallery reopens as the exact workflow that made it (see [Trust model](docs/SECURITY.md#trust-model) before reopening one someone else sent you). A rerun never overwrites a prior output — a name collision gets an incrementing suffix instead
98
99
  - **Long-video chaining** — run a video pipeline once per segment and stitch the segments into one clip, with audio-driven length and frame-to-frame continuity
99
100
  - **Quantization** — BitsAndBytes, TorchAO, GGUF, SDNQ, optimum-quanto
100
101
  - **Inference acceleration** — TeaCache, FirstBlockCache, FasterCache, MagCache, TaylorSeerCache
@@ -342,6 +343,7 @@ See [workflows/](workflows/) for more workflow files.
342
343
 
343
344
  - [Server & Web UI](docs/SERVER.md) — The web UI, jobs API, and introspection service
344
345
  - [MCP Server](docs/MCP.md) — Tool surface for MCP clients (Claude Code, Claude Desktop)
346
+ - [Remote GPU server](docs/REMOTE.md) — Using the server, UI and MCP from another machine
345
347
  - [Workflow Guide](docs/WORKFLOW_GUIDE.md) — JSON structure, variables, steps, data flow
346
348
  - [Quantization](docs/QUANTIZATION.md) — BitsAndBytes, TorchAO, GGUF, SDNQ
347
349
  - [Inference Acceleration](docs/ACCELERATION.md) — torch.compile, FirstBlockCache, MagCache, TaylorSeer, TeaCache
@@ -16,10 +16,11 @@ A workflow JSON file is portable and easy to hand off — but that same flexibil
16
16
  ## Features
17
17
 
18
18
  - **Web UI** — browse and run workflows, edit them in introspection-driven forms, watch jobs stream live progress, manage generated output and the models on disk. `python -m dw.serve` and open a browser. See [Server & Web UI](docs/SERVER.md).
19
- - **MCP server** — a stdio server that lets an MCP client (Claude Code first) author, validate, save, run and diagnose workflows against a running `dw.serve`. `dw-mcp`. See [MCP Server](docs/MCP.md).
19
+ - **MCP server** — a tool surface that lets an MCP client (Claude Code first) author, validate, save, run and diagnose workflows against a running `dw.serve`: `dw-mcp` over stdio, or mounted at `/mcp` by `dw.serve --mcp` for a client on another machine. See [MCP Server](docs/MCP.md) and [Remote GPU server](docs/REMOTE.md).
20
+ - **Step-output caching** — a step whose resolved arguments and seed are unchanged since the last run in the same process reuses its cached result instead of re-executing. This applies to any `Workflow.run` — REPL iteration and a re-run of a server-submitted job alike, so re-running a fixed-seed workflow from the UI finishes instantly and writes no new output files. The cache holds the most recent 50 steps and is dropped by `memory clear`
20
21
  - **Declarative JSON workflows** with variable substitution and cross-step data flow
21
22
  - **Multi-step pipelines** — chain text-to-image, image-to-video, inpainting, ControlNet
22
- - **Reproducible by construction** — outputs embed their full workflow definition and seed; any image in the gallery reopens as the exact workflow that made it (see [Trust model](docs/SECURITY.md#trust-model) before reopening one someone else sent you)
23
+ - **Reproducible by construction** — outputs embed their full workflow definition and seed; any image in the gallery reopens as the exact workflow that made it (see [Trust model](docs/SECURITY.md#trust-model) before reopening one someone else sent you). A rerun never overwrites a prior output — a name collision gets an incrementing suffix instead
23
24
  - **Long-video chaining** — run a video pipeline once per segment and stitch the segments into one clip, with audio-driven length and frame-to-frame continuity
24
25
  - **Quantization** — BitsAndBytes, TorchAO, GGUF, SDNQ, optimum-quanto
25
26
  - **Inference acceleration** — TeaCache, FirstBlockCache, FasterCache, MagCache, TaylorSeerCache
@@ -267,6 +268,7 @@ See [workflows/](workflows/) for more workflow files.
267
268
 
268
269
  - [Server & Web UI](docs/SERVER.md) — The web UI, jobs API, and introspection service
269
270
  - [MCP Server](docs/MCP.md) — Tool surface for MCP clients (Claude Code, Claude Desktop)
271
+ - [Remote GPU server](docs/REMOTE.md) — Using the server, UI and MCP from another machine
270
272
  - [Workflow Guide](docs/WORKFLOW_GUIDE.md) — JSON structure, variables, steps, data flow
271
273
  - [Quantization](docs/QUANTIZATION.md) — BitsAndBytes, TorchAO, GGUF, SDNQ
272
274
  - [Inference Acceleration](docs/ACCELERATION.md) — torch.compile, FirstBlockCache, MagCache, TaylorSeer, TeaCache
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.4.0a12
3
+ Version: 0.4.0b1
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -91,10 +91,11 @@ A workflow JSON file is portable and easy to hand off — but that same flexibil
91
91
  ## Features
92
92
 
93
93
  - **Web UI** — browse and run workflows, edit them in introspection-driven forms, watch jobs stream live progress, manage generated output and the models on disk. `python -m dw.serve` and open a browser. See [Server & Web UI](docs/SERVER.md).
94
- - **MCP server** — a stdio server that lets an MCP client (Claude Code first) author, validate, save, run and diagnose workflows against a running `dw.serve`. `dw-mcp`. See [MCP Server](docs/MCP.md).
94
+ - **MCP server** — a tool surface that lets an MCP client (Claude Code first) author, validate, save, run and diagnose workflows against a running `dw.serve`: `dw-mcp` over stdio, or mounted at `/mcp` by `dw.serve --mcp` for a client on another machine. See [MCP Server](docs/MCP.md) and [Remote GPU server](docs/REMOTE.md).
95
+ - **Step-output caching** — a step whose resolved arguments and seed are unchanged since the last run in the same process reuses its cached result instead of re-executing. This applies to any `Workflow.run` — REPL iteration and a re-run of a server-submitted job alike, so re-running a fixed-seed workflow from the UI finishes instantly and writes no new output files. The cache holds the most recent 50 steps and is dropped by `memory clear`
95
96
  - **Declarative JSON workflows** with variable substitution and cross-step data flow
96
97
  - **Multi-step pipelines** — chain text-to-image, image-to-video, inpainting, ControlNet
97
- - **Reproducible by construction** — outputs embed their full workflow definition and seed; any image in the gallery reopens as the exact workflow that made it (see [Trust model](docs/SECURITY.md#trust-model) before reopening one someone else sent you)
98
+ - **Reproducible by construction** — outputs embed their full workflow definition and seed; any image in the gallery reopens as the exact workflow that made it (see [Trust model](docs/SECURITY.md#trust-model) before reopening one someone else sent you). A rerun never overwrites a prior output — a name collision gets an incrementing suffix instead
98
99
  - **Long-video chaining** — run a video pipeline once per segment and stitch the segments into one clip, with audio-driven length and frame-to-frame continuity
99
100
  - **Quantization** — BitsAndBytes, TorchAO, GGUF, SDNQ, optimum-quanto
100
101
  - **Inference acceleration** — TeaCache, FirstBlockCache, FasterCache, MagCache, TaylorSeerCache
@@ -342,6 +343,7 @@ See [workflows/](workflows/) for more workflow files.
342
343
 
343
344
  - [Server & Web UI](docs/SERVER.md) — The web UI, jobs API, and introspection service
344
345
  - [MCP Server](docs/MCP.md) — Tool surface for MCP clients (Claude Code, Claude Desktop)
346
+ - [Remote GPU server](docs/REMOTE.md) — Using the server, UI and MCP from another machine
345
347
  - [Workflow Guide](docs/WORKFLOW_GUIDE.md) — JSON structure, variables, steps, data flow
346
348
  - [Quantization](docs/QUANTIZATION.md) — BitsAndBytes, TorchAO, GGUF, SDNQ
347
349
  - [Inference Acceleration](docs/ACCELERATION.md) — torch.compile, FirstBlockCache, MagCache, TaylorSeer, TeaCache
@@ -30,6 +30,7 @@ dw/security.py
30
30
  dw/serve.py
31
31
  dw/settings.py
32
32
  dw/step.py
33
+ dw/step_cache.py
33
34
  dw/teacache.py
34
35
  dw/teacache_models.json
35
36
  dw/test.py
@@ -48,6 +49,8 @@ dw/server/__init__.py
48
49
  dw/server/app.py
49
50
  dw/server/enhancers.py
50
51
  dw/server/jobs.py
52
+ dw/server/mcp_mount.py
53
+ dw/server/netinfo.py
51
54
  dw/server/updater.py
52
55
  dw/server/ui/index.html
53
56
  dw/server/ui/assets/abap-08VXUWAP.js
@@ -64,45 +67,45 @@ dw/server/ui/assets/csharp-BKxtCVv1.js
64
67
  dw/server/ui/assets/csp-bTuwJoIa.js
65
68
  dw/server/ui/assets/css-DIMkf-bt.js
66
69
  dw/server/ui/assets/css.worker-B3ciXF_0.js
67
- dw/server/ui/assets/cssMode-CRm5Fmld.js
70
+ dw/server/ui/assets/cssMode-DIA5LESv.js
68
71
  dw/server/ui/assets/cypher-CVaqCwHa.js
69
72
  dw/server/ui/assets/dart-onAF5SnQ.js
70
73
  dw/server/ui/assets/dockerfile-DZFCIeNp.js
71
74
  dw/server/ui/assets/ecl-D05T4iGw.js
72
75
  dw/server/ui/assets/editor-jjEx9u7D.css
73
- dw/server/ui/assets/editor.api-CArwgKCZ.js
76
+ dw/server/ui/assets/editor.api-CuOF-U_A.js
74
77
  dw/server/ui/assets/editor.worker-q-txB4vs.js
75
78
  dw/server/ui/assets/elixir-6RTg0lbw.js
76
79
  dw/server/ui/assets/flow9-C5_-GSwl.js
77
- dw/server/ui/assets/freemarker2-B42MpbWP.js
80
+ dw/server/ui/assets/freemarker2-xMcLxHzc.js
78
81
  dw/server/ui/assets/fsharp-C8Ef5oNN.js
79
82
  dw/server/ui/assets/go-C-y9NEjX.js
80
83
  dw/server/ui/assets/graphql-fmXr3nnJ.js
81
- dw/server/ui/assets/handlebars-BhleeD_A.js
84
+ dw/server/ui/assets/handlebars-Dbt47IUh.js
82
85
  dw/server/ui/assets/hcl-CpzslTdj.js
83
- dw/server/ui/assets/html-Bi_v7qEe.js
86
+ dw/server/ui/assets/html-C4QoqgED.js
84
87
  dw/server/ui/assets/html.worker-C93Ht9o9.js
85
- dw/server/ui/assets/htmlMode-c39yjrZR.js
86
- dw/server/ui/assets/index-CKHZ9ZUD.css
87
- dw/server/ui/assets/index-Do_ZJ3yS.js
88
+ dw/server/ui/assets/htmlMode-BQ_x-rQl.js
89
+ dw/server/ui/assets/index-BCNGRglb.css
90
+ dw/server/ui/assets/index-C14JKFhY.js
88
91
  dw/server/ui/assets/ini-sBoK_t0W.js
89
92
  dw/server/ui/assets/java-BEtHBSE6.js
90
- dw/server/ui/assets/javascript-BTuzJzdO.js
93
+ dw/server/ui/assets/javascript-yDlADdyl.js
91
94
  dw/server/ui/assets/json.worker-B2V3pomh.js
92
- dw/server/ui/assets/jsonMode-DY2FmMCP.js
95
+ dw/server/ui/assets/jsonMode-X4znCY4b.js
93
96
  dw/server/ui/assets/julia-Bri6UV-V.js
94
97
  dw/server/ui/assets/kotlin-BOotOW0E.js
95
98
  dw/server/ui/assets/less-B9JPFI3C.js
96
99
  dw/server/ui/assets/lexon-CfSJPG6W.js
97
- dw/server/ui/assets/liquid-iXwDEnQP.js
98
- dw/server/ui/assets/lspLanguageFeatures-CVXyTq9V.js
100
+ dw/server/ui/assets/liquid-CAaCQzwu.js
101
+ dw/server/ui/assets/lspLanguageFeatures-CTJIGm94.js
99
102
  dw/server/ui/assets/lua-CsQS60Ue.js
100
103
  dw/server/ui/assets/m3-D-oSqn_W.js
101
104
  dw/server/ui/assets/markdown-Cimd5fb3.js
102
- dw/server/ui/assets/mdx-QE70XlV0.js
105
+ dw/server/ui/assets/mdx-ByHLng1y.js
103
106
  dw/server/ui/assets/mips-CIPQ_RoX.js
104
107
  dw/server/ui/assets/monaco--ixms01u.css
105
- dw/server/ui/assets/monaco-CzCru1EC.js
108
+ dw/server/ui/assets/monaco-LJZc6TiS.js
106
109
  dw/server/ui/assets/msdax-DauUninz.js
107
110
  dw/server/ui/assets/mysql-SOo6toE5.js
108
111
  dw/server/ui/assets/objective-c-FvmIjYaQ.js
@@ -117,10 +120,10 @@ dw/server/ui/assets/powerquery-D3hlyOfw.js
117
120
  dw/server/ui/assets/powershell-DmHpPYUd.js
118
121
  dw/server/ui/assets/protobuf-C531GsRP.js
119
122
  dw/server/ui/assets/pug-Z5eAx3Zn.js
120
- dw/server/ui/assets/python-DxHS-kHp.js
123
+ dw/server/ui/assets/python-BCT_lvfW.js
121
124
  dw/server/ui/assets/qsharp-DkqhCAOL.js
122
125
  dw/server/ui/assets/r-BwWrilGY.js
123
- dw/server/ui/assets/razor-CT5Qrhwg.js
126
+ dw/server/ui/assets/razor-Bw9oTolL.js
124
127
  dw/server/ui/assets/redis-ClamHrr6.js
125
128
  dw/server/ui/assets/redshift-DT7zqm-g.js
126
129
  dw/server/ui/assets/restructuredtext-BYgofb2h.js
@@ -140,21 +143,22 @@ dw/server/ui/assets/swift-Bxkupp3x.js
140
143
  dw/server/ui/assets/systemverilog-Bz4Y3fRF.js
141
144
  dw/server/ui/assets/tcl-DISqw1ZD.js
142
145
  dw/server/ui/assets/ts.worker-D7T1-Ig5.js
143
- dw/server/ui/assets/tsMode-qXdDdnF1.js
146
+ dw/server/ui/assets/tsMode-BGvHTpYz.js
144
147
  dw/server/ui/assets/twig-De2hgUGE.js
145
- dw/server/ui/assets/typescript-BWfJagji.js
148
+ dw/server/ui/assets/typescript-mwKKpQXP.js
146
149
  dw/server/ui/assets/typespec-B8J7ngcE.js
147
150
  dw/server/ui/assets/vb-DV3o63ZY.js
148
151
  dw/server/ui/assets/wgsl-DpFanUEy.js
149
- dw/server/ui/assets/workers-C9vxrwoC.js
150
- dw/server/ui/assets/xml-DhJEwsDK.js
151
- dw/server/ui/assets/yaml-CiixMxAq.js
152
+ dw/server/ui/assets/workers-BOhWN9wu.js
153
+ dw/server/ui/assets/xml-DuQ6E6P7.js
154
+ dw/server/ui/assets/yaml-D7o22x0f.js
152
155
  dw/tasks/audio_utils.py
153
156
  dw/tasks/background_remover.py
154
157
  dw/tasks/borders.py
155
158
  dw/tasks/concat_videos.py
156
159
  dw/tasks/depth_estimator.py
157
160
  dw/tasks/diffusion_upscale.py
161
+ dw/tasks/dissolve_videos.py
158
162
  dw/tasks/format_messages.py
159
163
  dw/tasks/gather.py
160
164
  dw/tasks/image_to_text.py
@@ -166,6 +170,7 @@ dw/tasks/qr_code.py
166
170
  dw/tasks/restore_faces.py
167
171
  dw/tasks/rife_model.py
168
172
  dw/tasks/segment.py
173
+ dw/tasks/stabilize.py
169
174
  dw/tasks/task.py
170
175
  dw/tasks/tensor_image.py
171
176
  dw/tasks/text_generation.py
@@ -203,6 +208,7 @@ tests/test_device.py
203
208
  tests/test_device_helpers.py
204
209
  tests/test_device_portability.py
205
210
  tests/test_diffusion_upscale.py
211
+ tests/test_dissolve_videos.py
206
212
  tests/test_docs_links.py
207
213
  tests/test_events.py
208
214
  tests/test_examples.py
@@ -213,15 +219,18 @@ tests/test_image_utils.py
213
219
  tests/test_integration.py
214
220
  tests/test_interpolate_frames.py
215
221
  tests/test_introspection.py
222
+ tests/test_jobs_reused.py
216
223
  tests/test_list_images.py
217
224
  tests/test_mcp_authoring.py
218
225
  tests/test_mcp_catalog.py
219
226
  tests/test_mcp_client.py
220
227
  tests/test_mcp_diagnose.py
228
+ tests/test_mcp_main.py
221
229
  tests/test_mcp_media.py
222
230
  tests/test_mcp_models.py
223
231
  tests/test_mcp_prompts.py
224
232
  tests/test_mcp_server.py
233
+ tests/test_mix_audio.py
225
234
  tests/test_model_cache.py
226
235
  tests/test_modular_pipeline.py
227
236
  tests/test_offload_placement.py
@@ -233,6 +242,7 @@ tests/test_previous_results.py
233
242
  tests/test_prompt_parser.py
234
243
  tests/test_prompt_weighting.py
235
244
  tests/test_prompts.py
245
+ tests/test_recenter_crop.py
236
246
  tests/test_repl_commands.py
237
247
  tests/test_repl_ergonomics.py
238
248
  tests/test_repl_hierarchical.py
@@ -240,12 +250,19 @@ tests/test_repl_reorganization.py
240
250
  tests/test_repl_worker.py
241
251
  tests/test_resize_bucket.py
242
252
  tests/test_result.py
253
+ tests/test_result_output_naming.py
243
254
  tests/test_scheduler_config.py
244
255
  tests/test_schema.py
245
256
  tests/test_security.py
246
257
  tests/test_segment.py
258
+ tests/test_serve_main.py
247
259
  tests/test_server.py
260
+ tests/test_server_downloads.py
261
+ tests/test_server_info.py
262
+ tests/test_server_mcp.py
263
+ tests/test_stabilize.py
248
264
  tests/test_step.py
265
+ tests/test_step_cache.py
249
266
  tests/test_strip_exif_and_watermark.py
250
267
  tests/test_task.py
251
268
  tests/test_task_discovery.py
@@ -260,4 +277,5 @@ tests/test_video_utils.py
260
277
  tests/test_worker.py
261
278
  tests/test_worker_execute.py
262
279
  tests/test_workflow.py
280
+ tests/test_workflow_step_cache.py
263
281
  tests/test_workflow_trust.py
@@ -35,8 +35,7 @@ import torch
35
35
  from diffusers.utils import encode_video, is_av_available
36
36
 
37
37
  from .. import empty_device_cache
38
- from ..result import AudioVideo, get_artifact_list
39
- from ..security import validate_output_path
38
+ from ..result import AudioVideo, get_artifact_list, output_file_path
40
39
  from ..tasks.audio_utils import (
41
40
  as_channels_samples,
42
41
  equal_power_crossfade_join,
@@ -165,6 +164,11 @@ class SegmentedFrames:
165
164
  self.paths = list(paths)
166
165
  self.total_frames = total_frames
167
166
  self.keep_files = keep_files
167
+ # True once cleanup() has actually removed the files (not when
168
+ # keep_files skipped that) - a cached Result pointing at a cleaned-up
169
+ # SegmentedFrames must not be served to a later miss, since the files
170
+ # a replay would open are gone. See Result.retainable.
171
+ self.cleaned = False
168
172
 
169
173
  def __len__(self):
170
174
  """Chunk count - one per segment file."""
@@ -191,6 +195,7 @@ class SegmentedFrames:
191
195
  os.remove(path)
192
196
  except FileNotFoundError:
193
197
  pass
198
+ self.cleaned = True
194
199
 
195
200
 
196
201
  class SegmentSpill:
@@ -240,12 +245,14 @@ class SegmentSpill:
240
245
  chain leaves fully playable segments
241
246
  sample_rate: Sample rate of that audio
242
247
  """
243
- path = validate_output_path(
244
- os.path.join(
245
- self.output_dir,
246
- f"{self.base_name}.segment-{len(self.paths):03d}.mp4",
247
- ),
248
+ # A crashed or completed chain leaves segment files behind on disk,
249
+ # ready to salvage - and the per-wrapper iteration counter (base_name)
250
+ # restarts at 0 in a fresh process, so a rerun must dedupe through the
251
+ # same '-N' convention every other output goes through rather than
252
+ # silently overwriting them.
253
+ path = output_file_path(
248
254
  self.output_dir,
255
+ f"{self.base_name}.segment-{len(self.paths):03d}.mp4",
249
256
  )
250
257
 
251
258
  audio_track = None
@@ -6,6 +6,7 @@ from .arguments import (
6
6
  PREVIOUS_RESULT_PREFIX,
7
7
  build_objects,
8
8
  )
9
+ from .step_cache import reference_resolves_to
9
10
 
10
11
  logger = logging.getLogger("dw")
11
12
 
@@ -126,13 +127,14 @@ def get_previous_results(previous_results, previous_result_name):
126
127
  f"Previous result '{previous_result_name}' not found. Available results: {list(previous_results.keys())}"
127
128
  )
128
129
 
129
- # Find the longest known step name that is a prefix of the reference
130
- # followed by ".", and treat the remainder as the property name.
130
+ # Find the longest known step name the reference resolves to, and treat
131
+ # the remainder as the property name. The exact-match case returned
132
+ # above, so every name reaching here is a strict '<name>.' prefix.
131
133
  result_name = max(
132
134
  (
133
135
  name
134
136
  for name in previous_results
135
- if previous_result_name.startswith(name + ".")
137
+ if reference_resolves_to(previous_result_name, name)
136
138
  ),
137
139
  key=len,
138
140
  default=None,
@@ -279,7 +279,10 @@ class MemoryCommands:
279
279
  if not arg or arg == "?":
280
280
  print("\nMemory commands:")
281
281
  print(" memory show - Show the worker's GPU memory usage")
282
- print(" memory clear - Release cached models and empty the device cache")
282
+ print(
283
+ " memory clear - Release cached models, cached step results, "
284
+ "and empty the device cache"
285
+ )
283
286
  print()
284
287
  print("The worker process starts on the first 'workflow run', so there")
285
288
  print("is nothing to show before that. 'workflow restart' frees")
@@ -30,8 +30,28 @@ def output_file_path(output_dir, file_name):
30
30
  they are concatenated into a file name. Without this a name carrying a
31
31
  path separator would write outside the output directory, so the joined
32
32
  path goes through the same validator every other path in the engine does.
33
+
34
+ A rerun that would otherwise produce a name already on disk gets a
35
+ '-2', '-3', ... counter instead of silently overwriting it - the same
36
+ guarantee ComfyUI's SaveImage node makes by scanning its output
37
+ directory before every write.
33
38
  """
34
- return validate_output_path(os.path.join(output_dir, file_name), output_dir)
39
+ candidate = validate_output_path(os.path.join(output_dir, file_name), output_dir)
40
+ return _dedupe_existing_path(candidate)
41
+
42
+
43
+ def _dedupe_existing_path(path):
44
+ """Append an incrementing counter before the extension until `path` is free."""
45
+ if not os.path.exists(path):
46
+ return path
47
+
48
+ base, ext = os.path.splitext(path)
49
+ counter = 2
50
+ while True:
51
+ candidate = f"{base}-{counter}{ext}"
52
+ if not os.path.exists(candidate):
53
+ return candidate
54
+ counter += 1
35
55
 
36
56
 
37
57
  # Audio content types soundfile can write, mapped to their file extension and to any
@@ -142,6 +162,25 @@ class Result:
142
162
  logger.debug("Adding single result to result list")
143
163
  self.result_list.append(result)
144
164
 
165
+ @property
166
+ def retainable(self):
167
+ """Whether the step cache may keep this Result's result_list.
168
+
169
+ A chain step's save_segments spills each segment to disk and
170
+ replays it lazily through a SegmentedFrames; save() removes those
171
+ files once the video is written (SegmentedFrames.cleanup(), called
172
+ from save_audio_video below). A Result cached after that point would
173
+ point a later cache hit at files that are already gone, so a
174
+ result_list holding such an artifact is not retainable - checked by
175
+ duck-typed attribute rather than isinstance, so this module need not
176
+ import pipeline_processors.chain.
177
+ """
178
+ for result in self.result_list:
179
+ frames = getattr(result, "frames", None)
180
+ if getattr(frames, "cleaned", False):
181
+ return False
182
+ return True
183
+
145
184
  def get_artifacts(self):
146
185
  """Retrieve all artifacts from stored results.
147
186
 
@@ -10,6 +10,7 @@ not to the network. Interactive API docs at http://127.0.0.1:8765/docs
10
10
  import argparse
11
11
  import multiprocessing
12
12
  import os
13
+ import sys
13
14
 
14
15
  # Spawn start method before anything touches multiprocessing (CUDA/MPS)
15
16
  if multiprocessing.get_start_method(allow_none=True) != "spawn":
@@ -64,10 +65,36 @@ def main():
64
65
  "anything can submit jobs to (including an MCP client) should "
65
66
  "stay untrusted.",
66
67
  )
68
+ parser.add_argument(
69
+ "--mcp",
70
+ action="store_true",
71
+ default=False,
72
+ help="Also serve the MCP tool surface at /mcp over Streamable HTTP, "
73
+ "behind the same token as /api, so an agent on another machine "
74
+ "needs no local install (`claude mcp add --transport http dw "
75
+ "http://<host>:<port>/mcp --header 'Authorization: Bearer <token>'`). "
76
+ "Refused on a non-loopback --host without a token.",
77
+ )
67
78
  args = parser.parse_args()
68
79
 
69
80
  token = args.token or os.environ.get("DW_API_TOKEN") or None
70
81
 
82
+ from .server.app import LOOPBACK_HOSTS
83
+
84
+ # A hard error, where the REST-only case below is a warning: an MCP
85
+ # endpoint can author and run workflows, and unlike the web UI there is
86
+ # no page to paste a token into. Raised before startup() and before the
87
+ # worker subprocess is ever spawned.
88
+ if args.mcp and args.host not in LOOPBACK_HOSTS and not token:
89
+ print(
90
+ f"dw-serve: --mcp on {args.host} needs a token. An MCP endpoint "
91
+ "can author and run workflows, and unlike the web UI there is "
92
+ "no page to type a token into - pass --token or set "
93
+ "DW_API_TOKEN, or bind to 127.0.0.1.",
94
+ file=sys.stderr,
95
+ )
96
+ raise SystemExit(2)
97
+
71
98
  # Set before create_app / before the worker subprocess is ever spawned -
72
99
  # 'spawn' launches a fresh interpreter that inherits this environment
73
100
  # variable, so the job runner sees the same trust choice the API does
@@ -102,8 +129,6 @@ def main():
102
129
 
103
130
  logger = logging.getLogger("dw")
104
131
 
105
- from .server.app import LOOPBACK_HOSTS
106
-
107
132
  if args.host not in LOOPBACK_HOSTS and not token:
108
133
  logger.warning(
109
134
  "Binding to %s with no API token configured (--token or "
@@ -126,10 +151,17 @@ def main():
126
151
  prompt_dir=prompt_dir,
127
152
  host=args.host,
128
153
  token=token,
154
+ mcp=args.mcp,
155
+ port=args.port,
129
156
  )
130
157
  ui = " - UI at /" if default_ui_dir() else ""
158
+ mcp = " - MCP at /mcp" if args.mcp else ""
131
159
  print(
132
- f"diffusers-workflow server on http://{args.host}:{args.port} (docs at /docs{ui})"
160
+ f"diffusers-workflow server on http://{args.host}:{args.port}"
161
+ f" (docs at /docs{ui}{mcp})",
162
+ # stdout is a pipe under systemd or nohup, where block buffering
163
+ # would otherwise hold this line back until shutdown
164
+ flush=True,
133
165
  )
134
166
  uvicorn.run(app, host=args.host, port=args.port, log_level=args.log_level.lower())
135
167