diffusers-workflow 0.14.0__tar.gz → 0.16.0__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 (667) hide show
  1. {diffusers_workflow-0.14.0/diffusers_workflow.egg-info → diffusers_workflow-0.16.0}/PKG-INFO +2 -1
  2. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0/diffusers_workflow.egg-info}/PKG-INFO +2 -1
  3. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/diffusers_workflow.egg-info/SOURCES.txt +47 -22
  4. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/diffusers_workflow.egg-info/requires.txt +1 -0
  5. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/acceleration_warnings.py +37 -1
  6. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/adapter_compatibility.py +16 -1
  7. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/argument_media.py +2 -2
  8. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/devices.py +21 -4
  9. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/ACCELERATION.md +43 -5
  10. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/ARCHITECTURE.md +16 -7
  11. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/DEPENDENCIES.md +3 -1
  12. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/MCP.md +9 -7
  13. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/QUANTIZATION.md +2 -0
  14. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/RECIPES_24GB.md +1 -1
  15. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/RELEASING.md +198 -0
  16. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/SECURITY.md +33 -1
  17. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/SECURITY_QUICKREF.md +1 -0
  18. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/SERVER.md +26 -7
  19. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/TASKS.md +157 -18
  20. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/WORKFLOW_GUIDE.md +448 -17
  21. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/hold_audio.py +52 -13
  22. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/introspection.py +4 -1
  23. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/locations.py +46 -51
  24. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/media.py +27 -6
  25. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/media_types.py +53 -0
  26. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/outbound.py +10 -5
  27. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/output_extraction.py +50 -2
  28. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/components.py +44 -149
  29. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/h3_hold.py +18 -0
  30. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/h3_hold_steps.py +83 -13
  31. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/h3_rules.py +220 -5
  32. diffusers_workflow-0.16.0/dw/pipeline_processors/h3_tiles.py +366 -0
  33. diffusers_workflow-0.16.0/dw/pipeline_processors/mag_calibration.py +158 -0
  34. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/pipeline.py +32 -4
  35. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/progress.py +22 -1
  36. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/plan.py +28 -205
  37. diffusers_workflow-0.16.0/dw/plan_downloads.py +346 -0
  38. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/roles.py +17 -7
  39. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/script_lines.py +35 -6
  40. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/security.py +52 -0
  41. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/serve.py +8 -2
  42. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/admission.py +40 -25
  43. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/api_models.py +16 -0
  44. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/deps.py +13 -1
  45. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/job_history.py +127 -110
  46. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/job_results.py +6 -0
  47. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/jobs.py +15 -1
  48. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/observed_cost.py +13 -3
  49. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/outputs.py +48 -6
  50. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/routes/assets.py +0 -7
  51. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/routes/gallery.py +16 -36
  52. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/routes/jobs.py +38 -3
  53. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/routes/media.py +9 -11
  54. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/routes/system.py +4 -1
  55. diffusers_workflow-0.14.0/dw/server/ui/assets/cssMode-BM_j_5VW.js → diffusers_workflow-0.16.0/dw/server/ui/assets/cssMode-Cx99RWkL.js +1 -1
  56. diffusers_workflow-0.14.0/dw/server/ui/assets/editor.api-CEPMtaHf.js → diffusers_workflow-0.16.0/dw/server/ui/assets/editor.api-jKhYFhrF.js +1 -1
  57. diffusers_workflow-0.14.0/dw/server/ui/assets/freemarker2-BVTL0E_v.js → diffusers_workflow-0.16.0/dw/server/ui/assets/freemarker2-Cr_kdwwJ.js +1 -1
  58. diffusers_workflow-0.14.0/dw/server/ui/assets/handlebars-DN1SqR7g.js → diffusers_workflow-0.16.0/dw/server/ui/assets/handlebars-CnbOycVf.js +1 -1
  59. diffusers_workflow-0.14.0/dw/server/ui/assets/html-BYdDV855.js → diffusers_workflow-0.16.0/dw/server/ui/assets/html-vCIOVoPc.js +1 -1
  60. diffusers_workflow-0.14.0/dw/server/ui/assets/htmlMode-CktrpppH.js → diffusers_workflow-0.16.0/dw/server/ui/assets/htmlMode-B5ESZlHK.js +1 -1
  61. diffusers_workflow-0.16.0/dw/server/ui/assets/index-Bm_jBlG4.css +1 -0
  62. diffusers_workflow-0.16.0/dw/server/ui/assets/index-DIXj1Pp3.js +65 -0
  63. diffusers_workflow-0.14.0/dw/server/ui/assets/javascript-DvSbrt_n.js → diffusers_workflow-0.16.0/dw/server/ui/assets/javascript-DpV2UaWD.js +1 -1
  64. diffusers_workflow-0.14.0/dw/server/ui/assets/jsonMode-CXzErKKD.js → diffusers_workflow-0.16.0/dw/server/ui/assets/jsonMode-DaGlZZy1.js +1 -1
  65. diffusers_workflow-0.14.0/dw/server/ui/assets/liquid-BRCKFwoi.js → diffusers_workflow-0.16.0/dw/server/ui/assets/liquid-Ds835QKV.js +1 -1
  66. diffusers_workflow-0.14.0/dw/server/ui/assets/lspLanguageFeatures-njtWwPtu.js → diffusers_workflow-0.16.0/dw/server/ui/assets/lspLanguageFeatures-Cd9OxrIO.js +1 -1
  67. diffusers_workflow-0.14.0/dw/server/ui/assets/mdx-BUaukvEP.js → diffusers_workflow-0.16.0/dw/server/ui/assets/mdx-BozOHFIi.js +1 -1
  68. diffusers_workflow-0.14.0/dw/server/ui/assets/monaco-gga5ZcVz.js → diffusers_workflow-0.16.0/dw/server/ui/assets/monaco-673w9Wwq.js +4 -4
  69. diffusers_workflow-0.14.0/dw/server/ui/assets/python-BlUYF5iw.js → diffusers_workflow-0.16.0/dw/server/ui/assets/python-D_HjE-WC.js +1 -1
  70. diffusers_workflow-0.14.0/dw/server/ui/assets/razor-C_60BEWv.js → diffusers_workflow-0.16.0/dw/server/ui/assets/razor-DjEZAQZw.js +1 -1
  71. diffusers_workflow-0.14.0/dw/server/ui/assets/tsMode-DZ39FkiR.js → diffusers_workflow-0.16.0/dw/server/ui/assets/tsMode-B3g7-HAd.js +1 -1
  72. diffusers_workflow-0.14.0/dw/server/ui/assets/typescript-DRuDz-v_.js → diffusers_workflow-0.16.0/dw/server/ui/assets/typescript-Bq3yLFs6.js +1 -1
  73. diffusers_workflow-0.14.0/dw/server/ui/assets/workers-BWXmwymL.js → diffusers_workflow-0.16.0/dw/server/ui/assets/workers-Jt2I7Jya.js +1 -1
  74. diffusers_workflow-0.14.0/dw/server/ui/assets/xml-CBshcw4i.js → diffusers_workflow-0.16.0/dw/server/ui/assets/xml-BD0Sm95a.js +1 -1
  75. diffusers_workflow-0.14.0/dw/server/ui/assets/yaml-D1ZImLMB.js → diffusers_workflow-0.16.0/dw/server/ui/assets/yaml-BSnko3ic.js +1 -1
  76. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/index.html +2 -2
  77. diffusers_workflow-0.16.0/dw/sparse_attention.py +669 -0
  78. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/step_cache.py +24 -2
  79. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/task_domains.py +6 -1
  80. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/task_problems.py +4 -3
  81. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/assess.py +174 -16
  82. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/audio_dynamics.py +112 -3
  83. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/audio_transcription.py +26 -3
  84. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/background_remover.py +12 -1
  85. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/depth_estimator.py +27 -2
  86. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/diffusion_upscale.py +18 -2
  87. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/face_track.py +18 -1
  88. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/h3_latent_upscale.py +93 -33
  89. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/image_to_text.py +1 -0
  90. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/image_utils.py +49 -9
  91. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/interpolate_frames.py +18 -2
  92. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/judge.py +1 -0
  93. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/model_handlers.py +96 -9
  94. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/pair_audio.py +17 -6
  95. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/registry.py +57 -0
  96. diffusers_workflow-0.16.0/dw/tasks/remove_object.py +201 -0
  97. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/restore_faces.py +39 -2
  98. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/script_check.py +424 -231
  99. diffusers_workflow-0.16.0/dw/tasks/script_take.py +223 -0
  100. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/segment.py +46 -9
  101. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/speech_generation.py +71 -20
  102. diffusers_workflow-0.16.0/dw/tasks/text_generation.py +494 -0
  103. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/upscale.py +19 -1
  104. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/video_handlers.py +1 -0
  105. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/video_utils.py +9 -28
  106. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/voice_attribution.py +119 -5
  107. diffusers_workflow-0.16.0/dw/tasks/weights.py +90 -0
  108. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/trust.py +33 -0
  109. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/validation.py +11 -1
  110. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/vram_estimate.py +121 -7
  111. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/vram_inheritance.py +105 -16
  112. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/worker.py +7 -0
  113. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/worker_manager.py +13 -0
  114. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/worker_protocol.py +16 -0
  115. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/workflow_schema.json +28 -2
  116. diffusers_workflow-0.16.0/dw/workflows/flux3_klein_upsample.json +33 -0
  117. diffusers_workflow-0.16.0/dw/workflows/flux3_klein_upsample_edit.json +51 -0
  118. diffusers_workflow-0.16.0/dw/workflows/h3_context_ir.json +57 -0
  119. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/assets.py +7 -4
  120. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/catalog.py +2 -2
  121. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/client.py +5 -1
  122. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/tools_authoring.py +1 -1
  123. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/tools_catalog.py +1 -1
  124. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/tools_media.py +3 -3
  125. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/workspaces.py +5 -4
  126. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/pyproject.toml +5 -1
  127. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_admission.py +216 -1
  128. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_api_contract.py +8 -3
  129. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_audio_utils.py +68 -0
  130. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_cache_blocks.py +17 -17
  131. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_catalog_structure.py +28 -8
  132. diffusers_workflow-0.16.0/tests/test_chain_h3_native.py +210 -0
  133. diffusers_workflow-0.16.0/tests/test_dependencies_declared.py +9 -0
  134. diffusers_workflow-0.16.0/tests/test_flux3_catalog.py +188 -0
  135. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_forget_workspace_history.py +21 -9
  136. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_gallery_roles.py +77 -6
  137. diffusers_workflow-0.16.0/tests/test_guide_pointers.py +132 -0
  138. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_h3_context_ir.py +14 -0
  139. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_h3_hold_audio.py +43 -0
  140. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_h3_latent_upscale.py +93 -9
  141. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_h3_refine.py +214 -0
  142. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_h3_rules.py +56 -0
  143. diffusers_workflow-0.16.0/tests/test_h3_sparse_defaults.py +45 -0
  144. diffusers_workflow-0.16.0/tests/test_h3_tiles.py +411 -0
  145. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_h3_upscaler_source.py +2 -1
  146. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_h3_vram_ceiling.py +16 -0
  147. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_inherited_cost.py +57 -9
  148. diffusers_workflow-0.16.0/tests/test_job_history_parity.py +58 -0
  149. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_locations.py +82 -0
  150. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_lora_disable.py +12 -0
  151. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_client.py +15 -2
  152. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_server.py +20 -150
  153. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_modular_output_properties.py +45 -2
  154. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_modular_progress.py +26 -0
  155. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_notes_api.py +31 -0
  156. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_observed_cost.py +22 -2
  157. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_outbound.py +53 -2
  158. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_pipeline_components.py +71 -0
  159. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_plan.py +213 -34
  160. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_plugin_skills.py +64 -5
  161. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_reference_limits.py +6 -1
  162. diffusers_workflow-0.16.0/tests/test_remove_object.py +353 -0
  163. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_roles.py +20 -1
  164. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_script_check.py +297 -12
  165. diffusers_workflow-0.16.0/tests/test_seam_look.py +254 -0
  166. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_security_ssrf.py +22 -1
  167. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_security_trust_gate.py +100 -0
  168. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_segment.py +58 -2
  169. diffusers_workflow-0.16.0/tests/test_separate_stems.py +212 -0
  170. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_serve_main.py +47 -0
  171. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_server.py +97 -23
  172. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_server_jobs.py +120 -5
  173. diffusers_workflow-0.16.0/tests/test_sparse_attention_backends.py +111 -0
  174. diffusers_workflow-0.16.0/tests/test_sparse_attention_processor.py +597 -0
  175. diffusers_workflow-0.16.0/tests/test_sparse_attention_tiles.py +63 -0
  176. diffusers_workflow-0.16.0/tests/test_sparse_attention_wiring.py +699 -0
  177. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_step_cache.py +51 -30
  178. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_task_domains.py +15 -0
  179. diffusers_workflow-0.16.0/tests/test_task_file_weights.py +340 -0
  180. diffusers_workflow-0.16.0/tests/test_task_weights.py +506 -0
  181. diffusers_workflow-0.16.0/tests/test_text_generation.py +734 -0
  182. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_validation.py +52 -0
  183. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_vram_estimate.py +106 -1
  184. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_vram_inheritance.py +114 -3
  185. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_worker_execute.py +33 -0
  186. diffusers_workflow-0.16.0/tests/test_zimage_vram.py +61 -0
  187. diffusers_workflow-0.14.0/dw/server/ui/assets/index-Dd1gXnAH.js +0 -64
  188. diffusers_workflow-0.14.0/dw/server/ui/assets/index-PRSQwOeN.css +0 -1
  189. diffusers_workflow-0.14.0/dw/tasks/text_generation.py +0 -169
  190. diffusers_workflow-0.14.0/dw/workflows/h3_context_ir.json +0 -57
  191. diffusers_workflow-0.14.0/tests/test_separate_stems.py +0 -105
  192. diffusers_workflow-0.14.0/tests/test_text_generation.py +0 -340
  193. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/LICENSE +0 -0
  194. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/MANIFEST.in +0 -0
  195. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/README.md +0 -0
  196. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/diffusers_workflow.egg-info/dependency_links.txt +0 -0
  197. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/diffusers_workflow.egg-info/entry_points.txt +0 -0
  198. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/diffusers_workflow.egg-info/top_level.txt +0 -0
  199. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/__init__.py +0 -0
  200. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/argument_warnings.py +0 -0
  201. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/arguments.py +0 -0
  202. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/assessment_rules.py +0 -0
  203. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/assets.py +0 -0
  204. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/audio_qc.py +0 -0
  205. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/cache_blocks.json +0 -0
  206. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/cache_blocks.py +0 -0
  207. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/community_pipelines/pipeline_flux_rf_inversion.py +0 -0
  208. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/community_pipelines/pipeline_ltx2_refine.py +0 -0
  209. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/content_types.py +0 -0
  210. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/cost_scaling.py +0 -0
  211. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/disk_caches.py +0 -0
  212. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/dissolve_frame_errors.py +0 -0
  213. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/AGENT_LOOP.md +0 -0
  214. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/IP_ADAPTER.md +0 -0
  215. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/LORAS.md +0 -0
  216. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/PROMPT_WEIGHTING.md +0 -0
  217. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/REMOTE.md +0 -0
  218. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/TESTING.md +0 -0
  219. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/WORKER_GUIDE.md +0 -0
  220. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/docs/WORKSPACES.md +0 -0
  221. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/download_watch.py +0 -0
  222. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/dsp.py +0 -0
  223. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/elision.py +0 -0
  224. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/events.py +0 -0
  225. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/for_each.py +0 -0
  226. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/guides.py +0 -0
  227. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/host_memory.py +0 -0
  228. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/host_memory_projection.py +0 -0
  229. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/hub_cache.py +0 -0
  230. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/kernel_availability.py +0 -0
  231. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/library.py +0 -0
  232. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/log_setup.py +0 -0
  233. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/lora_catalog.py +0 -0
  234. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/lora_catalog_schema.json +0 -0
  235. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/lora_hub.py +0 -0
  236. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/media_compare.py +0 -0
  237. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/media_frames.py +0 -0
  238. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/notes.py +0 -0
  239. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/path_redaction.py +0 -0
  240. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_ownership.py +0 -0
  241. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/adapters.py +0 -0
  242. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/chain.py +0 -0
  243. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/config_objects.py +0 -0
  244. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/h3_guide_steps.py +0 -0
  245. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/h3_guides.py +0 -0
  246. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/placement.py +0 -0
  247. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/remote.py +0 -0
  248. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/pipeline_processors/timing.py +0 -0
  249. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/previous_results.py +0 -0
  250. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/probe_paths.py +0 -0
  251. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/prompt_schema.json +0 -0
  252. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/prompt_weighting.py +0 -0
  253. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/prompts.py +0 -0
  254. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/quantized_cache.py +0 -0
  255. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/realize.py +0 -0
  256. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/reference_limits.py +0 -0
  257. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/reference_names.py +0 -0
  258. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/references.py +0 -0
  259. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/result.py +0 -0
  260. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/run.py +0 -0
  261. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/runs.py +0 -0
  262. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/scalar_result_validation.py +0 -0
  263. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/schema.py +0 -0
  264. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/__init__.py +0 -0
  265. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/api_models_base.py +0 -0
  266. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/api_models_library.py +0 -0
  267. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/app.py +0 -0
  268. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/assess.py +0 -0
  269. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/catalog.py +0 -0
  270. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/catalog_shape.py +0 -0
  271. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/dispatch.py +0 -0
  272. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/enhancers.py +0 -0
  273. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/exports.py +0 -0
  274. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/guides.py +0 -0
  275. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/host_ram_need.py +0 -0
  276. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/http_security.py +0 -0
  277. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/inline_media.py +0 -0
  278. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/job_record.py +0 -0
  279. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/mcp_mount.py +0 -0
  280. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/netinfo.py +0 -0
  281. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/pool.py +0 -0
  282. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/routes/__init__.py +0 -0
  283. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/routes/files.py +0 -0
  284. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/routes/library.py +0 -0
  285. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/routes/loras.py +0 -0
  286. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/sysinfo.py +0 -0
  287. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/abap-08VXUWAP.js +0 -0
  288. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/apex-BWPQTe0t.js +0 -0
  289. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/azcli-Bc_sGQ0U.js +0 -0
  290. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/bat-i0X4ZdIN.js +0 -0
  291. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/bicep-B5-_aFwp.js +0 -0
  292. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/cameligo-DMUM7wLl.js +0 -0
  293. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/clojure-Cm7r79vr.js +0 -0
  294. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/codicon-DF1abBS2.ttf +0 -0
  295. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/coffee-Ba7i2nA0.js +0 -0
  296. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/cpp-C7h46wYY.js +0 -0
  297. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/csharp-BKxtCVv1.js +0 -0
  298. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/csp-bTuwJoIa.js +0 -0
  299. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/css-DIMkf-bt.js +0 -0
  300. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/css.worker-C6lDtRpF.js +0 -0
  301. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/cypher-CVaqCwHa.js +0 -0
  302. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/dart-onAF5SnQ.js +0 -0
  303. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/dockerfile-DZFCIeNp.js +0 -0
  304. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/ecl-D05T4iGw.js +0 -0
  305. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/editor-DjpsE8to.css +0 -0
  306. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/editor.worker-BmdWdrHZ.js +0 -0
  307. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/elixir-6RTg0lbw.js +0 -0
  308. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/flow9-C5_-GSwl.js +0 -0
  309. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/fsharp-C8Ef5oNN.js +0 -0
  310. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/go-C-y9NEjX.js +0 -0
  311. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/graphql-fmXr3nnJ.js +0 -0
  312. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/hcl-CpzslTdj.js +0 -0
  313. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/html.worker-C5yZDBHz.js +0 -0
  314. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/ini-sBoK_t0W.js +0 -0
  315. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/java-BEtHBSE6.js +0 -0
  316. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/json.worker-DdeUAmHa.js +0 -0
  317. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/julia-Bri6UV-V.js +0 -0
  318. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/kotlin-BOotOW0E.js +0 -0
  319. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/less-B9JPFI3C.js +0 -0
  320. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/lexon-CfSJPG6W.js +0 -0
  321. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/lua-CsQS60Ue.js +0 -0
  322. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/m3-D-oSqn_W.js +0 -0
  323. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/markdown-Cimd5fb3.js +0 -0
  324. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/mips-CIPQ_RoX.js +0 -0
  325. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/monaco-n7clI0si.css +0 -0
  326. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/msdax-DauUninz.js +0 -0
  327. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/mysql-SOo6toE5.js +0 -0
  328. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/objective-c-FvmIjYaQ.js +0 -0
  329. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/pascal-DrH0SRf2.js +0 -0
  330. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/pascaligo-D-ptJ9y-.js +0 -0
  331. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/perl-oz_6vUea.js +0 -0
  332. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/pgsql-DTj74zXo.js +0 -0
  333. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/php-nr791fC2.js +0 -0
  334. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/pla-CopQ2nXW.js +0 -0
  335. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/postiats-43DmfD33.js +0 -0
  336. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/powerquery-D3hlyOfw.js +0 -0
  337. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/powershell-DmHpPYUd.js +0 -0
  338. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/protobuf-C531GsRP.js +0 -0
  339. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/pug-Z5eAx3Zn.js +0 -0
  340. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/qsharp-DkqhCAOL.js +0 -0
  341. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/r-BwWrilGY.js +0 -0
  342. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/redis-ClamHrr6.js +0 -0
  343. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/redshift-DT7zqm-g.js +0 -0
  344. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/restructuredtext-BYgofb2h.js +0 -0
  345. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/ruby-DezsRK8O.js +0 -0
  346. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/rust-DdL9SqIa.js +0 -0
  347. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/sb-CcwsVR0C.js +0 -0
  348. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/scala-DHpiXF5c.js +0 -0
  349. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/scheme-BeGwcela.js +0 -0
  350. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/scss-gp-XZpBa.js +0 -0
  351. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/shell-CC2rA5mh.js +0 -0
  352. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/solidity-BEEn4gHE.js +0 -0
  353. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/sophia-CRfGWb83.js +0 -0
  354. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/sparql-D_Lu-MrJ.js +0 -0
  355. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/sql-NEE52Syq.js +0 -0
  356. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/st-DbInun42.js +0 -0
  357. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/swift-Bxkupp3x.js +0 -0
  358. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +0 -0
  359. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/tcl-DISqw1ZD.js +0 -0
  360. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/ts.worker-DGGa2mF8.js +0 -0
  361. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/twig-De2hgUGE.js +0 -0
  362. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/typespec-B8J7ngcE.js +0 -0
  363. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/vb-DV3o63ZY.js +0 -0
  364. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/ui/assets/wgsl-DpFanUEy.js +0 -0
  365. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/updater.py +0 -0
  366. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/server/worker_memory.py +0 -0
  367. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/settings.py +0 -0
  368. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/shot_span_preflight.py +0 -0
  369. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/shots.py +0 -0
  370. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/slice_preflight.py +0 -0
  371. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/step.py +0 -0
  372. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/step_value_checks.py +0 -0
  373. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/subfolders.py +0 -0
  374. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/audio_handlers.py +0 -0
  375. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/audio_utils.py +0 -0
  376. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/beats.py +0 -0
  377. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/borders.py +0 -0
  378. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/compose_text.py +0 -0
  379. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/concat_videos.py +0 -0
  380. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/cuts.py +0 -0
  381. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/dissolve_videos.py +0 -0
  382. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/finish.py +0 -0
  383. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/finish_handlers.py +0 -0
  384. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/fit.py +0 -0
  385. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/format_messages.py +0 -0
  386. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/gather.py +0 -0
  387. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/grade.py +0 -0
  388. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/h3_latent_upscaler_model.py +0 -0
  389. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/image_ops.py +0 -0
  390. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/join_into_song.py +0 -0
  391. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/joins.py +0 -0
  392. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/loop_bed.py +0 -0
  393. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/lut.py +0 -0
  394. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/measure_sync.py +0 -0
  395. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/model_cache.py +0 -0
  396. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/qr_code.py +0 -0
  397. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/rife_model.py +0 -0
  398. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/select.py +0 -0
  399. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/stabilize.py +0 -0
  400. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/task.py +0 -0
  401. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/tensor_image.py +0 -0
  402. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/text_sections.py +0 -0
  403. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/trim.py +0 -0
  404. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/windows.py +0 -0
  405. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/tasks/zoe_depth.py +0 -0
  406. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/test.py +0 -0
  407. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/type_helpers.py +0 -0
  408. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/type_references.py +0 -0
  409. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/validate.py +0 -0
  410. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/variable_constraints.py +0 -0
  411. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/variables.py +0 -0
  412. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/video_extensions.py +0 -0
  413. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/video_size_errors.py +0 -0
  414. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/window_count_errors.py +0 -0
  415. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/workflow.py +0 -0
  416. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/workflow_run.py +0 -0
  417. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/workflows/test.json +0 -0
  418. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/workspace.py +0 -0
  419. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/workspace_copy.py +0 -0
  420. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw/writers.py +0 -0
  421. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/__init__.py +0 -0
  422. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/__main__.py +0 -0
  423. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/authoring.py +0 -0
  424. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/confine.py +0 -0
  425. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/diagnose.py +0 -0
  426. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/exports.py +0 -0
  427. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/guides.py +0 -0
  428. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/loras.py +0 -0
  429. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/media.py +0 -0
  430. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/models.py +0 -0
  431. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/prompts.py +0 -0
  432. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/server.py +0 -0
  433. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/dw_mcp/tools_jobs.py +0 -0
  434. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/setup.cfg +0 -0
  435. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_admission_capacity.py +0 -0
  436. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_analyze_beats.py +0 -0
  437. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_arch_metrics.py +0 -0
  438. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_arch_report.py +0 -0
  439. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_architecture_map.py +0 -0
  440. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_argument_updates.py +0 -0
  441. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_arguments.py +0 -0
  442. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_assemble_and_score_target_lufs.py +0 -0
  443. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_assess.py +0 -0
  444. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_assessment_rules.py +0 -0
  445. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_assets.py +0 -0
  446. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_attention_backend_trace.py +0 -0
  447. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_attention_slicing.py +0 -0
  448. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_best_of_n_template.py +0 -0
  449. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_borders.py +0 -0
  450. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_cache_stats.py +0 -0
  451. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_catalog_shape.py +0 -0
  452. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_catalog_speed_defaults.py +0 -0
  453. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_chain.py +0 -0
  454. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_ci_config.py +0 -0
  455. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_cli.py +0 -0
  456. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_compare_route.py +0 -0
  457. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_component_name_errors.py +0 -0
  458. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_component_pruning.py +0 -0
  459. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_component_type_errors.py +0 -0
  460. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_compose_text.py +0 -0
  461. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_concat_videos.py +0 -0
  462. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_config_objects.py +0 -0
  463. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_configuration_schema.py +0 -0
  464. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_content_types.py +0 -0
  465. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_depth_estimator.py +0 -0
  466. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_device.py +0 -0
  467. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_device_helpers.py +0 -0
  468. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_device_portability.py +0 -0
  469. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_dialogue_short_voices.py +0 -0
  470. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_diffusion_upscale.py +0 -0
  471. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_disk_caches.py +0 -0
  472. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_dissolve_frame_errors.py +0 -0
  473. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_dissolve_videos.py +0 -0
  474. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_docs_links.py +0 -0
  475. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_download_watch.py +0 -0
  476. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_dsp.py +0 -0
  477. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_elision.py +0 -0
  478. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_events.py +0 -0
  479. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_examples.py +0 -0
  480. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_face_track.py +0 -0
  481. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_faststart.py +0 -0
  482. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_find_loop_bed.py +0 -0
  483. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_finish.py +0 -0
  484. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_fit_templates.py +0 -0
  485. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_fit_to_model.py +0 -0
  486. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_for_each.py +0 -0
  487. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_gather.py +0 -0
  488. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_grade.py +0 -0
  489. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_guide_chain_validation.py +0 -0
  490. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_guides_validation.py +0 -0
  491. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_h3_adapters.py +0 -0
  492. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_h3_guides.py +0 -0
  493. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_h3_schedule.py +0 -0
  494. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_hf_placement.py +0 -0
  495. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_host_memory.py +0 -0
  496. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_host_memory_projection.py +0 -0
  497. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_host_ram_need.py +0 -0
  498. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_hub_cache.py +0 -0
  499. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_image_ops.py +0 -0
  500. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_image_to_text.py +0 -0
  501. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_image_utils.py +0 -0
  502. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_inductor_cache_default.py +0 -0
  503. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_ingredients_grid.py +0 -0
  504. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_integration.py +0 -0
  505. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_interpolate_frames.py +0 -0
  506. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_introspection.py +0 -0
  507. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_job_history_device.py +0 -0
  508. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_job_history_wal.py +0 -0
  509. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_job_progress.py +0 -0
  510. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_job_warnings.py +0 -0
  511. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_jobs_listing.py +0 -0
  512. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_jobs_reused.py +0 -0
  513. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_join_into_song.py +0 -0
  514. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_join_windows.py +0 -0
  515. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_judge.py +0 -0
  516. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_kernel_availability.py +0 -0
  517. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_library_path.py +0 -0
  518. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_library_sources.py +0 -0
  519. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_list_images.py +0 -0
  520. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_lora_alpha.py +0 -0
  521. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_lora_catalog.py +0 -0
  522. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_lora_hub.py +0 -0
  523. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_lora_library.py +0 -0
  524. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_ltx2_diffusion_decode.py +0 -0
  525. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_ltx2_extend_clip.py +0 -0
  526. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_ltx2_ic_loras.py +0 -0
  527. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_ltx2_refine_pipeline.py +0 -0
  528. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_ltx_prompt_library.py +0 -0
  529. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_lut.py +0 -0
  530. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_assets.py +0 -0
  531. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_authoring.py +0 -0
  532. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_catalog.py +0 -0
  533. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_confine.py +0 -0
  534. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_diagnose.py +0 -0
  535. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_exports.py +0 -0
  536. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_guides.py +0 -0
  537. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_loras.py +0 -0
  538. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_main.py +0 -0
  539. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_media.py +0 -0
  540. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_models.py +0 -0
  541. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_prompts.py +0 -0
  542. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_twins.py +0 -0
  543. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mcp_workspaces.py +0 -0
  544. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_measure_sync.py +0 -0
  545. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_media_audio.py +0 -0
  546. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_media_compare.py +0 -0
  547. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_media_decode_threads.py +0 -0
  548. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_media_frames.py +0 -0
  549. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_media_info.py +0 -0
  550. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_media_layering.py +0 -0
  551. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mix_audio.py +0 -0
  552. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_model_cache.py +0 -0
  553. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_modular_pipeline.py +0 -0
  554. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mps_fallback_warning.py +0 -0
  555. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_mps_rope_precision.py +0 -0
  556. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_notes.py +0 -0
  557. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_notes_bookkeeping.py +0 -0
  558. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_null_media.py +0 -0
  559. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_numeric_coercion.py +0 -0
  560. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_offload_placement.py +0 -0
  561. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_output_references.py +0 -0
  562. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_pair_audio.py +0 -0
  563. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_pair_audio_fit.py +0 -0
  564. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_parallel_loading_default.py +0 -0
  565. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_path_redaction.py +0 -0
  566. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_phase_events.py +0 -0
  567. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_pipeline_caching.py +0 -0
  568. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_plan_cuts.py +0 -0
  569. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_prepare_pipeline.py +0 -0
  570. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_previous_result_walker_parity.py +0 -0
  571. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_previous_results.py +0 -0
  572. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_prompt_library.py +0 -0
  573. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_prompt_parser.py +0 -0
  574. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_prompt_references.py +0 -0
  575. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_prompt_weighting.py +0 -0
  576. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_prompts.py +0 -0
  577. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_quantized_cache.py +0 -0
  578. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_read_frame_range.py +0 -0
  579. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_real_models.py +0 -0
  580. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_realize.py +0 -0
  581. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_recenter_crop.py +0 -0
  582. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_reference_names.py +0 -0
  583. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_reference_skip_sets.py +0 -0
  584. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_references.py +0 -0
  585. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_rerun_lineage.py +0 -0
  586. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_rerun_new_seed.py +0 -0
  587. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_resize_bucket.py +0 -0
  588. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_restore_faces_helper_cache.py +0 -0
  589. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_restore_faces_video.py +0 -0
  590. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_result.py +0 -0
  591. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_result_fps.py +0 -0
  592. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_result_output_naming.py +0 -0
  593. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_rule_parity.py +0 -0
  594. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_run_manifest_roles.py +0 -0
  595. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_runs.py +0 -0
  596. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_runtime_settings.py +0 -0
  597. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_scalar_result_validation.py +0 -0
  598. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_scheduler_config.py +0 -0
  599. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_schema.py +0 -0
  600. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_security.py +0 -0
  601. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_security_auth.py +0 -0
  602. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_security_decoder_bombs.py +0 -0
  603. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_security_input_caps.py +0 -0
  604. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_security_symlinks.py +0 -0
  605. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_security_web_headers.py +0 -0
  606. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_select.py +0 -0
  607. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_select_validation.py +0 -0
  608. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_server_assess.py +0 -0
  609. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_server_downloads.py +0 -0
  610. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_server_exports.py +0 -0
  611. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_server_gallery_image.py +0 -0
  612. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_server_guides.py +0 -0
  613. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_server_info.py +0 -0
  614. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_server_library_path.py +0 -0
  615. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_server_loras.py +0 -0
  616. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_server_mcp.py +0 -0
  617. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_server_workspaces.py +0 -0
  618. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_shaping_logs.py +0 -0
  619. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_shot_span_preflight.py +0 -0
  620. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_shots.py +0 -0
  621. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_slice_preflight.py +0 -0
  622. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_speech_generation.py +0 -0
  623. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_stabilize.py +0 -0
  624. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_stars.py +0 -0
  625. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_step.py +0 -0
  626. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_step_timing.py +0 -0
  627. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_strip_exif_and_watermark.py +0 -0
  628. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_sub_workflow_resolver.py +0 -0
  629. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_subfolders.py +0 -0
  630. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_task.py +0 -0
  631. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_task_discovery.py +0 -0
  632. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_task_public_imports.py +0 -0
  633. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_task_registry_rules.py +0 -0
  634. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_task_signature_errors.py +0 -0
  635. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_template_defaults.py +0 -0
  636. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_template_subfolders.py +0 -0
  637. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_tensor_image.py +0 -0
  638. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_text_sections.py +0 -0
  639. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_transcribe_audio.py +0 -0
  640. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_trim_video.py +0 -0
  641. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_type_helpers.py +0 -0
  642. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_type_helpers_concurrency.py +0 -0
  643. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_ui_twins.py +0 -0
  644. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_unbraced_type_warning.py +0 -0
  645. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_updater.py +0 -0
  646. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_validate_arguments.py +0 -0
  647. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_variable_constraints.py +0 -0
  648. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_variables.py +0 -0
  649. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_video_extensions.py +0 -0
  650. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_video_size_errors.py +0 -0
  651. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_video_utils.py +0 -0
  652. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_voice_attribution.py +0 -0
  653. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_vram_guides.py +0 -0
  654. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_window_count_errors.py +0 -0
  655. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_window_video.py +0 -0
  656. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_worker.py +0 -0
  657. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_worker_job_peak_rss.py +0 -0
  658. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_worker_manager.py +0 -0
  659. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_worker_messages.py +0 -0
  660. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_worker_pool.py +0 -0
  661. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_workflow.py +0 -0
  662. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_workflow_run_keys.py +0 -0
  663. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_workflow_snapshot.py +0 -0
  664. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_workflow_step_cache.py +0 -0
  665. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_workflow_trust.py +0 -0
  666. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_workspace.py +0 -0
  667. {diffusers_workflow-0.14.0 → diffusers_workflow-0.16.0}/tests/test_workspace_copy.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.14.0
