diffusers-workflow 0.9.0__tar.gz → 0.10.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 (594) hide show
  1. {diffusers_workflow-0.9.0/diffusers_workflow.egg-info → diffusers_workflow-0.10.0}/PKG-INFO +1 -1
  2. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0/diffusers_workflow.egg-info}/PKG-INFO +1 -1
  3. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/diffusers_workflow.egg-info/SOURCES.txt +78 -21
  4. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/adapter_compatibility.py +1 -1
  5. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/argument_media.py +69 -18
  6. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/arguments.py +15 -5
  7. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/assessment_rules.py +4 -1
  8. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/audio_qc.py +19 -6
  9. diffusers_workflow-0.10.0/dw/community_pipelines/pipeline_ltx2_refine.py +154 -0
  10. diffusers_workflow-0.10.0/dw/devices.py +247 -0
  11. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/ARCHITECTURE.md +28 -11
  12. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/DEPENDENCIES.md +1 -1
  13. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/MCP.md +11 -6
  14. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/RECIPES_24GB.md +2 -1
  15. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/RELEASING.md +137 -0
  16. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/SECURITY.md +33 -4
  17. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/SERVER.md +74 -12
  18. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/TASKS.md +1144 -8
  19. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/WORKFLOW_GUIDE.md +548 -18
  20. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/WORKSPACES.md +6 -3
  21. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/dsp.py +348 -2
  22. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/for_each.py +5 -0
  23. diffusers_workflow-0.10.0/dw/guides.py +327 -0
  24. diffusers_workflow-0.10.0/dw/hold_audio.py +151 -0
  25. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/host_memory.py +56 -1
  26. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/hub_cache.py +3 -0
  27. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/introspection.py +132 -9
  28. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/locations.py +169 -60
  29. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/media.py +103 -20
  30. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/media_types.py +43 -0
  31. diffusers_workflow-0.10.0/dw/outbound.py +539 -0
  32. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/output_extraction.py +15 -0
  33. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/path_redaction.py +40 -6
  34. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/pipeline_ownership.py +16 -2
  35. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/pipeline_processors/chain.py +335 -104
  36. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/pipeline_processors/components.py +8 -0
  37. diffusers_workflow-0.10.0/dw/pipeline_processors/h3_guides.py +790 -0
  38. diffusers_workflow-0.10.0/dw/pipeline_processors/h3_hold.py +609 -0
  39. diffusers_workflow-0.10.0/dw/pipeline_processors/h3_rules.py +223 -0
  40. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/pipeline_processors/pipeline.py +167 -1
  41. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/pipeline_processors/remote.py +22 -2
  42. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/plan.py +35 -5
  43. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/previous_results.py +37 -2
  44. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/result.py +58 -3
  45. diffusers_workflow-0.10.0/dw/script_lines.py +148 -0
  46. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/security.py +2 -0
  47. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/serve.py +41 -0
  48. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/admission.py +73 -8
  49. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/api_models.py +67 -11
  50. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/app.py +4 -1
  51. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/catalog_shape.py +20 -6
  52. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/deps.py +6 -3
  53. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/enhancers.py +6 -0
  54. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/job_history.py +61 -7
  55. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/job_record.py +18 -0
  56. diffusers_workflow-0.10.0/dw/server/job_results.py +188 -0
  57. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/jobs.py +394 -378
  58. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/observed_cost.py +84 -22
  59. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/outputs.py +7 -3
  60. diffusers_workflow-0.10.0/dw/server/pool.py +230 -0
  61. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/routes/assets.py +23 -9
  62. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/routes/jobs.py +92 -16
  63. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/routes/library.py +3 -2
  64. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/routes/system.py +41 -26
  65. diffusers_workflow-0.9.0/dw/server/ui/assets/cssMode-C1mrKegs.js → diffusers_workflow-0.10.0/dw/server/ui/assets/cssMode-wXe774OW.js +1 -1
  66. diffusers_workflow-0.9.0/dw/server/ui/assets/editor.api-EZbUgQvM.js → diffusers_workflow-0.10.0/dw/server/ui/assets/editor.api-DqvgVCmU.js +1 -1
  67. diffusers_workflow-0.9.0/dw/server/ui/assets/freemarker2-Dth1K2Vy.js → diffusers_workflow-0.10.0/dw/server/ui/assets/freemarker2-DR8uhCda.js +1 -1
  68. diffusers_workflow-0.9.0/dw/server/ui/assets/handlebars-8Sswqnxq.js → diffusers_workflow-0.10.0/dw/server/ui/assets/handlebars-D1n_Fhy1.js +1 -1
  69. diffusers_workflow-0.9.0/dw/server/ui/assets/html-BYtYo7f1.js → diffusers_workflow-0.10.0/dw/server/ui/assets/html-BVJM2HQM.js +1 -1
  70. diffusers_workflow-0.9.0/dw/server/ui/assets/htmlMode-B_AiWoXc.js → diffusers_workflow-0.10.0/dw/server/ui/assets/htmlMode-Cb3bisrD.js +1 -1
  71. diffusers_workflow-0.10.0/dw/server/ui/assets/index-BxCxre0j.css +1 -0
  72. diffusers_workflow-0.9.0/dw/server/ui/assets/index-B6Ujrvuj.js → diffusers_workflow-0.10.0/dw/server/ui/assets/index-Bxcur2S3.js +32 -32
  73. diffusers_workflow-0.9.0/dw/server/ui/assets/javascript-E4m083D3.js → diffusers_workflow-0.10.0/dw/server/ui/assets/javascript-DhyRtgFn.js +1 -1
  74. diffusers_workflow-0.9.0/dw/server/ui/assets/jsonMode--h7ZikWy.js → diffusers_workflow-0.10.0/dw/server/ui/assets/jsonMode-IURul1-R.js +1 -1
  75. diffusers_workflow-0.9.0/dw/server/ui/assets/liquid-BzbKdLRW.js → diffusers_workflow-0.10.0/dw/server/ui/assets/liquid-CdeVzoDf.js +1 -1
  76. diffusers_workflow-0.9.0/dw/server/ui/assets/lspLanguageFeatures-CRa0bRFV.js → diffusers_workflow-0.10.0/dw/server/ui/assets/lspLanguageFeatures-C7DVi-2z.js +1 -1
  77. diffusers_workflow-0.9.0/dw/server/ui/assets/mdx-BJ4u6XQs.js → diffusers_workflow-0.10.0/dw/server/ui/assets/mdx-BDSAHpOx.js +1 -1
  78. diffusers_workflow-0.9.0/dw/server/ui/assets/monaco-DwaeaVri.js → diffusers_workflow-0.10.0/dw/server/ui/assets/monaco-B8zQveVO.js +4 -4
  79. diffusers_workflow-0.9.0/dw/server/ui/assets/python-CoX_gCAL.js → diffusers_workflow-0.10.0/dw/server/ui/assets/python-C6JhntrO.js +1 -1
  80. diffusers_workflow-0.9.0/dw/server/ui/assets/razor-BCTdG5SN.js → diffusers_workflow-0.10.0/dw/server/ui/assets/razor-DUoZWg4e.js +1 -1
  81. diffusers_workflow-0.9.0/dw/server/ui/assets/tsMode-B6BV7a76.js → diffusers_workflow-0.10.0/dw/server/ui/assets/tsMode-CxKbOt5l.js +1 -1
  82. diffusers_workflow-0.9.0/dw/server/ui/assets/typescript-DJe7-fvZ.js → diffusers_workflow-0.10.0/dw/server/ui/assets/typescript-BYnQ0RjU.js +1 -1
  83. diffusers_workflow-0.9.0/dw/server/ui/assets/workers-DCzLJTPE.js → diffusers_workflow-0.10.0/dw/server/ui/assets/workers-CqfSFzdX.js +1 -1
  84. diffusers_workflow-0.9.0/dw/server/ui/assets/xml-CNvWfUrB.js → diffusers_workflow-0.10.0/dw/server/ui/assets/xml-BTej-yKG.js +1 -1
  85. diffusers_workflow-0.9.0/dw/server/ui/assets/yaml-ByARP6WE.js → diffusers_workflow-0.10.0/dw/server/ui/assets/yaml-DLu_25Zn.js +1 -1
  86. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/index.html +2 -2
  87. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/updater.py +42 -19
  88. diffusers_workflow-0.10.0/dw/server/worker_memory.py +239 -0
  89. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/settings.py +8 -2
  90. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/shots.py +84 -15
  91. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/slice_preflight.py +4 -2
  92. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/step_cache.py +13 -5
  93. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/step_value_checks.py +75 -7
  94. diffusers_workflow-0.10.0/dw/task_domains.py +1467 -0
  95. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/assess.py +33 -8
  96. diffusers_workflow-0.10.0/dw/tasks/audio_transcription.py +294 -0
  97. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/audio_utils.py +39 -33
  98. diffusers_workflow-0.10.0/dw/tasks/beats.py +320 -0
  99. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/concat_videos.py +38 -1
  100. diffusers_workflow-0.10.0/dw/tasks/cuts.py +865 -0
  101. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/dissolve_videos.py +1 -1
  102. diffusers_workflow-0.10.0/dw/tasks/face_track.py +696 -0
  103. diffusers_workflow-0.10.0/dw/tasks/finish.py +144 -0
  104. diffusers_workflow-0.10.0/dw/tasks/fit.py +310 -0
  105. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/gather.py +2 -1
  106. diffusers_workflow-0.10.0/dw/tasks/grade.py +202 -0
  107. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/h3_latent_upscale.py +20 -4
  108. diffusers_workflow-0.10.0/dw/tasks/image_ops.py +67 -0
  109. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/image_to_text.py +2 -2
  110. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/image_utils.py +237 -1
  111. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/joins.py +49 -12
  112. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/judge.py +2 -2
  113. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/loop_bed.py +14 -7
  114. diffusers_workflow-0.10.0/dw/tasks/lut.py +328 -0
  115. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/pair_audio.py +16 -1
  116. diffusers_workflow-0.10.0/dw/tasks/registry.py +205 -0
  117. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/restore_faces.py +2 -2
  118. diffusers_workflow-0.10.0/dw/tasks/script_check.py +697 -0
  119. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/select.py +7 -8
  120. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/task.py +627 -177
  121. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/text_generation.py +2 -2
  122. diffusers_workflow-0.10.0/dw/tasks/trim.py +133 -0
  123. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/upscale.py +2 -2
  124. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/video_utils.py +45 -39
  125. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/voice_attribution.py +181 -88
  126. diffusers_workflow-0.10.0/dw/tasks/windows.py +506 -0
  127. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/type_helpers.py +14 -6
  128. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/validation.py +76 -10
  129. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/variable_constraints.py +27 -3
  130. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/vram_estimate.py +175 -21
  131. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/vram_inheritance.py +6 -0
  132. diffusers_workflow-0.10.0/dw/window_count_errors.py +121 -0
  133. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/worker.py +10 -6
  134. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/worker_manager.py +100 -3
  135. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/worker_protocol.py +10 -0
  136. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/workflow.py +11 -0
  137. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/workflow_run.py +16 -12
  138. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/workflow_schema.json +32 -10
  139. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/writers.py +14 -0
  140. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/assets.py +1 -0
  141. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/catalog.py +28 -15
  142. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/diagnose.py +8 -2
  143. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/prompts.py +1 -1
  144. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/server.py +9 -9
  145. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/tools_authoring.py +1 -1
  146. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/tools_catalog.py +33 -39
  147. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/tools_jobs.py +13 -12
  148. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/pyproject.toml +3 -1
  149. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_admission.py +71 -0
  150. diffusers_workflow-0.10.0/tests/test_admission_capacity.py +56 -0
  151. diffusers_workflow-0.10.0/tests/test_analyze_beats.py +477 -0
  152. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_api_contract.py +9 -1
  153. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_arguments.py +51 -3
  154. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_assemble_and_score_target_lufs.py +18 -0
  155. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_assess.py +92 -0
  156. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_catalog_shape.py +17 -0
  157. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_catalog_structure.py +184 -16
  158. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_chain.py +446 -0
  159. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_concat_videos.py +24 -0
  160. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_dsp.py +11 -0
  161. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_elision.py +20 -0
  162. diffusers_workflow-0.10.0/tests/test_face_track.py +810 -0
  163. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_find_loop_bed.py +14 -0
  164. diffusers_workflow-0.10.0/tests/test_finish.py +461 -0
  165. diffusers_workflow-0.10.0/tests/test_fit_templates.py +137 -0
  166. diffusers_workflow-0.10.0/tests/test_fit_to_model.py +485 -0
  167. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_for_each.py +164 -5
  168. diffusers_workflow-0.10.0/tests/test_grade.py +514 -0
  169. diffusers_workflow-0.10.0/tests/test_guide_chain_validation.py +234 -0
  170. diffusers_workflow-0.10.0/tests/test_guides_validation.py +211 -0
  171. diffusers_workflow-0.10.0/tests/test_h3_guides.py +1062 -0
  172. diffusers_workflow-0.10.0/tests/test_h3_hold_audio.py +835 -0
  173. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_h3_latent_upscale.py +35 -0
  174. diffusers_workflow-0.10.0/tests/test_h3_refine.py +594 -0
  175. diffusers_workflow-0.10.0/tests/test_h3_rules.py +45 -0
  176. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_h3_schedule.py +28 -0
  177. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_host_memory.py +19 -1
  178. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_hub_cache.py +3 -0
  179. diffusers_workflow-0.10.0/tests/test_image_ops.py +124 -0
  180. diffusers_workflow-0.10.0/tests/test_ingredients_grid.py +173 -0
  181. diffusers_workflow-0.10.0/tests/test_job_history_device.py +172 -0
  182. diffusers_workflow-0.10.0/tests/test_join_windows.py +678 -0
  183. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_locations.py +373 -7
  184. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_ltx2_ic_loras.py +35 -5
  185. diffusers_workflow-0.10.0/tests/test_ltx2_refine_pipeline.py +273 -0
  186. diffusers_workflow-0.10.0/tests/test_lut.py +480 -0
  187. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_catalog.py +27 -0
  188. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_server.py +12 -2
  189. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_media_frames.py +10 -0
  190. diffusers_workflow-0.10.0/tests/test_numeric_coercion.py +306 -0
  191. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_observed_cost.py +197 -2
  192. diffusers_workflow-0.10.0/tests/test_outbound.py +556 -0
  193. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_pair_audio.py +1 -1
  194. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_pair_audio_fit.py +36 -6
  195. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_path_redaction.py +24 -1
  196. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_phase_events.py +17 -0
  197. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_pipeline_components.py +55 -4
  198. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_plan.py +34 -0
  199. diffusers_workflow-0.10.0/tests/test_plan_cuts.py +721 -0
  200. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_plugin_skills.py +196 -1
  201. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_prompt_library.py +1 -0
  202. diffusers_workflow-0.10.0/tests/test_read_frame_range.py +87 -0
  203. diffusers_workflow-0.10.0/tests/test_restore_faces_video.py +38 -0
  204. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_result.py +145 -8
  205. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_result_fps.py +17 -0
  206. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_runs.py +39 -0
  207. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_schema.py +16 -0
  208. diffusers_workflow-0.10.0/tests/test_script_check.py +989 -0
  209. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_security_input_caps.py +42 -0
  210. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_security_ssrf.py +27 -11
  211. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_select.py +22 -0
  212. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_select_validation.py +115 -0
  213. diffusers_workflow-0.10.0/tests/test_separate_stems.py +105 -0
  214. diffusers_workflow-0.10.0/tests/test_serve_main.py +240 -0
  215. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_server.py +162 -8
  216. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_server_guides.py +1 -1
  217. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_server_jobs.py +1 -1
  218. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_server_workspaces.py +17 -0
  219. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_shots.py +91 -4
  220. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_slice_preflight.py +17 -0
  221. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_step_cache.py +76 -0
  222. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_sub_workflow_resolver.py +5 -1
  223. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_task_discovery.py +23 -0
  224. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_task_domains.py +204 -0
  225. diffusers_workflow-0.10.0/tests/test_task_public_imports.py +39 -0
  226. diffusers_workflow-0.10.0/tests/test_task_registry_rules.py +137 -0
  227. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_text_generation.py +2 -2
  228. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_transcribe_audio.py +217 -2
  229. diffusers_workflow-0.10.0/tests/test_trim_video.py +181 -0
  230. diffusers_workflow-0.10.0/tests/test_type_helpers_concurrency.py +23 -0
  231. diffusers_workflow-0.10.0/tests/test_updater.py +167 -0
  232. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_validation.py +6 -1
  233. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_variable_constraints.py +87 -5
  234. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_voice_attribution.py +198 -3
  235. diffusers_workflow-0.10.0/tests/test_vram_guides.py +272 -0
  236. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_vram_inheritance.py +7 -1
  237. diffusers_workflow-0.10.0/tests/test_window_count_errors.py +254 -0
  238. diffusers_workflow-0.10.0/tests/test_window_video.py +428 -0
  239. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_worker_execute.py +41 -0
  240. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_worker_manager.py +99 -0
  241. diffusers_workflow-0.10.0/tests/test_worker_pool.py +1056 -0
  242. diffusers_workflow-0.9.0/dw/server/ui/assets/index-BChhQc7I.css +0 -1
  243. diffusers_workflow-0.9.0/dw/task_domains.py +0 -484
  244. diffusers_workflow-0.9.0/dw/tasks/audio_transcription.py +0 -136
  245. diffusers_workflow-0.9.0/dw/tasks/grade.py +0 -97
  246. diffusers_workflow-0.9.0/tests/test_grade.py +0 -265
  247. diffusers_workflow-0.9.0/tests/test_serve_main.py +0 -96
  248. diffusers_workflow-0.9.0/tests/test_updater.py +0 -135
  249. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/LICENSE +0 -0
  250. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/MANIFEST.in +0 -0
  251. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/README.md +0 -0
  252. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/diffusers_workflow.egg-info/dependency_links.txt +0 -0
  253. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/diffusers_workflow.egg-info/entry_points.txt +0 -0
  254. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/diffusers_workflow.egg-info/requires.txt +0 -0
  255. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/diffusers_workflow.egg-info/top_level.txt +0 -0
  256. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/__init__.py +0 -0
  257. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/argument_warnings.py +0 -0
  258. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/assets.py +0 -0
  259. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/cache_blocks.json +0 -0
  260. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/cache_blocks.py +0 -0
  261. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/community_pipelines/pipeline_flux_rf_inversion.py +0 -0
  262. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/content_types.py +0 -0
  263. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/dissolve_frame_errors.py +0 -0
  264. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/ACCELERATION.md +0 -0
  265. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/AGENT_LOOP.md +0 -0
  266. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/IP_ADAPTER.md +0 -0
  267. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/LORAS.md +0 -0
  268. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/PROMPT_WEIGHTING.md +0 -0
  269. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/QUANTIZATION.md +0 -0
  270. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/REMOTE.md +0 -0
  271. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/SECURITY_QUICKREF.md +0 -0
  272. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/TESTING.md +0 -0
  273. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/docs/WORKER_GUIDE.md +0 -0
  274. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/download_watch.py +0 -0
  275. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/elision.py +0 -0
  276. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/events.py +0 -0
  277. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/host_memory_projection.py +0 -0
  278. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/kernel_availability.py +0 -0
  279. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/library.py +0 -0
  280. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/log_setup.py +0 -0
  281. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/lora_catalog.py +0 -0
  282. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/lora_catalog_schema.json +0 -0
  283. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/lora_hub.py +0 -0
  284. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/media_frames.py +0 -0
  285. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/pipeline_processors/adapters.py +0 -0
  286. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/pipeline_processors/config_objects.py +0 -0
  287. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/pipeline_processors/placement.py +0 -0
  288. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/pipeline_processors/progress.py +0 -0
  289. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/probe_paths.py +0 -0
  290. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/prompt_schema.json +0 -0
  291. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/prompt_weighting.py +0 -0
  292. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/prompts.py +0 -0
  293. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/realize.py +0 -0
  294. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/reference_limits.py +0 -0
  295. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/reference_names.py +0 -0
  296. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/references.py +0 -0
  297. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/run.py +0 -0
  298. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/runs.py +0 -0
  299. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/scalar_result_validation.py +0 -0
  300. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/schema.py +0 -0
  301. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/__init__.py +0 -0
  302. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/assess.py +0 -0
  303. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/catalog.py +0 -0
  304. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/exports.py +0 -0
  305. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/guides.py +0 -0
  306. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/http_security.py +0 -0
  307. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/inline_media.py +0 -0
  308. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/mcp_mount.py +0 -0
  309. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/netinfo.py +0 -0
  310. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/routes/__init__.py +0 -0
  311. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/routes/files.py +0 -0
  312. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/routes/gallery.py +0 -0
  313. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/routes/loras.py +0 -0
  314. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/routes/media.py +0 -0
  315. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/sysinfo.py +0 -0
  316. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/abap-08VXUWAP.js +0 -0
  317. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/apex-BWPQTe0t.js +0 -0
  318. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/azcli-Bc_sGQ0U.js +0 -0
  319. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/bat-i0X4ZdIN.js +0 -0
  320. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/bicep-B5-_aFwp.js +0 -0
  321. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/cameligo-DMUM7wLl.js +0 -0
  322. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/clojure-Cm7r79vr.js +0 -0
  323. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/codicon-Brq4_Ui5.ttf +0 -0
  324. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/coffee-Ba7i2nA0.js +0 -0
  325. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/cpp-C7h46wYY.js +0 -0
  326. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/csharp-BKxtCVv1.js +0 -0
  327. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/csp-bTuwJoIa.js +0 -0
  328. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/css-DIMkf-bt.js +0 -0
  329. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/css.worker-B3ciXF_0.js +0 -0
  330. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/cypher-CVaqCwHa.js +0 -0
  331. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/dart-onAF5SnQ.js +0 -0
  332. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/dockerfile-DZFCIeNp.js +0 -0
  333. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/ecl-D05T4iGw.js +0 -0
  334. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/editor-jjEx9u7D.css +0 -0
  335. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/editor.worker-q-txB4vs.js +0 -0
  336. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/elixir-6RTg0lbw.js +0 -0
  337. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/flow9-C5_-GSwl.js +0 -0
  338. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/fsharp-C8Ef5oNN.js +0 -0
  339. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/go-C-y9NEjX.js +0 -0
  340. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/graphql-fmXr3nnJ.js +0 -0
  341. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/hcl-CpzslTdj.js +0 -0
  342. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/html.worker-C93Ht9o9.js +0 -0
  343. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/ini-sBoK_t0W.js +0 -0
  344. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/java-BEtHBSE6.js +0 -0
  345. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/json.worker-B2V3pomh.js +0 -0
  346. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/julia-Bri6UV-V.js +0 -0
  347. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/kotlin-BOotOW0E.js +0 -0
  348. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/less-B9JPFI3C.js +0 -0
  349. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/lexon-CfSJPG6W.js +0 -0
  350. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/lua-CsQS60Ue.js +0 -0
  351. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/m3-D-oSqn_W.js +0 -0
  352. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/markdown-Cimd5fb3.js +0 -0
  353. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/mips-CIPQ_RoX.js +0 -0
  354. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/monaco--ixms01u.css +0 -0
  355. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/msdax-DauUninz.js +0 -0
  356. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/mysql-SOo6toE5.js +0 -0
  357. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/objective-c-FvmIjYaQ.js +0 -0
  358. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/pascal-DrH0SRf2.js +0 -0
  359. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/pascaligo-D-ptJ9y-.js +0 -0
  360. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/perl-oz_6vUea.js +0 -0
  361. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/pgsql-DTj74zXo.js +0 -0
  362. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/php-nr791fC2.js +0 -0
  363. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/pla-CopQ2nXW.js +0 -0
  364. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/postiats-43DmfD33.js +0 -0
  365. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/powerquery-D3hlyOfw.js +0 -0
  366. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/powershell-DmHpPYUd.js +0 -0
  367. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/protobuf-C531GsRP.js +0 -0
  368. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/pug-Z5eAx3Zn.js +0 -0
  369. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/qsharp-DkqhCAOL.js +0 -0
  370. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/r-BwWrilGY.js +0 -0
  371. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/redis-ClamHrr6.js +0 -0
  372. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/redshift-DT7zqm-g.js +0 -0
  373. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/restructuredtext-BYgofb2h.js +0 -0
  374. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/ruby-DezsRK8O.js +0 -0
  375. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/rust-DdL9SqIa.js +0 -0
  376. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/sb-CcwsVR0C.js +0 -0
  377. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/scala-DHpiXF5c.js +0 -0
  378. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/scheme-BeGwcela.js +0 -0
  379. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/scss-gp-XZpBa.js +0 -0
  380. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/shell-CC2rA5mh.js +0 -0
  381. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/solidity-BEEn4gHE.js +0 -0
  382. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/sophia-CRfGWb83.js +0 -0
  383. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/sparql-D_Lu-MrJ.js +0 -0
  384. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/sql-NEE52Syq.js +0 -0
  385. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/st-DbInun42.js +0 -0
  386. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/swift-Bxkupp3x.js +0 -0
  387. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +0 -0
  388. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/tcl-DISqw1ZD.js +0 -0
  389. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/ts.worker-D7T1-Ig5.js +0 -0
  390. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/twig-De2hgUGE.js +0 -0
  391. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/typespec-B8J7ngcE.js +0 -0
  392. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/vb-DV3o63ZY.js +0 -0
  393. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/server/ui/assets/wgsl-DpFanUEy.js +0 -0
  394. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/shot_span_preflight.py +0 -0
  395. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/step.py +0 -0
  396. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/subfolders.py +0 -0
  397. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/audio_dynamics.py +0 -0
  398. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/background_remover.py +0 -0
  399. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/borders.py +0 -0
  400. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/compose_text.py +0 -0
  401. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/depth_estimator.py +0 -0
  402. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/diffusion_upscale.py +0 -0
  403. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/format_messages.py +0 -0
  404. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/h3_latent_upscaler_model.py +0 -0
  405. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/interpolate_frames.py +0 -0
  406. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/join_into_song.py +0 -0
  407. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/model_cache.py +0 -0
  408. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/qr_code.py +0 -0
  409. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/rife_model.py +0 -0
  410. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/segment.py +0 -0
  411. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/speech_generation.py +0 -0
  412. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/stabilize.py +0 -0
  413. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/tensor_image.py +0 -0
  414. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/text_sections.py +0 -0
  415. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/tasks/zoe_depth.py +0 -0
  416. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/test.py +0 -0
  417. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/trust.py +0 -0
  418. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/type_references.py +0 -0
  419. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/validate.py +0 -0
  420. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/variables.py +0 -0
  421. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/video_extensions.py +0 -0
  422. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/video_size_errors.py +0 -0
  423. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/workflows/h3_context_ir.json +0 -0
  424. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/workflows/test.json +0 -0
  425. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw/workspace.py +0 -0
  426. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/__init__.py +0 -0
  427. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/__main__.py +0 -0
  428. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/authoring.py +0 -0
  429. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/client.py +0 -0
  430. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/confine.py +0 -0
  431. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/exports.py +0 -0
  432. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/guides.py +0 -0
  433. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/loras.py +0 -0
  434. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/media.py +0 -0
  435. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/models.py +0 -0
  436. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/tools_media.py +0 -0
  437. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/dw_mcp/workspaces.py +0 -0
  438. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/setup.cfg +0 -0
  439. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_arch_metrics.py +0 -0
  440. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_arch_report.py +0 -0
  441. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_architecture_map.py +0 -0
  442. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_argument_updates.py +0 -0
  443. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_assessment_rules.py +0 -0
  444. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_assets.py +0 -0
  445. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_attention_slicing.py +0 -0
  446. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_audio_utils.py +0 -0
  447. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_best_of_n_template.py +0 -0
  448. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_borders.py +0 -0
  449. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_cache_blocks.py +0 -0
  450. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_ci_config.py +0 -0
  451. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_cli.py +0 -0
  452. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_component_name_errors.py +0 -0
  453. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_component_pruning.py +0 -0
  454. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_component_type_errors.py +0 -0
  455. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_compose_text.py +0 -0
  456. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_config_objects.py +0 -0
  457. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_configuration_schema.py +0 -0
  458. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_content_types.py +0 -0
  459. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_depth_estimator.py +0 -0
  460. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_device.py +0 -0
  461. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_device_helpers.py +0 -0
  462. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_device_portability.py +0 -0
  463. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_dialogue_short_voices.py +0 -0
  464. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_diffusion_upscale.py +0 -0
  465. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_dissolve_frame_errors.py +0 -0
  466. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_dissolve_videos.py +0 -0
  467. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_docs_links.py +0 -0
  468. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_download_watch.py +0 -0
  469. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_events.py +0 -0
  470. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_examples.py +0 -0
  471. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_gather.py +0 -0
  472. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_h3_adapters.py +0 -0
  473. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_h3_context_ir.py +0 -0
  474. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_h3_upscaler_source.py +0 -0
  475. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_h3_vram_ceiling.py +0 -0
  476. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_hf_placement.py +0 -0
  477. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_host_memory_projection.py +0 -0
  478. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_image_to_text.py +0 -0
  479. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_image_utils.py +0 -0
  480. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_integration.py +0 -0
  481. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_interpolate_frames.py +0 -0
  482. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_introspection.py +0 -0
  483. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_job_history_wal.py +0 -0
  484. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_job_progress.py +0 -0
  485. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_job_warnings.py +0 -0
  486. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_jobs_listing.py +0 -0
  487. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_jobs_reused.py +0 -0
  488. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_join_into_song.py +0 -0
  489. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_judge.py +0 -0
  490. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_kernel_availability.py +0 -0
  491. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_library_path.py +0 -0
  492. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_library_sources.py +0 -0
  493. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_list_images.py +0 -0
  494. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_lora_alpha.py +0 -0
  495. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_lora_catalog.py +0 -0
  496. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_lora_disable.py +0 -0
  497. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_lora_hub.py +0 -0
  498. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_lora_library.py +0 -0
  499. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_ltx2_diffusion_decode.py +0 -0
  500. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_ltx2_extend_clip.py +0 -0
  501. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_ltx_prompt_library.py +0 -0
  502. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_assets.py +0 -0
  503. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_authoring.py +0 -0
  504. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_client.py +0 -0
  505. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_confine.py +0 -0
  506. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_diagnose.py +0 -0
  507. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_exports.py +0 -0
  508. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_guides.py +0 -0
  509. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_loras.py +0 -0
  510. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_main.py +0 -0
  511. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_media.py +0 -0
  512. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_models.py +0 -0
  513. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_prompts.py +0 -0
  514. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_twins.py +0 -0
  515. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mcp_workspaces.py +0 -0
  516. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_media_audio.py +0 -0
  517. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_media_info.py +0 -0
  518. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_media_layering.py +0 -0
  519. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mix_audio.py +0 -0
  520. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_model_cache.py +0 -0
  521. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_modular_output_properties.py +0 -0
  522. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_modular_pipeline.py +0 -0
  523. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_modular_progress.py +0 -0
  524. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mps_fallback_warning.py +0 -0
  525. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_mps_rope_precision.py +0 -0
  526. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_null_media.py +0 -0
  527. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_offload_placement.py +0 -0
  528. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_output_references.py +0 -0
  529. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_parallel_loading_default.py +0 -0
  530. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_pipeline_caching.py +0 -0
  531. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_prepare_pipeline.py +0 -0
  532. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_previous_result_walker_parity.py +0 -0
  533. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_previous_results.py +0 -0
  534. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_prompt_parser.py +0 -0
  535. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_prompt_references.py +0 -0
  536. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_prompt_weighting.py +0 -0
  537. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_prompts.py +0 -0
  538. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_real_models.py +0 -0
  539. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_realize.py +0 -0
  540. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_recenter_crop.py +0 -0
  541. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_reference_limits.py +0 -0
  542. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_reference_names.py +0 -0
  543. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_reference_skip_sets.py +0 -0
  544. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_references.py +0 -0
  545. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_rerun_new_seed.py +0 -0
  546. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_resize_bucket.py +0 -0
  547. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_result_output_naming.py +0 -0
  548. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_rule_parity.py +0 -0
  549. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_scalar_result_validation.py +0 -0
  550. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_scheduler_config.py +0 -0
  551. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_security.py +0 -0
  552. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_security_auth.py +0 -0
  553. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_security_decoder_bombs.py +0 -0
  554. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_security_symlinks.py +0 -0
  555. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_security_trust_gate.py +0 -0
  556. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_security_web_headers.py +0 -0
  557. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_segment.py +0 -0
  558. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_server_assess.py +0 -0
  559. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_server_downloads.py +0 -0
  560. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_server_exports.py +0 -0
  561. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_server_gallery_image.py +0 -0
  562. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_server_info.py +0 -0
  563. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_server_library_path.py +0 -0
  564. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_server_loras.py +0 -0
  565. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_server_mcp.py +0 -0
  566. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_shaping_logs.py +0 -0
  567. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_shot_span_preflight.py +0 -0
  568. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_speech_generation.py +0 -0
  569. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_stabilize.py +0 -0
  570. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_step.py +0 -0
  571. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_strip_exif_and_watermark.py +0 -0
  572. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_subfolders.py +0 -0
  573. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_task.py +0 -0
  574. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_task_signature_errors.py +0 -0
  575. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_template_defaults.py +0 -0
  576. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_template_subfolders.py +0 -0
  577. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_tensor_image.py +0 -0
  578. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_text_sections.py +0 -0
  579. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_type_helpers.py +0 -0
  580. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_ui_twins.py +0 -0
  581. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_validate_arguments.py +0 -0
  582. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_variables.py +0 -0
  583. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_video_extensions.py +0 -0
  584. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_video_size_errors.py +0 -0
  585. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_video_utils.py +0 -0
  586. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_vram_estimate.py +0 -0
  587. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_worker.py +0 -0
  588. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_worker_job_peak_rss.py +0 -0
  589. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_worker_messages.py +0 -0
  590. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_workflow.py +0 -0
  591. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_workflow_snapshot.py +0 -0
  592. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_workflow_step_cache.py +0 -0
  593. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_workflow_trust.py +0 -0
  594. {diffusers_workflow-0.9.0 → diffusers_workflow-0.10.0}/tests/test_workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.9.0
