diffusers-workflow 0.15.0__tar.gz → 0.17.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (697) hide show
  1. {diffusers_workflow-0.15.0/diffusers_workflow.egg-info → diffusers_workflow-0.17.0}/PKG-INFO +5 -6
  2. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/README.md +2 -1
  3. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0/diffusers_workflow.egg-info}/PKG-INFO +5 -6
  4. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/diffusers_workflow.egg-info/SOURCES.txt +64 -22
  5. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/diffusers_workflow.egg-info/requires.txt +1 -1
  6. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/__init__.py +3 -3
  7. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/acceleration_warnings.py +1 -1
  8. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/adapter_compatibility.py +16 -1
  9. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/argument_media.py +2 -2
  10. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/arguments.py +4 -1
  11. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/content_types.py +23 -11
  12. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/devices.py +21 -4
  13. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/ARCHITECTURE.md +20 -11
  14. diffusers_workflow-0.17.0/dw/docs/ATTRIBUTIONS.md +111 -0
  15. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/DEPENDENCIES.md +2 -2
  16. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/MCP.md +19 -10
  17. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/RELEASING.md +267 -0
  18. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/SECURITY.md +46 -3
  19. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/SECURITY_QUICKREF.md +1 -0
  20. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/SERVER.md +35 -13
  21. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/TASKS.md +366 -39
  22. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/WORKFLOW_GUIDE.md +570 -31
  23. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/dsp.py +45 -0
  24. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/for_each.py +21 -0
  25. diffusers_workflow-0.17.0/dw/hold_audio.py +358 -0
  26. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/introspection.py +4 -1
  27. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/locations.py +51 -54
  28. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/media.py +26 -328
  29. diffusers_workflow-0.17.0/dw/media_readers.py +410 -0
  30. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/media_types.py +53 -0
  31. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/outbound.py +10 -5
  32. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/output_extraction.py +50 -2
  33. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_processors/chain.py +2 -2
  34. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_processors/components.py +14 -145
  35. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_processors/h3_hold.py +41 -9
  36. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_processors/h3_hold_steps.py +134 -23
  37. diffusers_workflow-0.17.0/dw/pipeline_processors/h3_mask.py +111 -0
  38. diffusers_workflow-0.17.0/dw/pipeline_processors/h3_mask_cells.py +92 -0
  39. diffusers_workflow-0.17.0/dw/pipeline_processors/h3_mask_steps.py +243 -0
  40. diffusers_workflow-0.17.0/dw/pipeline_processors/h3_rules.py +687 -0
  41. diffusers_workflow-0.17.0/dw/pipeline_processors/h3_tiles.py +366 -0
  42. diffusers_workflow-0.17.0/dw/pipeline_processors/mag_calibration.py +158 -0
  43. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_processors/pipeline.py +117 -138
  44. diffusers_workflow-0.17.0/dw/pipeline_processors/pipeline_outputs.py +144 -0
  45. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_processors/progress.py +22 -1
  46. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_processors/timing.py +44 -9
  47. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/plan.py +28 -205
  48. diffusers_workflow-0.17.0/dw/plan_downloads.py +379 -0
  49. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/previous_results.py +52 -1
  50. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/roles.py +17 -7
  51. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/runs.py +4 -2
  52. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/script_lines.py +37 -8
  53. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/security.py +52 -0
  54. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/serve.py +8 -2
  55. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/admission.py +40 -25
  56. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/api_models.py +11 -0
  57. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/catalog_shape.py +11 -1
  58. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/deps.py +13 -1
  59. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/http_security.py +3 -10
  60. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/job_history.py +127 -110
  61. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/job_results.py +6 -0
  62. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/jobs.py +15 -1
  63. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/observed_cost.py +13 -3
  64. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/outputs.py +48 -6
  65. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/routes/assets.py +0 -7
  66. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/routes/gallery.py +16 -36
  67. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/routes/jobs.py +41 -3
  68. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/routes/media.py +9 -11
  69. diffusers_workflow-0.15.0/dw/server/ui/assets/cssMode-D_BuRO9Y.js → diffusers_workflow-0.17.0/dw/server/ui/assets/cssMode-BvFOC5nO.js +1 -1
  70. diffusers_workflow-0.15.0/dw/server/ui/assets/editor.api-B6pi6BSE.js → diffusers_workflow-0.17.0/dw/server/ui/assets/editor.api-ChcCMXXR.js +1 -1
  71. diffusers_workflow-0.15.0/dw/server/ui/assets/freemarker2-mPiw3NV_.js → diffusers_workflow-0.17.0/dw/server/ui/assets/freemarker2-DT2q5NS2.js +1 -1
  72. diffusers_workflow-0.15.0/dw/server/ui/assets/handlebars-BfGb596Y.js → diffusers_workflow-0.17.0/dw/server/ui/assets/handlebars-kaJu_3a1.js +1 -1
  73. diffusers_workflow-0.15.0/dw/server/ui/assets/html-xXIqw-JZ.js → diffusers_workflow-0.17.0/dw/server/ui/assets/html-BsNsYnSX.js +1 -1
  74. diffusers_workflow-0.15.0/dw/server/ui/assets/htmlMode-B3FC_H4q.js → diffusers_workflow-0.17.0/dw/server/ui/assets/htmlMode-BcQxv5VO.js +1 -1
  75. diffusers_workflow-0.17.0/dw/server/ui/assets/index-Bm_jBlG4.css +1 -0
  76. diffusers_workflow-0.17.0/dw/server/ui/assets/index-CN0qvKxj.js +65 -0
  77. diffusers_workflow-0.15.0/dw/server/ui/assets/javascript-B-FFcgST.js → diffusers_workflow-0.17.0/dw/server/ui/assets/javascript-CEdXynRF.js +1 -1
  78. diffusers_workflow-0.15.0/dw/server/ui/assets/jsonMode-BELbxUQD.js → diffusers_workflow-0.17.0/dw/server/ui/assets/jsonMode-hbOYEMCP.js +1 -1
  79. diffusers_workflow-0.15.0/dw/server/ui/assets/liquid-CxXhb7_e.js → diffusers_workflow-0.17.0/dw/server/ui/assets/liquid-JLSoiOSA.js +1 -1
  80. diffusers_workflow-0.15.0/dw/server/ui/assets/lspLanguageFeatures-sXyBqSzn.js → diffusers_workflow-0.17.0/dw/server/ui/assets/lspLanguageFeatures-BOyNtxH5.js +1 -1
  81. diffusers_workflow-0.15.0/dw/server/ui/assets/mdx-4jPGQ4yb.js → diffusers_workflow-0.17.0/dw/server/ui/assets/mdx-sDDXTu9v.js +1 -1
  82. diffusers_workflow-0.15.0/dw/server/ui/assets/monaco-ByFdQnrs.js → diffusers_workflow-0.17.0/dw/server/ui/assets/monaco-1MuWdUz9.js +4 -4
  83. diffusers_workflow-0.15.0/dw/server/ui/assets/python-D3CL9Y6O.js → diffusers_workflow-0.17.0/dw/server/ui/assets/python-FwMP_5s9.js +1 -1
  84. diffusers_workflow-0.15.0/dw/server/ui/assets/razor-F_hjmtqk.js → diffusers_workflow-0.17.0/dw/server/ui/assets/razor-CHr8DUwq.js +1 -1
  85. diffusers_workflow-0.15.0/dw/server/ui/assets/tsMode-BiyDvHYY.js → diffusers_workflow-0.17.0/dw/server/ui/assets/tsMode-DMRBdzCs.js +1 -1
  86. diffusers_workflow-0.15.0/dw/server/ui/assets/typescript-DBE1Uz0U.js → diffusers_workflow-0.17.0/dw/server/ui/assets/typescript-DX26K2Zt.js +1 -1
  87. diffusers_workflow-0.15.0/dw/server/ui/assets/workers-Ci7sZ35J.js → diffusers_workflow-0.17.0/dw/server/ui/assets/workers-C00WfVNJ.js +1 -1
  88. diffusers_workflow-0.15.0/dw/server/ui/assets/xml-Eqpmo6a1.js → diffusers_workflow-0.17.0/dw/server/ui/assets/xml-5-4XmnnO.js +1 -1
  89. diffusers_workflow-0.15.0/dw/server/ui/assets/yaml-BNP_JiwW.js → diffusers_workflow-0.17.0/dw/server/ui/assets/yaml-DjHDC-oK.js +1 -1
  90. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/index.html +2 -2
  91. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/updater.py +1 -1
  92. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/step_value_checks.py +3 -11
  93. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/task_domains.py +48 -6
  94. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/task_problems.py +62 -9
  95. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/assess.py +174 -16
  96. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/audio_dynamics.py +112 -3
  97. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/audio_transcription.py +114 -10
  98. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/background_remover.py +12 -1
  99. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/cuts.py +137 -297
  100. diffusers_workflow-0.17.0/dw/tasks/cuts_lines.py +380 -0
  101. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/depth_estimator.py +27 -2
  102. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/diffusion_upscale.py +18 -2
  103. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/face_track.py +246 -49
  104. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/fit.py +46 -8
  105. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/h3_latent_upscale.py +93 -33
  106. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/image_to_text.py +1 -0
  107. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/image_utils.py +49 -9
  108. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/interpolate_frames.py +18 -2
  109. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/judge.py +1 -0
  110. diffusers_workflow-0.17.0/dw/tasks/mmaudio_decoder.py +128 -0
  111. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/model_handlers.py +149 -9
  112. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/pair_audio.py +17 -6
  113. diffusers_workflow-0.17.0/dw/tasks/phrases.py +285 -0
  114. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/registry.py +57 -0
  115. diffusers_workflow-0.17.0/dw/tasks/remove_object.py +201 -0
  116. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/restore_faces.py +39 -2
  117. diffusers_workflow-0.17.0/dw/tasks/script_check.py +692 -0
  118. diffusers_workflow-0.17.0/dw/tasks/script_findings.py +580 -0
  119. diffusers_workflow-0.17.0/dw/tasks/script_take.py +298 -0
  120. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/segment.py +46 -9
  121. diffusers_workflow-0.17.0/dw/tasks/sound_effects.py +519 -0
  122. diffusers_workflow-0.17.0/dw/tasks/speech_generation.py +551 -0
  123. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/task.py +6 -0
  124. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/text_generation.py +37 -8
  125. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/upscale.py +19 -1
  126. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/video_handlers.py +51 -7
  127. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/video_utils.py +9 -28
  128. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/voice_attribution.py +153 -14
  129. diffusers_workflow-0.17.0/dw/tasks/weights.py +90 -0
  130. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/windows.py +11 -4
  131. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/trust.py +97 -0
  132. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/validation.py +41 -4
  133. diffusers_workflow-0.17.0/dw/vendored/__init__.py +11 -0
  134. diffusers_workflow-0.17.0/dw/vendored/audio8_tts_model.py +2033 -0
  135. diffusers_workflow-0.17.0/dw/vendored/mmaudio_clip.py +399 -0
  136. diffusers_workflow-0.17.0/dw/vendored/mmaudio_model.py +772 -0
  137. diffusers_workflow-0.17.0/dw/vendored/mmaudio_sync_model.py +452 -0
  138. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/video_extensions.py +6 -1
  139. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/vram_estimate.py +121 -7
  140. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/vram_inheritance.py +105 -16
  141. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/worker.py +7 -0
  142. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/worker_manager.py +13 -0
  143. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/worker_protocol.py +16 -0
  144. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/workflow_schema.json +1 -1
  145. diffusers_workflow-0.17.0/dw/workflows/h3_context_ir.json +57 -0
  146. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/writers.py +71 -0
  147. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/catalog.py +2 -2
  148. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/client.py +5 -1
  149. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/tools_catalog.py +1 -1
  150. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/pyproject.toml +4 -6
  151. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_admission.py +216 -1
  152. diffusers_workflow-0.17.0/tests/test_analyze_phrases.py +231 -0
  153. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_api_contract.py +7 -3
  154. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_arch_metrics.py +11 -0
  155. diffusers_workflow-0.17.0/tests/test_audio8_tts_model.py +362 -0
  156. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_audio_utils.py +68 -0
  157. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_cache_blocks.py +17 -17
  158. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_catalog_shape.py +33 -0
  159. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_catalog_structure.py +59 -3
  160. diffusers_workflow-0.17.0/tests/test_chain_h3_native.py +210 -0
  161. diffusers_workflow-0.17.0/tests/test_cost_scaling_h3_frames.py +23 -0
  162. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_dsp.py +26 -0
  163. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_face_track.py +277 -1
  164. diffusers_workflow-0.17.0/tests/test_fit_templates.py +400 -0
  165. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_fit_to_model.py +118 -0
  166. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_forget_workspace_history.py +21 -9
  167. diffusers_workflow-0.17.0/tests/test_fractional_fps.py +94 -0
  168. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_gallery_roles.py +77 -6
  169. diffusers_workflow-0.17.0/tests/test_guide_pointers.py +132 -0
  170. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_h3_context_ir.py +14 -0
  171. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_h3_hold_audio.py +99 -1
  172. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_h3_latent_upscale.py +93 -9
  173. diffusers_workflow-0.17.0/tests/test_h3_mask.py +1164 -0
  174. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_h3_refine.py +485 -0
  175. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_h3_rules.py +57 -1
  176. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_h3_sparse_defaults.py +3 -2
  177. diffusers_workflow-0.17.0/tests/test_h3_tiles.py +411 -0
  178. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_h3_upscaler_source.py +2 -1
  179. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_h3_vram_ceiling.py +16 -0
  180. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_inherited_cost.py +57 -9
  181. diffusers_workflow-0.17.0/tests/test_job_history_parity.py +58 -0
  182. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_jobs_listing.py +15 -0
  183. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_join_windows.py +26 -0
  184. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_locations.py +147 -0
  185. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_lora_disable.py +12 -0
  186. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_ltx2_ic_loras.py +195 -4
  187. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_ltx_prompt_library.py +5 -0
  188. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_client.py +15 -2
  189. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_server.py +23 -152
  190. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_media_frames.py +1 -1
  191. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_media_layering.py +2 -2
  192. diffusers_workflow-0.17.0/tests/test_media_sample_frames.py +144 -0
  193. diffusers_workflow-0.17.0/tests/test_mmaudio_decoder.py +162 -0
  194. diffusers_workflow-0.17.0/tests/test_mmaudio_model.py +545 -0
  195. diffusers_workflow-0.17.0/tests/test_mmaudio_sync_model.py +195 -0
  196. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_modular_output_properties.py +45 -2
  197. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_modular_progress.py +26 -0
  198. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_notes_api.py +31 -0
  199. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_observed_cost.py +19 -0
  200. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_outbound.py +53 -2
  201. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_pipeline_components.py +71 -0
  202. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_plan.py +283 -35
  203. diffusers_workflow-0.17.0/tests/test_plan_cuts_phrases.py +248 -0
  204. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_plugin_skills.py +233 -6
  205. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_previous_results.py +163 -0
  206. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_reference_limits.py +6 -1
  207. diffusers_workflow-0.17.0/tests/test_remove_object.py +353 -0
  208. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_result_fps.py +4 -9
  209. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_roles.py +20 -1
  210. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_runs.py +21 -0
  211. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_script_check.py +509 -15
  212. diffusers_workflow-0.17.0/tests/test_seam_look.py +254 -0
  213. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_security_ssrf.py +8 -1
  214. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_security_trust_gate.py +180 -0
  215. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_security_web_headers.py +21 -7
  216. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_segment.py +58 -2
  217. diffusers_workflow-0.17.0/tests/test_separate_stems.py +229 -0
  218. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_serve_main.py +47 -0
  219. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_server.py +97 -23
  220. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_server_jobs.py +120 -5
  221. diffusers_workflow-0.17.0/tests/test_sound_effects.py +420 -0
  222. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_speech_generation.py +306 -0
  223. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_step_cache.py +17 -0
  224. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_step_timing.py +51 -0
  225. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_task_discovery.py +34 -0
  226. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_task_domains.py +33 -0
  227. diffusers_workflow-0.17.0/tests/test_task_file_weights.py +340 -0
  228. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_task_registry_rules.py +1 -0
  229. diffusers_workflow-0.17.0/tests/test_task_weights.py +628 -0
  230. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_transcribe_audio.py +144 -0
  231. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_validation.py +3 -0
  232. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_video_extensions.py +40 -7
  233. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_voice_attribution.py +24 -0
  234. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_vram_estimate.py +106 -1
  235. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_vram_inheritance.py +114 -3
  236. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_worker_execute.py +33 -0
  237. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_workflow_trust.py +25 -0
  238. diffusers_workflow-0.17.0/tests/test_zimage_vram.py +61 -0
  239. diffusers_workflow-0.15.0/dw/hold_audio.py +0 -123
  240. diffusers_workflow-0.15.0/dw/pipeline_processors/h3_rules.py +0 -223
  241. diffusers_workflow-0.15.0/dw/server/ui/assets/index-Civ6zDZP.js +0 -64
  242. diffusers_workflow-0.15.0/dw/server/ui/assets/index-PRSQwOeN.css +0 -1
  243. diffusers_workflow-0.15.0/dw/tasks/script_check.py +0 -845
  244. diffusers_workflow-0.15.0/dw/tasks/speech_generation.py +0 -258
  245. diffusers_workflow-0.15.0/dw/workflows/h3_context_ir.json +0 -57
  246. diffusers_workflow-0.15.0/tests/test_fit_templates.py +0 -137
  247. diffusers_workflow-0.15.0/tests/test_separate_stems.py +0 -105
  248. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/LICENSE +0 -0
  249. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/MANIFEST.in +0 -0
  250. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/diffusers_workflow.egg-info/dependency_links.txt +0 -0
  251. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/diffusers_workflow.egg-info/entry_points.txt +0 -0
  252. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/diffusers_workflow.egg-info/top_level.txt +0 -0
  253. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/argument_warnings.py +0 -0
  254. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/assessment_rules.py +0 -0
  255. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/assets.py +0 -0
  256. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/audio_qc.py +0 -0
  257. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/cache_blocks.json +0 -0
  258. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/cache_blocks.py +0 -0
  259. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/community_pipelines/pipeline_flux_rf_inversion.py +0 -0
  260. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/community_pipelines/pipeline_ltx2_refine.py +0 -0
  261. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/cost_scaling.py +0 -0
  262. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/disk_caches.py +0 -0
  263. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/dissolve_frame_errors.py +0 -0
  264. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/ACCELERATION.md +0 -0
  265. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/AGENT_LOOP.md +0 -0
  266. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/IP_ADAPTER.md +0 -0
  267. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/LORAS.md +0 -0
  268. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/PROMPT_WEIGHTING.md +0 -0
  269. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/QUANTIZATION.md +0 -0
  270. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/RECIPES_24GB.md +0 -0
  271. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/REMOTE.md +0 -0
  272. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/TESTING.md +0 -0
  273. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/WORKER_GUIDE.md +0 -0
  274. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/docs/WORKSPACES.md +0 -0
  275. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/download_watch.py +0 -0
  276. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/elision.py +0 -0
  277. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/events.py +0 -0
  278. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/guides.py +0 -0
  279. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/host_memory.py +0 -0
  280. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/host_memory_projection.py +0 -0
  281. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/hub_cache.py +0 -0
  282. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/kernel_availability.py +0 -0
  283. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/library.py +0 -0
  284. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/log_setup.py +0 -0
  285. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/lora_catalog.py +0 -0
  286. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/lora_catalog_schema.json +0 -0
  287. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/lora_hub.py +0 -0
  288. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/media_compare.py +0 -0
  289. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/media_frames.py +0 -0
  290. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/notes.py +0 -0
  291. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/path_redaction.py +0 -0
  292. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_ownership.py +0 -0
  293. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_processors/adapters.py +0 -0
  294. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_processors/config_objects.py +0 -0
  295. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_processors/h3_guide_steps.py +0 -0
  296. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_processors/h3_guides.py +0 -0
  297. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_processors/placement.py +0 -0
  298. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/pipeline_processors/remote.py +0 -0
  299. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/probe_paths.py +0 -0
  300. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/prompt_schema.json +0 -0
  301. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/prompt_weighting.py +0 -0
  302. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/prompts.py +0 -0
  303. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/quantized_cache.py +0 -0
  304. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/realize.py +0 -0
  305. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/reference_limits.py +0 -0
  306. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/reference_names.py +0 -0
  307. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/references.py +0 -0
  308. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/result.py +1 -1
  309. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/run.py +0 -0
  310. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/scalar_result_validation.py +0 -0
  311. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/schema.py +0 -0
  312. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/__init__.py +0 -0
  313. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/api_models_base.py +0 -0
  314. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/api_models_library.py +0 -0
  315. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/app.py +0 -0
  316. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/assess.py +0 -0
  317. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/catalog.py +0 -0
  318. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/dispatch.py +0 -0
  319. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/enhancers.py +0 -0
  320. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/exports.py +0 -0
  321. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/guides.py +0 -0
  322. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/host_ram_need.py +0 -0
  323. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/inline_media.py +0 -0
  324. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/job_record.py +0 -0
  325. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/mcp_mount.py +0 -0
  326. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/netinfo.py +0 -0
  327. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/pool.py +0 -0
  328. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/routes/__init__.py +0 -0
  329. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/routes/files.py +0 -0
  330. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/routes/library.py +0 -0
  331. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/routes/loras.py +0 -0
  332. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/routes/system.py +0 -0
  333. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/sysinfo.py +0 -0
  334. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/abap-08VXUWAP.js +0 -0
  335. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/apex-BWPQTe0t.js +0 -0
  336. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/azcli-Bc_sGQ0U.js +0 -0
  337. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/bat-i0X4ZdIN.js +0 -0
  338. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/bicep-B5-_aFwp.js +0 -0
  339. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/cameligo-DMUM7wLl.js +0 -0
  340. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/clojure-Cm7r79vr.js +0 -0
  341. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/codicon-DF1abBS2.ttf +0 -0
  342. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/coffee-Ba7i2nA0.js +0 -0
  343. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/cpp-C7h46wYY.js +0 -0
  344. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/csharp-BKxtCVv1.js +0 -0
  345. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/csp-bTuwJoIa.js +0 -0
  346. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/css-DIMkf-bt.js +0 -0
  347. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/css.worker-C6lDtRpF.js +0 -0
  348. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/cypher-CVaqCwHa.js +0 -0
  349. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/dart-onAF5SnQ.js +0 -0
  350. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/dockerfile-DZFCIeNp.js +0 -0
  351. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/ecl-D05T4iGw.js +0 -0
  352. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/editor-DjpsE8to.css +0 -0
  353. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/editor.worker-BmdWdrHZ.js +0 -0
  354. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/elixir-6RTg0lbw.js +0 -0
  355. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/flow9-C5_-GSwl.js +0 -0
  356. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/fsharp-C8Ef5oNN.js +0 -0
  357. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/go-C-y9NEjX.js +0 -0
  358. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/graphql-fmXr3nnJ.js +0 -0
  359. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/hcl-CpzslTdj.js +0 -0
  360. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/html.worker-C5yZDBHz.js +0 -0
  361. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/ini-sBoK_t0W.js +0 -0
  362. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/java-BEtHBSE6.js +0 -0
  363. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/json.worker-DdeUAmHa.js +0 -0
  364. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/julia-Bri6UV-V.js +0 -0
  365. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/kotlin-BOotOW0E.js +0 -0
  366. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/less-B9JPFI3C.js +0 -0
  367. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/lexon-CfSJPG6W.js +0 -0
  368. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/lua-CsQS60Ue.js +0 -0
  369. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/m3-D-oSqn_W.js +0 -0
  370. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/markdown-Cimd5fb3.js +0 -0
  371. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/mips-CIPQ_RoX.js +0 -0
  372. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/monaco-n7clI0si.css +0 -0
  373. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/msdax-DauUninz.js +0 -0
  374. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/mysql-SOo6toE5.js +0 -0
  375. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/objective-c-FvmIjYaQ.js +0 -0
  376. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/pascal-DrH0SRf2.js +0 -0
  377. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/pascaligo-D-ptJ9y-.js +0 -0
  378. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/perl-oz_6vUea.js +0 -0
  379. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/pgsql-DTj74zXo.js +0 -0
  380. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/php-nr791fC2.js +0 -0
  381. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/pla-CopQ2nXW.js +0 -0
  382. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/postiats-43DmfD33.js +0 -0
  383. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/powerquery-D3hlyOfw.js +0 -0
  384. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/powershell-DmHpPYUd.js +0 -0
  385. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/protobuf-C531GsRP.js +0 -0
  386. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/pug-Z5eAx3Zn.js +0 -0
  387. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/qsharp-DkqhCAOL.js +0 -0
  388. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/r-BwWrilGY.js +0 -0
  389. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/redis-ClamHrr6.js +0 -0
  390. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/redshift-DT7zqm-g.js +0 -0
  391. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/restructuredtext-BYgofb2h.js +0 -0
  392. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/ruby-DezsRK8O.js +0 -0
  393. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/rust-DdL9SqIa.js +0 -0
  394. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/sb-CcwsVR0C.js +0 -0
  395. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/scala-DHpiXF5c.js +0 -0
  396. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/scheme-BeGwcela.js +0 -0
  397. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/scss-gp-XZpBa.js +0 -0
  398. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/shell-CC2rA5mh.js +0 -0
  399. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/solidity-BEEn4gHE.js +0 -0
  400. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/sophia-CRfGWb83.js +0 -0
  401. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/sparql-D_Lu-MrJ.js +0 -0
  402. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/sql-NEE52Syq.js +0 -0
  403. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/st-DbInun42.js +0 -0
  404. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/swift-Bxkupp3x.js +0 -0
  405. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +0 -0
  406. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/tcl-DISqw1ZD.js +0 -0
  407. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/ts.worker-DGGa2mF8.js +0 -0
  408. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/twig-De2hgUGE.js +0 -0
  409. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/typespec-B8J7ngcE.js +0 -0
  410. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/vb-DV3o63ZY.js +0 -0
  411. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/ui/assets/wgsl-DpFanUEy.js +0 -0
  412. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/server/worker_memory.py +0 -0
  413. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/settings.py +0 -0
  414. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/shot_span_preflight.py +0 -0
  415. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/shots.py +0 -0
  416. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/slice_preflight.py +0 -0
  417. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/sparse_attention.py +0 -0
  418. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/step.py +0 -0
  419. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/step_cache.py +0 -0
  420. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/subfolders.py +0 -0
  421. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/audio_handlers.py +0 -0
  422. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/audio_utils.py +0 -0
  423. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/beats.py +0 -0
  424. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/borders.py +0 -0
  425. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/compose_text.py +0 -0
  426. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/concat_videos.py +0 -0
  427. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/dissolve_videos.py +0 -0
  428. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/finish.py +0 -0
  429. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/finish_handlers.py +0 -0
  430. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/format_messages.py +0 -0
  431. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/gather.py +0 -0
  432. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/grade.py +0 -0
  433. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/h3_latent_upscaler_model.py +0 -0
  434. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/image_ops.py +0 -0
  435. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/join_into_song.py +0 -0
  436. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/joins.py +0 -0
  437. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/loop_bed.py +0 -0
  438. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/lut.py +0 -0
  439. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/measure_sync.py +0 -0
  440. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/model_cache.py +0 -0
  441. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/qr_code.py +0 -0
  442. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/rife_model.py +0 -0
  443. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/select.py +0 -0
  444. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/stabilize.py +0 -0
  445. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/tensor_image.py +0 -0
  446. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/text_sections.py +0 -0
  447. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/trim.py +0 -0
  448. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/tasks/zoe_depth.py +0 -0
  449. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/test.py +0 -0
  450. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/type_helpers.py +0 -0
  451. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/type_references.py +0 -0
  452. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/validate.py +0 -0
  453. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/variable_constraints.py +0 -0
  454. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/variables.py +0 -0
  455. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/video_size_errors.py +0 -0
  456. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/window_count_errors.py +0 -0
  457. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/workflow.py +0 -0
  458. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/workflow_run.py +0 -0
  459. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/workflows/flux3_klein_upsample.json +0 -0
  460. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/workflows/flux3_klein_upsample_edit.json +0 -0
  461. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/workflows/test.json +0 -0
  462. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/workspace.py +0 -0
  463. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw/workspace_copy.py +0 -0
  464. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/__init__.py +0 -0
  465. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/__main__.py +0 -0
  466. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/assets.py +0 -0
  467. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/authoring.py +0 -0
  468. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/confine.py +0 -0
  469. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/diagnose.py +0 -0
  470. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/exports.py +0 -0
  471. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/guides.py +0 -0
  472. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/loras.py +0 -0
  473. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/media.py +0 -0
  474. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/models.py +0 -0
  475. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/prompts.py +0 -0
  476. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/server.py +0 -0
  477. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/tools_authoring.py +0 -0
  478. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/tools_jobs.py +0 -0
  479. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/tools_media.py +0 -0
  480. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/dw_mcp/workspaces.py +0 -0
  481. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/setup.cfg +0 -0
  482. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_admission_capacity.py +0 -0
  483. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_analyze_beats.py +0 -0
  484. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_arch_report.py +0 -0
  485. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_architecture_map.py +0 -0
  486. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_argument_updates.py +0 -0
  487. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_arguments.py +0 -0
  488. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_assemble_and_score_target_lufs.py +0 -0
  489. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_assess.py +0 -0
  490. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_assessment_rules.py +0 -0
  491. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_assets.py +0 -0
  492. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_attention_backend_trace.py +0 -0
  493. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_attention_slicing.py +0 -0
  494. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_best_of_n_template.py +0 -0
  495. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_borders.py +0 -0
  496. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_cache_stats.py +0 -0
  497. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_catalog_speed_defaults.py +0 -0
  498. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_chain.py +0 -0
  499. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_ci_config.py +0 -0
  500. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_cli.py +0 -0
  501. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_compare_route.py +0 -0
  502. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_component_name_errors.py +0 -0
  503. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_component_pruning.py +0 -0
  504. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_component_type_errors.py +0 -0
  505. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_compose_text.py +0 -0
  506. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_concat_videos.py +0 -0
  507. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_config_objects.py +0 -0
  508. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_configuration_schema.py +0 -0
  509. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_content_types.py +0 -0
  510. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_dependencies_declared.py +0 -0
  511. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_depth_estimator.py +0 -0
  512. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_device.py +0 -0
  513. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_device_helpers.py +0 -0
  514. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_device_portability.py +0 -0
  515. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_dialogue_short_voices.py +0 -0
  516. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_diffusion_upscale.py +0 -0
  517. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_disk_caches.py +0 -0
  518. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_dissolve_frame_errors.py +0 -0
  519. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_dissolve_videos.py +0 -0
  520. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_docs_links.py +0 -0
  521. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_download_watch.py +0 -0
  522. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_elision.py +0 -0
  523. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_events.py +0 -0
  524. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_examples.py +0 -0
  525. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_faststart.py +0 -0
  526. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_find_loop_bed.py +0 -0
  527. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_finish.py +0 -0
  528. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_flux3_catalog.py +0 -0
  529. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_for_each.py +0 -0
  530. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_gather.py +0 -0
  531. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_grade.py +0 -0
  532. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_guide_chain_validation.py +0 -0
  533. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_guides_validation.py +0 -0
  534. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_h3_adapters.py +0 -0
  535. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_h3_guides.py +0 -0
  536. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_h3_schedule.py +0 -0
  537. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_hf_placement.py +0 -0
  538. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_host_memory.py +0 -0
  539. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_host_memory_projection.py +0 -0
  540. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_host_ram_need.py +0 -0
  541. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_hub_cache.py +0 -0
  542. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_image_ops.py +0 -0
  543. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_image_to_text.py +0 -0
  544. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_image_utils.py +0 -0
  545. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_inductor_cache_default.py +0 -0
  546. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_ingredients_grid.py +0 -0
  547. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_integration.py +0 -0
  548. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_interpolate_frames.py +0 -0
  549. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_introspection.py +0 -0
  550. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_job_history_device.py +0 -0
  551. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_job_history_wal.py +0 -0
  552. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_job_progress.py +0 -0
  553. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_job_warnings.py +0 -0
  554. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_jobs_reused.py +0 -0
  555. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_join_into_song.py +0 -0
  556. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_judge.py +0 -0
  557. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_kernel_availability.py +0 -0
  558. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_library_path.py +0 -0
  559. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_library_sources.py +0 -0
  560. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_list_images.py +0 -0
  561. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_lora_alpha.py +0 -0
  562. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_lora_catalog.py +0 -0
  563. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_lora_hub.py +0 -0
  564. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_lora_library.py +0 -0
  565. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_ltx2_diffusion_decode.py +0 -0
  566. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_ltx2_extend_clip.py +0 -0
  567. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_ltx2_refine_pipeline.py +0 -0
  568. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_lut.py +0 -0
  569. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_assets.py +0 -0
  570. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_authoring.py +0 -0
  571. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_catalog.py +0 -0
  572. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_confine.py +0 -0
  573. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_diagnose.py +0 -0
  574. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_exports.py +0 -0
  575. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_guides.py +0 -0
  576. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_loras.py +0 -0
  577. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_main.py +0 -0
  578. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_media.py +0 -0
  579. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_models.py +0 -0
  580. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_prompts.py +0 -0
  581. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_twins.py +0 -0
  582. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mcp_workspaces.py +0 -0
  583. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_measure_sync.py +0 -0
  584. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_media_audio.py +0 -0
  585. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_media_compare.py +0 -0
  586. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_media_decode_threads.py +0 -0
  587. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_media_info.py +0 -0
  588. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mix_audio.py +0 -0
  589. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_model_cache.py +0 -0
  590. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_modular_pipeline.py +0 -0
  591. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mps_fallback_warning.py +0 -0
  592. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_mps_rope_precision.py +0 -0
  593. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_notes.py +0 -0
  594. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_notes_bookkeeping.py +0 -0
  595. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_null_media.py +0 -0
  596. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_numeric_coercion.py +0 -0
  597. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_offload_placement.py +0 -0
  598. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_output_references.py +0 -0
  599. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_pair_audio.py +0 -0
  600. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_pair_audio_fit.py +0 -0
  601. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_parallel_loading_default.py +0 -0
  602. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_path_redaction.py +0 -0
  603. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_phase_events.py +0 -0
  604. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_pipeline_caching.py +0 -0
  605. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_plan_cuts.py +0 -0
  606. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_prepare_pipeline.py +0 -0
  607. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_previous_result_walker_parity.py +0 -0
  608. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_prompt_library.py +0 -0
  609. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_prompt_parser.py +0 -0
  610. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_prompt_references.py +0 -0
  611. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_prompt_weighting.py +0 -0
  612. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_prompts.py +0 -0
  613. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_quantized_cache.py +0 -0
  614. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_read_frame_range.py +0 -0
  615. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_real_models.py +0 -0
  616. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_realize.py +0 -0
  617. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_recenter_crop.py +0 -0
  618. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_reference_names.py +0 -0
  619. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_reference_skip_sets.py +0 -0
  620. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_references.py +0 -0
  621. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_rerun_lineage.py +0 -0
  622. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_rerun_new_seed.py +0 -0
  623. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_resize_bucket.py +0 -0
  624. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_restore_faces_helper_cache.py +0 -0
  625. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_restore_faces_video.py +0 -0
  626. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_result.py +0 -0
  627. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_result_output_naming.py +0 -0
  628. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_rule_parity.py +0 -0
  629. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_run_manifest_roles.py +0 -0
  630. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_runtime_settings.py +0 -0
  631. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_scalar_result_validation.py +0 -0
  632. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_scheduler_config.py +0 -0
  633. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_schema.py +0 -0
  634. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_security.py +0 -0
  635. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_security_auth.py +0 -0
  636. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_security_decoder_bombs.py +0 -0
  637. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_security_input_caps.py +0 -0
  638. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_security_symlinks.py +0 -0
  639. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_select.py +0 -0
  640. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_select_validation.py +0 -0
  641. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_server_assess.py +0 -0
  642. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_server_downloads.py +0 -0
  643. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_server_exports.py +0 -0
  644. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_server_gallery_image.py +0 -0
  645. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_server_guides.py +0 -0
  646. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_server_info.py +0 -0
  647. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_server_library_path.py +0 -0
  648. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_server_loras.py +0 -0
  649. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_server_mcp.py +0 -0
  650. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_server_workspaces.py +0 -0
  651. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_shaping_logs.py +0 -0
  652. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_shot_span_preflight.py +0 -0
  653. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_shots.py +0 -0
  654. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_slice_preflight.py +0 -0
  655. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_sparse_attention_backends.py +0 -0
  656. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_sparse_attention_processor.py +0 -0
  657. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_sparse_attention_tiles.py +0 -0
  658. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_sparse_attention_wiring.py +0 -0
  659. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_stabilize.py +0 -0
  660. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_stars.py +0 -0
  661. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_step.py +0 -0
  662. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_strip_exif_and_watermark.py +0 -0
  663. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_sub_workflow_resolver.py +0 -0
  664. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_subfolders.py +0 -0
  665. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_task.py +0 -0
  666. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_task_public_imports.py +0 -0
  667. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_task_signature_errors.py +0 -0
  668. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_template_defaults.py +0 -0
  669. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_template_subfolders.py +0 -0
  670. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_tensor_image.py +0 -0
  671. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_text_generation.py +0 -0
  672. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_text_sections.py +0 -0
  673. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_trim_video.py +0 -0
  674. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_type_helpers.py +0 -0
  675. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_type_helpers_concurrency.py +0 -0
  676. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_ui_twins.py +0 -0
  677. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_unbraced_type_warning.py +0 -0
  678. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_updater.py +0 -0
  679. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_validate_arguments.py +0 -0
  680. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_variable_constraints.py +0 -0
  681. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_variables.py +0 -0
  682. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_video_size_errors.py +0 -0
  683. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_video_utils.py +0 -0
  684. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_vram_guides.py +0 -0
  685. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_window_count_errors.py +0 -0
  686. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_window_video.py +0 -0
  687. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_worker.py +0 -0
  688. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_worker_job_peak_rss.py +0 -0
  689. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_worker_manager.py +0 -0
  690. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_worker_messages.py +0 -0
  691. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_worker_pool.py +0 -0
  692. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_workflow.py +0 -0
  693. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_workflow_run_keys.py +0 -0
  694. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_workflow_snapshot.py +0 -0
  695. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_workflow_step_cache.py +0 -0
  696. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_workspace.py +0 -0
  697. {diffusers_workflow-0.15.0 → diffusers_workflow-0.17.0}/tests/test_workspace_copy.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.15.0