3
+ Version: 0.16.0
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -37,6 +37,7 @@ Requires-Dist: controlnet-aux>=0.0.10
37
37
  Requires-Dist: opencv-python-headless>=5.0.0.93
38
38
  Requires-Dist: kornia>=0.8.3
39
39
  Requires-Dist: kernels>=0.17.2
40
+ Requires-Dist: comfy-kitchen<0.3,>=0.2.38
40
41
  Requires-Dist: spandrel>=0.4.2
41
42
  Requires-Dist: facexlib>=0.3.0
42
43
  Requires-Dist: numpy>=2.5.4
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.14.0
3
+ Version: 0.16.0
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -37,6 +37,7 @@ Requires-Dist: controlnet-aux>=0.0.10
37
37
  Requires-Dist: opencv-python-headless>=5.0.0.93
38
38
  Requires-Dist: kornia>=0.8.3
39
39
  Requires-Dist: kernels>=0.17.2
40
+ Requires-Dist: comfy-kitchen<0.3,>=0.2.38
40
41
  Requires-Dist: spandrel>=0.4.2
41
42
  Requires-Dist: facexlib>=0.3.0
42
43
  Requires-Dist: numpy>=2.5.4
@@ -52,6 +52,7 @@ dw/output_extraction.py
52
52
  dw/path_redaction.py