3
+ Version: 0.10.0
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.9.0
3
+ Version: 0.10.0
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -19,12 +19,15 @@ dw/audio_qc.py
19
19
  dw/cache_blocks.json
20
20
  dw/cache_blocks.py
21
21
  dw/content_types.py
22
+ dw/devices.py
22
23
  dw/dissolve_frame_errors.py
23
24
  dw/download_watch.py
24
25
  dw/dsp.py
25
26
  dw/elision.py
26
27
  dw/events.py
27
28
  dw/for_each.py
29
+ dw/guides.py
30
+ dw/hold_audio.py
28
31
  dw/host_memory.py
29
32
  dw/host_memory_projection.py
30
33
  dw/hub_cache.py
@@ -39,6 +42,7 @@ dw/lora_hub.py
39
42
  dw/media.py
40
43
  dw/media_frames.py
41
44
  dw/media_types.py
45
+ dw/outbound.py
42
46
  dw/output_extraction.py
43
47
  dw/path_redaction.py
44
48
  dw/pipeline_ownership.py
@@ -57,6 +61,7 @@ dw/run.py
57
61
  dw/runs.py
58
62
  dw/scalar_result_validation.py
59
63
  dw/schema.py
64
+ dw/script_lines.py
60
65
  dw/security.py
61
66
  dw/serve.py