3
+ Version: 0.17.0
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -8,17 +8,15 @@ Project-URL: Homepage, https://github.com/dkackman/diffusers-workflow
8
8
  Classifier: Development Status :: 3 - Alpha
9
9
  Classifier: Intended Audience :: Developers
10
10
  Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.10
12
- Classifier: Programming Language :: Python :: 3.11
13
11
  Classifier: Programming Language :: Python :: 3.12
14
12
  Classifier: Programming Language :: Python :: 3.13
15
13
  Classifier: Programming Language :: Python :: 3.14
16
- Requires-Python: >=3.10
14
+ Requires-Python: >=3.12
17
15
  Description-Content-Type: text/markdown
18
16
  License-File: LICENSE
19
17
  Requires-Dist: torch>=2.14.1
20
18
  Requires-Dist: torchvision>=0.29.1
21
- Requires-Dist: diffusers>=0.40.0
19
+ Requires-Dist: diffusers>=0.42.0
22
20
  Requires-Dist: transformers>=5.19.0
23
21
  Requires-Dist: accelerate>=1.15.0
24
22
  Requires-Dist: peft>=0.21.2
@@ -96,7 +94,7 @@ two front ends on it: an **MCP server**, so Claude Code (or any MCP client)
96
94
  can author, run and inspect generations; and a **web UI** for doing the same