53
53
  dw/pipeline_ownership.py
54
54
  dw/plan.py
55
+ dw/plan_downloads.py
55
56
  dw/previous_results.py
56
57
  dw/probe_paths.py
57
58
  dw/prompt_schema.json
@@ -75,6 +76,7 @@ dw/settings.py
75
76
  dw/shot_span_preflight.py
76
77
  dw/shots.py
77
78
  dw/slice_preflight.py
79
+ dw/sparse_attention.py
78
80
  dw/step.py
79
81
  dw/step_cache.py
80
82
  dw/step_value_checks.py
@@ -134,6 +136,8 @@ dw/pipeline_processors/h3_guides.py
134
136
  dw/pipeline_processors/h3_hold.py
135
137
  dw/pipeline_processors/h3_hold_steps.py
136
138
  dw/pipeline_processors/h3_rules.py
139
+ dw/pipeline_processors/h3_tiles.py
140
+ dw/pipeline_processors/mag_calibration.py
137
141
  dw/pipeline_processors/pipeline.py
138
142
  dw/pipeline_processors/placement.py
139
143
  dw/pipeline_processors/progress.py
@@ -192,44 +196,44 @@ dw/server/ui/assets/csharp-BKxtCVv1.js
192
196
  dw/server/ui/assets/csp-bTuwJoIa.js