62
67
  dw/settings.py
@@ -80,6 +85,7 @@ dw/video_extensions.py
80
85
  dw/video_size_errors.py
81
86
  dw/vram_estimate.py
82
87
  dw/vram_inheritance.py
88
+ dw/window_count_errors.py
83
89
  dw/worker.py
84
90
  dw/worker_manager.py
85
91
  dw/worker_protocol.py
@@ -89,6 +95,7 @@ dw/workflow_schema.json
89
95
  dw/workspace.py
90
96
  dw/writers.py
91
97
  dw/community_pipelines/pipeline_flux_rf_inversion.py
98
+ dw/community_pipelines/pipeline_ltx2_refine.py
92
99
  dw/docs/ACCELERATION.md
93
100
  dw/docs/AGENT_LOOP.md
94
101
  dw/docs/ARCHITECTURE.md
@@ -113,6 +120,9 @@ dw/pipeline_processors/adapters.py
113
120
  dw/pipeline_processors/chain.py
114
121
  dw/pipeline_processors/components.py
115
122
  dw/pipeline_processors/config_objects.py
123
+ dw/pipeline_processors/h3_guides.py
124
+ dw/pipeline_processors/h3_hold.py
125
+ dw/pipeline_processors/h3_rules.py
116
126
  dw/pipeline_processors/pipeline.py