97
95
  by hand. A CLI sits underneath for when you want neither.
98
96
 
99
- **Python 3.10-3.14 | CUDA (NVIDIA) | MPS (Apple Silicon) | CPU**
97
+ **Python 3.12-3.14 | CUDA (NVIDIA) | MPS (Apple Silicon) | CPU**
100
98
 
101
99
  <picture>
102
100
  <source media="(prefers-color-scheme: dark)" srcset="docs/img/ui-workflows-dark.png">
@@ -331,3 +329,4 @@ frame interpolation and more.
331
329
  - [Testing](docs/TESTING.md) — Running the test suite
332
330
  - [Releasing](docs/RELEASING.md) — Cutting a release from a version tag
333
331
  - [Agent Loop](docs/AGENT_LOOP.md) — What the automated implementer/tester ticket labels mean, for anyone joining an Issue
332
+ - [Attributions](docs/ATTRIBUTIONS.md) — Code included from other projects, and the projects whose ideas dw reimplemented
@@ -10,7 +10,7 @@ two front ends on it: an **MCP server**, so Claude Code (or any MCP client)
10
10
  can author, run and inspect generations; and a **web UI** for doing the same
11
11
  by hand. A CLI sits underneath for when you want neither.
12
12
 
13
- **Python 3.10-3.14 | CUDA (NVIDIA) | MPS (Apple Silicon) | CPU**
13
+ **Python 3.12-3.14 | CUDA (NVIDIA) | MPS (Apple Silicon) | CPU**
14
14
 