193
197
  dw/server/ui/assets/css-DIMkf-bt.js
194
198
  dw/server/ui/assets/css.worker-C6lDtRpF.js
195
- dw/server/ui/assets/cssMode-BM_j_5VW.js
199
+ dw/server/ui/assets/cssMode-Cx99RWkL.js
196
200
  dw/server/ui/assets/cypher-CVaqCwHa.js
197
201
  dw/server/ui/assets/dart-onAF5SnQ.js
198
202
  dw/server/ui/assets/dockerfile-DZFCIeNp.js
199
203
  dw/server/ui/assets/ecl-D05T4iGw.js
200
204
  dw/server/ui/assets/editor-DjpsE8to.css
201
- dw/server/ui/assets/editor.api-CEPMtaHf.js
205
+ dw/server/ui/assets/editor.api-jKhYFhrF.js
202
206
  dw/server/ui/assets/editor.worker-BmdWdrHZ.js
203
207
  dw/server/ui/assets/elixir-6RTg0lbw.js
204
208
  dw/server/ui/assets/flow9-C5_-GSwl.js
205
- dw/server/ui/assets/freemarker2-BVTL0E_v.js
209
+ dw/server/ui/assets/freemarker2-Cr_kdwwJ.js
206
210
  dw/server/ui/assets/fsharp-C8Ef5oNN.js