117
127
  dw/pipeline_processors/placement.py
118
128
  dw/pipeline_processors/progress.py
@@ -132,13 +142,16 @@ dw/server/http_security.py
132
142
  dw/server/inline_media.py
133
143
  dw/server/job_history.py
134
144
  dw/server/job_record.py
145
+ dw/server/job_results.py
135
146
  dw/server/jobs.py
136
147
  dw/server/mcp_mount.py
137
148
  dw/server/netinfo.py
138
149
  dw/server/observed_cost.py
139
150
  dw/server/outputs.py
151
+ dw/server/pool.py
140
152
  dw/server/sysinfo.py
141
153
  dw/server/updater.py
154
+ dw/server/worker_memory.py
142
155
  dw/server/routes/__init__.py
143
156
  dw/server/routes/assets.py
144
157
  dw/server/routes/files.py
@@ -163,45 +176,45 @@ dw/server/ui/assets/csharp-BKxtCVv1.js
163
176
  dw/server/ui/assets/csp-bTuwJoIa.js
164
177
  dw/server/ui/assets/css-DIMkf-bt.js
165
178
  dw/server/ui/assets/css.worker-B3ciXF_0.js
166
- dw/server/ui/assets/cssMode-C1mrKegs.js
179
+ dw/server/ui/assets/cssMode-wXe774OW.js
167
180
  dw/server/ui/assets/cypher-CVaqCwHa.js