15
15
  <picture>
16
16
  <source media="(prefers-color-scheme: dark)" srcset="docs/img/ui-workflows-dark.png">
@@ -245,3 +245,4 @@ frame interpolation and more.
245
245
  - [Testing](docs/TESTING.md) — Running the test suite
246
246
  - [Releasing](docs/RELEASING.md) — Cutting a release from a version tag
247
247
  - [Agent Loop](docs/AGENT_LOOP.md) — What the automated implementer/tester ticket labels mean, for anyone joining an Issue
248
+ - [Attributions](docs/ATTRIBUTIONS.md) — Code included from other projects, and the projects whose ideas dw reimplemented
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.15.0
3
+ Version: 0.17.0
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -8,17 +8,15 @@ Project-URL: Homepage, https://github.com/dkackman/diffusers-workflow
8
8
  Classifier: Development Status :: 3 - Alpha
9
9
  Classifier: Intended Audience :: Developers
10
10
  Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.10
12
- Classifier: Programming Language :: Python :: 3.11
13
11
  Classifier: Programming Language :: Python :: 3.12
14
12
  Classifier: Programming Language :: Python :: 3.13
15
13
  Classifier: Programming Language :: Python :: 3.14
16
- Requires-Python: >=3.10
14
+ Requires-Python: >=3.12
17
15
  Description-Content-Type: text/markdown