207
211
  dw/server/ui/assets/go-C-y9NEjX.js
208
212
  dw/server/ui/assets/graphql-fmXr3nnJ.js
209
- dw/server/ui/assets/handlebars-DN1SqR7g.js
213
+ dw/server/ui/assets/handlebars-CnbOycVf.js
210
214
  dw/server/ui/assets/hcl-CpzslTdj.js
211
- dw/server/ui/assets/html-BYdDV855.js
215
+ dw/server/ui/assets/html-vCIOVoPc.js
212
216
  dw/server/ui/assets/html.worker-C5yZDBHz.js
213
- dw/server/ui/assets/htmlMode-CktrpppH.js
214
- dw/server/ui/assets/index-Dd1gXnAH.js
215
- dw/server/ui/assets/index-PRSQwOeN.css
217
+ dw/server/ui/assets/htmlMode-B5ESZlHK.js
218
+ dw/server/ui/assets/index-Bm_jBlG4.css
219
+ dw/server/ui/assets/index-DIXj1Pp3.js
216
220
  dw/server/ui/assets/ini-sBoK_t0W.js
217
221
  dw/server/ui/assets/java-BEtHBSE6.js
218
- dw/server/ui/assets/javascript-DvSbrt_n.js
222
+ dw/server/ui/assets/javascript-DpV2UaWD.js
219
223
  dw/server/ui/assets/json.worker-DdeUAmHa.js
220
- dw/server/ui/assets/jsonMode-CXzErKKD.js
224
+ dw/server/ui/assets/jsonMode-DaGlZZy1.js
221
225
  dw/server/ui/assets/julia-Bri6UV-V.js
222
226
  dw/server/ui/assets/kotlin-BOotOW0E.js
223
227
  dw/server/ui/assets/less-B9JPFI3C.js
224
228
  dw/server/ui/assets/lexon-CfSJPG6W.js
225
- dw/server/ui/assets/liquid-BRCKFwoi.js
226
- dw/server/ui/assets/lspLanguageFeatures-njtWwPtu.js
229
+ dw/server/ui/assets/liquid-Ds835QKV.js
230
+ dw/server/ui/assets/lspLanguageFeatures-Cd9OxrIO.js
227
231
  dw/server/ui/assets/lua-CsQS60Ue.js
228
232
  dw/server/ui/assets/m3-D-oSqn_W.js
229
233
  dw/server/ui/assets/markdown-Cimd5fb3.js
230
- dw/server/ui/assets/mdx-BUaukvEP.js
234
+ dw/server/ui/assets/mdx-BozOHFIi.js
231
235
  dw/server/ui/assets/mips-CIPQ_RoX.js
232
- dw/server/ui/assets/monaco-gga5ZcVz.js
236
+ dw/server/ui/assets/monaco-673w9Wwq.js
233
237
  dw/server/ui/assets/monaco-n7clI0si.css
234
238
  dw/server/ui/assets/msdax-DauUninz.js
235
239
  dw/server/ui/assets/mysql-SOo6toE5.js
@@ -245,10 +249,10 @@ dw/server/ui/assets/powerquery-D3hlyOfw.js
245
249
  dw/server/ui/assets/powershell-DmHpPYUd.js
246
250
  dw/server/ui/assets/protobuf-C531GsRP.js
247
251
  dw/server/ui/assets/pug-Z5eAx3Zn.js
248
- dw/server/ui/assets/python-BlUYF5iw.js
252
+ dw/server/ui/assets/python-D_HjE-WC.js
249
253
  dw/server/ui/assets/qsharp-DkqhCAOL.js
250
254
  dw/server/ui/assets/r-BwWrilGY.js
251
- dw/server/ui/assets/razor-C_60BEWv.js
255
+ dw/server/ui/assets/razor-DjEZAQZw.js
252
256
  dw/server/ui/assets/redis-ClamHrr6.js
253
257
  dw/server/ui/assets/redshift-DT7zqm-g.js
254
258
  dw/server/ui/assets/restructuredtext-BYgofb2h.js
@@ -268,15 +272,15 @@ dw/server/ui/assets/swift-Bxkupp3x.js
268
272
  dw/server/ui/assets/systemverilog-Bz4Y3fRF.js
269
273
  dw/server/ui/assets/tcl-DISqw1ZD.js
270
274
  dw/server/ui/assets/ts.worker-DGGa2mF8.js
