diffusers-workflow 0.11.0__tar.gz → 0.11.1__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 (603) hide show
  1. {diffusers_workflow-0.11.0/diffusers_workflow.egg-info → diffusers_workflow-0.11.1}/PKG-INFO +1 -1
  2. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1/diffusers_workflow.egg-info}/PKG-INFO +1 -1
  3. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/diffusers_workflow.egg-info/SOURCES.txt +5 -0
  4. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/ACCELERATION.md +17 -1
  5. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/LORAS.md +4 -0
  6. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/RECIPES_24GB.md +73 -17
  7. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/RELEASING.md +41 -0
  8. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/SERVER.md +3 -1
  9. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/TASKS.md +1 -1
  10. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/WORKER_GUIDE.md +7 -0
  11. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/WORKFLOW_GUIDE.md +12 -1
  12. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/media.py +23 -5
  13. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_ownership.py +18 -2
  14. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/adapters.py +103 -36
  15. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/components.py +17 -0
  16. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/pipeline.py +32 -1
  17. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/step_cache.py +117 -17
  18. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/restore_faces.py +18 -8
  19. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/worker.py +44 -10
  20. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/workflow.py +8 -2
  21. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/workflow_run.py +41 -7
  22. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/pyproject.toml +1 -1
  23. diffusers_workflow-0.11.1/tests/test_catalog_speed_defaults.py +76 -0
  24. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_catalog_structure.py +4 -1
  25. diffusers_workflow-0.11.1/tests/test_media_decode_threads.py +81 -0
  26. diffusers_workflow-0.11.1/tests/test_restore_faces_helper_cache.py +93 -0
  27. diffusers_workflow-0.11.1/tests/test_runtime_settings.py +151 -0
  28. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_step_cache.py +188 -72
  29. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_worker_execute.py +46 -1
  30. diffusers_workflow-0.11.1/tests/test_workflow_run_keys.py +42 -0
  31. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_workflow_step_cache.py +120 -0
  32. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/LICENSE +0 -0
  33. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/MANIFEST.in +0 -0
  34. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/README.md +0 -0
  35. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/diffusers_workflow.egg-info/dependency_links.txt +0 -0
  36. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/diffusers_workflow.egg-info/entry_points.txt +0 -0
  37. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/diffusers_workflow.egg-info/requires.txt +0 -0
  38. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/diffusers_workflow.egg-info/top_level.txt +0 -0
  39. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/__init__.py +0 -0
  40. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/adapter_compatibility.py +0 -0
  41. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/argument_media.py +0 -0
  42. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/argument_warnings.py +0 -0
  43. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/arguments.py +0 -0
  44. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/assessment_rules.py +0 -0
  45. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/assets.py +0 -0
  46. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/audio_qc.py +0 -0
  47. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/cache_blocks.json +0 -0
  48. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/cache_blocks.py +0 -0
  49. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/community_pipelines/pipeline_flux_rf_inversion.py +0 -0
  50. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/community_pipelines/pipeline_ltx2_refine.py +0 -0
  51. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/content_types.py +0 -0
  52. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/devices.py +0 -0
  53. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/dissolve_frame_errors.py +0 -0
  54. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/AGENT_LOOP.md +0 -0
  55. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/ARCHITECTURE.md +0 -0
  56. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/DEPENDENCIES.md +0 -0
  57. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/IP_ADAPTER.md +0 -0
  58. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/MCP.md +0 -0
  59. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/PROMPT_WEIGHTING.md +0 -0
  60. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/QUANTIZATION.md +0 -0
  61. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/REMOTE.md +0 -0
  62. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/SECURITY.md +0 -0
  63. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/SECURITY_QUICKREF.md +0 -0
  64. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/TESTING.md +0 -0
  65. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/WORKSPACES.md +0 -0
  66. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/download_watch.py +0 -0
  67. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/dsp.py +0 -0
  68. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/elision.py +0 -0
  69. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/events.py +0 -0
  70. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/for_each.py +0 -0
  71. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/guides.py +0 -0
  72. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/hold_audio.py +0 -0
  73. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/host_memory.py +0 -0
  74. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/host_memory_projection.py +0 -0
  75. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/hub_cache.py +0 -0
  76. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/introspection.py +0 -0
  77. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/kernel_availability.py +0 -0
  78. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/library.py +0 -0
  79. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/locations.py +0 -0
  80. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/log_setup.py +0 -0
  81. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/lora_catalog.py +0 -0
  82. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/lora_catalog_schema.json +0 -0
  83. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/lora_hub.py +0 -0
  84. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/media_frames.py +0 -0
  85. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/media_types.py +0 -0
  86. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/outbound.py +0 -0
  87. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/output_extraction.py +0 -0
  88. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/path_redaction.py +0 -0
  89. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/chain.py +0 -0
  90. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/config_objects.py +0 -0
  91. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/h3_guide_steps.py +0 -0
  92. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/h3_guides.py +0 -0
  93. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/h3_hold.py +0 -0
  94. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/h3_hold_steps.py +0 -0
  95. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/h3_rules.py +0 -0
  96. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/placement.py +0 -0
  97. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/progress.py +0 -0
  98. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/remote.py +0 -0
  99. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/plan.py +0 -0
  100. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/previous_results.py +0 -0
  101. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/probe_paths.py +0 -0
  102. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/prompt_schema.json +0 -0
  103. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/prompt_weighting.py +0 -0
  104. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/prompts.py +0 -0
  105. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/realize.py +0 -0
  106. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/reference_limits.py +0 -0
  107. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/reference_names.py +0 -0
  108. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/references.py +0 -0
  109. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/result.py +0 -0
  110. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/run.py +0 -0
  111. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/runs.py +0 -0
  112. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/scalar_result_validation.py +0 -0
  113. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/schema.py +0 -0
  114. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/script_lines.py +0 -0
  115. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/security.py +0 -0
  116. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/serve.py +0 -0
  117. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/__init__.py +0 -0
  118. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/admission.py +0 -0
  119. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/api_models.py +0 -0
  120. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/app.py +0 -0
  121. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/assess.py +0 -0
  122. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/catalog.py +0 -0
  123. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/catalog_shape.py +0 -0
  124. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/deps.py +0 -0
  125. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/enhancers.py +0 -0
  126. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/exports.py +0 -0
  127. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/guides.py +0 -0
  128. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/http_security.py +0 -0
  129. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/inline_media.py +0 -0
  130. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/job_history.py +0 -0
  131. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/job_record.py +0 -0
  132. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/job_results.py +0 -0
  133. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/jobs.py +0 -0
  134. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/mcp_mount.py +0 -0
  135. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/netinfo.py +0 -0
  136. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/observed_cost.py +0 -0
  137. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/outputs.py +0 -0
  138. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/pool.py +0 -0
  139. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/__init__.py +0 -0
  140. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/assets.py +0 -0
  141. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/files.py +0 -0
  142. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/gallery.py +0 -0
  143. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/jobs.py +0 -0
  144. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/library.py +0 -0
  145. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/loras.py +0 -0
  146. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/media.py +0 -0
  147. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/system.py +0 -0
  148. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/sysinfo.py +0 -0
  149. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/abap-08VXUWAP.js +0 -0
  150. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/apex-BWPQTe0t.js +0 -0
  151. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/azcli-Bc_sGQ0U.js +0 -0
  152. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/bat-i0X4ZdIN.js +0 -0
  153. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/bicep-B5-_aFwp.js +0 -0
  154. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/cameligo-DMUM7wLl.js +0 -0
  155. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/clojure-Cm7r79vr.js +0 -0
  156. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/codicon-DF1abBS2.ttf +0 -0
  157. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/coffee-Ba7i2nA0.js +0 -0
  158. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/cpp-C7h46wYY.js +0 -0
  159. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/csharp-BKxtCVv1.js +0 -0
  160. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/csp-bTuwJoIa.js +0 -0
  161. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/css-DIMkf-bt.js +0 -0
  162. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/css.worker-C6lDtRpF.js +0 -0
  163. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/cssMode-ukxfz-ce.js +0 -0
  164. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/cypher-CVaqCwHa.js +0 -0
  165. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/dart-onAF5SnQ.js +0 -0
  166. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/dockerfile-DZFCIeNp.js +0 -0
  167. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/ecl-D05T4iGw.js +0 -0
  168. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/editor-DjpsE8to.css +0 -0
  169. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/editor.api-Bkt_tsj1.js +0 -0
  170. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/editor.worker-BmdWdrHZ.js +0 -0
  171. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/elixir-6RTg0lbw.js +0 -0
  172. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/flow9-C5_-GSwl.js +0 -0
  173. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/freemarker2-DbXygLvH.js +0 -0
  174. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/fsharp-C8Ef5oNN.js +0 -0
  175. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/go-C-y9NEjX.js +0 -0
  176. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/graphql-fmXr3nnJ.js +0 -0
  177. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/handlebars-BdhZGoSz.js +0 -0
  178. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/hcl-CpzslTdj.js +0 -0
  179. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/html-Chhg10Tp.js +0 -0
  180. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/html.worker-C5yZDBHz.js +0 -0
  181. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/htmlMode-cC3JW4lx.js +0 -0
  182. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/index-BYEwBCrU.css +0 -0
  183. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/index-CkD0GJG0.js +0 -0
  184. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/ini-sBoK_t0W.js +0 -0
  185. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/java-BEtHBSE6.js +0 -0
  186. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/javascript-BWWLMkof.js +0 -0
  187. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/json.worker-DdeUAmHa.js +0 -0
  188. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/jsonMode-DrC8C29V.js +0 -0
  189. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/julia-Bri6UV-V.js +0 -0
  190. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/kotlin-BOotOW0E.js +0 -0
  191. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/less-B9JPFI3C.js +0 -0
  192. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/lexon-CfSJPG6W.js +0 -0
  193. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/liquid-CXdQfmUT.js +0 -0
  194. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/lspLanguageFeatures-BgAhb71w.js +0 -0
  195. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/lua-CsQS60Ue.js +0 -0
  196. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/m3-D-oSqn_W.js +0 -0
  197. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/markdown-Cimd5fb3.js +0 -0
  198. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/mdx-CQS0lFaZ.js +0 -0
  199. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/mips-CIPQ_RoX.js +0 -0
  200. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/monaco-Z_sI-RLU.js +0 -0
  201. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/monaco-n7clI0si.css +0 -0
  202. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/msdax-DauUninz.js +0 -0
  203. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/mysql-SOo6toE5.js +0 -0
  204. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/objective-c-FvmIjYaQ.js +0 -0
  205. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/pascal-DrH0SRf2.js +0 -0
  206. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/pascaligo-D-ptJ9y-.js +0 -0
  207. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/perl-oz_6vUea.js +0 -0
  208. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/pgsql-DTj74zXo.js +0 -0
  209. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/php-nr791fC2.js +0 -0
  210. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/pla-CopQ2nXW.js +0 -0
  211. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/postiats-43DmfD33.js +0 -0
  212. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/powerquery-D3hlyOfw.js +0 -0
  213. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/powershell-DmHpPYUd.js +0 -0
  214. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/protobuf-C531GsRP.js +0 -0
  215. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/pug-Z5eAx3Zn.js +0 -0
  216. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/python-C9MtI630.js +0 -0
  217. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/qsharp-DkqhCAOL.js +0 -0
  218. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/r-BwWrilGY.js +0 -0
  219. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/razor-DPO5mHyR.js +0 -0
  220. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/redis-ClamHrr6.js +0 -0
  221. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/redshift-DT7zqm-g.js +0 -0
  222. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/restructuredtext-BYgofb2h.js +0 -0
  223. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/ruby-DezsRK8O.js +0 -0
  224. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/rust-DdL9SqIa.js +0 -0
  225. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/sb-CcwsVR0C.js +0 -0
  226. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/scala-DHpiXF5c.js +0 -0
  227. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/scheme-BeGwcela.js +0 -0
  228. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/scss-gp-XZpBa.js +0 -0
  229. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/shell-CC2rA5mh.js +0 -0
  230. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/solidity-BEEn4gHE.js +0 -0
  231. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/sophia-CRfGWb83.js +0 -0
  232. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/sparql-D_Lu-MrJ.js +0 -0
  233. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/sql-NEE52Syq.js +0 -0
  234. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/st-DbInun42.js +0 -0
  235. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/swift-Bxkupp3x.js +0 -0
  236. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +0 -0
  237. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/tcl-DISqw1ZD.js +0 -0
  238. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/ts.worker-DGGa2mF8.js +0 -0
  239. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/tsMode-D8vGBTVc.js +0 -0
  240. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/twig-De2hgUGE.js +0 -0
  241. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/typescript-DyoEkQLT.js +0 -0
  242. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/typespec-B8J7ngcE.js +0 -0
  243. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/vb-DV3o63ZY.js +0 -0
  244. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/wgsl-DpFanUEy.js +0 -0
  245. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/workers-Bdewp_DS.js +0 -0
  246. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/xml-DmmKOVWo.js +0 -0
  247. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/yaml-C4jCTuer.js +0 -0
  248. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/index.html +0 -0
  249. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/updater.py +0 -0
  250. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/worker_memory.py +0 -0
  251. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/settings.py +0 -0
  252. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/shot_span_preflight.py +0 -0
  253. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/shots.py +0 -0
  254. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/slice_preflight.py +0 -0
  255. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/step.py +0 -0
  256. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/step_value_checks.py +0 -0
  257. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/subfolders.py +0 -0
  258. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/task_domains.py +0 -0
  259. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/task_problems.py +0 -0
  260. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/assess.py +0 -0
  261. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/audio_dynamics.py +0 -0
  262. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/audio_handlers.py +0 -0
  263. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/audio_transcription.py +0 -0
  264. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/audio_utils.py +0 -0
  265. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/background_remover.py +0 -0
  266. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/beats.py +0 -0
  267. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/borders.py +0 -0
  268. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/compose_text.py +0 -0
  269. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/concat_videos.py +0 -0
  270. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/cuts.py +0 -0
  271. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/depth_estimator.py +0 -0
  272. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/diffusion_upscale.py +0 -0
  273. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/dissolve_videos.py +0 -0
  274. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/face_track.py +0 -0
  275. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/finish.py +0 -0
  276. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/finish_handlers.py +0 -0
  277. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/fit.py +0 -0
  278. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/format_messages.py +0 -0
  279. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/gather.py +0 -0
  280. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/grade.py +0 -0
  281. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/h3_latent_upscale.py +0 -0
  282. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/h3_latent_upscaler_model.py +0 -0
  283. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/image_ops.py +0 -0
  284. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/image_to_text.py +0 -0
  285. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/image_utils.py +0 -0
  286. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/interpolate_frames.py +0 -0
  287. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/join_into_song.py +0 -0
  288. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/joins.py +0 -0
  289. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/judge.py +0 -0
  290. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/loop_bed.py +0 -0
  291. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/lut.py +0 -0
  292. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/measure_sync.py +0 -0
  293. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/model_cache.py +0 -0
  294. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/model_handlers.py +0 -0
  295. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/pair_audio.py +0 -0
  296. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/qr_code.py +0 -0
  297. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/registry.py +0 -0
  298. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/rife_model.py +0 -0
  299. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/script_check.py +0 -0
  300. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/segment.py +0 -0
  301. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/select.py +0 -0
  302. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/speech_generation.py +0 -0
  303. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/stabilize.py +0 -0
  304. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/task.py +0 -0
  305. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/tensor_image.py +0 -0
  306. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/text_generation.py +0 -0
  307. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/text_sections.py +0 -0
  308. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/trim.py +0 -0
  309. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/upscale.py +0 -0
  310. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/video_handlers.py +0 -0
  311. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/video_utils.py +0 -0
  312. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/voice_attribution.py +0 -0
  313. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/windows.py +0 -0
  314. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/zoe_depth.py +0 -0
  315. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/test.py +0 -0
  316. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/trust.py +0 -0
  317. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/type_helpers.py +0 -0
  318. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/type_references.py +0 -0
  319. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/validate.py +0 -0
  320. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/validation.py +0 -0
  321. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/variable_constraints.py +0 -0
  322. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/variables.py +0 -0
  323. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/video_extensions.py +0 -0
  324. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/video_size_errors.py +0 -0
  325. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/vram_estimate.py +0 -0
  326. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/vram_inheritance.py +0 -0
  327. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/window_count_errors.py +0 -0
  328. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/worker_manager.py +0 -0
  329. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/worker_protocol.py +0 -0
  330. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/workflow_schema.json +0 -0
  331. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/workflows/h3_context_ir.json +0 -0
  332. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/workflows/test.json +0 -0
  333. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/workspace.py +0 -0
  334. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/writers.py +0 -0
  335. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/__init__.py +0 -0
  336. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/__main__.py +0 -0
  337. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/assets.py +0 -0
  338. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/authoring.py +0 -0
  339. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/catalog.py +0 -0
  340. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/client.py +0 -0
  341. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/confine.py +0 -0
  342. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/diagnose.py +0 -0
  343. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/exports.py +0 -0
  344. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/guides.py +0 -0
  345. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/loras.py +0 -0
  346. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/media.py +0 -0
  347. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/models.py +0 -0
  348. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/prompts.py +0 -0
  349. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/server.py +0 -0
  350. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/tools_authoring.py +0 -0
  351. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/tools_catalog.py +0 -0
  352. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/tools_jobs.py +0 -0
  353. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/tools_media.py +0 -0
  354. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/workspaces.py +0 -0
  355. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/setup.cfg +0 -0
  356. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_admission.py +0 -0
  357. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_admission_capacity.py +0 -0
  358. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_analyze_beats.py +0 -0
  359. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_api_contract.py +0 -0
  360. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_arch_metrics.py +0 -0
  361. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_arch_report.py +0 -0
  362. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_architecture_map.py +0 -0
  363. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_argument_updates.py +0 -0
  364. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_arguments.py +0 -0
  365. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_assemble_and_score_target_lufs.py +0 -0
  366. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_assess.py +0 -0
  367. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_assessment_rules.py +0 -0
  368. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_assets.py +0 -0
  369. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_attention_slicing.py +0 -0
  370. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_audio_utils.py +0 -0
  371. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_best_of_n_template.py +0 -0
  372. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_borders.py +0 -0
  373. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_cache_blocks.py +0 -0
  374. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_catalog_shape.py +0 -0
  375. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_chain.py +0 -0
  376. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ci_config.py +0 -0
  377. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_cli.py +0 -0
  378. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_component_name_errors.py +0 -0
  379. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_component_pruning.py +0 -0
  380. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_component_type_errors.py +0 -0
  381. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_compose_text.py +0 -0
  382. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_concat_videos.py +0 -0
  383. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_config_objects.py +0 -0
  384. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_configuration_schema.py +0 -0
  385. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_content_types.py +0 -0
  386. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_depth_estimator.py +0 -0
  387. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_device.py +0 -0
  388. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_device_helpers.py +0 -0
  389. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_device_portability.py +0 -0
  390. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_dialogue_short_voices.py +0 -0
  391. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_diffusion_upscale.py +0 -0
  392. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_dissolve_frame_errors.py +0 -0
  393. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_dissolve_videos.py +0 -0
  394. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_docs_links.py +0 -0
  395. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_download_watch.py +0 -0
  396. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_dsp.py +0 -0
  397. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_elision.py +0 -0
  398. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_events.py +0 -0
  399. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_examples.py +0 -0
  400. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_face_track.py +0 -0
  401. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_find_loop_bed.py +0 -0
  402. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_finish.py +0 -0
  403. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_fit_templates.py +0 -0
  404. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_fit_to_model.py +0 -0
  405. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_for_each.py +0 -0
  406. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_gather.py +0 -0
  407. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_grade.py +0 -0
  408. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_guide_chain_validation.py +0 -0
  409. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_guides_validation.py +0 -0
  410. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_adapters.py +0 -0
  411. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_context_ir.py +0 -0
  412. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_guides.py +0 -0
  413. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_hold_audio.py +0 -0
  414. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_latent_upscale.py +0 -0
  415. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_refine.py +0 -0
  416. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_rules.py +0 -0
  417. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_schedule.py +0 -0
  418. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_upscaler_source.py +0 -0
  419. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_vram_ceiling.py +0 -0
  420. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_hf_placement.py +0 -0
  421. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_host_memory.py +0 -0
  422. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_host_memory_projection.py +0 -0
  423. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_hub_cache.py +0 -0
  424. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_image_ops.py +0 -0
  425. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_image_to_text.py +0 -0
  426. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_image_utils.py +0 -0
  427. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_inductor_cache_default.py +0 -0
  428. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ingredients_grid.py +0 -0
  429. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_inherited_cost.py +0 -0
  430. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_integration.py +0 -0
  431. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_interpolate_frames.py +0 -0
  432. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_introspection.py +0 -0
  433. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_job_history_device.py +0 -0
  434. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_job_history_wal.py +0 -0
  435. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_job_progress.py +0 -0
  436. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_job_warnings.py +0 -0
  437. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_jobs_listing.py +0 -0
  438. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_jobs_reused.py +0 -0
  439. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_join_into_song.py +0 -0
  440. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_join_windows.py +0 -0
  441. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_judge.py +0 -0
  442. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_kernel_availability.py +0 -0
  443. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_library_path.py +0 -0
  444. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_library_sources.py +0 -0
  445. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_list_images.py +0 -0
  446. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_locations.py +0 -0
  447. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_lora_alpha.py +0 -0
  448. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_lora_catalog.py +0 -0
  449. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_lora_disable.py +0 -0
  450. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_lora_hub.py +0 -0
  451. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_lora_library.py +0 -0
  452. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ltx2_diffusion_decode.py +0 -0
  453. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ltx2_extend_clip.py +0 -0
  454. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ltx2_ic_loras.py +0 -0
  455. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ltx2_refine_pipeline.py +0 -0
  456. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ltx_prompt_library.py +0 -0
  457. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_lut.py +0 -0
  458. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_assets.py +0 -0
  459. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_authoring.py +0 -0
  460. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_catalog.py +0 -0
  461. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_client.py +0 -0
  462. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_confine.py +0 -0
  463. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_diagnose.py +0 -0
  464. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_exports.py +0 -0
  465. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_guides.py +0 -0
  466. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_loras.py +0 -0
  467. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_main.py +0 -0
  468. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_media.py +0 -0
  469. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_models.py +0 -0
  470. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_prompts.py +0 -0
  471. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_server.py +0 -0
  472. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_twins.py +0 -0
  473. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_workspaces.py +0 -0
  474. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_measure_sync.py +0 -0
  475. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_media_audio.py +0 -0
  476. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_media_frames.py +0 -0
  477. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_media_info.py +0 -0
  478. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_media_layering.py +0 -0
  479. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mix_audio.py +0 -0
  480. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_model_cache.py +0 -0
  481. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_modular_output_properties.py +0 -0
  482. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_modular_pipeline.py +0 -0
  483. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_modular_progress.py +0 -0
  484. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mps_fallback_warning.py +0 -0
  485. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mps_rope_precision.py +0 -0
  486. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_null_media.py +0 -0
  487. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_numeric_coercion.py +0 -0
  488. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_observed_cost.py +0 -0
  489. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_offload_placement.py +0 -0
  490. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_outbound.py +0 -0
  491. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_output_references.py +0 -0
  492. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_pair_audio.py +0 -0
  493. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_pair_audio_fit.py +0 -0
  494. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_parallel_loading_default.py +0 -0
  495. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_path_redaction.py +0 -0
  496. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_phase_events.py +0 -0
  497. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_pipeline_caching.py +0 -0
  498. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_pipeline_components.py +0 -0
  499. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_plan.py +0 -0
  500. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_plan_cuts.py +0 -0
  501. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_plugin_skills.py +0 -0
  502. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_prepare_pipeline.py +0 -0
  503. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_previous_result_walker_parity.py +0 -0
  504. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_previous_results.py +0 -0
  505. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_prompt_library.py +0 -0
  506. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_prompt_parser.py +0 -0
  507. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_prompt_references.py +0 -0
  508. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_prompt_weighting.py +0 -0
  509. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_prompts.py +0 -0
  510. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_read_frame_range.py +0 -0
  511. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_real_models.py +0 -0
  512. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_realize.py +0 -0
  513. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_recenter_crop.py +0 -0
  514. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_reference_limits.py +0 -0
  515. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_reference_names.py +0 -0
  516. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_reference_skip_sets.py +0 -0
  517. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_references.py +0 -0
  518. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_rerun_new_seed.py +0 -0
  519. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_resize_bucket.py +0 -0
  520. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_restore_faces_video.py +0 -0
  521. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_result.py +0 -0
  522. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_result_fps.py +0 -0
  523. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_result_output_naming.py +0 -0
  524. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_rule_parity.py +0 -0
  525. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_runs.py +0 -0
  526. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_scalar_result_validation.py +0 -0
  527. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_scheduler_config.py +0 -0
  528. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_schema.py +0 -0
  529. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_script_check.py +0 -0
  530. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security.py +0 -0
  531. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_auth.py +0 -0
  532. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_decoder_bombs.py +0 -0
  533. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_input_caps.py +0 -0
  534. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_ssrf.py +0 -0
  535. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_symlinks.py +0 -0
  536. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_trust_gate.py +0 -0
  537. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_web_headers.py +0 -0
  538. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_segment.py +0 -0
  539. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_select.py +0 -0
  540. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_select_validation.py +0 -0
  541. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_separate_stems.py +0 -0
  542. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_serve_main.py +0 -0
  543. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server.py +0 -0
  544. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_assess.py +0 -0
  545. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_downloads.py +0 -0
  546. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_exports.py +0 -0
  547. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_gallery_image.py +0 -0
  548. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_guides.py +0 -0
  549. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_info.py +0 -0
  550. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_jobs.py +0 -0
  551. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_library_path.py +0 -0
  552. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_loras.py +0 -0
  553. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_mcp.py +0 -0
  554. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_workspaces.py +0 -0
  555. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_shaping_logs.py +0 -0
  556. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_shot_span_preflight.py +0 -0
  557. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_shots.py +0 -0
  558. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_slice_preflight.py +0 -0
  559. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_speech_generation.py +0 -0
  560. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_stabilize.py +0 -0
  561. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_step.py +0 -0
  562. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_strip_exif_and_watermark.py +0 -0
  563. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_sub_workflow_resolver.py +0 -0
  564. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_subfolders.py +0 -0
  565. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_task.py +0 -0
  566. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_task_discovery.py +0 -0
  567. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_task_domains.py +0 -0
  568. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_task_public_imports.py +0 -0
  569. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_task_registry_rules.py +0 -0
  570. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_task_signature_errors.py +0 -0
  571. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_template_defaults.py +0 -0
  572. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_template_subfolders.py +0 -0
  573. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_tensor_image.py +0 -0
  574. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_text_generation.py +0 -0
  575. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_text_sections.py +0 -0
  576. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_transcribe_audio.py +0 -0
  577. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_trim_video.py +0 -0
  578. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_type_helpers.py +0 -0
  579. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_type_helpers_concurrency.py +0 -0
  580. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ui_twins.py +0 -0
  581. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_updater.py +0 -0
  582. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_validate_arguments.py +0 -0
  583. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_validation.py +0 -0
  584. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_variable_constraints.py +0 -0
  585. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_variables.py +0 -0
  586. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_video_extensions.py +0 -0
  587. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_video_size_errors.py +0 -0
  588. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_video_utils.py +0 -0
  589. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_voice_attribution.py +0 -0
  590. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_vram_estimate.py +0 -0
  591. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_vram_guides.py +0 -0
  592. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_vram_inheritance.py +0 -0
  593. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_window_count_errors.py +0 -0
  594. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_window_video.py +0 -0
  595. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_worker.py +0 -0
  596. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_worker_job_peak_rss.py +0 -0
  597. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_worker_manager.py +0 -0
  598. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_worker_messages.py +0 -0
  599. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_worker_pool.py +0 -0
  600. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_workflow.py +0 -0
  601. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_workflow_snapshot.py +0 -0
  602. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_workflow_trust.py +0 -0
  603. {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.11.0
3
+ Version: 0.11.1
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.11.0
3
+ Version: 0.11.1
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -361,6 +361,7 @@ tests/test_best_of_n_template.py
361
361
  tests/test_borders.py
362
362
  tests/test_cache_blocks.py
363
363
  tests/test_catalog_shape.py
364
+ tests/test_catalog_speed_defaults.py
364
365
  tests/test_catalog_structure.py
365
366
  tests/test_chain.py
366
367
  tests/test_ci_config.py
@@ -463,6 +464,7 @@ tests/test_mcp_twins.py
463
464
  tests/test_mcp_workspaces.py
464
465
  tests/test_measure_sync.py
465
466
  tests/test_media_audio.py
467
+ tests/test_media_decode_threads.py
466
468
  tests/test_media_frames.py
467
469
  tests/test_media_info.py
468
470
  tests/test_media_layering.py
@@ -507,12 +509,14 @@ tests/test_reference_skip_sets.py
507
509
  tests/test_references.py
508
510
  tests/test_rerun_new_seed.py
509
511
  tests/test_resize_bucket.py
512
+ tests/test_restore_faces_helper_cache.py
510
513
  tests/test_restore_faces_video.py
511
514
  tests/test_result.py
512
515
  tests/test_result_fps.py
513
516
  tests/test_result_output_naming.py
514
517
  tests/test_rule_parity.py
515
518
  tests/test_runs.py
519
+ tests/test_runtime_settings.py
516
520
  tests/test_scalar_result_validation.py
517
521
  tests/test_scheduler_config.py
518
522
  tests/test_schema.py
@@ -590,6 +594,7 @@ tests/test_worker_manager.py
590
594
  tests/test_worker_messages.py
591
595
  tests/test_worker_pool.py
592
596
  tests/test_workflow.py
597
+ tests/test_workflow_run_keys.py
593
598
  tests/test_workflow_snapshot.py
594
599
  tests/test_workflow_step_cache.py
595
600
  tests/test_workflow_trust.py
@@ -136,6 +136,18 @@ Select the attention implementation diffusers uses for the duration of each pipe
136
136
 
137
137
  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.
138
138
 
139
+ The MiniMax-H3 baselines expose this as a variable: `attention_backend` on
140
+ [video-with-audio.json](../workflows/templates/minimax/video-with-audio.json),
141
+ [video-with-audio-768p.json](../workflows/templates/minimax/video-with-audio-768p.json),
142
+ [image-to-video.json](../workflows/templates/minimax/image-to-video.json) and
143
+ [reference-to-video.json](../workflows/templates/minimax/reference-to-video.json), pinned
144
+ on the transformer and `null` by default. Pass `attention_backend=sage_hub` to a box with
145
+ the `kernels` package and `DIFFUSERS_TRUST_REMOTE_KERNELS=true` in its `.env`; on MPS
146
+ leave it null. The other H3 templates take the same key under `components.transformer`
147
+ (`transformer_ref` for a ref2va workflow). LTX-2.5 cannot use it: its transformer
148
+ passes an attention mask, and sage attention refuses one ("`attn_mask` is not supported
149
+ for sage attention", measured 2026-10-10), so the LTX templates expose no backend.
150
+
139
151
  A component can also pin its backend persistently instead, via `set_attention_backend`:
140
152
 
141
153
  ```json
@@ -232,7 +244,11 @@ Three older per-component knobs, set in the pipeline `configuration` beside
232
244
 
233
245
  ## Memory Offloading
234
246
 
235
- `offload` (`"model"` or `"sequential"`) and `group_offload` trade speed for VRAM by streaming weights between system memory and the accelerator instead of keeping everything resident. `"model"` moves whole submodules and costs the least speed; `"sequential"` moves individual layers and is the slowest but uses the least memory; block/leaf-level `group_offload` sits between the two and is what a modular pipeline's self-loaded components use, since they aren't reachable in time for `offload`. Full configuration syntax is in [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md#memory-offloading). Omit both for the fastest run, when VRAM allows it.
247
+ `offload` (`"model"` or `"sequential"`) and `group_offload` trade speed for VRAM by streaming weights between system memory and the accelerator instead of keeping everything resident. `"model"` moves whole submodules and costs the least speed; `"sequential"` moves individual layers and is the slowest but uses the least memory; block/leaf-level `group_offload` sits between the two and is what a modular pipeline's self-loaded components use, since they aren't reachable in time for `offload`. Full configuration syntax is in [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md#memory-offloading). Omit both for the fastest run, when VRAM allows it. Measured on an RTX 3090 (RECIPES_24GB.md): sequential
248
+ offload costs about 6x per step on FLUX dev and 3.4x on Z-Image against model offload;
249
+ a block-level, streamed `group_offload` of the transformer from pinned host memory
250
+ matches the resident per-step cost while holding one block on the card, at ~22 GB of
251
+ pinned host RAM per FLUX pipeline - the placement the unquantized FLUX templates use.
236
252
 
237
253
  `"residency": "on_demand"` on a component is the cheap case of the same trade: the model rests in system memory and is moved to the device whole around each of its own calls. That is a bad deal for anything called once per step, and a good one for a VAE called twice a run - it frees the VAE's VRAM for the denoise loop at the cost of two transfers, where group offloading the same VAE would restream it once per decode tile. See [On-demand components](WORKFLOW_GUIDE.md#on-demand-components).
238
254
 
@@ -48,6 +48,10 @@ LoRA (Low-Rank Adaptation) models apply lightweight style or subject modificatio
48
48
 
49
49
  Any other property (e.g. `revision`) is forwarded as-is to the underlying `load_lora_weights()` call.
50
50
 
51
+ `scale` and `alpha` are set in place on the loaded adapter, so a server run that changes
52
+ only them reuses the warm pipeline instead of reloading it; changing `model_name` or
53
+ `weight_name` reloads.
54
+
51
55
  ## Multiple LoRAs
52
56
 
53
57
  Stack multiple LoRAs. They are blended via weighted adapter composition:
@@ -12,23 +12,79 @@ The general recipe, in order of impact:
12
12
 
13
13
  ## Flux dev (12B)
14
14
 
15
- The bf16 transformer is ~24GB - it does not fit alongside the T5 encoder, and it does
16
- not fit alongside the VAE either: a resident bf16 transformer runs the denoise and then
17
- fails at decode. `offload: "model"` is what makes bf16 work on 24GB, and on an RTX 3090
18
- it is also the fastest configuration measured (1024x1024, 28 steps, pipeline loaded):
19
-
20
- | Approach | Config | Measured on RTX 3090 |
21
- | -------- | ------ | -------------------- |
22
- | **bf16 + model offload** | [flux-dev.json](../workflows/models/flux-dev.json) | 55s per image (72s cold) |
23
- | **bf16 + model offload + compile** | [flux-dev-compile.json](../workflows/models/flux-dev-compile.json) - `compile: {repeated_blocks: true}` on the transformer | 52s per image (64s cold) |
24
- | **int8 TorchAO** | transformer `quant_type: "torchao.quantization.Int8WeightOnlyConfig"` + `compile`, with or without `cache: first_block` | over 60s per *denoising step* - do not use on Ampere |
25
- | **float8 TorchAO** (RTX 40-series+) | `Float8DynamicActivationFloat8WeightConfig` + `compile` | needs compute capability 8.9+ (Ada); unmeasured |
26
- | **GGUF Q8** | [flux-gguf.json](../workflows/models/flux-gguf.json) - `from_single_file` Q8_0 transformer + `offload: "model"` | unmeasured; smallest VRAM, best quality retention |
27
-
28
- Measured 2026-09-07. A number in this table came from a run on the named card; a row
29
- without one is a configuration that loads, not a speed claim.
30
-
31
- **Examples:** [flux-dev-compile.json](../workflows/models/flux-dev-compile.json), [flux-gguf.json](../workflows/models/flux-gguf.json), [step-caching.json](../workflows/templates/step-caching.json)
15
+ The bf16 transformer is ~22 GB, so on 24 GB it cannot sit beside its own activations
16
+ with any margin, and it cannot sit beside the T5 encoder or the VAE at all. Three
17
+ placements, measured on an RTX 3090 (2026-10-10, cold load included):
18
+
19
+ | Placement | 1024x1024, 25 steps, 1 image, dev + LoRA | 768x768, 25 steps, 4 images, Krea | 1232x1632, 50 steps, Fill |
20
+ | --------- | ----------------------------------------- | --------------------------------- | ------------------------- |
21
+ | `offload: "sequential"` | 273 s (10.8 s/step) | not measured - same per-step cost | not measured |
22
+ | `offload: "model"` | 61 s (1.7 s/step) at **23.3 GB reserved, 491 MB free** | **OOM** at 23.45 GiB | not attempted |
23
+ | **transformer `group_offload`, block-level, streamed, pinned host copies** | 78 s (1.5 s/step), 17.7 GB peak reserved, 6 GB free | 131 s (3.2 s/step) | 152 s denoise (3.0 s/step), 1 s decode |
24
+
25
+ Model offload is the fastest placement that loads, and the one #580 (9c708a12) retired:
26
+ at 1024x1024 it runs with a few hundred MB to spare and fails on anything larger -
27
+ a batch, a second encoder resident for prompt weighting, a cache's state. Sequential
28
+ offload is safe everywhere and 6x slower per step. The streamed group offload is both:
29
+ the transformer's blocks are copied in one at a time from pinned host memory under a
30
+ CUDA stream, so each step costs the same as the resident model's, and the card holds
31
+ one block plus the activations. It is what every unquantized FLUX template now uses:
32
+
33
+ ```json
34
+ "configuration": {
35
+ "component_type": "FluxPipeline",
36
+ "components": {
37
+ "transformer": {
38
+ "group_offload": {
39
+ "offload_type": "block_level",
40
+ "num_blocks_per_group": 1,
41
+ "use_stream": true,
42
+ "record_stream": true
43
+ }
44
+ },
45
+ "text_encoder": { "device": "cuda" },
46
+ "text_encoder_2": { "device": "cuda" },
47
+ "vae": { "device": "cuda" }
48
+ }
49
+ }
50
+ ```
51
+
52
+ Two things the shape depends on. The non-offloaded components are placed explicitly:
53
+ with no pipeline-level `offload`, nothing else moves them, and a T5 or VAE left on the
54
+ CPU costs a minute per prompt encode and per decode (measured: 70 s before the first
55
+ step, 185 s decoding). And the host copies are pinned - diffusers' default,
56
+ `low_cpu_mem_usage: false` - which holds ~22 GB of unswappable host memory per loaded
57
+ FLUX pipeline and takes ~35 s once per load; with `low_cpu_mem_usage: true` the copies
58
+ come from pageable memory at 8 s/step, barely ahead of sequential. A host with less
59
+ than 32 GB free should take `offload: "sequential"` instead.
60
+
61
+ Compile and caching stack on top as before: `compile: {repeated_blocks: true}` measured
62
+ 52 s vs 55 s per image on the old model-offload placement; `cache: first_block` is
63
+ [step-caching.json](../workflows/templates/step-caching.json). TorchAO int8 is over 60 s
64
+ per *denoising step* on Ampere - do not use it there; float8 needs compute capability
65
+ 8.9+ (Ada) and is unmeasured; GGUF Q8 ([flux-gguf.json](../workflows/models/flux-gguf.json))
66
+ loads with the least VRAM and is unmeasured for speed.
67
+
68
+ **Examples:** [lora.json](../workflows/templates/lora.json), [flux-dev-compile.json](../workflows/models/flux-dev-compile.json), [flux-gguf.json](../workflows/models/flux-gguf.json), [step-caching.json](../workflows/templates/step-caching.json)
69
+
70
+ ## Z-Image Turbo (6B)
71
+
72
+ Fits a 24 GB card in bf16 with model offload, and that is the configuration to use.
73
+ Measured on an RTX 3090 (960x544, 9 steps, 4 images per prompt, cold load included,
74
+ 2026-10-10):
75
+
76
+ | Offload | Load | Denoise | Decode | Total | Peak VRAM reserved |
77
+ | ------- | ---- | ------- | ------ | ----- | ------------------ |
78
+ | `sequential` | 18 s | 84 s | 2 s | 107 s | 1.1 GB |
79
+ | **`model`** | 4 s | 25 s | 9 s | 41 s | 13.0 GB |
80
+ | none (resident) | 11 s | 17 s | 2 s | 33 s | 23.7 GB, 95 MB free at decode |
81
+
82
+ Sequential offload streams the transformer's layers every step and costs 3.4x on the
83
+ denoise for a model that does not need the room. Resident is faster still but decodes
84
+ four images with nothing to spare, so [z-image.json](../workflows/models/z-image.json)
85
+ and the Z-Image portrait steps of the MiniMax templates use `"offload": "model"`. The
86
+ decode's 9 s under model offload is the VAE swapping in; `vae.enable_slicing` would
87
+ trade it for per-image decodes.
32
88
 
33
89
  ## Qwen-Image (20B)
34
90
 
@@ -7,6 +7,47 @@ notes from commits at tag time (see below). This section is a scratch pad
7
7
  for items a branch's author wants the next release note to name; clear it
8
8
  when a release ships.
9
9
 
10
+ ### 0.11.1
11
+
12
+ <!-- Drafted from v0.11.0..develop. Paste into the GitHub release body once the tag has published: gh release edit v0.11.1 --notes-file ... -->
13
+
14
+ A speed release. The unquantized FLUX templates run about 3.5x faster on
15
+ a 24 GB card, Z-Image Turbo about 2.6x, a LoRA scale or scheduler shift
16
+ change no longer reloads the model, and switching workflows keeps the
17
+ models the next one shares. Every number below was measured on an RTX 3090;
18
+ the placement tables are in docs/RECIPES_24GB.md.
19
+
20
+ **Workflow speed**
21
+
22
+ - The 14 unquantized FLUX templates and `models/flux-krea` stream the
23
+ transformer block by block from pinned host memory (`group_offload`)
24
+ instead of `offload: "sequential"`: a 25-step 1024x1024 image takes 78 s
25
+ instead of 273 s (1.5 s/step against 10.8), with 6 GB of VRAM to spare -
26
+ enough for the 4-image batches `offload: "model"` runs out of memory on.
27
+ It holds ~22 GB of pinned host RAM per loaded FLUX pipeline.
28
+ - Z-Image Turbo (`models/z-image` and the MiniMax portrait steps) takes
29
+ `offload: "model"`: four 960x544 images in 41 s instead of 107 s.
30
+ - The four MiniMax-H3 family baselines expose `attention_backend` (null by
31
+ default; `sage_hub` measured about 30% faster per step on a 3090; it needs
32
+ the `kernels` package and `DIFFUSERS_TRUST_REMOTE_KERNELS=true`, see
33
+ docs/ACCELERATION.md). LTX-2.5 cannot use sage attention (its attention
34
+ mask is refused).
35
+ - A LoRA `scale`/`alpha` change or a scheduler `shift` change re-applies on
36
+ the warm pipeline instead of reloading it. Removing an alpha or shift still
37
+ reloads, and a `pipeline_reference` runs at the referenced step's own values.
38
+ - Switching workflows in the worker keeps the warm pipelines the next
39
+ workflow loads anyway, instead of releasing everything first.
40
+ - `restore_faces` builds its face helper once per run instead of once per
41
+ frame, and picture frames decode with libav threading, so video inputs
42
+ process faster.
43
+ - Catalog defaults corrected: compose-workflows video steps run 5 steps
44
+ (was 20) and the prompt-weighting schnell workflow runs 4 steps at guidance
45
+ 0 (was 20).
46
+ - The six 9-step minimax ref2va templates drop a dead `first_block` cache,
47
+ and minimax/shots-batch drops its `release_pipeline`: a no-op inside the
48
+ run, but it unloaded H3 at job end, so H3 now stays resident after a
49
+ shots-batch job, which is the win.
50
+
10
51
  ### 0.11.0
11
52
 
12
53
  <!-- Drafted from v0.10.0..develop. Paste into the GitHub release body once the tag has published: gh release edit v0.11.0 --notes-file ... -->
@@ -222,7 +222,9 @@ Among the free cards a job fits, dispatch prefers the one it has an affinity
222
222
  for: a rerun goes to the card that ran the original, and any job to the card
223
223
  whose worker last ran the same workflow (the same file, or an inline
224
224
  definition's `id`) - that worker's pipelines and step cache are warm, and a
225
- worker frees both when the workflow changes. A busy preferred card is not
225
+ worker's step cache and any model the next workflow does not load are freed
226
+ when the workflow changes, while a model both workflows load (same weights
227
+ identity) stays warm. `clear_memory` still empties the card by hand. A busy preferred card is not
226
228
  waited for. A validation's cache probe and its `plan.estimate` ask about the
227
229
  card the job would be dispatched to now, and the estimate names it in
228
230
  `priced_for`. Memory is per card: `GET /api/memory` and `POST
@@ -2632,7 +2632,7 @@ Restore and enhance faces in images using spandrel-compatible face restoration m
2632
2632
  | `eye_dist_threshold` | No | Skip faces with eye distance below this (default: 5) |
2633
2633
  | `upsample_img` | No | Pre-upscaled background image (e.g., from a prior upscale step) |
2634
2634
 
2635
- Models are loaded via spandrel, so any `.pth`/`.safetensors` face restoration weights work. CodeFormer requires `pip install spandrel-extra-arches` (non-commercial license).
2635
+ Models are loaded via spandrel, so any `.pth`/`.safetensors` face restoration weights work. CodeFormer requires `pip install spandrel-extra-arches` (non-commercial license). The detector and parser are loaded once per settings/device and reused across frames; `release_models` drops them with the restorer.
2636
2636
 
2637
2637
  **Example:** [restore-faces.json](../workflows/templates/restore-faces.json) — Generate a portrait, then restore faces with GFPGAN v1.4.
2638
2638
 
@@ -28,6 +28,13 @@ The worker cleans up automatically between runs (garbage collection + GPU
28
28
  cache clearing). If memory grows unexpectedly, `GET /api/memory` reports the
29
29
  current reading and `POST /api/memory/clear` resets it.
30
30
 
31
+ Switching to a different workflow releases only the models the next workflow
32
+ does not load: the worker prepares the incoming definition, and a pipeline
33
+ both workflows load (same weights identity) stays warm. The step cache and
34
+ the task model cache are still emptied, and if the incoming definition cannot
35
+ be prepared everything is released. `clear_memory` (`POST /api/memory/clear`)
36
+ remains the way to empty the card by hand.
37
+
31
38
  ## Troubleshooting
32
39
 
33
40
  **Worker crashes**: `JobManager` detects it and starts a fresh worker on the
@@ -112,6 +112,10 @@ inverted latents:
112
112
  ```
113
113
 
114
114
  `reference_name` must name a step earlier in the same workflow that has a `pipeline`.
115
+ Two steps whose pipelines differ only in a LoRA's `scale` or `alpha` or a scheduler's
116
+ `shift` share one warm model, and a reference always runs at the referenced step's own
117
+ values; `release_pipeline` on either step frees the shared model, as it does for two
118
+ identical steps.
115
119
  See [workflows/templates/community-pipeline.json](../workflows/templates/community-pipeline.json) for a full example.
116
120
 
117
121
  ### Task Steps
@@ -1173,7 +1177,7 @@ Control how models use memory:
1173
1177
  ```
1174
1178
 
1175
1179
  - `"model"` — Moves entire models between CPU and GPU. Good balance of speed and memory.
1176
- - `"sequential"` — Moves individual layers. Slowest but uses least GPU memory. On MPS it is downgraded to `"model"` with a warning: with unified memory there is no separate pool to keep small, so the per-layer copies cost speed and save nothing.
1180
+ - `"sequential"` — Moves individual layers. Slowest but uses least GPU memory (measured at 6x the per-step cost of model offload on FLUX dev and 3.4x on Z-Image; a streamed block-level `group_offload` of the transformer is the usual better answer - see [RECIPES_24GB.md](RECIPES_24GB.md#flux-dev-12b)). On MPS it is downgraded to `"model"` with a warning: with unified memory there is no separate pool to keep small, so the per-layer copies cost speed and save nothing.
1177
1181
  `exclude_from_cpu_offload` names components the sweep should leave alone.
1178
1182
  - Omit for no offloading (fastest, requires enough VRAM).
1179
1183
 
@@ -1325,6 +1329,13 @@ The step-level `release_pipeline` flag unloads the step's pipeline after its res
1325
1329
  saved. A later `pipeline_reference` to a released step is an error, and the process-wide
1326
1330
  step cache will not retain it.
1327
1331
 
1332
+ What keeps a pipeline warm: the server's worker keeps a pipeline loaded across runs for as
1333
+ long as what it *loads* is unchanged. A LoRA's `scale` and `alpha` and a scheduler's (or
1334
+ `audio_scheduler`'s) `shift` are applied in place on the warm pipeline, so iterating on
1335
+ them costs no reload; removing (nulling) an alpha or a shift reloads, so the checkpoint
1336
+ default comes back. Changing a LoRA's `model_name` or `weight_name`, the quantization,
1337
+ the placement or the scheduler type reloads it.
1338
+
1328
1339
  #### Releasing task models mid-workflow
1329
1340
 
1330
1341
  Task models - the checkpoints behind `text_generation`, `segment`, `depth_estimator` and
@@ -33,6 +33,15 @@ from .dsp import SILENCE_DBFS, dbfs, integrated_lufs, layout_name, true_peak_dbf
33
33
 
34
34
  logger = logging.getLogger("dw")
35
35
 
36
+
37
+ def _threaded(stream):
38
+ """A video stream set to decode on every core. libav defaults a
39
+ software h264 decode to one thread; AUTO lets it pick frame and
40
+ slice threading for the codec. Header-only reads do not call this."""
41
+ stream.thread_type = "AUTO"
42
+ return stream
43
+
44
+
36
45
  # The most a soundtrack may be as base64 before the gallery route refuses to
37
46
  # extract it whole - the twin of dw_mcp/media.py's MAX_RETURNED_BYTES (the
38
47
  # MCP package's cap on any inline payload). Two constants because dw_mcp
@@ -345,7 +354,7 @@ def video_shape(path):
345
354
  fps = float(stream.average_rate) if stream.average_rate else None
346
355
  count = int(stream.frames) if stream.frames else None
347
356
  if count is None:
348
- count = sum(1 for _ in container.decode(stream))
357
+ count = sum(1 for _ in container.decode(_threaded(stream)))
349
358
  return {
350
359
  "frame_count": count,
351
360
  "fps": fps,
@@ -383,6 +392,8 @@ def read_frames(path, indexes, fit=None):
383
392
  wanted = sorted(set(int(i) for i in indexes))
384
393
  found = {}
385
394
  with av.open(path) as container:
395
+ # Not _threaded: frame threads hold frames in flight, and a backward
396
+ # seek after a decoded frame then yields stale ones (tests/test_media_decode_threads.py)
386
397
  stream = container.streams.video[0]
387
398
  fps = float(stream.average_rate) if stream.average_rate else None
388
399
  start_pts = stream.start_time if stream.start_time is not None else 0
@@ -479,6 +490,8 @@ def read_frame_range(path, start, stop):
479
490
  )
480
491
  out = None
481
492
  with av.open(path) as container:
493
+ # Not _threaded: frame threads hold frames in flight, and a backward
494
+ # seek after a decoded frame then yields stale ones (tests/test_media_decode_threads.py)
482
495
  stream = container.streams.video[0]
483
496
  fps = float(stream.average_rate) if stream.average_rate else None
484
497
  start_pts = stream.start_time if stream.start_time is not None else 0
@@ -513,7 +526,7 @@ def count_video_frames(path):
513
526
  """The picture frame count of `path`, by decoding every frame rather
514
527
  than reading the header. Nothing is held but the frame in hand."""
515
528
  with av.open(path) as container:
516
- return sum(1 for _ in container.decode(container.streams.video[0]))
529
+ return sum(1 for _ in container.decode(_threaded(container.streams.video[0])))
517
530
 
518
531
 
519
532
  def decode_audio_video(handle):
@@ -531,7 +544,7 @@ def decode_audio_video(handle):
531
544
  sample_rate = None
532
545
 
533
546
  with av.open(handle) as container:
534
- video_stream = container.streams.video[0]
547
+ video_stream = _threaded(container.streams.video[0])
535
548
  frame_rate = (
536
549
  float(video_stream.average_rate) if video_stream.average_rate else None
537
550
  )
@@ -559,7 +572,10 @@ def decode_rgb_frames(path):
559
572
  """Every picture frame of `path` as an (height, width, 3) uint8 array,
560
573
  in order."""
561
574
  with av.open(path) as container:
562
- return [frame.to_ndarray(format="rgb24") for frame in container.decode(video=0)]
575
+ return [
576
+ frame.to_ndarray(format="rgb24")
577
+ for frame in container.decode(_threaded(container.streams.video[0]))
578
+ ]
563
579
 
564
580
 
565
581
  def read_thumbnails_and_track(path, thumb_width, thumb_height):
@@ -575,7 +591,9 @@ def read_thumbnails_and_track(path, thumb_width, thumb_height):
575
591
  thumbs = []
576
592
  chunks = []
577
593
  with av.open(path) as container:
578
- video = container.streams.video[0] if container.streams.video else None
594
+ video = (
595
+ _threaded(container.streams.video[0]) if container.streams.video else None
596
+ )
579
597
  audio = container.streams.audio[0] if container.streams.audio else None
580
598
  if video is None and audio is None:
581
599
  raise ValueError(f"{path} has neither a video nor an audio stream")
@@ -62,6 +62,11 @@ class PipelineOwnership:
62
62
  # pipeline_reference still address pipelines by the step that made
63
63
  # them
64
64
  self.keys_by_step = {}
65
+ # Step name -> the step's pipeline definition as the workflow holds
66
+ # it (never a loading copy), so a pipeline_reference can put the
67
+ # referenced step's own scale, alpha and shift back on a model a
68
+ # step differing only in those shares with it
69
+ self.definitions_by_step = {}
65
70
  # Step name -> _Deferred for each cache hit whose pipeline was not
66
71
  # resident and so was not loaded
67
72
  self.deferred = {}
@@ -92,9 +97,16 @@ class PipelineOwnership:
92
97
  )
93
98
  return self.running[step_name]
94
99
 
95
- def record(self, step_name, key):
96
- """Record which cache key a step's pipeline lives under this run."""
100
+ def record(self, step_name, key, pipeline_definition=None):
101
+ """Record which cache key a step's pipeline lives under this run,
102
+ and the definition it was loaded or wrapped from."""
97
103
  self.keys_by_step[step_name] = key
104
+ if pipeline_definition is not None:
105
+ self.definitions_by_step[step_name] = pipeline_definition
106
+
107
+ def definition_for(self, step_name):
108
+ """The pipeline definition `step_name` recorded this run, or None."""
109
+ return self.definitions_by_step.get(step_name)
98
110
 
99
111
  def key_for(self, step_name):
100
112
  """The cache key `step_name` recorded this run, or None."""
@@ -286,6 +298,10 @@ def wrap_resident(
286
298
  new_pipeline_wrapper.pipeline_definition.get("seed", default_seed)
287
299
  )
288
300
 
301
+ # The key the hit matched on is the weights identity: a scale, alpha or
302
+ # shift may differ from the values the resident model last ran with
303
+ new_pipeline_wrapper.apply_runtime_settings()
304
+
289
305
  # A cache hit and a cold load look identical from the outside -
290
306
  # same step, same dot - and they differ by minutes
291
307
  emit_phase("cached", detail=new_pipeline_wrapper.name)
@@ -101,11 +101,103 @@ def active_loras(loras):
101
101
  ]
102
102
 
103
103
 
104
+ def adapter_settings(loras):
105
+ """(adapter_names, adapter_weights, alphas) for the active entries of
106
+ `loras`. An adapter is named by its own adapter_name or its ORIGINAL
107
+ index - a nulled entry keeps its slot, so the name a hit re-applies to
108
+ is the name the load gave. Reads the entries, never pops them.
109
+
110
+ `or` on adapter_name, because a variable nulled by the caller arrives as
111
+ a present None; float() on scale, because the schema takes a 'variable:'
112
+ reference there, and a variable declared as a string default substitutes
113
+ as one."""
114
+ names, weights, alphas = [], [], {}
115
+ for i, lora in enumerate(loras or []):
116
+ if not isinstance(lora, dict) or lora.get("model_name") is None:
117
+ continue
118
+ name = lora.get("adapter_name") or str(i)
119
+ names.append(name)
120
+ scale = lora.get("scale")
121
+ weights.append(1.0 if scale is None else float(scale))
122
+ if lora.get("alpha") is not None:
123
+ alphas[name] = lora["alpha"]
124
+ return names, weights, alphas
125
+
126
+
127
+ def set_adapter_scales(pipeline, names, weights):
128
+ """Set each named adapter's scale on every loaded layer that carries it,
129
+ without re-activating the adapters.
130
+
131
+ The warm-pipeline path. diffusers' set_adapters() activates as well as
132
+ scales, and activation goes through peft's set_adapter(), which sets
133
+ requires_grad on the adapter weights - after a run under model offload
134
+ those are inference tensors, and torch refuses ("Setting requires_grad=True
135
+ on inference tensor outside InferenceMode" - seen on a 3090 the first time
136
+ a scale changed on a warm Flux pipeline, 2026-10-10).
137
+ A pipeline that already ran holds the adapters active, so a hit only
138
+ needs each layer's set_scale(), which recomputes scale * alpha / rank and
139
+ touches no tensor.
140
+
141
+ Raises:
142
+ ValueError: if an adapter is carried by no loaded layer - a scale
143
+ that applied to nothing would silently run the old value
144
+ """
145
+ touched = {name: 0 for name in names}
146
+ for module in _lora_layers(pipeline):
147
+ scaling = getattr(module, "scaling", None)
148
+ if not isinstance(scaling, dict):
149
+ continue
150
+ for name, weight in zip(names, weights):
151
+ if name in scaling:
152
+ module.set_scale(name, weight)
153
+ touched[name] += 1
154
+ missing = [name for name, count in touched.items() if not count]
155
+ if missing:
156
+ raise ValueError(
157
+ f"Cannot set the scale of adapter(s) {missing} - no loaded layer "
158
+ "carries them. Nothing would have been scaled."
159
+ )
160
+
161
+
162
+ def apply_adapter_settings(loras, pipeline, activate=False):
163
+ """Set each active LoRA's alpha, then every scale, on a pipeline that
164
+ already holds the adapters. Alpha first: the scale pass is what recomputes
165
+ each layer's scaling from it. No-op with no active entry.
166
+
167
+ `activate` is the cold path, right after load_lora_weights: diffusers'
168
+ set_adapters() activates the adapters and sets their scales in one call.
169
+ A warm pipeline (a cache hit) has them active already and takes the
170
+ scale-only path - see set_adapter_scales for why it must.
171
+ """
172
+ names, weights, alphas = adapter_settings(loras)
173
+ if not names:
174
+ return
175
+ for name, alpha in alphas.items():
176
+ set_adapter_alpha(pipeline, name, alpha)
177
+ logger.info(f"Setting adapter weights: {list(zip(names, weights))}")
178
+ if activate:
179
+ # Positionally - diffusers' mixin calls the second parameter
180
+ # 'adapter_weights' while custom pipelines that delegate to the model
181
+ # (ostris/Krea2OstrisEdit) call it 'weights'
182
+ pipeline.set_adapters(names, weights)
183
+ else:
184
+ set_adapter_scales(pipeline, names, weights)
185
+
186
+
104
187
  def load_loras(loras, pipeline):
105
- """Load and configure LoRA models."""
106
- adapter_names = []
107
- adapter_weights = []
108
- alphas = {}
188
+ """Load and configure LoRA models.
189
+
190
+ Names, scales and alphas come from adapter_settings, read before the
191
+ entries are popped, so a load and a later cache hit's
192
+ apply_adapter_settings set the same values on the same names."""
193
+ # A snapshot of each entry's runtime keys, taken before the pops below
194
+ settings = [
195
+ {k: lora.get(k) for k in ("model_name", "adapter_name", "scale", "alpha")}
196
+ if isinstance(lora, dict)
197
+ else lora
198
+ for lora in loras or []
199
+ ]
200
+ names = iter(adapter_settings(settings)[0])
109
201
 
110
202
  for i, lora in enumerate(loras or []):
111
203
  if isinstance(lora, dict) and lora.get("model_name") is None:
@@ -117,40 +209,15 @@ def load_loras(loras, pipeline):
117
209
  logger.info(f"Loading LoRA: {model_name}")
118
210
  emit_phase("loading", detail=f"LoRA: {model_name}")
119
211
 
120
- # Use provided adapter_name or generate from index - `or`, because a
121
- # variable nulled by the caller arrives as a present None
122
- adapter_name = lora.pop("adapter_name", None) or str(i)
123
- adapter_names.append(adapter_name)
212
+ # Popped before the load: everything left in the dict is a keyword
213
+ # argument to load_lora_weights; the scale and alpha are applied to
214
+ # the layers afterwards rather than passed to it
215
+ for key in ("adapter_name", "scale", "alpha"):
216
+ lora.pop(key, None)
124
217
 
125
- # Extract scale for adapter weights - float() because the schema takes a
126
- # 'variable:' reference here, and a variable declared as a string default
127
- # substitutes as one
128
- scale = lora.pop("scale", None)
129
- scale = 1.0 if scale is None else float(scale)
130
- adapter_weights.append(scale)
218
+ pipeline.load_lora_weights(model_name, adapter_name=next(names), **lora)
131
219
 
132
- # Popped before the load: everything left in the dict is a keyword
133
- # argument to load_lora_weights, and the alpha is applied to the layers
134
- # afterwards rather than passed to it
135
- alpha = lora.pop("alpha", None)
136
- if alpha is not None:
137
- alphas[adapter_name] = alpha
138
-
139
- # Load the LoRA with the adapter name
140
- pipeline.load_lora_weights(model_name, adapter_name=adapter_name, **lora)
141
-
142
- for adapter_name, alpha in alphas.items():
143
- set_adapter_alpha(pipeline, adapter_name, alpha)
144
-
145
- # Set adapter weights for all loaded LoRAs
146
- if adapter_names:
147
- logger.info(
148
- f"Setting adapter weights: {list(zip(adapter_names, adapter_weights))}"
149
- )
150
- # Positionally - diffusers' mixin calls the second parameter 'adapter_weights'
151
- # while custom pipelines that delegate to the model (ostris/Krea2OstrisEdit)
152
- # call it 'weights'
153
- pipeline.set_adapters(adapter_names, adapter_weights)
220
+ apply_adapter_settings(settings, pipeline, activate=True)
154
221
 
155
222
 
156
223
  def load_ip_adapter(ip_adapter_definition, pipeline):
@@ -447,6 +447,23 @@ def load_and_configure_scheduler(
447
447
  ),
448
448
  )
449
449
 
450
+ apply_scheduler_shift(scheduler_definition, pipeline, component_name)
451
+
452
+
453
+ def apply_scheduler_shift(scheduler_definition, pipeline, component_name="scheduler"):
454
+ """Set the shift a scheduler definition names on an already-loaded
455
+ scheduler; nothing when the definition is None or names no shift.
456
+
457
+ A load sets it after any scheduler replacement, and a pipeline cache hit
458
+ sets it again (Pipeline.apply_runtime_settings), because the cache key
459
+ leaves the shift out - a run that only moves it reuses the warm pipeline.
460
+
461
+ Raises:
462
+ ValueError: if the scheduler is registered but not loaded, or has no
463
+ set_shift()
464
+ """
465
+ if scheduler_definition is None:
466
+ return
450
467
  shift = scheduler_definition.get("shift", None)
451
468
  if shift is None:
452
469
  return