18
16
  License-File: LICENSE
19
17
  Requires-Dist: torch>=2.14.1
20
18
  Requires-Dist: torchvision>=0.29.1
21
- Requires-Dist: diffusers>=0.40.0
19
+ Requires-Dist: diffusers>=0.42.0
22
20
  Requires-Dist: transformers>=5.19.0
23
21
  Requires-Dist: accelerate>=1.15.0
24
22
  Requires-Dist: peft>=0.21.2
@@ -96,7 +94,7 @@ two front ends on it: an **MCP server**, so Claude Code (or any MCP client)
96
94
  can author, run and inspect generations; and a **web UI** for doing the same
97
95
  by hand. A CLI sits underneath for when you want neither.
98
96
 
99
- **Python 3.10-3.14 | CUDA (NVIDIA) | MPS (Apple Silicon) | CPU**
97
+ **Python 3.12-3.14 | CUDA (NVIDIA) | MPS (Apple Silicon) | CPU**
100
98
 
101
99
  <picture>
102
100
  <source media="(prefers-color-scheme: dark)" srcset="docs/img/ui-workflows-dark.png">
@@ -331,3 +329,4 @@ frame interpolation and more.
331
329
  - [Testing](docs/TESTING.md) — Running the test suite
332
330
  - [Releasing](docs/RELEASING.md) — Cutting a release from a version tag
333
331
  - [Agent Loop](docs/AGENT_LOOP.md) — What the automated implementer/tester ticket labels mean, for anyone joining an Issue
332
+ - [Attributions](docs/ATTRIBUTIONS.md) — Code included from other projects, and the projects whose ideas dw reimplemented
@@ -45,6 +45,7 @@ dw/lora_hub.py
45
45
  dw/media.py
46
46
  dw/media_compare.py
47
47
  dw/media_frames.py
48
+ dw/media_readers.py
48
49
  dw/media_types.py
49
50
  dw/notes.py
50
51
  dw/outbound.py
@@ -52,6 +53,7 @@ dw/output_extraction.py
52
53
  dw/path_redaction.py
53
54
  dw/pipeline_ownership.py
54
55
  dw/plan.py
56
+ dw/plan_downloads.py
55
57
  dw/previous_results.py