168
181
  dw/server/ui/assets/dart-onAF5SnQ.js
169
182
  dw/server/ui/assets/dockerfile-DZFCIeNp.js
170
183
  dw/server/ui/assets/ecl-D05T4iGw.js
171
184
  dw/server/ui/assets/editor-jjEx9u7D.css
172
- dw/server/ui/assets/editor.api-EZbUgQvM.js
185
+ dw/server/ui/assets/editor.api-DqvgVCmU.js
173
186
  dw/server/ui/assets/editor.worker-q-txB4vs.js
174
187
  dw/server/ui/assets/elixir-6RTg0lbw.js
175
188
  dw/server/ui/assets/flow9-C5_-GSwl.js
176
- dw/server/ui/assets/freemarker2-Dth1K2Vy.js
189
+ dw/server/ui/assets/freemarker2-DR8uhCda.js
177
190
  dw/server/ui/assets/fsharp-C8Ef5oNN.js
178
191
  dw/server/ui/assets/go-C-y9NEjX.js
179
192
  dw/server/ui/assets/graphql-fmXr3nnJ.js
180
- dw/server/ui/assets/handlebars-8Sswqnxq.js
193
+ dw/server/ui/assets/handlebars-D1n_Fhy1.js
181
194
  dw/server/ui/assets/hcl-CpzslTdj.js
182
- dw/server/ui/assets/html-BYtYo7f1.js
195
+ dw/server/ui/assets/html-BVJM2HQM.js
183
196
  dw/server/ui/assets/html.worker-C93Ht9o9.js
184
- dw/server/ui/assets/htmlMode-B_AiWoXc.js
185
- dw/server/ui/assets/index-B6Ujrvuj.js
186
- dw/server/ui/assets/index-BChhQc7I.css
197
+ dw/server/ui/assets/htmlMode-Cb3bisrD.js
198
+ dw/server/ui/assets/index-BxCxre0j.css
199
+ dw/server/ui/assets/index-Bxcur2S3.js
187
200
  dw/server/ui/assets/ini-sBoK_t0W.js
188
201
  dw/server/ui/assets/java-BEtHBSE6.js
189
- dw/server/ui/assets/javascript-E4m083D3.js
202
+ dw/server/ui/assets/javascript-DhyRtgFn.js
190
203
  dw/server/ui/assets/json.worker-B2V3pomh.js
191
- dw/server/ui/assets/jsonMode--h7ZikWy.js
204
+ dw/server/ui/assets/jsonMode-IURul1-R.js
192
205
  dw/server/ui/assets/julia-Bri6UV-V.js
193
206
  dw/server/ui/assets/kotlin-BOotOW0E.js
194
207
  dw/server/ui/assets/less-B9JPFI3C.js
195
208
  dw/server/ui/assets/lexon-CfSJPG6W.js
196
- dw/server/ui/assets/liquid-BzbKdLRW.js
197
- dw/server/ui/assets/lspLanguageFeatures-CRa0bRFV.js
209
+ dw/server/ui/assets/liquid-CdeVzoDf.js
210
+ dw/server/ui/assets/lspLanguageFeatures-C7DVi-2z.js
198
211
  dw/server/ui/assets/lua-CsQS60Ue.js
199
212
  dw/server/ui/assets/m3-D-oSqn_W.js
200
213
  dw/server/ui/assets/markdown-Cimd5fb3.js
201
- dw/server/ui/assets/mdx-BJ4u6XQs.js
214
+ dw/server/ui/assets/mdx-BDSAHpOx.js
202
215
  dw/server/ui/assets/mips-CIPQ_RoX.js
203
216
  dw/server/ui/assets/monaco--ixms01u.css
204
- dw/server/ui/assets/monaco-DwaeaVri.js
217
+ dw/server/ui/assets/monaco-B8zQveVO.js
205
218
  dw/server/ui/assets/msdax-DauUninz.js
206
219
  dw/server/ui/assets/mysql-SOo6toE5.js
207
220
  dw/server/ui/assets/objective-c-FvmIjYaQ.js
@@ -216,10 +229,10 @@ dw/server/ui/assets/powerquery-D3hlyOfw.js
216
229
  dw/server/ui/assets/powershell-DmHpPYUd.js
217
230
  dw/server/ui/assets/protobuf-C531GsRP.js
218
231
  dw/server/ui/assets/pug-Z5eAx3Zn.js
219
- dw/server/ui/assets/python-CoX_gCAL.js
232
+ dw/server/ui/assets/python-C6JhntrO.js
220
233
  dw/server/ui/assets/qsharp-DkqhCAOL.js
221
234
  dw/server/ui/assets/r-BwWrilGY.js