271
- dw/server/ui/assets/tsMode-DZ39FkiR.js
275
+ dw/server/ui/assets/tsMode-B3g7-HAd.js
272
276
  dw/server/ui/assets/twig-De2hgUGE.js
273
- dw/server/ui/assets/typescript-DRuDz-v_.js
277
+ dw/server/ui/assets/typescript-Bq3yLFs6.js
274
278
  dw/server/ui/assets/typespec-B8J7ngcE.js
275
279
  dw/server/ui/assets/vb-DV3o63ZY.js
276
280
  dw/server/ui/assets/wgsl-DpFanUEy.js
277
- dw/server/ui/assets/workers-BWXmwymL.js
278
- dw/server/ui/assets/xml-CBshcw4i.js
279
- dw/server/ui/assets/yaml-D1ZImLMB.js
281
+ dw/server/ui/assets/workers-Jt2I7Jya.js
282
+ dw/server/ui/assets/xml-BD0Sm95a.js
283
+ dw/server/ui/assets/yaml-BSnko3ic.js
280
284
  dw/tasks/assess.py
281
285
  dw/tasks/audio_dynamics.py
282
286
  dw/tasks/audio_handlers.py
@@ -315,9 +319,11 @@ dw/tasks/model_handlers.py
315
319
  dw/tasks/pair_audio.py
316
320
  dw/tasks/qr_code.py
317
321
  dw/tasks/registry.py
322
+ dw/tasks/remove_object.py
318
323
  dw/tasks/restore_faces.py
319
324
  dw/tasks/rife_model.py
320
325
  dw/tasks/script_check.py
326
+ dw/tasks/script_take.py
321
327
  dw/tasks/segment.py
322
328
  dw/tasks/select.py
323
329
  dw/tasks/speech_generation.py
@@ -331,8 +337,11 @@ dw/tasks/upscale.py
331
337
  dw/tasks/video_handlers.py
332
338
  dw/tasks/video_utils.py
333
339
  dw/tasks/voice_attribution.py
340
+ dw/tasks/weights.py
334
341
  dw/tasks/windows.py
335
342
  dw/tasks/zoe_depth.py
343
+ dw/workflows/flux3_klein_upsample.json
344
+ dw/workflows/flux3_klein_upsample_edit.json
336
345
  dw/workflows/h3_context_ir.json
337
346
  dw/workflows/test.json
338
347
  dw_mcp/__init__.py
@@ -379,6 +388,7 @@ tests/test_catalog_shape.py
379
388
  tests/test_catalog_speed_defaults.py
380
389
  tests/test_catalog_structure.py
381
390
  tests/test_chain.py
391
+ tests/test_chain_h3_native.py
382
392
  tests/test_ci_config.py
383
393
  tests/test_cli.py
384
394
  tests/test_compare_route.py
@@ -390,6 +400,7 @@ tests/test_concat_videos.py
390
400
  tests/test_config_objects.py
391
401
  tests/test_configuration_schema.py
392
402
  tests/test_content_types.py
403
+ tests/test_dependencies_declared.py
393
404
  tests/test_depth_estimator.py
394
405
  tests/test_device.py
395
406
  tests/test_device_helpers.py
@@ -411,12 +422,14 @@ tests/test_find_loop_bed.py
411
422
  tests/test_finish.py
412
423
  tests/test_fit_templates.py
413
424
  tests/test_fit_to_model.py
425
+ tests/test_flux3_catalog.py
414
426
  tests/test_for_each.py
415
427
  tests/test_forget_workspace_history.py
416
428
  tests/test_gallery_roles.py
417
429
  tests/test_gather.py
418
430
  tests/test_grade.py
419
431
  tests/test_guide_chain_validation.py
432
+ tests/test_guide_pointers.py
420
433
  tests/test_guides_validation.py
421
434
  tests/test_h3_adapters.py
422
435
  tests/test_h3_context_ir.py
@@ -426,6 +439,8 @@ tests/test_h3_latent_upscale.py
426
439
  tests/test_h3_refine.py
427
440
  tests/test_h3_rules.py
428
441
  tests/test_h3_schedule.py
442
+ tests/test_h3_sparse_defaults.py
443
+ tests/test_h3_tiles.py
429
444
  tests/test_h3_upscaler_source.py
430
445
  tests/test_h3_vram_ceiling.py
431
446
  tests/test_hf_placement.py
@@ -443,6 +458,7 @@ tests/test_integration.py
443
458
  tests/test_interpolate_frames.py
444
459
  tests/test_introspection.py
445
460
  tests/test_job_history_device.py
461
+ tests/test_job_history_parity.py
446
462
  tests/test_job_history_wal.py
447
463
  tests/test_job_progress.py
448
464
  tests/test_job_warnings.py
@@ -533,6 +549,7 @@ tests/test_reference_limits.py
533
549
  tests/test_reference_names.py
534
550
  tests/test_reference_skip_sets.py
535
551
  tests/test_references.py
552
+ tests/test_remove_object.py
536
553
  tests/test_rerun_lineage.py
537
554
  tests/test_rerun_new_seed.py
538
555
  tests/test_resize_bucket.py
@@ -550,6 +567,7 @@ tests/test_scalar_result_validation.py
550
567
  tests/test_scheduler_config.py
551
568
  tests/test_schema.py
552
569
  tests/test_script_check.py
570
+ tests/test_seam_look.py
553
571
  tests/test_security.py
554
572
  tests/test_security_auth.py
555
573
  tests/test_security_decoder_bombs.py
@@ -579,6 +597,10 @@ tests/test_shaping_logs.py
579
597
  tests/test_shot_span_preflight.py
580
598
  tests/test_shots.py
581
599
  tests/test_slice_preflight.py
600
+ tests/test_sparse_attention_backends.py
601
+ tests/test_sparse_attention_processor.py
602
+ tests/test_sparse_attention_tiles.py
603
+ tests/test_sparse_attention_wiring.py
582
604
  tests/test_speech_generation.py
583
605
  tests/test_stabilize.py
584
606
  tests/test_stars.py
@@ -591,9 +613,11 @@ tests/test_subfolders.py
591
613
  tests/test_task.py
592
614
  tests/test_task_discovery.py
593
615
  tests/test_task_domains.py
616
+ tests/test_task_file_weights.py
594
617
  tests/test_task_public_imports.py
595
618
  tests/test_task_registry_rules.py
596
619
  tests/test_task_signature_errors.py
620
+ tests/test_task_weights.py
597
621
  tests/test_template_defaults.py
598
622
  tests/test_template_subfolders.py
599
623
  tests/test_tensor_image.py
@@ -631,4 +655,5 @@ tests/test_workflow_snapshot.py
631
655
  tests/test_workflow_step_cache.py
632
656
  tests/test_workflow_trust.py
633
657
  tests/test_workspace.py
634
- tests/test_workspace_copy.py
658
+ tests/test_workspace_copy.py
659
+ tests/test_zimage_vram.py
@@ -18,6 +18,7 @@ controlnet-aux>=0.0.10
18
18
  opencv-python-headless>=5.0.0.93
19
19
  kornia>=0.8.3
20
20
  kernels>=0.17.2
21
+ comfy-kitchen<0.3,>=0.2.38
21
22
  spandrel>=0.4.2
22
23
  facexlib>=0.3.0
23
24
  numpy>=2.5.4
@@ -27,6 +27,9 @@ Each of these cost a render to find out in Don's `h3-quality` matrix:
27
27
  cache's skip decision needs (`docs/ACCELERATION.md`).
28
28
  - `attention_backend_unavailable`: a CUDA-only attention backend on a device
29
29
  that isn't CUDA passes validate and fails at load.
30
+ - `sparse_attention_fallback`: the `sparse` attention backend on a device that
31
+ isn't CUDA. It never fails a run: it falls back to dense attention, so this
32
+ says the speedup is not coming, not that the job will break.
30
33
 
31
34
  Every one is a warning and never a refusal. A value that cannot be resolved
32
35
  before the run (a null variable, an unknown device) leaves its warning
@@ -39,6 +42,8 @@ import typing
39
42
  from . import get_device_type
40
43
  from .introspection import load_pipeline_class
41
44
  from .references import iter_steps, render_path
45
+ from . import sparse_attention
46
+ from .sparse_attention import SPARSE_BACKEND
42
47
  from .vram_estimate import required_vram_gb
43
48
 
44
49
  # The fewest denoise steps a threshold cache is expected to skip any of. A
@@ -82,10 +87,11 @@ SHORT_SCHEDULE = "cache_short_schedule"
82
87
  TAYLORSEER_STATE = "taylorseer_state_unestimated"
83
88
  FULLGRAPH_WITH_CACHE = "compile_fullgraph_with_cache"
84
89
  BACKEND_UNAVAILABLE = "attention_backend_unavailable"
90
+ SPARSE_FALLBACK = "sparse_attention_fallback"
85
91
  CACHE_UNSUPPORTED = "cache_unsupported"
86
92
 