56
58
  dw/probe_paths.py
57
59
  dw/prompt_schema.json
@@ -109,6 +111,7 @@ dw/community_pipelines/pipeline_ltx2_refine.py
109
111
  dw/docs/ACCELERATION.md
110
112
  dw/docs/AGENT_LOOP.md
111
113
  dw/docs/ARCHITECTURE.md
114
+ dw/docs/ATTRIBUTIONS.md
112
115
  dw/docs/DEPENDENCIES.md
113
116
  dw/docs/IP_ADAPTER.md
114
117
  dw/docs/LORAS.md
@@ -134,8 +137,14 @@ dw/pipeline_processors/h3_guide_steps.py
134
137
  dw/pipeline_processors/h3_guides.py
135
138
  dw/pipeline_processors/h3_hold.py
136
139
  dw/pipeline_processors/h3_hold_steps.py
140
+ dw/pipeline_processors/h3_mask.py
141
+ dw/pipeline_processors/h3_mask_cells.py
142
+ dw/pipeline_processors/h3_mask_steps.py
137
143
  dw/pipeline_processors/h3_rules.py
144
+ dw/pipeline_processors/h3_tiles.py
145
+ dw/pipeline_processors/mag_calibration.py
138
146
  dw/pipeline_processors/pipeline.py
147
+ dw/pipeline_processors/pipeline_outputs.py
139
148
  dw/pipeline_processors/placement.py
140
149
  dw/pipeline_processors/progress.py
141
150
  dw/pipeline_processors/remote.py
@@ -193,44 +202,44 @@ dw/server/ui/assets/csharp-BKxtCVv1.js
193
202
  dw/server/ui/assets/csp-bTuwJoIa.js
194
203
  dw/server/ui/assets/css-DIMkf-bt.js
195
204
  dw/server/ui/assets/css.worker-C6lDtRpF.js
196
- dw/server/ui/assets/cssMode-D_BuRO9Y.js
205
+ dw/server/ui/assets/cssMode-BvFOC5nO.js
197
206
  dw/server/ui/assets/cypher-CVaqCwHa.js
198
207
  dw/server/ui/assets/dart-onAF5SnQ.js
199
208
  dw/server/ui/assets/dockerfile-DZFCIeNp.js
200
209
  dw/server/ui/assets/ecl-D05T4iGw.js
201
210
  dw/server/ui/assets/editor-DjpsE8to.css
202
- dw/server/ui/assets/editor.api-B6pi6BSE.js
211
+ dw/server/ui/assets/editor.api-ChcCMXXR.js
203
212
  dw/server/ui/assets/editor.worker-BmdWdrHZ.js
204
213
  dw/server/ui/assets/elixir-6RTg0lbw.js
205
214
  dw/server/ui/assets/flow9-C5_-GSwl.js
206
- dw/server/ui/assets/freemarker2-mPiw3NV_.js
215
+ dw/server/ui/assets/freemarker2-DT2q5NS2.js
207
216
  dw/server/ui/assets/fsharp-C8Ef5oNN.js
208
217
  dw/server/ui/assets/go-C-y9NEjX.js
209
218
  dw/server/ui/assets/graphql-fmXr3nnJ.js
210
- dw/server/ui/assets/handlebars-BfGb596Y.js
219
+ dw/server/ui/assets/handlebars-kaJu_3a1.js
211
220
  dw/server/ui/assets/hcl-CpzslTdj.js
212
- dw/server/ui/assets/html-xXIqw-JZ.js
221
+ dw/server/ui/assets/html-BsNsYnSX.js
213
222
  dw/server/ui/assets/html.worker-C5yZDBHz.js
214
- dw/server/ui/assets/htmlMode-B3FC_H4q.js
215
- dw/server/ui/assets/index-Civ6zDZP.js
216
- dw/server/ui/assets/index-PRSQwOeN.css
223
+ dw/server/ui/assets/htmlMode-BcQxv5VO.js
224
+ dw/server/ui/assets/index-Bm_jBlG4.css
225
+ dw/server/ui/assets/index-CN0qvKxj.js
217
226
  dw/server/ui/assets/ini-sBoK_t0W.js
218
227
  dw/server/ui/assets/java-BEtHBSE6.js
219
- dw/server/ui/assets/javascript-B-FFcgST.js
228
+ dw/server/ui/assets/javascript-CEdXynRF.js
220
229
  dw/server/ui/assets/json.worker-DdeUAmHa.js
221
- dw/server/ui/assets/jsonMode-BELbxUQD.js
230
+ dw/server/ui/assets/jsonMode-hbOYEMCP.js
222
231
  dw/server/ui/assets/julia-Bri6UV-V.js
223
232
  dw/server/ui/assets/kotlin-BOotOW0E.js
224
233
  dw/server/ui/assets/less-B9JPFI3C.js
225
234
  dw/server/ui/assets/lexon-CfSJPG6W.js
226
- dw/server/ui/assets/liquid-CxXhb7_e.js
227
- dw/server/ui/assets/lspLanguageFeatures-sXyBqSzn.js
235
+ dw/server/ui/assets/liquid-JLSoiOSA.js
236
+ dw/server/ui/assets/lspLanguageFeatures-BOyNtxH5.js
228
237
  dw/server/ui/assets/lua-CsQS60Ue.js
229
238
  dw/server/ui/assets/m3-D-oSqn_W.js
230
239
  dw/server/ui/assets/markdown-Cimd5fb3.js
231
- dw/server/ui/assets/mdx-4jPGQ4yb.js
240
+ dw/server/ui/assets/mdx-sDDXTu9v.js
232
241
  dw/server/ui/assets/mips-CIPQ_RoX.js
233
- dw/server/ui/assets/monaco-ByFdQnrs.js
242
+ dw/server/ui/assets/monaco-1MuWdUz9.js
234
243
  dw/server/ui/assets/monaco-n7clI0si.css
235
244
  dw/server/ui/assets/msdax-DauUninz.js
236
245
  dw/server/ui/assets/mysql-SOo6toE5.js
@@ -246,10 +255,10 @@ dw/server/ui/assets/powerquery-D3hlyOfw.js
246
255
  dw/server/ui/assets/powershell-DmHpPYUd.js
247
256
  dw/server/ui/assets/protobuf-C531GsRP.js
248
257
  dw/server/ui/assets/pug-Z5eAx3Zn.js
249
- dw/server/ui/assets/python-D3CL9Y6O.js
258
+ dw/server/ui/assets/python-FwMP_5s9.js
250
259
  dw/server/ui/assets/qsharp-DkqhCAOL.js
251
260
  dw/server/ui/assets/r-BwWrilGY.js
252
- dw/server/ui/assets/razor-F_hjmtqk.js
261
+ dw/server/ui/assets/razor-CHr8DUwq.js
253
262
  dw/server/ui/assets/redis-ClamHrr6.js
254
263
  dw/server/ui/assets/redshift-DT7zqm-g.js
255
264
  dw/server/ui/assets/restructuredtext-BYgofb2h.js
@@ -269,15 +278,15 @@ dw/server/ui/assets/swift-Bxkupp3x.js
269
278
  dw/server/ui/assets/systemverilog-Bz4Y3fRF.js
270
279
  dw/server/ui/assets/tcl-DISqw1ZD.js
271
280
  dw/server/ui/assets/ts.worker-DGGa2mF8.js
272
- dw/server/ui/assets/tsMode-BiyDvHYY.js
281
+ dw/server/ui/assets/tsMode-DMRBdzCs.js
273
282
  dw/server/ui/assets/twig-De2hgUGE.js
274
- dw/server/ui/assets/typescript-DBE1Uz0U.js
283
+ dw/server/ui/assets/typescript-DX26K2Zt.js
275
284
  dw/server/ui/assets/typespec-B8J7ngcE.js
276
285
  dw/server/ui/assets/vb-DV3o63ZY.js
277
286
  dw/server/ui/assets/wgsl-DpFanUEy.js
278
- dw/server/ui/assets/workers-Ci7sZ35J.js
279
- dw/server/ui/assets/xml-Eqpmo6a1.js
280
- dw/server/ui/assets/yaml-BNP_JiwW.js
287
+ dw/server/ui/assets/workers-C00WfVNJ.js
288
+ dw/server/ui/assets/xml-5-4XmnnO.js
289
+ dw/server/ui/assets/yaml-DjHDC-oK.js
281
290
  dw/tasks/assess.py
282
291
  dw/tasks/audio_dynamics.py
283
292
  dw/tasks/audio_handlers.py
@@ -289,6 +298,7 @@ dw/tasks/borders.py
289
298
  dw/tasks/compose_text.py
290
299
  dw/tasks/concat_videos.py
291
300
  dw/tasks/cuts.py
301
+ dw/tasks/cuts_lines.py
292
302
  dw/tasks/depth_estimator.py
293
303
  dw/tasks/diffusion_upscale.py
294
304
  dw/tasks/dissolve_videos.py
@@ -311,16 +321,22 @@ dw/tasks/judge.py
311
321
  dw/tasks/loop_bed.py
312
322
  dw/tasks/lut.py
313
323
  dw/tasks/measure_sync.py