222
- dw/server/ui/assets/razor-BCTdG5SN.js
235
+ dw/server/ui/assets/razor-DUoZWg4e.js
223
236
  dw/server/ui/assets/redis-ClamHrr6.js
224
237
  dw/server/ui/assets/redshift-DT7zqm-g.js
225
238
  dw/server/ui/assets/restructuredtext-BYgofb2h.js
@@ -239,31 +252,37 @@ dw/server/ui/assets/swift-Bxkupp3x.js
239
252
  dw/server/ui/assets/systemverilog-Bz4Y3fRF.js
240
253
  dw/server/ui/assets/tcl-DISqw1ZD.js
241
254
  dw/server/ui/assets/ts.worker-D7T1-Ig5.js
242
- dw/server/ui/assets/tsMode-B6BV7a76.js
255
+ dw/server/ui/assets/tsMode-CxKbOt5l.js
243
256
  dw/server/ui/assets/twig-De2hgUGE.js
244
- dw/server/ui/assets/typescript-DJe7-fvZ.js
257
+ dw/server/ui/assets/typescript-BYnQ0RjU.js
245
258
  dw/server/ui/assets/typespec-B8J7ngcE.js
246
259
  dw/server/ui/assets/vb-DV3o63ZY.js
247
260
  dw/server/ui/assets/wgsl-DpFanUEy.js
248
- dw/server/ui/assets/workers-DCzLJTPE.js
249
- dw/server/ui/assets/xml-CNvWfUrB.js
250
- dw/server/ui/assets/yaml-ByARP6WE.js
261
+ dw/server/ui/assets/workers-CqfSFzdX.js
262
+ dw/server/ui/assets/xml-BTej-yKG.js
263
+ dw/server/ui/assets/yaml-DLu_25Zn.js
251
264
  dw/tasks/assess.py
252
265
  dw/tasks/audio_dynamics.py
253
266
  dw/tasks/audio_transcription.py
254
267
  dw/tasks/audio_utils.py
255
268
  dw/tasks/background_remover.py
269
+ dw/tasks/beats.py
256
270
  dw/tasks/borders.py
257
271
  dw/tasks/compose_text.py
258
272
  dw/tasks/concat_videos.py
273
+ dw/tasks/cuts.py
259
274
  dw/tasks/depth_estimator.py
260
275
  dw/tasks/diffusion_upscale.py
261
276
  dw/tasks/dissolve_videos.py
277
+ dw/tasks/face_track.py
278
+ dw/tasks/finish.py
279
+ dw/tasks/fit.py
262
280
  dw/tasks/format_messages.py
263
281
  dw/tasks/gather.py
264
282
  dw/tasks/grade.py
265
283
  dw/tasks/h3_latent_upscale.py
266
284
  dw/tasks/h3_latent_upscaler_model.py
285
+ dw/tasks/image_ops.py
267
286
  dw/tasks/image_to_text.py
268
287
  dw/tasks/image_utils.py
269
288
  dw/tasks/interpolate_frames.py
@@ -271,11 +290,14 @@ dw/tasks/join_into_song.py
271
290
  dw/tasks/joins.py
272
291
  dw/tasks/judge.py
273
292
  dw/tasks/loop_bed.py
293
+ dw/tasks/lut.py
274
294
  dw/tasks/model_cache.py
275
295
  dw/tasks/pair_audio.py
276
296
  dw/tasks/qr_code.py
297
+ dw/tasks/registry.py
277
298
  dw/tasks/restore_faces.py
278
299
  dw/tasks/rife_model.py
300
+ dw/tasks/script_check.py
279
301
  dw/tasks/segment.py
280
302
  dw/tasks/select.py
281
303
  dw/tasks/speech_generation.py
@@ -284,9 +306,11 @@ dw/tasks/task.py
284
306
  dw/tasks/tensor_image.py
285
307
  dw/tasks/text_generation.py
286
308
  dw/tasks/text_sections.py
309
+ dw/tasks/trim.py
287
310
  dw/tasks/upscale.py
288
311
  dw/tasks/video_utils.py
289
312
  dw/tasks/voice_attribution.py
313
+ dw/tasks/windows.py
290
314
  dw/tasks/zoe_depth.py
291
315
  dw/workflows/h3_context_ir.json
292
316
  dw/workflows/test.json
@@ -311,6 +335,8 @@ dw_mcp/tools_jobs.py
311
335
  dw_mcp/tools_media.py
312
336
  dw_mcp/workspaces.py
313
337
  tests/test_admission.py
338
+ tests/test_admission_capacity.py
339
+ tests/test_analyze_beats.py
314
340
  tests/test_api_contract.py
315
341
  tests/test_arch_metrics.py
316
342
  tests/test_arch_report.py
@@ -353,13 +379,23 @@ tests/test_dsp.py
353
379
  tests/test_elision.py
354
380
  tests/test_events.py
355
381
  tests/test_examples.py
382
+ tests/test_face_track.py
356
383
  tests/test_find_loop_bed.py
384
+ tests/test_finish.py
385
+ tests/test_fit_templates.py
386
+ tests/test_fit_to_model.py
357
387
  tests/test_for_each.py
358
388
  tests/test_gather.py
359
389
  tests/test_grade.py
390
+ tests/test_guide_chain_validation.py
391
+ tests/test_guides_validation.py
360
392
  tests/test_h3_adapters.py
361
393
  tests/test_h3_context_ir.py
394
+ tests/test_h3_guides.py
395
+ tests/test_h3_hold_audio.py
362
396
  tests/test_h3_latent_upscale.py
397
+ tests/test_h3_refine.py
398
+ tests/test_h3_rules.py
363
399
  tests/test_h3_schedule.py
364
400
  tests/test_h3_upscaler_source.py
365
401
  tests/test_h3_vram_ceiling.py
@@ -367,17 +403,21 @@ tests/test_hf_placement.py
367
403
  tests/test_host_memory.py
368
404
  tests/test_host_memory_projection.py
369
405
  tests/test_hub_cache.py
406
+ tests/test_image_ops.py
370
407
  tests/test_image_to_text.py
371
408
  tests/test_image_utils.py
409
+ tests/test_ingredients_grid.py
372
410
  tests/test_integration.py
373
411
  tests/test_interpolate_frames.py
374
412
  tests/test_introspection.py
413
+ tests/test_job_history_device.py
375
414
  tests/test_job_history_wal.py
376
415
  tests/test_job_progress.py
377
416
  tests/test_job_warnings.py
378
417
  tests/test_jobs_listing.py
379
418
  tests/test_jobs_reused.py
380
419
  tests/test_join_into_song.py
420
+ tests/test_join_windows.py
381
421
  tests/test_judge.py
382
422
  tests/test_kernel_availability.py
383
423
  tests/test_library_path.py
@@ -392,7 +432,9 @@ tests/test_lora_library.py
392
432
  tests/test_ltx2_diffusion_decode.py
393
433
  tests/test_ltx2_extend_clip.py
394
434
  tests/test_ltx2_ic_loras.py
435
+ tests/test_ltx2_refine_pipeline.py
395
436
  tests/test_ltx_prompt_library.py
437
+ tests/test_lut.py
396
438
  tests/test_mcp_assets.py
397
439
  tests/test_mcp_authoring.py
398
440
  tests/test_mcp_catalog.py
@@ -421,8 +463,10 @@ tests/test_modular_progress.py
421
463
  tests/test_mps_fallback_warning.py
422
464
  tests/test_mps_rope_precision.py
423
465
  tests/test_null_media.py
466
+ tests/test_numeric_coercion.py
424
467
  tests/test_observed_cost.py
425
468
  tests/test_offload_placement.py
469
+ tests/test_outbound.py
426
470
  tests/test_output_references.py
427
471
  tests/test_pair_audio.py
428
472
  tests/test_pair_audio_fit.py
@@ -432,6 +476,7 @@ tests/test_phase_events.py
432
476
  tests/test_pipeline_caching.py
433
477
  tests/test_pipeline_components.py
434
478
  tests/test_plan.py
479
+ tests/test_plan_cuts.py
435
480
  tests/test_plugin_skills.py
436
481
  tests/test_prepare_pipeline.py
437
482
  tests/test_previous_result_walker_parity.py
@@ -441,6 +486,7 @@ tests/test_prompt_parser.py
441
486
  tests/test_prompt_references.py
442
487
  tests/test_prompt_weighting.py
443
488
  tests/test_prompts.py
489
+ tests/test_read_frame_range.py
444
490
  tests/test_real_models.py
445
491
  tests/test_realize.py
446
492
  tests/test_recenter_crop.py
@@ -450,6 +496,7 @@ tests/test_reference_skip_sets.py
450
496
  tests/test_references.py
451
497
  tests/test_rerun_new_seed.py
452
498
  tests/test_resize_bucket.py