87
93
  # The component names a cache hook attaches to, as in
88
- # dw.pipeline_processors.components.get_cache_transformer
94
+ # dw.pipeline_processors.mag_calibration.get_cache_transformer
89
95
  _CACHE_COMPONENTS = ("transformer", "transformer_ref")
90
96
 
91
97
 
@@ -258,6 +264,13 @@ def acceleration_warnings(context):
258
264
  continue
259
265
  for path, block in backends:
260
266
  name = block.get("attention_backend")
267
+ if name == SPARSE_BACKEND:
268
+ warnings.append(
269
+ f"{render_path(path)}: {SPARSE_FALLBACK}: sparse attention "
270
+ f"needs CUDA; this server is '{context.device_type}', so "
271
+ f"the run uses dense attention{where}"
272
+ )
273
+ continue
261
274
  if name not in CUDA_ONLY_ATTENTION_BACKENDS:
262
275
  continue
263
276
  warnings.append(
@@ -273,3 +286,26 @@ def acceleration_warnings(context):
273
286
  path, _, rest = warning.partition(": ")
274
287
  said.setdefault((path, rest.partition(": ")[0]), warning)
275
288
  return list(said.values())
289
+
290
+
291
+ def available_attention_backends(device_type: str) -> list[str]:
292
+ """The attention backends a server on `device_type` can run, in menu order.
293
+
294
+ `native` first, then the other `native`-family names; on CUDA, `sparse`
295
+ (only where the compiled kernels loaded) and the CUDA-only names. A name
296
+ diffusers' `AttentionBackendName` lacks is dropped, so the menu never
297
+ offers one the pipeline would refuse.
298
+ """
299
+ from diffusers.models.attention_dispatch import AttentionBackendName
300
+
301
+ known = {backend.value for backend in AttentionBackendName}
302
+ cuda = device_type == "cuda"
303
+ names = ["native", "_native_flash", "_native_efficient", "_native_math"]
304
+ if cuda:
305
+ names.append("_native_cudnn")
306
+ names.append("flex")
307
+ if cuda:
308
+ if sparse_attention._kernels_importable():
309
+ names.append(SPARSE_BACKEND)
310
+ names.extend(sorted(CUDA_ONLY_ATTENTION_BACKENDS))
311
+ return [name for name in names if name == SPARSE_BACKEND or name in known]
@@ -312,6 +312,21 @@ DISABLED_MESSAGE = (
312
312
  )
313
313
 
314
314
 
315
+ # Step-distillation loras run in 4-9 steps; a null-lora step at or past this
316
+ # has already been given the base model's schedule, so the warning is stale.
317
+ RAISED_STEPS = 10
318
+
319
+
320
+ def _schedule_raised(pipeline):
321
+ arguments = pipeline.get("arguments")
322
+ steps = (
323
+ arguments.get("num_inference_steps") if isinstance(arguments, dict) else None
324
+ )
325
+ return (
326
+ isinstance(steps, int) and not isinstance(steps, bool) and steps >= RAISED_STEPS
327
+ )
328
+
329
+
315
330
  def _disabled_loras(steps, source_indices, written=None, supplied=()):
316
331
  """Every `loras` entry switched off with a null model_name, as
317
332
  (path, message). Any pipeline, not only H3: the off switch is the
@@ -322,7 +337,7 @@ def _disabled_loras(steps, source_indices, written=None, supplied=()):
322
337
  steps, source_indices, "pipeline"
323
338
  ):
324
339
  loras = pipeline.get(LORAS_KEY)
325
- if not isinstance(loras, list):
340
+ if not isinstance(loras, list) or _schedule_raised(pipeline):
326
341
  continue
327
342
  for position, lora in enumerate(loras):
328
343
  if not isinstance(lora, dict) or lora.get(MODEL_NAME_KEY) is not None:
@@ -220,7 +220,7 @@ def _with_frame_rate(frames, location):
220
220
  only looks at a real local path. A file that says neither stays a plain
221
221
  list.
222
222
  """
223
- from .tasks.video_utils import FrameList
223
+ from .media_types import FrameList
224
224
 
225
225
  if not isinstance(frames, list):
226
226
  return frames
@@ -273,7 +273,7 @@ def local_media_file(location, what, default_suffix=""):
273
273
 
274
274
  def _fetch_remote_video(url):
275
275
  """A video URL's frames, decoded from `local_media_file`'s copy."""
276
- from .tasks.video_utils import FrameList
276
+ from .media_types import FrameList
277
277
 
278
278
  with local_media_file(url, "a video argument", default_suffix=".mp4") as path:
279
279
  frames = load_video(path)
@@ -109,7 +109,7 @@ def check_device_present(device):
109
109
  raise DeviceConfigError(f"{device} is not available on this machine")
110
110
 
111
111
 
112
- def resolve_serve_devices(cli_value, settings_value):
112
+ def resolve_serve_devices(cli_value, settings_value, on_absent=None):
113
113
  """The devices a server runs on - `--devices`, else the `devices`
114
114
  setting - or None when neither names any, which leaves today's single
115
115
  device (`DW_DEVICE`, then the `device` setting, then detection) alone.
@@ -117,7 +117,14 @@ def resolve_serve_devices(cli_value, settings_value):
117
117
  More than one entry runs a worker per card, so each must be a card of
118
118
  its own. Raises DeviceConfigError for a duplicate, for an unindexed
119
119
  `cuda` in a list of several (it would not be pinned, and would share
120
- card 0), and for a device this machine does not have."""
120
+ card 0), and for a device this machine does not have.
121
+
122
+ A list of several survives a card being pulled: an absent entry is
123
+ dropped and its refusal passed to `on_absent`, so a box with a card
124
+ out for service comes up on the rest instead of refusing to start (a
125
+ service manager restarting it would loop forever). Only when no entry
126
+ is present - or `on_absent` is None - is the first absence raised, so
127
+ a lone typo (`cuda:7`) still refuses."""
121
128
  raw = cli_value if cli_value else settings_value
122
129
  devices = parse_devices(raw)
123
130
  if not devices:
@@ -139,9 +146,19 @@ def resolve_serve_devices(cli_value, settings_value):
139
146
  "--devices with several entries must name each CUDA card by "
140
147
  "index ('cuda:0,cuda:1'), not a bare 'cuda'"
141
148
  )
149
+ present, absences = [], []
142
150
  for device in devices:
143
- check_device_present(device)
144
- return devices
151
+ try:
152
+ check_device_present(device)
153
+ except DeviceConfigError as absence:
154
+ absences.append(absence)
155
+ else:
156
+ present.append(device)
157
+ if absences and (not present or on_absent is None):
158
+ raise absences[0]
159
+ for absence in absences:
160
+ on_absent(str(absence))
161
+ return present
145
162
 
146
163
 
147
164
  def _explicit_cuda_index(device):
@@ -159,20 +159,58 @@ Select the attention implementation diffusers uses for the duration of each pipe
159
159
  }
160
160
  ```
161
161
 
162
- Common values: `"flash"`, `"flash_hub"`, `"sage"`, `"sage_hub"`, `"native"`, `"flex"`. The full set is diffusers' `AttentionBackendName` enum - availability depends on what's installed (`flash-attn`, `sageattention`, etc.) and the platform. `_hub`-suffixed backends are fetched from the Hugging Face Hub kernel registry on first use, which needs the `kernels` package installed (`pip install kernels`) - it is not a dw dependency, and no bundled workflow sets a backend, so each runs on a plain install. diffusers also refuses a Hub kernel whose publisher it does not list as trusted - `sage_hub` among them, since SageAttention 2 comes from `SageAttention/sage-attention` - until `DIFFUSERS_TRUST_REMOTE_KERNELS=true`, which allows remote code from any such publisher. On an RTX 3090 `sage_hub` measured about 30% faster per MiniMax-H3 step (13.8 s against 19.2 s at 960x544x124, 54.7 s against 81.2 s at 345 frames); the local `sage` backend needs `sageattention>=2.1.1`, which PyPI does not carry.
162
+ Common values: `"flash"`, `"flash_hub"`, `"sage"`, `"sage_hub"`, `"native"`, `"flex"`. The full set is diffusers' `AttentionBackendName` enum - availability depends on what's installed (`flash-attn`, `sageattention`, etc.) and the platform. `_hub`-suffixed backends are fetched from the Hugging Face Hub kernel registry on first use, which needs the `kernels` package installed (`pip install kernels`) - it is not a dw dependency. The only backend a bundled workflow sets is `sparse`, the default on every MiniMax-H3 template, and it needs no `kernels` install (comfy-kitchen is a core dependency), so each bundled workflow runs on a plain install. diffusers also refuses a Hub kernel whose publisher it does not list as trusted - `sage_hub` among them, since SageAttention 2 comes from `SageAttention/sage-attention` - until `DIFFUSERS_TRUST_REMOTE_KERNELS=true`, which allows remote code from any such publisher. On an RTX 3090 `sage_hub` measured about 30% faster per MiniMax-H3 step (13.8 s against 19.2 s at 960x544x124, 54.7 s against 81.2 s at 345 frames); the local `sage` backend needs `sageattention>=2.1.1`, which PyPI does not carry.
163
163
 
164
164
  Every MiniMax-H3 template in [templates/minimax/](../workflows/templates/minimax/)
165
165
  exposes this as a variable: `attention_backend`, pinned on the H3 step's transformer
166
166
  (`components.transformer`, or `components.transformer_ref` for a ref2va workflow) and
167
- `null` by default. That covers the shots, chains and episodes - `dialogue-short`,
167
+ `"sparse"` by default (with `sparse_tau`, below). That covers the shots, chains and episodes - `dialogue-short`,
168
168
  `shots-batch`, `music-video` and `storyboard` among them - and only their H3 steps: a
169
169
  Z-Image still or Music3 song beside an H3 shot keeps the process default. Pass
170
- `attention_backend=sage_hub` to a box with the `kernels` package and
171
- `DIFFUSERS_TRUST_REMOTE_KERNELS=true` in its `.env`; on MPS leave it null, since a
172
- CUDA-only kernel fails there at load (validation warns, below). LTX-2.5 cannot use it: its transformer
170
+ `attention_backend=sage_hub` (or `native`) to override the default; `sage_hub` needs a box with the `kernels` package and
171
+ `DIFFUSERS_TRUST_REMOTE_KERNELS=true` in its `.env`; on MPS the default falls back to dense, but a CUDA-only kernel such as `sage_hub` fails there at load (validation warns, below). LTX-2.5 cannot use it: its transformer
173
172
  passes an attention mask, and sage attention refuses one ("`attn_mask` is not supported
174
173
  for sage attention", measured 2026-10-10), so the LTX templates expose no backend.
175
174
 
175
+ ### `sparse` (MiniMax-H3)
176
+
177
+ `attention_backend: "sparse"` runs H3's attention through comfy-kitchen's block-sparse kernel: each query tile attends only to the key tiles that matter, so the cost of the long video-token sequence falls. It applies to the H3 transformer only, at pipeline or component level, and is the default on every H3 template (#931). Set at both levels, the component's own `attention_backend` wins, as it does for every backend: a pipeline-level `sparse` skips a component pinned to `sage_hub` (or anything else) and warns `attention_backend 'sparse' at pipeline level skips '<component>', which pins '<backend>'`. When it does install, the run logs `Using attention backend: sparse (tau <tau>) on <components>`, or `(topk <k>)` with top-k routing. `sparse_tau` (number, minimum 0, default 0.5; anything else, such as a `variable:` that resolves to a string or a bool, fails the step rather than running dense) sets how much of the attention mass a tile may drop; 0 keeps the most. Observed at Ref2VA 1344x768, seed 42: tau 1.0 ran 42.1 s/forward against 44.8 s at 0.5, and by Don's eye 1.0 gave smoother skin while 0.5 matched dense (the table below). That is one shape and one seed, not a rule that higher is always faster or smoother.
178
+
179
+ `sparse_topk` (a number strictly between 0 and 1; the H3 templates set 0.15, and a workflow that sets none routes by `sparse_tau`) switches the kernel to top-k routing: each query tile keeps that fraction of key tiles and drops the rest outright, with `sparse_tau` ignored. It is the selection lightx2v's Turbo-SLA LoRAs were trained against (85% sparsity, so `0.15`). Measured on `video-with-audio-768p`, seed 42 (#932): top-k 0.15 ran 21.1 s/forward against 23.6 s at tau 0.5, about 11% faster, and Don saw no difference on that clip, with either the Turbo-SLA LoRA or the default v1.2 turbo (so dw does not adopt the SLA LoRA). That clip has no faces, so it was checked on the H3 quality ramp's 4-reference sitcom shot at seeds 42, 7 and 1234 against tau 0.5. Don judged top-k equal or better: on the turbo L7 rung tau showed blue ghosting at seed 7 and slight smearing at all three, and on the 30-step base-model L5 rung the skin held. Top-k 0.15 is therefore the H3 templates' default; pass `sparse_topk=null` to route by `sparse_tau` instead.
180
+
181
+ | rung (minutes per job, seeds 42 / 7 / 1234) | tau 0.5 | top-k 0.15 |
182
+ |---|---|---|
183
+ | L7: ref2v 4-step turbo, int8 | 6.5 / 6.5 / 6.5 | 6.1 / 6.2 / 5.8 |
184
+ | L5: base model, int8, 30 steps | 26.8 / 26.6 / 26.4 | 23.9 / 25.5 / 23.9 |
185
+
186
+ **What the default buys depends on what it replaces.** Against `native` attention, which is what an H3 template ran before #931 unless `attention_backend` was set, sparse is 2.2-4.4x faster per step. Against `sage_hub`, the gain is much smaller: 6-16% depending on the shape (the second table). So sparse's main win is for a run that set no backend, and it needs no `kernels` package or `DIFFUSERS_TRUST_REMOTE_KERNELS`. A box already on `sage_hub` gains a little, at equal quality: on the H3 skill's quality-ramp rungs, Don judged faces, skin and draft-to-final staging equal under both backends across three seeds (#931 stage 3).
187
+
188
+ Measured on an RTX 3090, seed 42, s per transformer forward (one per denoise step), lower is faster:
189
+
190
+ | shape | native | `sage_hub` | sparse | sparse vs native | sparse vs `sage_hub` |
191
+ |---|---|---|---|---|---|
192
+ | T2VA 960x544, 4-step turbo, tau 1.0 | 24.3 | - | 10.8 | 2.25x | - |
193
+ | T2VA 1344x768, 4-step turbo, tau 1.0 | 96.1 | - | 21.9 | 4.38x | - |
194
+ | Ref2VA 1344x768, 8-step ref2v turbo, tau 1.0 | 108.4 | - | 42.1 | 2.58x | - |
195
+ | Ref2VA 1344x768, 8-step ref2v turbo, tau 0.5 (the default) | 108.4 | 51.0 | 44.1-44.8 | 2.42x | 1.16x |
196
+
197
+ Wall time, same order: 150 -> 95 s, 457 -> 158 s, 965 -> 430 s, and for the last row 965 s native, 489 s `sage_hub`, 442-450 s sparse.
198
+
199
+ Against `sage_hub` on the H3 skill's quality-ramp rungs (ep 6 cold open, 4 references, 1344x768, 124 frames; minutes per job, seeds 42 / 7 / 1234, all on the same diffusers):
200
+
201
+ | rung | `sage_hub` | sparse | sparse vs `sage_hub` |
202
+ |---|---|---|---|
203
+ | L1: ref2v 4-step turbo, int4, 5 steps | 5.5 / 5.5 / 5.5 | 5.2 / 5.2 / 5.1 | 1.06-1.08x |
204
+ | L7: ref2v 4-step turbo, int8, 5 steps | 7.1 / 6.9 / 7.1 | 6.5 / 6.5 / 6.5 | 1.06-1.09x |
205
+ | B3: base model, int8, 12 steps | 13.0 / 12.9 / 12.9 | 12.3 / 12.0 / 12.1 | 1.06-1.07x |
206
+ | L5: base model, int8, 30 steps | 29.7 / 29.7 / 29.7 | 26.8 / 26.6 / 26.4 | 1.11-1.12x |
207
+
208
+ The `first_block` cache on `sage_hub` (23.1 min at L5's settings) is still faster than sparse alone there; sparse with that cache is not measured. The native and tau 1.0 figures come from the #931 prototype. The `sage_hub` figure and the 44.1 s come from the engine on lem after the deploy, with a newer diffusers (jobs 94c04976d21d and 593131ca713f), so the sage comparison is between those two jobs only. The T2VA rows have no `sage_hub` run. Peak VRAM did not change. Judged by eye, tau 0.5 matched dense; tau 1.0 was smoother in skin.
209
+
210
+ It needs CUDA with compute capability 8.0 or higher. Anywhere else (MPS, CPU, an older card, an unsupported dtype or head size) the run goes dense instead of failing, and says so twice: `validate_workflow` warns `sparse_attention_fallback` when the server's device is not CUDA, and the run reports `<label>: sparse attention ran dense - <reason>` once per pipeline call. A job of one call warns once; a chained, `shots-batch` or `dialogue-short` job calls the pipeline once per segment or shot, so it warns once for each, under that segment's or shot's label. A comfy-kitchen kernel that fails on its first invocation in a call also runs that call dense, with `sparse kernel failed: <error>` as the reason; one that fails after it has run in the call fails the run, since some blocks have already run sparse.
211
+
212
+ Unlike sage, sparse **moves composition** relative to dense: the same subject, story and cuts, but different framing and set dressing. A draft and its final must therefore use the same backend; mixing `sparse` and `sage_hub` between tiers means the draft no longer predicts the final.
213
+
176
214
  A component can also pin its backend persistently instead, via `set_attention_backend`:
177
215
 
178
216
  ```json