324
+ dw/tasks/mmaudio_decoder.py
314
325
  dw/tasks/model_cache.py
315
326
  dw/tasks/model_handlers.py
316
327
  dw/tasks/pair_audio.py
328
+ dw/tasks/phrases.py
317
329
  dw/tasks/qr_code.py
318
330
  dw/tasks/registry.py
331
+ dw/tasks/remove_object.py
319
332
  dw/tasks/restore_faces.py
320
333
  dw/tasks/rife_model.py
321
334
  dw/tasks/script_check.py
335
+ dw/tasks/script_findings.py
336
+ dw/tasks/script_take.py
322
337
  dw/tasks/segment.py
323
338
  dw/tasks/select.py
339
+ dw/tasks/sound_effects.py
324
340
  dw/tasks/speech_generation.py
325
341
  dw/tasks/stabilize.py
326
342
  dw/tasks/task.py
@@ -332,8 +348,14 @@ dw/tasks/upscale.py
332
348
  dw/tasks/video_handlers.py
333
349
  dw/tasks/video_utils.py
334
350
  dw/tasks/voice_attribution.py
351
+ dw/tasks/weights.py
335
352
  dw/tasks/windows.py
336
353
  dw/tasks/zoe_depth.py
354
+ dw/vendored/__init__.py
355
+ dw/vendored/audio8_tts_model.py
356
+ dw/vendored/mmaudio_clip.py
357
+ dw/vendored/mmaudio_model.py
358
+ dw/vendored/mmaudio_sync_model.py
337
359
  dw/workflows/flux3_klein_upsample.json
338
360
  dw/workflows/flux3_klein_upsample_edit.json
339
361
  dw/workflows/h3_context_ir.json
@@ -361,6 +383,7 @@ dw_mcp/workspaces.py
361
383
  tests/test_admission.py
362
384
  tests/test_admission_capacity.py
363
385
  tests/test_analyze_beats.py
386
+ tests/test_analyze_phrases.py
364
387
  tests/test_api_contract.py
365
388
  tests/test_arch_metrics.py
366
389
  tests/test_arch_report.py
@@ -373,6 +396,7 @@ tests/test_assessment_rules.py
373
396
  tests/test_assets.py
374
397
  tests/test_attention_backend_trace.py
375
398
  tests/test_attention_slicing.py
399
+ tests/test_audio8_tts_model.py
376
400
  tests/test_audio_utils.py
377
401
  tests/test_best_of_n_template.py
378
402
  tests/test_borders.py
@@ -382,6 +406,7 @@ tests/test_catalog_shape.py
382
406
  tests/test_catalog_speed_defaults.py
383
407
  tests/test_catalog_structure.py
384
408
  tests/test_chain.py
409
+ tests/test_chain_h3_native.py
385
410
  tests/test_ci_config.py
386
411
  tests/test_cli.py
387
412
  tests/test_compare_route.py
@@ -393,6 +418,7 @@ tests/test_concat_videos.py
393
418
  tests/test_config_objects.py
394
419
  tests/test_configuration_schema.py
395
420
  tests/test_content_types.py
421
+ tests/test_cost_scaling_h3_frames.py
396
422
  tests/test_dependencies_declared.py
397
423
  tests/test_depth_estimator.py
398
424
  tests/test_device.py
@@ -418,20 +444,24 @@ tests/test_fit_to_model.py
418
444
  tests/test_flux3_catalog.py
419
445
  tests/test_for_each.py
420
446
  tests/test_forget_workspace_history.py
447
+ tests/test_fractional_fps.py
421
448
  tests/test_gallery_roles.py
422
449
  tests/test_gather.py
423
450
  tests/test_grade.py
424
451
  tests/test_guide_chain_validation.py
452
+ tests/test_guide_pointers.py
425
453
  tests/test_guides_validation.py
426
454
  tests/test_h3_adapters.py
427
455
  tests/test_h3_context_ir.py
428
456
  tests/test_h3_guides.py
429
457
  tests/test_h3_hold_audio.py
430
458
  tests/test_h3_latent_upscale.py
459
+ tests/test_h3_mask.py
431
460
  tests/test_h3_refine.py
432
461
  tests/test_h3_rules.py
433
462
  tests/test_h3_schedule.py
434
463
  tests/test_h3_sparse_defaults.py
464
+ tests/test_h3_tiles.py
435
465
  tests/test_h3_upscaler_source.py
436
466
  tests/test_h3_vram_ceiling.py
437
467
  tests/test_hf_placement.py
@@ -449,6 +479,7 @@ tests/test_integration.py
449
479
  tests/test_interpolate_frames.py
450
480
  tests/test_introspection.py
451
481
  tests/test_job_history_device.py
482
+ tests/test_job_history_parity.py
452
483
  tests/test_job_history_wal.py
453
484
  tests/test_job_progress.py
454
485
  tests/test_job_warnings.py
@@ -496,7 +527,11 @@ tests/test_media_decode_threads.py
496
527
  tests/test_media_frames.py
497
528
  tests/test_media_info.py
498
529
  tests/test_media_layering.py
530
+ tests/test_media_sample_frames.py
499
531
  tests/test_mix_audio.py
532
+ tests/test_mmaudio_decoder.py
533
+ tests/test_mmaudio_model.py
534
+ tests/test_mmaudio_sync_model.py
500
535
  tests/test_model_cache.py
501
536
  tests/test_modular_output_properties.py
502
537
  tests/test_modular_pipeline.py
@@ -521,6 +556,7 @@ tests/test_pipeline_caching.py
521
556
  tests/test_pipeline_components.py
522
557
  tests/test_plan.py
523
558
  tests/test_plan_cuts.py
559
+ tests/test_plan_cuts_phrases.py
524
560
  tests/test_plugin_skills.py
525
561
  tests/test_prepare_pipeline.py
526
562
  tests/test_previous_result_walker_parity.py
@@ -539,6 +575,7 @@ tests/test_reference_limits.py
539
575
  tests/test_reference_names.py
540
576
  tests/test_reference_skip_sets.py
541
577
  tests/test_references.py
578
+ tests/test_remove_object.py
542
579
  tests/test_rerun_lineage.py
543
580
  tests/test_rerun_new_seed.py
544
581
  tests/test_resize_bucket.py
@@ -556,6 +593,7 @@ tests/test_scalar_result_validation.py
556
593
  tests/test_scheduler_config.py
557
594
  tests/test_schema.py
558
595
  tests/test_script_check.py
596
+ tests/test_seam_look.py
559
597
  tests/test_security.py
560
598
  tests/test_security_auth.py
561
599
  tests/test_security_decoder_bombs.py
@@ -585,6 +623,7 @@ tests/test_shaping_logs.py
585
623
  tests/test_shot_span_preflight.py
586
624
  tests/test_shots.py
587
625
  tests/test_slice_preflight.py
626
+ tests/test_sound_effects.py
588
627
  tests/test_sparse_attention_backends.py
589
628
  tests/test_sparse_attention_processor.py
590
629
  tests/test_sparse_attention_tiles.py
@@ -601,9 +640,11 @@ tests/test_subfolders.py
601
640
  tests/test_task.py
602
641
  tests/test_task_discovery.py
603
642
  tests/test_task_domains.py
643
+ tests/test_task_file_weights.py
604
644
  tests/test_task_public_imports.py
605
645
  tests/test_task_registry_rules.py
606
646
  tests/test_task_signature_errors.py
647
+ tests/test_task_weights.py
607
648
  tests/test_template_defaults.py
608
649
  tests/test_template_subfolders.py
609
650
  tests/test_tensor_image.py
@@ -641,4 +682,5 @@ tests/test_workflow_snapshot.py
641
682
  tests/test_workflow_step_cache.py
642
683
  tests/test_workflow_trust.py
643
684
  tests/test_workspace.py
644
- tests/test_workspace_copy.py
685
+ tests/test_workspace_copy.py
686
+ tests/test_zimage_vram.py
@@ -1,6 +1,6 @@
1
1
  torch>=2.14.1
2
2
  torchvision>=0.29.1
3
- diffusers>=0.40.0
3
+ diffusers>=0.42.0
4
4
  transformers>=5.19.0
5
5
  accelerate>=1.15.0
6
6
  peft>=0.21.2
@@ -110,9 +110,9 @@ except ImportError as e:
110
110
 
111
111
 
112
112
  def _read_version():
113
- # Single-sourced from pyproject.toml. Read as text rather than TOML:
114
- # tomllib is 3.11+ and this project supports 3.10. In a wheel install
115
- # there is no pyproject on disk - the package metadata carries it.
113
+ # Single-sourced from pyproject.toml. A regex on the text is enough for
114
+ # one line, without parsing the whole file. In a wheel install there is
115
+ # no pyproject on disk - the package metadata carries it.
116
116
  try:
117
117
  pyproject = os.path.join(os.path.dirname(__file__), "..", "pyproject.toml")
118
118
  with open(pyproject, encoding="utf-8") as f:
@@ -91,7 +91,7 @@ SPARSE_FALLBACK = "sparse_attention_fallback"
91
91
  CACHE_UNSUPPORTED = "cache_unsupported"