499
+ tests/test_restore_faces_video.py
453
500
  tests/test_result.py
454
501
  tests/test_result_fps.py
455
502
  tests/test_result_output_naming.py
@@ -458,6 +505,7 @@ tests/test_runs.py
458
505
  tests/test_scalar_result_validation.py
459
506
  tests/test_scheduler_config.py
460
507
  tests/test_schema.py
508
+ tests/test_script_check.py
461
509
  tests/test_security.py
462
510
  tests/test_security_auth.py
463
511
  tests/test_security_decoder_bombs.py
@@ -469,6 +517,7 @@ tests/test_security_web_headers.py
469
517
  tests/test_segment.py
470
518
  tests/test_select.py
471
519
  tests/test_select_validation.py
520
+ tests/test_separate_stems.py
472
521
  tests/test_serve_main.py
473
522
  tests/test_server.py
474
523
  tests/test_server_assess.py
@@ -496,6 +545,8 @@ tests/test_subfolders.py
496
545
  tests/test_task.py
497
546
  tests/test_task_discovery.py
498
547
  tests/test_task_domains.py
548
+ tests/test_task_public_imports.py
549
+ tests/test_task_registry_rules.py
499
550
  tests/test_task_signature_errors.py
500
551
  tests/test_template_defaults.py
501
552
  tests/test_template_subfolders.py
@@ -503,7 +554,9 @@ tests/test_tensor_image.py
503
554
  tests/test_text_generation.py
504
555
  tests/test_text_sections.py
505
556
  tests/test_transcribe_audio.py
557
+ tests/test_trim_video.py
506
558
  tests/test_type_helpers.py
559
+ tests/test_type_helpers_concurrency.py
507
560
  tests/test_ui_twins.py
508
561
  tests/test_updater.py
509
562
  tests/test_validate_arguments.py
@@ -515,12 +568,16 @@ tests/test_video_size_errors.py
515
568
  tests/test_video_utils.py
516
569
  tests/test_voice_attribution.py
517
570
  tests/test_vram_estimate.py
571
+ tests/test_vram_guides.py
518
572
  tests/test_vram_inheritance.py
573
+ tests/test_window_count_errors.py
574
+ tests/test_window_video.py
519
575
  tests/test_worker.py
520
576
  tests/test_worker_execute.py
521
577
  tests/test_worker_job_peak_rss.py
522
578
  tests/test_worker_manager.py
523
579
  tests/test_worker_messages.py
580
+ tests/test_worker_pool.py
524
581
  tests/test_workflow.py
525
582
  tests/test_workflow_snapshot.py
526
583
  tests/test_workflow_step_cache.py
@@ -30,7 +30,7 @@ names and the partition each one denoises against are diffusers' own, and
30
30
  import logging
31
31
 
32
32
  from . import references
33
- from .for_each import MEMBER_SEPARATOR, render_path
33
+ from .references import MEMBER_SEPARATOR, render_path
34
34
 
35
35
  logger = logging.getLogger("dw")
36
36
 
@@ -2,6 +2,7 @@
2
2
  {media_type, location} reference, an `image`/`video` argument's path or URL, and
3
3
  the frame rate and shots a loaded video carries."""
4
4
 
5
+ import contextlib
5
6
  import io
6
7
  import os
7
8
  import logging
@@ -16,7 +17,8 @@ from .security import (
16
17
  ALLOWED_IMAGE_EXTENSIONS,
17
18
  ALLOWED_VIDEO_EXTENSIONS,
18
19
  )
19
- from .locations import safe_get, validate_media_path
20
+ from .locations import is_http_url, validate_media_path
21
+ from .outbound import safe_get
20
22
 
21
23
  logger = logging.getLogger("dw")
22
24
 
@@ -81,10 +83,14 @@ def fetch_image_with_context(v, base_dir, key):
81
83
  ) from error
82
84
 
83
85
 
84
- def fetch_video_with_context(v, base_dir, key):
86
+ def fetch_video_with_context(v, base_dir, key, with_audio=False):
85
87
  """fetch_video, with the same argument-key context as
86
- fetch_image_with_context."""
88
+ fetch_image_with_context. `with_audio` reads a file's soundtrack along with
89
+ its frames, as an AudioVideo - an H3 guide's `"audio": true` beside its
90
+ `video` (#649), where frames alone leave the guide no audio to hold."""
87
91
  try:
92
+ if with_audio:
93
+ return _fetch_audio_video(v, base_dir)
88
94
  return fetch_video(v, base_dir)
89
95
  except ValueError as error:
90
96
  raise ValueError(
@@ -94,7 +100,30 @@ def fetch_video_with_context(v, base_dir, key):
94
100
  ) from error
95
101
 
96
102
 
97
- def fetch_image(img_spec, base_dir=None):
103
+ def _fetch_audio_video(video_spec, base_dir=None):
104
+ """A video file - a path, URL or {"location": ...} - loaded with its audio
105
+ as an AudioVideo. A deferred reference stays for later resolution, and a
106
+ value already loaded passes through, so a second realization keeps it."""
107
+ from .tasks.video_utils import is_video_location, load_audio_video
108
+
109
+ if isinstance(video_spec, str) and references.is_ref(
110
+ references.LAZY_MEDIA, video_spec
111
+ ):
112
+ return video_spec
113
+ if is_video_location(video_spec):
114
+ return load_audio_video(video_spec, base_dir)
115
+ return video_spec
116
+
117
+
118
+ def _rgb_keeping_alpha(image):
119
+ """RGBA when the file carries transparency (an alpha band, or a palette
120
+ or greyscale image's transparency key), plain RGB otherwise."""
121
+ if "A" in image.getbands() or "transparency" in image.info:
122
+ return image.convert("RGBA")
123
+ return image.convert("RGB")
124
+
125
+
126
+ def fetch_image(img_spec, base_dir=None, keep_alpha=False):
98
127
  """
99
128
  Load image from file path or URL with security validation.
100
129
 
@@ -102,6 +131,10 @@ def fetch_image(img_spec, base_dir=None):
102
131
  img_spec: Image specification (file path, URL, dict with 'location' key, PIL Image, or list of any of these)
103
132
  base_dir: Directory relative file paths are resolved against - the
104
133
  workflow file's directory. Defaults to the process working directory
134
+ keep_alpha: Load a file with transparency as RGBA instead of
135
+ flattening it to RGB. A pipeline input wants RGB; the finishing
136
+ commands (grade, sharpen, film_grain, apply_lut) put the alpha
137
+ back after their op, so a cutout stays a cutout (#775)
105
138
 
106
139
  Returns:
107
140
  Loaded PIL Image, list of PIL Images, or None if img_spec is None
@@ -116,7 +149,7 @@ def fetch_image(img_spec, base_dir=None):
116
149
  # Handle lists of images (recursively process each)
117
150
  if isinstance(img_spec, list):
118
151
  logger.debug(f"Loading list of {len(img_spec)} images")
119
- return [fetch_image(img, base_dir) for img in img_spec]
152
+ return [fetch_image(img, base_dir, keep_alpha) for img in img_spec]
120
153
 
121
154
  # If already a PIL Image, return as-is (allows multiple realize_args calls)
122
155
  if hasattr(img_spec, "mode") and hasattr(img_spec, "size"):
@@ -140,6 +173,7 @@ def fetch_image(img_spec, base_dir=None):
140
173
  return img_spec
141
174
 
142
175
  logger.debug(f"Loading image from: {img_spec}")
176
+ convert_method = _rgb_keeping_alpha if keep_alpha else None
143
177
 
144
178
  try:
145
179
  # Check if it's a URL
@@ -150,7 +184,7 @@ def fetch_image(img_spec, base_dir=None):
150
184
  # without re-checking them; load_image still does the EXIF
151
185
  # transpose and RGB conversion on the decoded result
152
186
  response = safe_get(img_spec, "an image argument", timeout=60)
153
- return load_image(Image.open(io.BytesIO(response.content)))
187
+ return load_image(Image.open(io.BytesIO(response.content)), convert_method)
154
188
  else:
155
189
  # Treat as file path, relative to the workflow file, and confined
156
190
  # to the directories this workflow may read (dw/locations.py)
@@ -164,7 +198,7 @@ def fetch_image(img_spec, base_dir=None):
164
198
  f"Image file extension not allowed: {ext} - a video file "
165
199
  "must go through video_frames first"
166
200
  )
167
- return load_image(validated_path)
201
+ return load_image(validated_path, convert_method)
168
202
 
169
203
  except SecurityError:
170
204
  raise
@@ -209,24 +243,41 @@ def _declared_fps(path):
209
243
  return None
210
244
 
211
245
 
212
- def _fetch_remote_video(url):
213
- """A video URL's frames, fetched through `safe_get` and decoded from a
214
- temporary file. `load_video` would fetch the URL itself and follow its
215
- redirects unchecked; handed a path, it only decodes. The suffix comes
216
- from the URL, as `load_video`'s own download names it, since a `.gif`
217
- decodes differently."""
218
- from .tasks.video_utils import FrameList
246
+ @contextlib.contextmanager
247
+ def local_media_file(location, what, default_suffix=""):
248
+ """`location` as a path a loader opens: a path as it is, an http(s) URL
249
+ fetched through `safe_get` into a temporary file that lasts as long as
250
+ the `with` block.
219
251
 