92
92
 
93
93
  # The component names a cache hook attaches to, as in
94
- # dw.pipeline_processors.components.get_cache_transformer
94
+ # dw.pipeline_processors.mag_calibration.get_cache_transformer
95
95
  _CACHE_COMPONENTS = ("transformer", "transformer_ref")
96
96
 
97
97
 
@@ -312,6 +312,21 @@ DISABLED_MESSAGE = (
312
312
  )
313
313
 
314
314
 
315
+ # Step-distillation loras run in 4-9 steps; a null-lora step at or past this
316
+ # has already been given the base model's schedule, so the warning is stale.
317
+ RAISED_STEPS = 10
318
+
319
+
320
+ def _schedule_raised(pipeline):
321
+ arguments = pipeline.get("arguments")
322
+ steps = (
323
+ arguments.get("num_inference_steps") if isinstance(arguments, dict) else None
324
+ )
325
+ return (
326
+ isinstance(steps, int) and not isinstance(steps, bool) and steps >= RAISED_STEPS
327
+ )
328
+
329
+
315
330
  def _disabled_loras(steps, source_indices, written=None, supplied=()):
316
331
  """Every `loras` entry switched off with a null model_name, as
317
332
  (path, message). Any pipeline, not only H3: the off switch is the
@@ -322,7 +337,7 @@ def _disabled_loras(steps, source_indices, written=None, supplied=()):
322
337
  steps, source_indices, "pipeline"
323
338
  ):
324
339
  loras = pipeline.get(LORAS_KEY)
325
- if not isinstance(loras, list):
340
+ if not isinstance(loras, list) or _schedule_raised(pipeline):
326
341
  continue
327
342
  for position, lora in enumerate(loras):
328
343
  if not isinstance(lora, dict) or lora.get(MODEL_NAME_KEY) is not None:
@@ -220,7 +220,7 @@ def _with_frame_rate(frames, location):
220
220
  only looks at a real local path. A file that says neither stays a plain
221
221
  list.
222
222
  """
223
- from .tasks.video_utils import FrameList
223
+ from .media_types import FrameList
224
224
 
225
225
  if not isinstance(frames, list):
226
226
  return frames
@@ -273,7 +273,7 @@ def local_media_file(location, what, default_suffix=""):
273
273
 
274
274
  def _fetch_remote_video(url):
275
275
  """A video URL's frames, decoded from `local_media_file`'s copy."""
276
- from .tasks.video_utils import FrameList
276
+ from .media_types import FrameList
277
277
 
278
278
  with local_media_file(url, "a video argument", default_suffix=".mp4") as path:
279
279
  frames = load_video(path)
@@ -914,7 +914,9 @@ def resolve_relative_path(path, base_dir):
914
914
  # frame list first dropped the soundtrack they measure and failed every probe
915
915
  # on an asset:/output: video (#387) - and window_video, which cuts the
916
916
  # source's soundtrack with its frames and so reads the file with its audio
917
- # (#601) - and trim_video, which cuts a soundtrack the same way (#627) - see _realize_lazy_frame_arguments
917
+ # (#601) - and trim_video, which cuts a soundtrack the same way (#627) - and
918
+ # generate_sound_effects, which samples the file at its own rates (#1133) - see
919
+ # _realize_lazy_frame_arguments
918
920
  _LAZY_FRAME_COMMANDS = frozenset(
919
921
  {
920
922
  "get_frame",
@@ -925,6 +927,7 @@ _LAZY_FRAME_COMMANDS = frozenset(
925
927
  "analyze_sync_drift",
926
928
  "window_video",
927
929
  "trim_video",
930
+ "generate_sound_effects",
928
931
  }
929
932
  )
930
933
 
@@ -16,13 +16,15 @@ permissive beyond the MIME-shape check: their writer dispatch is a generic
16
16
  prefix/suffix match (PIL's own format inference, a literal text or JSON
17
17
  write) with no narrower container to enforce a whitelist against.
18
18
 
19
- The one text/* exception is active content. `/outputs` serves a written
20
- file on the UI's own origin, without a token, so an .html or .xml output is
21
- a page whose script reads the API token the UI keeps in localStorage (#407).
22
- `text/html` and `text/xml` are the two active types the text writer can
23
- produce, so they are refused outright; the server also serves every active
24
- type it finds on disk under a `Content-Security-Policy: sandbox`, since a
25
- planted file never passes through here.
19
+ The one exception is active content. `/outputs` serves a written file on
20
+ the UI's own origin, without a token, so an .html, .xml or .svg output is a
21
+ page whose script reads the API token the UI keeps in localStorage (#407).
22
+ Every type in `ACTIVE_DOCUMENT_TYPES` is refused outright, whichever writer
23
+ would take it - refusing only the two the text writer produces left
24
+ `application/xml`, `application/xhtml+xml` and `image/svg+xml` stopped by
25
+ nothing but a result-type mismatch (SE-F035). The same set is what the
26
+ server serves under a `Content-Security-Policy: sandbox` when it finds one on
27
+ disk, since a planted file never passes through here.
26
28
  """
27
29
 
28
30
  import logging
@@ -67,8 +69,18 @@ LOSSY_AUDIO_CONTENT_TYPES = {
67
69
  # The only container encode_video writes - it always encodes h264 video
68
70
  MUXED_VIDEO_CONTENT_TYPE = "video/mp4"
69
71
 
70
- # Result types a browser would run as a document on the UI origin
71
- REFUSED_ACTIVE_CONTENT_TYPES = frozenset({"text/html", "text/xml"})
72
+ # Types a browser renders as a document, where script runs: refused as a
73
+ # result type here, and served under a CSP sandbox by /outputs and /inputs
74
+ # (dw/server/routes/files.py)
75
+ ACTIVE_DOCUMENT_TYPES = frozenset(
76
+ {
77
+ "text/html",
78
+ "application/xhtml+xml",
79
+ "text/xml",
80
+ "application/xml",
81
+ "image/svg+xml",
82
+ }
83
+ )
72
84
 
73
85
 
74
86
  def _active_content_fault(value):
@@ -76,7 +88,7 @@ def _active_content_fault(value):
76
88
  # the same document type
77
89
  if (
78
90
  isinstance(value, str)
79
- and value.split(";", 1)[0].strip().lower() in REFUSED_ACTIVE_CONTENT_TYPES
91
+ and value.split(";", 1)[0].strip().lower() in ACTIVE_DOCUMENT_TYPES
80
92
  ):
81
93
  return (
82
94
  f"Invalid content_type: {value!r} - active content is not written: "
@@ -160,7 +172,7 @@ def refuse_active_content_type(value):
160
172
 
161
173
 
162
174
  __all__ = [
163
- "REFUSED_ACTIVE_CONTENT_TYPES",
175
+ "ACTIVE_DOCUMENT_TYPES",
164
176
  "content_type_errors",
165
177
  "content_type_fault",
166
178
  "guess_extension",
@@ -109,7 +109,7 @@ def check_device_present(device):
109
109
  raise DeviceConfigError(f"{device} is not available on this machine")
110
110
 
111
111
 
112
- def resolve_serve_devices(cli_value, settings_value):
112
+ def resolve_serve_devices(cli_value, settings_value, on_absent=None):
113
113
  """The devices a server runs on - `--devices`, else the `devices`
114
114
  setting - or None when neither names any, which leaves today's single
115
115
  device (`DW_DEVICE`, then the `device` setting, then detection) alone.
@@ -117,7 +117,14 @@ def resolve_serve_devices(cli_value, settings_value):
117
117
  More than one entry runs a worker per card, so each must be a card of
118
118
  its own. Raises DeviceConfigError for a duplicate, for an unindexed
119
119
  `cuda` in a list of several (it would not be pinned, and would share
120
- card 0), and for a device this machine does not have."""
120
+ card 0), and for a device this machine does not have.
121
+
122
+ A list of several survives a card being pulled: an absent entry is
123
+ dropped and its refusal passed to `on_absent`, so a box with a card
124
+ out for service comes up on the rest instead of refusing to start (a
125
+ service manager restarting it would loop forever). Only when no entry
126
+ is present - or `on_absent` is None - is the first absence raised, so
127
+ a lone typo (`cuda:7`) still refuses."""
121
128
  raw = cli_value if cli_value else settings_value
122
129
  devices = parse_devices(raw)
123
130
  if not devices:
@@ -139,9 +146,19 @@ def resolve_serve_devices(cli_value, settings_value):
139
146
  "--devices with several entries must name each CUDA card by "
140
147
  "index ('cuda:0,cuda:1'), not a bare 'cuda'"
141
148
  )
149
+ present, absences = [], []
142
150
  for device in devices:
143
- check_device_present(device)
144
- return devices
151
+ try:
152
+ check_device_present(device)
153
+ except DeviceConfigError as absence:
154
+ absences.append(absence)
155
+ else:
156
+ present.append(device)
157
+ if absences and (not present or on_absent is None):
158
+ raise absences[0]
159
+ for absence in absences:
160
+ on_absent(str(absence))
161
+ return present
145
162
 
146
163
 
147
164
  def _explicit_cuda_index(device):