220
- response = safe_get(url, "a video argument", timeout=300)
221
- suffix = os.path.splitext(unquote(urlparse(url).path))[1] or ".mp4"
252
+ A loader handed a URL fetches it itself - diffusers' `load_video`,
253
+ `load_image` and its H3 references' `from_file` all call requests
254
+ directly, resolving the host a second time and following redirects
255
+ unchecked, with no cap on the body. Handed a path, they only decode.
256
+ The suffix comes from the URL, as those loaders' own downloads name
257
+ it, since a container is often told apart by it. The loader must have
258
+ read the file before the block ends.
259
+ """
260
+ if not is_http_url(location):
261
+ yield location
262
+ return
263
+ response = safe_get(location, what, timeout=300)
264
+ suffix = os.path.splitext(unquote(urlparse(location).path))[1] or default_suffix
222
265
  handle = tempfile.NamedTemporaryFile(suffix=suffix, delete=False)
223
266
  try:
224
267
  with handle:
225
268
  handle.write(response.content)
226
- frames = load_video(handle.name)
227
- fps = _declared_fps(handle.name)
269
+ yield handle.name
228
270
  finally:
229
271
  os.remove(handle.name)
272
+
273
+
274
+ def _fetch_remote_video(url):
275
+ """A video URL's frames, decoded from `local_media_file`'s copy."""
276
+ from .tasks.video_utils import FrameList
277
+
278
+ with local_media_file(url, "a video argument", default_suffix=".mp4") as path:
279
+ frames = load_video(path)
280
+ fps = _declared_fps(path)
230
281
  # A URL has no run beside it, so it carries no shots
231
282
  return FrameList(frames, fps, None) if fps else frames
232
283
 
@@ -23,6 +23,7 @@ from .argument_media import (
23
23
  fetch_image_with_context,
24
24
  fetch_video,
25
25
  fetch_video_with_context,
26
+ local_media_file,
26
27
  )
27
28
  from PIL import Image
28
29
  from .security import (
@@ -139,7 +140,10 @@ def realize_args(arg, base_dir=None, apply_key_conventions=True):
139
140
  # Handle video loading for keys ending in '_video' or exactly 'video'
140
141
  elif apply_key_conventions and (k.endswith("_video") or k == "video"):
141
142
  logger.debug(f"Loading video for key: {k}")
142
- arg[k] = fetch_video_with_context(v, base_dir, k)
143
+ # A guide holding its soundtrack (#649) needs the file's audio too
144
+ arg[k] = fetch_video_with_context(
145
+ v, base_dir, k, with_audio=arg.get("audio") is True
146
+ )
143
147
  # Handle type references, and the keys that only look like one
144
148
  elif apply_key_conventions and (
145
149
  k.endswith("_type") or k.endswith("_dtype") or k == "dtype"
@@ -511,9 +515,11 @@ def realize_object(value, base_dir=None):
511
515
  k: v for k, v in value.items() if k not in (FROM_FILE_KEY, type_keys[0])
512
516
  }
513
517
  accepted, overrides = split_from_file_arguments(object_type, arguments)
514
- return apply_field_overrides(
515
- object_type.from_file(location, **accepted), overrides, object_type
516
- )
518
+ # A URL is fetched here, through the host policy, and the type handed a
519
+ # path: diffusers' from_file downloads a URL with requests itself
520
+ with local_media_file(location, f"'{FROM_FILE_KEY}' media") as path:
521
+ built = object_type.from_file(path, **accepted)
522
+ return apply_field_overrides(built, overrides, object_type)
517
523
 
518
524
 
519
525
  def split_from_file_arguments(object_type, arguments):
@@ -906,7 +912,9 @@ def resolve_relative_path(path, base_dir):
906
912
  # get_frame and its two fixed-index siblings, and the assessment probes
907
913
  # (dw/tasks/assess.py), which stream the file themselves - decoding it to a
908
914
  # frame list first dropped the soundtrack they measure and failed every probe
909
- # on an asset:/output: video (#387) - see _realize_lazy_frame_arguments
915
+ # on an asset:/output: video (#387) - and window_video, which cuts the
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
910
918
  _LAZY_FRAME_COMMANDS = frozenset(
911
919
  {
912
920
  "get_frame",
@@ -915,6 +923,8 @@ _LAZY_FRAME_COMMANDS = frozenset(
915
923
  "analyze_shots",
916
924
  "analyze_seams",
917
925
  "analyze_sync_drift",
926
+ "window_video",
927
+ "trim_video",
918
928
  }
919
929
  )
920
930
 
@@ -88,7 +88,10 @@ RULES = (
88
88
  "threshold": -50.0,
89
89
  "severity": "warn",
90
90
  "says": "the track drops out at the join while both sides are voiced",
91
- "unless": f"either side's rms is at or below {HOLE_VOICED_DBFS} dBFS",
91
+ "unless": (
92
+ f"either side's rms is at or below {HOLE_VOICED_DBFS} dBFS, or the"
93
+ " incoming shot is marked seam_fade_ms - a fade the caller asked for"
94
+ ),
92
95
  },
93
96
  {
94
97
  "name": "seam_frame_jump",
@@ -172,8 +172,9 @@ def warn_if_written_above_full_scale(
172
172
  f"{name} decodes at {peak:+.2f} dBFS - above full scale, so it "
173
173
  f"clips on playback. {cause}, so the fix is more headroom before "
174
174
  f"the file is written: a 'normalize_audio' step at 'peak_dbfs: -3' "
175
- f"ahead of the step that saves it. A mux into a video needs more "
176
- f"of it than an audio file does.",
175
+ f"ahead of the step that saves it (a template's intermediate shot has "
176
+ f"no such step to edit: set the join's 'match_levels' instead). A "
177
+ f"mux into a video needs more of it than an audio file does.",
177
178
  kind="audio_clipped",
178
179
  file=name,
179
180
  peak_dbfs=round(peak, 2),
@@ -291,7 +292,8 @@ def remeasure_shots_after_mux(artifact, probed_info, output_path, video_fps):
291
292
  round(probed_info["audio_stream_seconds"] * probed_info["sample_rate"])
292
293
  )
293
294
  measured_num_samples(artifact.shots, written_samples)
294
- frame_count = len(getattr(artifact, "frames", []) or [])
295
+ frames = getattr(artifact, "frames", None)
296
+ frame_count = 0 if frames is None else len(frames)
295
297
  fps = video_fps(artifact)
296
298
  if not (frame_count and fps):
297
299
  return
@@ -340,10 +342,12 @@ def written_peak_already_warned(content_type, consumed_by_normalizer, headroom_w
340
342
 
341
343
  Only a plain audio save suppresses the post-write check; a lossless one
342
344
  only when a normalizer consumed it, a lossy one also when the pre-write
343
- warning fired. A video always gets the ground-truth check.
345
+ warning fired. A video gets the ground-truth check, unless a normalizer
346
+ or a level-matching join consumes it: that step resets the level it
347
+ ships at, so the file's own written peak is not the deliverable's (#671).
344
348
  """
345
349
  if not content_type.startswith("audio"):
346
- return False
350
+ return consumed_by_normalizer
347
351
  if content_type not in LOSSY_AUDIO_CONTENT_TYPES:
348
352
  return consumed_by_normalizer
349
353
  return headroom_warned or consumed_by_normalizer
@@ -414,7 +418,16 @@ def check_written_media(
414
418
  # that predicted risk but measured merely close-but-clean says
415
419
  # nothing. That is the file's own ground truth, not a threshold
416
420
  # bug.
417
- if is_video and headroom_warned and written_peak is None:
421
+ #
422
+ # A video a normalizer or level-matching join consumes skips both:
423
+ # that step resets the level it ships at, so neither the written
424
+ # peak nor the prediction is the deliverable's (#671)
425
+ if (
426
+ is_video
427
+ and headroom_warned
428
+ and not consumed_by_normalizer
429
+ and written_peak is None
430
+ ):
418
431
  warn_held_prediction(output_path, predicted_peak_dbfs)
419
432
  source_mean_dbfs = getattr(artifact, "source_mean_dbfs", None)
420
433
  warn_if_written_near_silent(