diffusers-workflow 0.9.0__py3-none-any.whl → 0.11.0__py3-none-any.whl

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 (195) hide show
  1. {diffusers_workflow-0.9.0.dist-info → diffusers_workflow-0.11.0.dist-info}/METADATA +1 -1
  2. diffusers_workflow-0.11.0.dist-info/RECORD +340 -0
  3. dw/__init__.py +18 -0
  4. dw/adapter_compatibility.py +8 -24
  5. dw/argument_media.py +69 -18
  6. dw/arguments.py +15 -5
  7. dw/assessment_rules.py +4 -1
  8. dw/audio_qc.py +21 -6
  9. dw/community_pipelines/pipeline_ltx2_refine.py +154 -0
  10. dw/content_types.py +5 -17
  11. dw/devices.py +247 -0
  12. dw/dissolve_frame_errors.py +6 -18
  13. dw/docs/ACCELERATION.md +4 -3
  14. dw/docs/ARCHITECTURE.md +34 -13
  15. dw/docs/DEPENDENCIES.md +1 -1
  16. dw/docs/MCP.md +12 -7
  17. dw/docs/RECIPES_24GB.md +2 -1
  18. dw/docs/RELEASING.md +213 -0
  19. dw/docs/SECURITY.md +33 -4
  20. dw/docs/SERVER.md +81 -13
  21. dw/docs/TASKS.md +1180 -8
  22. dw/docs/WORKFLOW_GUIDE.md +574 -20
  23. dw/docs/WORKSPACES.md +6 -3
  24. dw/dsp.py +377 -2
  25. dw/elision.py +65 -9
  26. dw/events.py +3 -0
  27. dw/for_each.py +65 -18
  28. dw/guides.py +313 -0
  29. dw/hold_audio.py +123 -0
  30. dw/host_memory.py +56 -1
  31. dw/hub_cache.py +59 -45
  32. dw/introspection.py +136 -27
  33. dw/kernel_availability.py +4 -19
  34. dw/locations.py +235 -113
  35. dw/media.py +136 -41
  36. dw/media_types.py +43 -0
  37. dw/outbound.py +539 -0
  38. dw/output_extraction.py +15 -0
  39. dw/path_redaction.py +40 -6
  40. dw/pipeline_ownership.py +16 -2
  41. dw/pipeline_processors/chain.py +362 -112
  42. dw/pipeline_processors/components.py +55 -32
  43. dw/pipeline_processors/h3_guide_steps.py +542 -0
  44. dw/pipeline_processors/h3_guides.py +305 -0
  45. dw/pipeline_processors/h3_hold.py +227 -0
  46. dw/pipeline_processors/h3_hold_steps.py +397 -0
  47. dw/pipeline_processors/h3_rules.py +223 -0
  48. dw/pipeline_processors/pipeline.py +174 -1
  49. dw/pipeline_processors/remote.py +22 -2
  50. dw/plan.py +77 -8
  51. dw/previous_results.py +43 -18
  52. dw/reference_limits.py +5 -17
  53. dw/reference_names.py +4 -15
  54. dw/references.py +46 -2
  55. dw/result.py +58 -3
  56. dw/scalar_result_validation.py +5 -19
  57. dw/script_lines.py +148 -0
  58. dw/security.py +2 -0
  59. dw/serve.py +41 -0
  60. dw/server/admission.py +130 -53
  61. dw/server/api_models.py +85 -12
  62. dw/server/app.py +5 -1
  63. dw/server/assess.py +24 -6
  64. dw/server/catalog_shape.py +20 -6
  65. dw/server/deps.py +88 -18
  66. dw/server/enhancers.py +6 -0
  67. dw/server/job_history.py +61 -7
  68. dw/server/job_record.py +31 -0
  69. dw/server/job_results.py +188 -0
  70. dw/server/jobs.py +394 -378
  71. dw/server/observed_cost.py +84 -22
  72. dw/server/outputs.py +7 -3
  73. dw/server/pool.py +230 -0
  74. dw/server/routes/assets.py +53 -12
  75. dw/server/routes/jobs.py +118 -17
  76. dw/server/routes/library.py +3 -2
  77. dw/server/routes/system.py +41 -26
  78. dw/server/ui/assets/{codicon-Brq4_Ui5.ttf → codicon-DF1abBS2.ttf} +0 -0
  79. dw/server/ui/assets/{css.worker-B3ciXF_0.js → css.worker-C6lDtRpF.js} +38 -35
  80. dw/server/ui/assets/{cssMode-C1mrKegs.js → cssMode-ukxfz-ce.js} +1 -1
  81. dw/server/ui/assets/editor-DjpsE8to.css +1 -0
  82. dw/server/ui/assets/editor.api-Bkt_tsj1.js +908 -0
  83. dw/server/ui/assets/editor.worker-BmdWdrHZ.js +33 -0
  84. dw/server/ui/assets/{freemarker2-Dth1K2Vy.js → freemarker2-DbXygLvH.js} +1 -1
  85. dw/server/ui/assets/{handlebars-8Sswqnxq.js → handlebars-BdhZGoSz.js} +1 -1
  86. dw/server/ui/assets/{html-BYtYo7f1.js → html-Chhg10Tp.js} +1 -1
  87. dw/server/ui/assets/{html.worker-C93Ht9o9.js → html.worker-C5yZDBHz.js} +29 -26
  88. dw/server/ui/assets/{htmlMode-B_AiWoXc.js → htmlMode-cC3JW4lx.js} +1 -1
  89. dw/server/ui/assets/index-BYEwBCrU.css +1 -0
  90. dw/server/ui/assets/index-CkD0GJG0.js +46 -0
  91. dw/server/ui/assets/{javascript-E4m083D3.js → javascript-BWWLMkof.js} +1 -1
  92. dw/server/ui/assets/json.worker-DdeUAmHa.js +65 -0
  93. dw/server/ui/assets/{jsonMode--h7ZikWy.js → jsonMode-DrC8C29V.js} +2 -2
  94. dw/server/ui/assets/{liquid-BzbKdLRW.js → liquid-CXdQfmUT.js} +1 -1
  95. dw/server/ui/assets/{lspLanguageFeatures-CRa0bRFV.js → lspLanguageFeatures-BgAhb71w.js} +2 -2
  96. dw/server/ui/assets/{mdx-BJ4u6XQs.js → mdx-CQS0lFaZ.js} +1 -1
  97. dw/server/ui/assets/monaco-Z_sI-RLU.js +58 -0
  98. dw/server/ui/assets/monaco-n7clI0si.css +1 -0
  99. dw/server/ui/assets/{python-CoX_gCAL.js → python-C9MtI630.js} +1 -1
  100. dw/server/ui/assets/{razor-BCTdG5SN.js → razor-DPO5mHyR.js} +1 -1
  101. dw/server/ui/assets/{ts.worker-D7T1-Ig5.js → ts.worker-DGGa2mF8.js} +217 -214
  102. dw/server/ui/assets/{tsMode-B6BV7a76.js → tsMode-D8vGBTVc.js} +5 -5
  103. dw/server/ui/assets/{typescript-DJe7-fvZ.js → typescript-DyoEkQLT.js} +1 -1
  104. dw/server/ui/assets/{workers-DCzLJTPE.js → workers-Bdewp_DS.js} +1 -1
  105. dw/server/ui/assets/{xml-CNvWfUrB.js → xml-DmmKOVWo.js} +1 -1
  106. dw/server/ui/assets/{yaml-ByARP6WE.js → yaml-C4jCTuer.js} +1 -1
  107. dw/server/ui/index.html +2 -2
  108. dw/server/updater.py +42 -19
  109. dw/server/worker_memory.py +239 -0
  110. dw/settings.py +8 -2
  111. dw/shot_span_preflight.py +6 -18
  112. dw/shots.py +84 -15
  113. dw/slice_preflight.py +10 -20
  114. dw/step.py +52 -24
  115. dw/step_cache.py +36 -5
  116. dw/step_value_checks.py +121 -86
  117. dw/subfolders.py +4 -18
  118. dw/task_domains.py +528 -155
  119. dw/task_problems.py +631 -0
  120. dw/tasks/assess.py +33 -8
  121. dw/tasks/audio_handlers.py +291 -0
  122. dw/tasks/audio_transcription.py +173 -15
  123. dw/tasks/audio_utils.py +39 -33
  124. dw/tasks/beats.py +318 -0
  125. dw/tasks/concat_videos.py +45 -9
  126. dw/tasks/cuts.py +1080 -0
  127. dw/tasks/dissolve_videos.py +1 -1
  128. dw/tasks/face_track.py +696 -0
  129. dw/tasks/finish.py +144 -0
  130. dw/tasks/finish_handlers.py +207 -0
  131. dw/tasks/fit.py +310 -0
  132. dw/tasks/gather.py +2 -1
  133. dw/tasks/grade.py +115 -10
  134. dw/tasks/h3_latent_upscale.py +20 -4
  135. dw/tasks/image_ops.py +67 -0
  136. dw/tasks/image_to_text.py +2 -2
  137. dw/tasks/image_utils.py +236 -1
  138. dw/tasks/joins.py +52 -14
  139. dw/tasks/judge.py +2 -2
  140. dw/tasks/loop_bed.py +14 -7
  141. dw/tasks/lut.py +328 -0
  142. dw/tasks/measure_sync.py +198 -0
  143. dw/tasks/model_handlers.py +319 -0
  144. dw/tasks/pair_audio.py +16 -1
  145. dw/tasks/registry.py +205 -0
  146. dw/tasks/restore_faces.py +2 -2
  147. dw/tasks/script_check.py +732 -0
  148. dw/tasks/select.py +7 -8
  149. dw/tasks/task.py +29 -683
  150. dw/tasks/text_generation.py +2 -2
  151. dw/tasks/trim.py +133 -0
  152. dw/tasks/upscale.py +2 -2
  153. dw/tasks/video_handlers.py +383 -0
  154. dw/tasks/video_utils.py +45 -39
  155. dw/tasks/voice_attribution.py +181 -88
  156. dw/tasks/windows.py +506 -0
  157. dw/type_helpers.py +14 -6
  158. dw/type_references.py +7 -32
  159. dw/validation.py +81 -12
  160. dw/variable_constraints.py +27 -3
  161. dw/video_extensions.py +61 -16
  162. dw/video_size_errors.py +6 -18
  163. dw/vram_estimate.py +175 -21
  164. dw/vram_inheritance.py +51 -1
  165. dw/window_count_errors.py +109 -0
  166. dw/worker.py +10 -6
  167. dw/worker_manager.py +100 -3
  168. dw/worker_protocol.py +10 -0
  169. dw/workflow.py +11 -0
  170. dw/workflow_run.py +20 -12
  171. dw/workflow_schema.json +33 -11
  172. dw/writers.py +14 -0
  173. dw_mcp/assets.py +31 -2
  174. dw_mcp/catalog.py +28 -15
  175. dw_mcp/diagnose.py +18 -4
  176. dw_mcp/media.py +39 -31
  177. dw_mcp/prompts.py +5 -2
  178. dw_mcp/server.py +9 -9
  179. dw_mcp/tools_authoring.py +8 -8
  180. dw_mcp/tools_catalog.py +33 -39
  181. dw_mcp/tools_jobs.py +19 -20
  182. dw_mcp/tools_media.py +25 -15
  183. diffusers_workflow-0.9.0.dist-info/RECORD +0 -308
  184. dw/server/ui/assets/editor-jjEx9u7D.css +0 -1
  185. dw/server/ui/assets/editor.api-EZbUgQvM.js +0 -847
  186. dw/server/ui/assets/editor.worker-q-txB4vs.js +0 -30
  187. dw/server/ui/assets/index-B6Ujrvuj.js +0 -45
  188. dw/server/ui/assets/index-BChhQc7I.css +0 -1
  189. dw/server/ui/assets/json.worker-B2V3pomh.js +0 -62
  190. dw/server/ui/assets/monaco--ixms01u.css +0 -1
  191. dw/server/ui/assets/monaco-DwaeaVri.js +0 -56
  192. {diffusers_workflow-0.9.0.dist-info → diffusers_workflow-0.11.0.dist-info}/WHEEL +0 -0
  193. {diffusers_workflow-0.9.0.dist-info → diffusers_workflow-0.11.0.dist-info}/entry_points.txt +0 -0
  194. {diffusers_workflow-0.9.0.dist-info → diffusers_workflow-0.11.0.dist-info}/licenses/LICENSE +0 -0
  195. {diffusers_workflow-0.9.0.dist-info → diffusers_workflow-0.11.0.dist-info}/top_level.txt +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.11.0
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -0,0 +1,340 @@
1
+ diffusers_workflow-0.11.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
2
+ dw/__init__.py,sha256=YKwvXdngbW8iY6xFcfVwDCeiD_oFyCdWb-rRVUogp0Y,19969
3
+ dw/adapter_compatibility.py,sha256=MzNfxK-yOBrn6Mp90m_i_QY-N4zz4C0ZCvKIByUpXAw,10674
4
+ dw/argument_media.py,sha256=fIsvlDRCuTz_DPH4MXFxBZiKTQfgR1vY0-wTU5P9p-I,15145
5
+ dw/argument_warnings.py,sha256=Kwy-gicCXOnsAEs_08p7X7g-HEjfzukVkP6qQFRHSak,10457
6
+ dw/arguments.py,sha256=w_9CeVsFsJOOyC7foEFH5xEzRX9a1ZUnWIhVdo90snY,39922
7
+ dw/assessment_rules.py,sha256=-BNMS1nWXUcvCSnQ-okdhNecZK_HDBgul31uEB1EOac,7360
8
+ dw/assets.py,sha256=NT9RVK2Pi4Rs4r1sDru1QCEqZXqzr5YAtsiDG1TYa28,5583
9
+ dw/audio_qc.py,sha256=3aW5fnI5L7Bxaueo1tjjH6DIVYxdiPlfGxaN1xe4afQ,19832
10
+ dw/cache_blocks.json,sha256=m7mJV7Pwv5LnwzW-2Daa71W3yKh6x7VdxFS7ShEiUG4,1633
11
+ dw/cache_blocks.py,sha256=A_S9pID6jqgheRg2DFFmIPLiS7XJUNT44eXk3W01SSg,5719
12
+ dw/content_types.py,sha256=27B8wo6gWRtqKGm3JE7KTHc9QubpKysqYaco9-1O7Ew,7248
13
+ dw/devices.py,sha256=JCEqgAvVLQe5V4OYLmyCIoMVHeBH4jUL8CPtuJdNzmM,9560
14
+ dw/dissolve_frame_errors.py,sha256=r4SofR0SeheFILEANpmT4QX6CRT2bPqsaXubZIu3yDA,4675
15
+ dw/download_watch.py,sha256=x0RGfJy7t_ZQJ4FD3GcGcdJd-bjmllLLVCXKYhFE9JI,12656
16
+ dw/dsp.py,sha256=yfZUfCntW93hgzNcSCYFbMvYnKcXF4XuWfIM9LXkQ80,42264
17
+ dw/elision.py,sha256=5wcP1Khm22xYEXu6NU3hXgNy8geK0LUfbVokmMDr044,15506
18
+ dw/events.py,sha256=nKYuxW83p_Qc5vTEJX7Z0lt6tCRKRmXSSW1O4HP0aAo,12823
19
+ dw/for_each.py,sha256=-Pwz77BOyGUjjXwhR-CxtXIa9xgS1zh-mdKWyOYtnuQ,18574
20
+ dw/guides.py,sha256=j_KOEdcVYODeYh03xgdEi9XA7CSI8fs6q3tX1P1gvVs,13185
21
+ dw/hold_audio.py,sha256=FnLexH5TvohsbFLdmwIHm0h_atslTd3VzcW0B5QIiMY,5417
22
+ dw/host_memory.py,sha256=t9nJDXB1cta-nh6FhvoWAOW8TJKXHDkBI0JNoLcOkx0,11807
23
+ dw/host_memory_projection.py,sha256=kGQ7hpmR_jsT66mWypmpZs0NYjQwZ8gVQIqI9Id3pEQ,10320
24
+ dw/hub_cache.py,sha256=0hXAr_S6nbLRSTgX02Dwel-t5VSEfIfYCeVtV-e1yFA,15847
25
+ dw/introspection.py,sha256=pBtCzEtOPy1yGXFwJ6YefqR49NLVqoZDd2e8nyUcyOU,34353
26
+ dw/kernel_availability.py,sha256=wgYBmEmVgmKCjtokTKeJf9ph000JBB3hTPBxNnzzFqk,8716
27
+ dw/library.py,sha256=EEkVFQsMOZWCNC1WHHtSnAsERUQ2fr1ZhpwSRdb1lq0,33589
28
+ dw/locations.py,sha256=Sow713HPShpjr3R_YRMgsoSaZ22cRbOrUAFkjDKbNU0,34700
29
+ dw/log_setup.py,sha256=ATwSO0CCDtgEA-VoPsS8HVeuDwL2jBg--4QXSZwecQs,1478
30
+ dw/lora_catalog.py,sha256=B6RRgdyY0NSCyAwMVoDS3_wxyqF9i3Q3JjEx-hCMVAI,4893
31
+ dw/lora_catalog_schema.json,sha256=i-oh9JR8DbKoNxZ2ufnyPaTaNT8hpeY_I6I3Zrhrl_w,2120
32
+ dw/lora_hub.py,sha256=Px2cV9yAQsKve6WZuvuQCOfgLWjJ1bJx0uDbxeK2kmQ,8500
33
+ dw/media.py,sha256=rRxEDLvj1u_KU9XyLrXihVbbumXSJLvMGzAnWNksf5I,42281
34
+ dw/media_frames.py,sha256=2WLLU4Z1NgN4rTxSVDHDs5VZVQqbHXMtOz-ekvonoAA,12789
35
+ dw/media_types.py,sha256=GFnWr8Eq6jU1Y-wccXDKFO5MX-oePAjj8RsE23wvsp8,9770
36
+ dw/outbound.py,sha256=Noaerzmzz-n23JGe9ciMuvo8QQZO-SBOK_gyFXB22Do,20508
37
+ dw/output_extraction.py,sha256=m_uppccZeGPF2lb8UQLCrLHH1PQxmSniB8fuT5TMm_E,10341
38
+ dw/path_redaction.py,sha256=GnZ154Q4X_bvmQEjTVvgcMmlnz1g8N6VkDLj91lLREM,4324
39
+ dw/pipeline_ownership.py,sha256=rmdsYvbp7JqoHcZYl2HLNDgzSOUUozGjqWBLJTrnIKk,13078
40
+ dw/plan.py,sha256=PMu9bRE2tmY69ux6TOwa61f6WHsnC55blS95wZr9r8g,44509
41
+ dw/previous_results.py,sha256=0ReOCNwkHVFhP9VIErvsREVVu3a9RItC33vxhqp4tYw,17361
42
+ dw/probe_paths.py,sha256=iJgy4G256zELyzi4Aol4_qifejjZsUtdeEEDWryAB0o,2683
43
+ dw/prompt_schema.json,sha256=5e7NWgce28cf-YWEWwyDjQQ90ki0BcI4tczTyr_d8lQ,1934
44
+ dw/prompt_weighting.py,sha256=ttA_EUnkqmvHujRxP5Dgfm4hsemupQaNDiidpxsvMgc,13063
45
+ dw/prompts.py,sha256=J2HmqCeEGDXzd4IrqLfFCS3GZcJIdsaaVpjnupg_QpI,5755
46
+ dw/realize.py,sha256=PY0Trgt58YAOd0ZWudedhrNUgzggKPoP8hRn9x2gvYk,11095
47
+ dw/reference_limits.py,sha256=X41iOHiULqU5mXGM0jZKL5DnP5bUydd3wNvUFxUlEnU,7718
48
+ dw/reference_names.py,sha256=y7z-n3TRHp8jMhUx6aSs4qXzC2EnA5sCYAg3vYKhG0Y,4737
49
+ dw/references.py,sha256=40GoPYeAzqwOKscD8-ljOjdvwdtmeQWr2ctSw35O4Y0,7589
50
+ dw/result.py,sha256=7MR6S92LAPSR481hDfTRSqTSliZE61cUMB_gp6Vw8Nk,39532
51
+ dw/run.py,sha256=irH-b_QvbFa0X1F_9M2iX1uxNI74K5vnQCE9MiPaK1I,9316
52
+ dw/runs.py,sha256=4cqsXuXiSUzEJ4SkJawCy0KEQiqjRWz_W80OD-O32Zg,36798
53
+ dw/scalar_result_validation.py,sha256=JQvkmjxU4KCMbl1j2UTOkMwgreWeXRfrI44aRsONVPg,5187
54
+ dw/schema.py,sha256=QDMwcONbaGQqcaHNp9_gYXKPIRqm6qBGfdLHFDOijbM,10473
55
+ dw/script_lines.py,sha256=A96AAjRHkU0m3JDr-kf5-m05Vrhi0IzAnqbCjB-9COs,5838
56
+ dw/security.py,sha256=Gi6jo6oEvpQSeCmevlDoX5NHOeqe2BKInxT8SohYVfw,26964
57
+ dw/serve.py,sha256=kVGsDIBiQFF33q8sCz_AazyYvwutIJsLspBD2tGkbOw,14320
58
+ dw/settings.py,sha256=lqIuoiwqfVzbiCvu0YC5zBWNfT3ojwVfx2XfR23fkyI,4457
59
+ dw/shot_span_preflight.py,sha256=AZP1VY_J9KdjoGdgr3k-H149ojIQr00e6um3XXO3Ga8,4311
60
+ dw/shots.py,sha256=mLDI_FXHvrG8gIMcY_gJGDLMSUAB8xAomogjA66gcno,21616
61
+ dw/slice_preflight.py,sha256=IJ1NWZPfFBgz_YKU8CvHilasAa6nEIUGu3XW8Vf4gHY,7492
62
+ dw/step.py,sha256=ReYYvfQUKDVtSJ2bcShHDJEmga0YunRIYQV0k1ySSKc,10259
63
+ dw/step_cache.py,sha256=aT51amck-da2_mOwYRCQXHkJAJJHLh0XPdivn2P8PWc,29096
64
+ dw/step_value_checks.py,sha256=60yn46QKVCq4uYwFwkT7z1LB-1C4PpnttlB3m-Yjiag,14212
65
+ dw/subfolders.py,sha256=ZRRxMhHk1Yha9yt_5C_kJfe1YBWJYRba5n2w6Nx30xw,3738
66
+ dw/task_domains.py,sha256=cxfTaECzTOCrFNZQdzgVme6yYk5Hr-P-nHnO8n_zTBo,35379
67
+ dw/task_problems.py,sha256=A1nTz_CLstykPLJgq2GWyEb7XhEFeEDHq_DhqB-aMMU,24564
68
+ dw/test.py,sha256=P6JkCw1OjVh-xY_kS-STGlkEHpN9riToXV7A20WX5MA,582
69
+ dw/trust.py,sha256=YN_CFso36OK5PTjI663r9QPThzGsVT5j5VWwKNjdD-o,11778
70
+ dw/type_helpers.py,sha256=u9r60J-Sc_X18nS_IZadSyOQGk3NmmSYM4FgYkpMaTY,10036
71
+ dw/type_references.py,sha256=LNYRruF8o9pG4glqjZOuJhunmA5WeVj-kp_8uPT1ZWE,10159
72
+ dw/validate.py,sha256=qZO_j0Uah8CXNdO5BjTii6am3LbMn1hlgPACivm1Sz8,2223
73
+ dw/validation.py,sha256=BnG46nTO2t65aKm8dCSd-Y8BWZp_PBCcgtyFRU0qnK8,36128
74
+ dw/variable_constraints.py,sha256=6JrNSTMH3C6tpc8DAlCDvxAjL8Aw12t28ps5_iOD2es,20110
75
+ dw/variables.py,sha256=IS9ToCUx1rIGjIEXkbsQoxhP1DdI51EIk7H1obX733I,19937
76
+ dw/video_extensions.py,sha256=wLFb6vD9APMWvI4_bGhR_cgVBjNa2o9dAolAia2oWFM,7754
77
+ dw/video_size_errors.py,sha256=X6F0LukghxPbOonc7iKVfMNPig2Oiq4sghhhZsR1a4Y,4465
78
+ dw/vram_estimate.py,sha256=eTOE9B_9G6sVjZj7mBp0HyxPi09C_uEjQm-qV-hfVOU,22790
79
+ dw/vram_inheritance.py,sha256=JryUJ9k8DduQLKfX2MUkQDea7GsuRYdOty5_qHve2Fc,8369
80
+ dw/window_count_errors.py,sha256=GIifaclu65kV0eiQFP1cscUuHJab80S3KFdP4Beho9k,4876
81
+ dw/worker.py,sha256=I0KyzP5aHzubZFwkUd42iEtdMbruoFlc--JVNe-GzJc,35252
82
+ dw/worker_manager.py,sha256=MgGZKf_49R8VbyVc5iQrGvCB2PM-rw-J44TyggaTp1Y,12046
83
+ dw/worker_protocol.py,sha256=lz1__T2l6RB72_F7D9atLhEmKOtP7ae0Hydc0TrYTFE,6585
84
+ dw/workflow.py,sha256=DGnzzh3mMiop3stp8-y4CqymIYHnUq0mJM6fwnReMGY,40176
85
+ dw/workflow_run.py,sha256=FiiOu03NXq0w50w-DO1Pw5YIIqP_NP3BWT0vHYaTw0c,41042
86
+ dw/workflow_schema.json,sha256=45oJbjnf3VDor5ZJi00-JJHDKSIduGO9OgD9gFNTjkc,71690
87
+ dw/workspace.py,sha256=8OdAqHjIZGX8MLpuNqzEZcowFXNnHC9kKZot4KNUyyE,25831
88
+ dw/writers.py,sha256=S2-c1zitCHrH7UY8r_O5AmpNFc1eB2IErbAOeSNeWI0,15427
89
+ dw/community_pipelines/pipeline_flux_rf_inversion.py,sha256=XjLO58h5wQn16qP8wEIZKg2Y46mxzQ8qkUu29iQnrrA,50587
90
+ dw/community_pipelines/pipeline_ltx2_refine.py,sha256=kvDBeiaDvt_BX2AjbN6nnYN0EZsEvMzvSC6WzorA_48,6619
91
+ dw/docs/ACCELERATION.md,sha256=UxPUcxPWniJ0zN2Xn3HaPnV9DNhOGZGEswPNS0901-0,18509
92
+ dw/docs/AGENT_LOOP.md,sha256=rMb_c_r2ucsB7djwtQdp9_VVRagvhevWo-Iep7emmS8,4729
93
+ dw/docs/ARCHITECTURE.md,sha256=WxoTTCSf1oTHdKGij27vL8Irghn5gKvCQ87981lDCUs,62415
94
+ dw/docs/DEPENDENCIES.md,sha256=FKkPm98UeXYBcf26MUpaXkOeoeu3ADyMsC3oP3B4bn4,4455
95
+ dw/docs/IP_ADAPTER.md,sha256=AAHaUIfbnOojHfT0noIeypbhdYPluR7sbZeVn5FpbjU,3730
96
+ dw/docs/LORAS.md,sha256=lwug-7yQp7O1AHJfzv5jzvH8Vta4KMAt5G8m6khyMH8,6895
97
+ dw/docs/MCP.md,sha256=_mja-bGds4S4bXHuasTxON1kttOE2RCp86wlRw7Iaok,57495
98
+ dw/docs/PROMPT_WEIGHTING.md,sha256=Pvr25d3yvS8SlnYwX9qc61VvTa8yFMxK_1zMLvrEigI,3031
99
+ dw/docs/QUANTIZATION.md,sha256=NZCL-09bDM-JhzV1WqK2JGkL1la8VoH9fie1X39arsE,7678
100
+ dw/docs/RECIPES_24GB.md,sha256=Wy0clDoGhALMbYzO4nWxt-A63rqy7OppU5I-h77EPDo,16134
101
+ dw/docs/RELEASING.md,sha256=KUA9N0LotzP-EnrUltF9OAlUin4q9lG3rvp1yTr7GtU,51857
102
+ dw/docs/REMOTE.md,sha256=quum2Y54g2bp2rgXg9WkSPY3zhVGHEpMkEAiL6oAQDU,6650
103
+ dw/docs/SECURITY.md,sha256=Y8eIMvJrYPmK6KsMQ9TY6UGE_IjwTU-8EuE13Ikc2uU,20002
104
+ dw/docs/SECURITY_QUICKREF.md,sha256=-xZNIV6j1oWcoy5B-oHKqh3ko2zJgB2fuNMiDV4f1zY,3537
105
+ dw/docs/SERVER.md,sha256=LDZXkxvg-DiRMgCxtvtpa8obeQVprNHpVn5X0VmAN78,57277
106
+ dw/docs/TASKS.md,sha256=afCTS8bdw4r4KsBxjaGeHT1R9H0-Iunn1-gR8eJrJDc,176225
107
+ dw/docs/TESTING.md,sha256=D4zmQp0iVmREM9J1tq4RxTmmIxvxsp5dRtuRGovP96s,3973
108
+ dw/docs/WORKER_GUIDE.md,sha256=FqzXVuH91XtonpBeXj_7WhMVz5JiB4Rqu2lnGBHchE4,2065
109
+ dw/docs/WORKFLOW_GUIDE.md,sha256=YFlW0IIadffzL3pABM-w3ZAJawb9IMLL8hADiHLsx1Q,148366
110
+ dw/docs/WORKSPACES.md,sha256=PBAuB4zSdPDkkNf8n2D2fc79qClBILpOnzx-CB63FWo,16672
111
+ dw/pipeline_processors/adapters.py,sha256=HIDYa20vWTuD4XK8q4rntr9zZAHgbxkIPPQqeUVa0oQ,6638
112
+ dw/pipeline_processors/chain.py,sha256=2KscX3jQttJL6NmEfiQquPGmBjYIGPOaueHbDv0OUHw,41721
113
+ dw/pipeline_processors/components.py,sha256=S7SjUIg7MOxM0fG67zZe5xJm7WBNfZzdkaTlsMdoaqo,36292
114
+ dw/pipeline_processors/config_objects.py,sha256=nQYKx00544UzJFlEZ-th45b-8sav1hz3tKJaaBDNJns,10911
115
+ dw/pipeline_processors/h3_guide_steps.py,sha256=wsaV7jFqcoZAEfjjyKYAMust3XgotqMkftlA-Ov5WrE,21580
116
+ dw/pipeline_processors/h3_guides.py,sha256=DAhNOzOUD9i33Iopd-9nG3H5jaJPbDnEtqkP8-_GJDk,12445
117
+ dw/pipeline_processors/h3_hold.py,sha256=dwpUuT8NuAVo77_4YVBAvn3G5oBW32e6M6i-cds66oU,9912
118
+ dw/pipeline_processors/h3_hold_steps.py,sha256=mjoWAYHrVhQbpcXCzDVHhOXtCH50wXSUJjTmRhAGfzw,16437
119
+ dw/pipeline_processors/h3_rules.py,sha256=Kpm4xeO7oiM2hdECjvnPg_NZTgCO-vBxs2jHtNW08iA,9244
120
+ dw/pipeline_processors/pipeline.py,sha256=d8zXrmjrp99B44uglhOvjgloagvpMeMlJBtFtmWnF04,44789
121
+ dw/pipeline_processors/placement.py,sha256=D-7ZMNs2P8t81CTtwc_APVrlk_8bz7Ek0M-Hb8wFhV4,16342
122
+ dw/pipeline_processors/progress.py,sha256=uSKPsMug1AZqDoaFXsF5sRcJNiNLzbBuX3C3H3xVzms,9196
123
+ dw/pipeline_processors/remote.py,sha256=eZl6fPEKUrd1ieFgX94QNKAR4ziPH9JXTV_Hse4VsqY,2450
124
+ dw/server/__init__.py,sha256=NGXV8LM6oYUZhEwWSDo3ihBvmzrC71az3Wc2gkGodcM,153
125
+ dw/server/admission.py,sha256=B_zJ5KdCFWSD-PrPGOhCTHlDmUXt9i8vF8QyjyEJhyg,21924
126
+ dw/server/api_models.py,sha256=vsgRc2SUj3-e-zmkNzqD_kyDsc3WzripmkVoDlNNx6E,26594
127
+ dw/server/app.py,sha256=j3YlSj08aLWobTkWCZo9QloRNzlqs-cL3ybA1Uyb3nE,10467
128
+ dw/server/assess.py,sha256=9lxusAW6pEIgyXeGDnNLrpJmQrTg_9_2qNRNXqSLa9Q,7480
129
+ dw/server/catalog.py,sha256=B3uR6G_hADm3nKh9RPf5H5IevIkiVXSgExdAbPCU1X8,17998
130
+ dw/server/catalog_shape.py,sha256=jyuPVQZmgvKXJ__8xgpS2LMo22bChyps19EGEntAoW4,18602
131
+ dw/server/deps.py,sha256=sIMSNuqMqVVNLRBb2Y6UUPZc4P-k914j92cV6_XKdzA,11141
132
+ dw/server/enhancers.py,sha256=ZHfnFmTTD31f8uIA6VUEOjne6ThoXe5vX31kKRf3-hs,5006
133
+ dw/server/exports.py,sha256=25RvcK7W_50LMI5xv86vyCpRz4yunmbZaDQJX4ldz5c,16410
134
+ dw/server/guides.py,sha256=fxXbvnFqA8GUzeVbpEpEpg8FstGH6VItevC0n4H93iQ,11986
135
+ dw/server/http_security.py,sha256=_WptoXRHBXEeyugBoy9sw-r4DHYIWfm-Z3l7GSf_bd8,8827
136
+ dw/server/inline_media.py,sha256=SxCOSLrF7kIthZe_W4DMsdGjFR1UK7Rjeh-wELXEQ5s,4590
137
+ dw/server/job_history.py,sha256=Y_LACySKsLHs_OCJnimBuwx6qLkXA0A1k51J3kSJBOI,23179
138
+ dw/server/job_record.py,sha256=6iWaHmtfV_RAY0gNS7I5yNjmcCZjOmvKjf6SEYVGpGY,14233
139
+ dw/server/job_results.py,sha256=NyjD3GmO7B13CZd1pCBzc8l6CBOfDW4T1WgzR4yd8UM,8123
140
+ dw/server/jobs.py,sha256=zZjbulY-zicPFTqi1qR8fIBqxLdlRzJ0X7z7BIiq7NQ,40221
141
+ dw/server/mcp_mount.py,sha256=XIjfqBzELFKesfHVmdFj69RHSTzr7aF4Ph1Bfz4oPeE,3620
142
+ dw/server/netinfo.py,sha256=_oo0NfnesQR0n8MlxGt15tTgLutaqNOYyYYuUIBdRB0,4941
143
+ dw/server/observed_cost.py,sha256=qAZOZ0Ocv7w6nXv5fQa375XhTCZLb5gy3CxJf1wOk4o,18275
144
+ dw/server/outputs.py,sha256=pw7wztlRJAbaP3gccfeDwzAoYh1A8Kxj5JXy6-X7530,19267
145
+ dw/server/pool.py,sha256=Mjcid677AAy0esiRbJ1ubZwte2jLxBOCJwUQlTKHido,8681
146
+ dw/server/sysinfo.py,sha256=WiQeSpMNiIDOadcpYiyYTQSPQgPZc7qPvLSXx2WQHLA,2221
147
+ dw/server/updater.py,sha256=gX61zcCzIJhPRryz8KcRQkfHPw_qFrG2sZE5OeZQnIk,8428
148
+ dw/server/worker_memory.py,sha256=5lLV5GItg7Rl5L0JQ3nLc5k3VRH_2jMihQv5gxdBHuY,9606
149
+ dw/server/routes/__init__.py,sha256=Z6hnzGs1jdXuY_1C74t09_e1QDYWOxWbCnyjo6_qKB0,1943
150
+ dw/server/routes/assets.py,sha256=LLk-AFmj7VRi_siiW23jquxya4NVyjJrKoQJqKa0jk4,19106
151
+ dw/server/routes/files.py,sha256=6c7ySIPe7o8HSc8Z7M2b1fKWonQdkC8S_TPAVppCxOo,7125
152
+ dw/server/routes/gallery.py,sha256=pwE1qsizXpqL-kMieM6UbXAgAHOpdQ1V3MR53510PsU,15107
153
+ dw/server/routes/jobs.py,sha256=i_PcD6i0CWuh6yA0ACGgv_nLQgDQQQPHITE8KpIBCe0,39008
154
+ dw/server/routes/library.py,sha256=I8XTm9P_gE80ACmw_E0euJwXEdHenctYhs4U-iGT4g8,29815
155
+ dw/server/routes/loras.py,sha256=OVxlXutJs1ThSsTC3R31pg44sUaV9iH8PhY0Xy9UyVQ,9289
156
+ dw/server/routes/media.py,sha256=vRhH52iZ8BwmPeNtN0wS_zM6A3qj92p2V8E2DwIifN8,26005
157
+ dw/server/routes/system.py,sha256=AWzVIF0QlJVESjgQLvK0KWIsWh9VdOHCWzj7y7dfgRw,17863
158
+ dw/server/ui/index.html,sha256=v7fHgyV8TJI6RWt5B_i2AtpDssuCdIcjYgh0ULMrCBU,826
159
+ dw/server/ui/assets/abap-08VXUWAP.js,sha256=v_s2iGszAEBUjgmnxo-oLx1BQTQAjswxiNzZ24fNZ3o,11690
160
+ dw/server/ui/assets/apex-BWPQTe0t.js,sha256=eUu2JicJ0pjmMYETgWVVuzFEJeyxEfievljL436Mt3Q,3469
161
+ dw/server/ui/assets/azcli-Bc_sGQ0U.js,sha256=LDRk2Ih2wJsTBkEl5yiESmbLMeMCGuNGu5aDZxaZzRA,707
162
+ dw/server/ui/assets/bat-i0X4ZdIN.js,sha256=HG8UIIyIPHkvLPfYHvwzPwmHwXBihFrl_AN34FfROP4,1696
163
+ dw/server/ui/assets/bicep-B5-_aFwp.js,sha256=LqSc3IjZ0R63GmMgaRbIxZGI9FM-IE7w_XAFzsEJgH0,2367
164
+ dw/server/ui/assets/cameligo-DMUM7wLl.js,sha256=-M-KapRTtKxkgsMtOTYOpIRACqGYx4Ou2kz89Yztc1A,1975
165
+ dw/server/ui/assets/clojure-Cm7r79vr.js,sha256=vFwfRrDOh4XHjcUSBrtsq7LEnk9gOAIHtSL9dMEvK0U,8211
166
+ dw/server/ui/assets/codicon-DF1abBS2.ttf,sha256=d_kCVXIx-VxMca5RfQmhqEJ1Nlb19mUIaz5a2AlVONo,153228
167
+ dw/server/ui/assets/coffee-Ba7i2nA0.js,sha256=5WkJBbYWZZuIZ5VST0NJs34Zr1rnJRmwY4TcT7Y0CaE,3364
168
+ dw/server/ui/assets/cpp-C7h46wYY.js,sha256=DxbP-fd4CvkTNwF_a-Jr1IcaUAXmwErbbQEEfiRkN_U,4743
169
+ dw/server/ui/assets/csharp-BKxtCVv1.js,sha256=tcK0xVr_gQziNy8CVDw-kMQEwehIe9ND34jF0kt8c34,4117
170
+ dw/server/ui/assets/csp-bTuwJoIa.js,sha256=pUYDwODPsXKr4shrxhfRg0_WRY3TLT8f5omX7nYPw7Y,1278
171
+ dw/server/ui/assets/css-DIMkf-bt.js,sha256=Nhs17Txzlhf5DumZtrz-bnBHwdMMUt9YQBxQSG9f2OQ,4361
172
+ dw/server/ui/assets/css.worker-C6lDtRpF.js,sha256=ft-SA2IfNjCmj4OcQzAbBRB2HdcczVU36dvuGSI_uaA,1078254
173
+ dw/server/ui/assets/cssMode-ukxfz-ce.js,sha256=nFHzoVnyApAUfy7SKl7IC2nmVFZhnWQzJhPTMk6VxHk,2952
174
+ dw/server/ui/assets/cypher-CVaqCwHa.js,sha256=AYGtVhyMHJdRbOwpGLEfAPAyHAdwXc3J0D_mjN4oLVg,3048
175
+ dw/server/ui/assets/dart-onAF5SnQ.js,sha256=QWSf47NMFu2yUd9XFSGEuisDrfcp-gvscx9WznuMY2w,3931
176
+ dw/server/ui/assets/dockerfile-DZFCIeNp.js,sha256=hIFKl4QSK6zsn49CP3KacmKpiovwWnTZleepql5VAHo,1728
177
+ dw/server/ui/assets/ecl-D05T4iGw.js,sha256=8dy8B-9clhaDibzPszzXjx7c9Zj0t2pUw19rgIOlAkM,4623
178
+ dw/server/ui/assets/editor-DjpsE8to.css,sha256=eXqoXVVwoOu7BHCT9Y6a3BOUUHhJVCWycTMHPlsVqdo,99095
179
+ dw/server/ui/assets/editor.api-Bkt_tsj1.js,sha256=FrJgJkvU6jCACCai72xhLKGRJ6VrLo0iOqfV7KlxXZk,2735707
180
+ dw/server/ui/assets/editor.worker-BmdWdrHZ.js,sha256=Ih2vJ17lgC5GJ1KP9ltE1UyLran3eG7m51K9mfkfofE,303777
181
+ dw/server/ui/assets/elixir-6RTg0lbw.js,sha256=_AM20WhJvweAHmfSKZJwEaIeLg71t8jkSUJgRVz5P0w,10116
182
+ dw/server/ui/assets/flow9-C5_-GSwl.js,sha256=kUYiOodGRTZ6qJ5xielY8Ku5yBXlsEOb9kxSY4Fajb0,1669
183
+ dw/server/ui/assets/freemarker2-DbXygLvH.js,sha256=7Js-N8Qi4vRrvT1VpTAPb8PUlINtpPpV93K4q3dJSLA,15548
184
+ dw/server/ui/assets/fsharp-C8Ef5oNN.js,sha256=UTeoJ7rvyxEcL_h0e74Hkkyfnqjz1KegentufCX2nkU,2651
185
+ dw/server/ui/assets/go-C-y9NEjX.js,sha256=yiNuAvOl-CJdg1l7tlsDbqjKrl95VJ6jchO7KXm8sIU,2350
186
+ dw/server/ui/assets/graphql-fmXr3nnJ.js,sha256=pm47jqz4rUAXQDgl98x5ePvvxf0fgOpsBE-AWYSMUYY,2119
187
+ dw/server/ui/assets/handlebars-BdhZGoSz.js,sha256=3KwTGJe95ggal-nglywXoAA39LaUaBIbXNyXz8rDeyU,6284
188
+ dw/server/ui/assets/hcl-CpzslTdj.js,sha256=FTELtvUdJnCIa6x3jYwjNRaXvSqDk7_x4SlTYehMmdI,3449
189
+ dw/server/ui/assets/html-Chhg10Tp.js,sha256=-73c_lkbfEDPnZFS0NswaVj2hsmUdUVdZFIIICBhkXo,4516
190
+ dw/server/ui/assets/html.worker-C5yZDBHz.js,sha256=4Kkoa_A4TNCicFnuUnxjWUnhuTl1Mn4XhuWx5B3E4w4,743387
191
+ dw/server/ui/assets/htmlMode-cC3JW4lx.js,sha256=Zhv-0Zz_laVYwqef0sWQsE3uxlXJ5KUaDLCT6pS_Fys,3406
192
+ dw/server/ui/assets/index-BYEwBCrU.css,sha256=n-x6pDFSIXFWzm5v0MdRZ1jCd56Lmnfdux4hLZIBnPM,75020
193
+ dw/server/ui/assets/index-CkD0GJG0.js,sha256=fazTmyJ-Gop4ir1lkNf56T1Z1r1_fHxo_K9RTdw2XDA,452533
194
+ dw/server/ui/assets/ini-sBoK_t0W.js,sha256=6QF6Fp68pxwu26PuYuAa5XlpwDMMopXB8gHj4XgppU4,960
195
+ dw/server/ui/assets/java-BEtHBSE6.js,sha256=d9OpHur1TgBPjsMh5iCK_s6-JDUjIUa0H2gTU3OACVM,2906
196
+ dw/server/ui/assets/javascript-BWWLMkof.js,sha256=GgDA0oVPJl0RshEWW6mFVAOwJWrFZvxi9Q4ZWBDD0bs,688
197
+ dw/server/ui/assets/json.worker-DdeUAmHa.js,sha256=Gihf5S5n4Xv_Ipc_FoW6p492ZrLcyFk22r-RcK-GTlA,433137
198
+ dw/server/ui/assets/jsonMode-DrC8C29V.js,sha256=SMiEDbugOAV0fQ_S2pGYUpLI1UlzXLcMhC5_Guxp6nk,12178
199
+ dw/server/ui/assets/julia-Bri6UV-V.js,sha256=GgHfKwkibx83YYASauJxey9COaeCnDC0-FO9DI5h1ww,6505
200
+ dw/server/ui/assets/kotlin-BOotOW0E.js,sha256=y9kKjKTUCkkgIf0XZrn0aW0M28yZaabvrArNjMhi9kM,3041
201
+ dw/server/ui/assets/less-B9JPFI3C.js,sha256=RK-lDgNqYLUdnolGcFtj5W5Nhdj2rhAQjegLMStkLbw,3749
202
+ dw/server/ui/assets/lexon-CfSJPG6W.js,sha256=3wceYal1Tl_3oIKlurT29e46CCwlH0DYXRxHyki6aAc,2288
203
+ dw/server/ui/assets/liquid-CXdQfmUT.js,sha256=uQcOqcdnvqUtjNsZtsqx7xKze22YAhks9rGNK4slXMA,3344
204
+ dw/server/ui/assets/lspLanguageFeatures-BgAhb71w.js,sha256=upZnSffS8eOs4UWbwktvd0OsEMeP0fc85gOHmG7xrvg,28224
205
+ dw/server/ui/assets/lua-CsQS60Ue.js,sha256=T68zBfv8YbWQOUMOoKDHlS6ZLXQbvUoVzIqjfdKaN80,1982
206
+ dw/server/ui/assets/m3-D-oSqn_W.js,sha256=wiQpsc-ejuU-Nd_N1EEku70GvFxCKR2enx_4FMaLERU,2520
207
+ dw/server/ui/assets/markdown-Cimd5fb3.js,sha256=Yh5RI0xP6paio6bg3VkVHxwCFtfLSpYzYe4pqjAseXc,3639
208
+ dw/server/ui/assets/mdx-CQS0lFaZ.js,sha256=z8PfvKhqoTO92VfiCgSqIxnoMZu3l_XmZDIt0343_WU,4319
209
+ dw/server/ui/assets/mips-CIPQ_RoX.js,sha256=Mf9nhH4UiNv4cOxx9GbzZEwcanALyeX1nqZyeDVwn-8,2325
210
+ dw/server/ui/assets/monaco-Z_sI-RLU.js,sha256=zmDfJg3ITo-xpaJMBftqH3OyxCzRur7oB6J_szMoiFs,1296590
211
+ dw/server/ui/assets/monaco-n7clI0si.css,sha256=_s5n5INJJjzoqAk04ZYXP99EFmWEMeL6k0BatkMtehw,86925
212
+ dw/server/ui/assets/msdax-DauUninz.js,sha256=x-Ec1FvZQfNyIBufG3aF-nbhjtWWCb4trNEl2w7mORU,4270
213
+ dw/server/ui/assets/mysql-SOo6toE5.js,sha256=s0175vipA9oId7yWxl-u4jDQp6cAD1LlzIlQ94knUzE,9659
214
+ dw/server/ui/assets/objective-c-FvmIjYaQ.js,sha256=-06rJpDcN7p7YZ4HQ2hFDtAr48MLT-x4ITThLRR0pXM,2102
215
+ dw/server/ui/assets/pascal-DrH0SRf2.js,sha256=LzNJid31rToM1VfXEWLr-e6treFSYIPRs1eX8Qab87w,2639
216
+ dw/server/ui/assets/pascaligo-D-ptJ9y-.js,sha256=Ikz9BypZ4_9F83rc7IW1RIWLR-kLBhf1T-Pmq03oMq0,1859
217
+ dw/server/ui/assets/perl-oz_6vUea.js,sha256=xYDyXpfeizuwlkmJGVWKqlXg_Sdk1AjLc8ZuNwLMIkA,7352
218
+ dw/server/ui/assets/pgsql-DTj74zXo.js,sha256=2nMfJSoshlHJK7ELIrd6adZyNq7xrVi-2BGSEuSqagc,11913
219
+ dw/server/ui/assets/php-nr791fC2.js,sha256=pZLAtd7U2BNsHEXB_pHj0amroQ-6nNaQ3tvdV1yWDJc,7743
220
+ dw/server/ui/assets/pla-CopQ2nXW.js,sha256=F6qe-TaioEm-K31krqMkhvlhwe23zxxcJw8mEvL-9-8,1542
221
+ dw/server/ui/assets/postiats-43DmfD33.js,sha256=3l9CfSZ5CJOyFcupz4PHjdRAHRGY1v5sRnaRsSOWBYA,7364
222
+ dw/server/ui/assets/powerquery-D3hlyOfw.js,sha256=h7-yZyeDYpf8Vz7I-o-AdOXL673EDoRNelYwb-oAYnM,15343
223
+ dw/server/ui/assets/powershell-DmHpPYUd.js,sha256=fS-k4myYtbJ7I-nT4AOE2xWBU6BC4yBTsO8utRI2kYA,3057
224
+ dw/server/ui/assets/protobuf-C531GsRP.js,sha256=CE2QZMYH5tuK5qacJhFCN5Egq0ldACCn8ZMy7drCA_A,8897
225
+ dw/server/ui/assets/pug-Z5eAx3Zn.js,sha256=3W_Q5pw42PShvXTeZmdid5YpzS29ZEKItG3NbMZkZIY,4468
226
+ dw/server/ui/assets/python-C9MtI630.js,sha256=d7tFwC-5AAGYlzTshc8V0z-t5B-15HtK6GfA8qFxwuk,3455
227
+ dw/server/ui/assets/qsharp-DkqhCAOL.js,sha256=72cTeKiuU6qRxzI9j4KVb-r2y5u7Yj9O-DppqJMrsw8,2722
228
+ dw/server/ui/assets/r-BwWrilGY.js,sha256=kjvwR-197La6WrPfRntvc5VS4GcVs7SVUIcq5brgDh4,2836
229
+ dw/server/ui/assets/razor-DPO5mHyR.js,sha256=w0ic4V06lh_eg5zAPs-fV6sHcwdCmuI7RXG2T0A8S0o,8113
230
+ dw/server/ui/assets/redis-ClamHrr6.js,sha256=P6KIG5bJRWvmyPzG14QO5RZJlmj49pzn-p4hDqSFQ5M,3032
231
+ dw/server/ui/assets/redshift-DT7zqm-g.js,sha256=PmLS8mPeeCIWu-NLw1SMU7nZp94WvW7aqKAG7TbJv3c,10331
232
+ dw/server/ui/assets/restructuredtext-BYgofb2h.js,sha256=UmiK7-mgglvXYqrOt4NCdx4oKNNoHilj1XfmVkRw7mA,3744
233
+ dw/server/ui/assets/ruby-DezsRK8O.js,sha256=chu7lEMIyOM4jvdJMPC14ZK5hyDxiJ9LMkoDPvCUoTA,8217
234
+ dw/server/ui/assets/rust-DdL9SqIa.js,sha256=MGorZkVQQnUKZl9zKaHF_rSjO0CN7A5UgCdV2uKWO4c,3661
235
+ dw/server/ui/assets/sb-CcwsVR0C.js,sha256=xAeclcpUX8AxEBGA28XlKeGIx_qhiBu_GL-HAbLS62c,1688
236
+ dw/server/ui/assets/scala-DHpiXF5c.js,sha256=yCwJbNFp3S5yBZLHcjaQw8dKJU-mSBfPAOlo3VyYMUo,7112
237
+ dw/server/ui/assets/scheme-BeGwcela.js,sha256=z8ItryrQzXFnc6PKH1pmoR4HupGMhgqjKcHpQNhwxK4,1626
238
+ dw/server/ui/assets/scss-gp-XZpBa.js,sha256=cRCostxVBB9GGZjPebFuLyXZeTsHFVRGy_yXtF-LjP0,6260
239
+ dw/server/ui/assets/shell-CC2rA5mh.js,sha256=k4DfJFQbqxqasJmdCMVC5tY5Bc_YEWphV55ols_tujw,2811
240
+ dw/server/ui/assets/solidity-BEEn4gHE.js,sha256=agaUW3oE0y6Sn8X4bNEJf8Kd-k_O4kozC0wOc7pD3fU,15992
241
+ dw/server/ui/assets/sophia-CRfGWb83.js,sha256=X1l2ec73453Mhohq6rpNx6pqHsuKvt3iyt4YVopwxjE,2481
242
+ dw/server/ui/assets/sparql-D_Lu-MrJ.js,sha256=3JeFBtGke-BBiCzU5nM83Diwu1ec1I-_7dRPEK1s2E8,2217
243
+ dw/server/ui/assets/sql-NEE52Syq.js,sha256=-k_pzP-IgukwKKn6aWGxpIW460gIgPpID99AV7DefNA,8840
244
+ dw/server/ui/assets/st-DbInun42.js,sha256=4uqmIq2AV5bOzp6YMrW7nKOYreDQNxtpNjOZB3jOX_4,6946
245
+ dw/server/ui/assets/swift-Bxkupp3x.js,sha256=PAoUaoj9w0C1Q8tOfBsDefytIxzaJLYxXo8dgwWE4LQ,4483
246
+ dw/server/ui/assets/systemverilog-Bz4Y3fRF.js,sha256=N8BJdmDPdAS3YSLf9-c6WjpeHiC8AUiPFC0b83QRu84,6850
247
+ dw/server/ui/assets/tcl-DISqw1ZD.js,sha256=tGDwrjRxtiwzHBQVX4aYHPx2tvnzyCbsk3MouRN8nGI,3271
248
+ dw/server/ui/assets/ts.worker-DGGa2mF8.js,sha256=Eo0Wf0gtl2BDSbqkCqvF4LtrJA8iMe9U-cKzQ3RM8kY,6928036
249
+ dw/server/ui/assets/tsMode-D8vGBTVc.js,sha256=ZtQbet7rymcfI3AShEb1Xm6-YYag179iR0udO1RYeCY,21847
250
+ dw/server/ui/assets/twig-De2hgUGE.js,sha256=7UK-mZY0t2AOG2upJFdhUfk_hN4jQxNO37xW_pXsYRk,5781
251
+ dw/server/ui/assets/typescript-DyoEkQLT.js,sha256=eRSf4BBt_ap2mMMJGL1dunj2FvL-BJcnzOCcR1dR3ls,4675
252
+ dw/server/ui/assets/typespec-B8J7ngcE.js,sha256=4SiWGtYCn-n7DAFoQw3hFbXpXOEzUIVgPrFnMxeDL0A,2625
253
+ dw/server/ui/assets/vb-DV3o63ZY.js,sha256=g6FxShoSupLTGxKrGHUt31pO6FoCrY9npMMQpnSqtsM,5300
254
+ dw/server/ui/assets/wgsl-DpFanUEy.js,sha256=M1uSecn4lmt1G3mQyTCdxT4mfHC4g3AjJAw7cuUwAg4,7182
255
+ dw/server/ui/assets/workers-Bdewp_DS.js,sha256=THU2ggMB1iuCWPNp08v0t9pmLnPCvXJyJl9A-vw-YIA,1249
256
+ dw/server/ui/assets/xml-DmmKOVWo.js,sha256=LMcdcf2T8fWhkwvDzv8WFUpjSyxzVZ4IkwWax2y3tbY,1923
257
+ dw/server/ui/assets/yaml-C4jCTuer.js,sha256=0aJEVG-rcx_FYMfikjzVPayLnhvSmqG98mWJRS4AVFM,3543
258
+ dw/tasks/assess.py,sha256=-TAl3OPBcvyh94LJ7YfYd-tUOGvTJ--_j6Y6RfhvX_4,33006
259
+ dw/tasks/audio_dynamics.py,sha256=-dhNkBM3CkWGLbbd5fUExbWCb4FyLJp3mYkqIO4OeIg,18060
260
+ dw/tasks/audio_handlers.py,sha256=0hLa6olH2x01mQO5ev9yUBDd5BZbeHoZWGzkac_ut8c,8799
261
+ dw/tasks/audio_transcription.py,sha256=F8r4gpuQUm34U6QvNxuY-zvMexLeMAzy0B2WPmk0cts,12445
262
+ dw/tasks/audio_utils.py,sha256=_rGfv9o6Aymyw7ZWSUAfNa7MtiImeUvCkpZeEtnyrM4,38888
263
+ dw/tasks/background_remover.py,sha256=lwRMBo1VALLVWwUQUOs-5EWtAvOKZOlrVwoAr6jrStQ,1205
264
+ dw/tasks/beats.py,sha256=Eix0e-vXVhNkQCaeNPuE9m18S5jbY0Ikt6Vuz-QvWJ8,12603
265
+ dw/tasks/borders.py,sha256=ZFnvODeLnF4nMMogOAZKEKHPMM7qebW1A4GaZFyDKmI,4253
266
+ dw/tasks/compose_text.py,sha256=7N-9ti5XfhwECZIXzx7IgTbmm2Kt8GmcR8yK5mbEXEY,3127
267
+ dw/tasks/concat_videos.py,sha256=Auyt-QW1ENbxGWQ7u2r-Y1tm2CH_V-7Hsi8Sj80_ooY,17506
268
+ dw/tasks/cuts.py,sha256=XPrMG3t_f-TszyQWffmGAY1ltUVmHUI_hfL0N3XsE9c,43674
269
+ dw/tasks/depth_estimator.py,sha256=uVsMueg6pZy-1NA_uY5PRMezl9jyUbSYmyQaV8o8sHY,1704
270
+ dw/tasks/diffusion_upscale.py,sha256=7kSkXaQZ9Ng93xizAksmOZbXgGVPCgDN8PgLqOlCOiA,3416
271
+ dw/tasks/dissolve_videos.py,sha256=GT1sDXSUo1IfG78GmS3dRRTDwVQPRz0Jk7QRlGl3fD0,12923
272
+ dw/tasks/face_track.py,sha256=Psi6LG81I0BEtqzHR4aB2Q1gw3k2XLpQ1ZP5U34taaM,26486
273
+ dw/tasks/finish.py,sha256=TuXW_vETJI14QiBrP8yxzBTUbptxW0P4qamUBSAO-qM,6011
274
+ dw/tasks/finish_handlers.py,sha256=2vsN2vt7W76XovsZwX5Vfp4SP35-xC_6Vo1sjAyDMT4,7435
275
+ dw/tasks/fit.py,sha256=XiTtrI7QsoGi8t_P74sw3mAESBk9OQv1-apwrBJ7Svs,12857
276
+ dw/tasks/format_messages.py,sha256=LHEFWaIS0GsL0Dm7KGG_MfwlKO9gB62zWf3egxxDZwE,630
277
+ dw/tasks/gather.py,sha256=VY6GB0LvFxoMjHSMmymLO5CQo97uHLrLP8WtxJKTZuk,5955
278
+ dw/tasks/grade.py,sha256=s2mTRB-GyESrBbXgbaIKuQ61hPT6dCRq-UUruqrOJ1c,8475
279
+ dw/tasks/h3_latent_upscale.py,sha256=f_9o5qRXFq_08Ggyfap9HaP3Ka-_TtxKH-I83Usgvdo,13758
280
+ dw/tasks/h3_latent_upscaler_model.py,sha256=U-W9BXhDiy2ocv7TajxPsbNGmN2a9ymryjuiwP2LlGE,10440
281
+ dw/tasks/image_ops.py,sha256=KFFWnboOPfcnHqnKnI9csy7t9enV1-slK7wcYEg0TiE,2334
282
+ dw/tasks/image_to_text.py,sha256=iPlPI4cyPzOn1J-MoZbJ0DnSPaoWJrBjFNjZ_E7i908,1614
283
+ dw/tasks/image_utils.py,sha256=6kJzzJxEK0vT-HSw-gKLGDDJVM1WF92XABgrtbwRI9s,34615
284
+ dw/tasks/interpolate_frames.py,sha256=Jxp0GcETheu1SBwAP6QrCCRKRs9XfoF5SHzwfUkIwCk,9272
285
+ dw/tasks/join_into_song.py,sha256=54nr2-Q5MOUV4rTtBeWyJV-oK1misJ86LV2eRRV_BTo,17825
286
+ dw/tasks/joins.py,sha256=VpGdaZnTh05dD3EAB7p0YoXeDkVBxj_JrhGpVq8mXAc,27431
287
+ dw/tasks/judge.py,sha256=RCSguw4G7BmgKSFJpTibD8xFhyj2nis5_Naxr3oTJ2k,2310
288
+ dw/tasks/loop_bed.py,sha256=6b9odU4se6yu1JqawcH0G30wSomcgfH2gG6vKVWUY-I,36001
289
+ dw/tasks/lut.py,sha256=zZwW8qqgWbyFF0zFDrOGyBXifp4pw9iGZzHdzEi8AbU,12709
290
+ dw/tasks/measure_sync.py,sha256=pdagwj6Ss4MrYE4V7Oqu9CDSEsTvEJZIOXCBYXIkJX8,7675
291
+ dw/tasks/model_cache.py,sha256=Bh97x5mFFFzT8M8_LiHo0a1izsaIqvsQyIURPkjKxTk,1879
292
+ dw/tasks/model_handlers.py,sha256=JbAVIZVQUr3r4y3p8HyQHKw0dUksRPpCPKsw13qwkX4,11378
293
+ dw/tasks/pair_audio.py,sha256=5q56WfKh5srvjLx_sjXBpl-Pk_0qvdMKULT-CJXKkY8,17842
294
+ dw/tasks/qr_code.py,sha256=xyckWTixcMYasJPI5N7-co4jmyHwfScGWD2D1RbFzuM,548
295
+ dw/tasks/registry.py,sha256=nk8mcqkpg-OBdiN4K7Go9lpJVR2mQREmxv4wTzB7k1c,9107
296
+ dw/tasks/restore_faces.py,sha256=0gRhEofAlWw-e3X6mpMPzzEQsHQ5krtocOKPvsuBBMY,6440
297
+ dw/tasks/rife_model.py,sha256=eO77oSH4OGY5pXBp6UDaXIDbGPlOHPIiXMrf1RMzYjo,6387
298
+ dw/tasks/script_check.py,sha256=S8YdJ1bPKdiYh-m5YmIXQ_r_aJGGel8TZquMHDYWXm0,28478
299
+ dw/tasks/segment.py,sha256=2g-jndKDlIcVMH4OApWNlWzt-8DzQvhK82_TNMSXoTI,4267
300
+ dw/tasks/select.py,sha256=kDNxiVLN2_rN0LlQ6ORQe4mjn6s-iHpBzgyNLUd0_ss,3484
301
+ dw/tasks/speech_generation.py,sha256=_rpj5o3-KTsvmvVcFuWCBzCO2UrUbvvKfQhIQH2giaM,10754
302
+ dw/tasks/stabilize.py,sha256=XtVCV87gmsd0Q24U4Do6CqXEt54zxe7Vg6AED6UDsNo,5018
303
+ dw/tasks/task.py,sha256=QYDCPfik-Oc9D6aBeLXF1eDFj9B3nvLHZbMt3CD9fIs,14406
304
+ dw/tasks/tensor_image.py,sha256=xJDo5-Bi7drP4LqXgg_qGeEbC8q9-KA84iVJolQURhE,2083
305
+ dw/tasks/text_generation.py,sha256=AARqeo_tdEjsXmsmx-qsDmCPlB_zWFPsQrWWAhOi8CM,6995
306
+ dw/tasks/text_sections.py,sha256=0eE7O0eLQCgxEooO3-RLuQSRwmeFwHttLqwhp71q3Lw,3260
307
+ dw/tasks/trim.py,sha256=wXKBjSdYTZQXlMIJpBwTGxJoun_SBzqw0kkPgF3-Nhg,5253
308
+ dw/tasks/upscale.py,sha256=4GIMgDEPtA39ecSMUD0PKaXEB2UaBCnEpO0XK3ojtb0,6852
309
+ dw/tasks/video_handlers.py,sha256=YemVhOBWdIVhziiXq7CV5ck2EoNNn3Q8MPPJ2RtqXU8,13268
310
+ dw/tasks/video_utils.py,sha256=4y08HWu99BZZZV4bFI9qeSFeEGuKMKqUmfvMXNuLrW0,19873
311
+ dw/tasks/voice_attribution.py,sha256=ZdCJcYbaEFQuMyCdKSs-qwrcGN3xjUPR2ePqPNcILis,36288
312
+ dw/tasks/windows.py,sha256=6Eho44yC0-nIY51yvsA0qBfQx9v5VXDWhxBftDkWLvU,21955
313
+ dw/tasks/zoe_depth.py,sha256=s-otGgDA_wIfawzGWhHd9eDtHBiNsNosjCUH3qIr03c,1817
314
+ dw/workflows/h3_context_ir.json,sha256=nasb5JKFs6bkqYXuTvCyyiGAROBo8N0vDw_X-ec8SYM,13653
315
+ dw/workflows/test.json,sha256=XFvEH7_8F8MGoX5b1j0FnT8dJghYiuyukj2q0JSEfkU,937
316
+ dw_mcp/__init__.py,sha256=v6ezMWrVwQmdKO_ze1xrqVF10NhjdnoE-ikK-NbXaus,435
317
+ dw_mcp/__main__.py,sha256=xiH0reOcZksZivZdK-PWD4A4HQSngiOLq4_D93wIqvg,4364
318
+ dw_mcp/assets.py,sha256=dGLIxdDHtOqLyGCkZOlp56ttv43KSM33s-qMEisRvHg,16830
319
+ dw_mcp/authoring.py,sha256=dNqhY5JnACSgfK9g1rDIURSLupWEn2h82bqd-iy43yM,5027
320
+ dw_mcp/catalog.py,sha256=mY1CwW_FrMnxRFXFTalkYVMuCb23gkjFvgegeC0_QPw,15867
321
+ dw_mcp/client.py,sha256=YhIJY6Nlf2B1MbBfdcMZySsQ5PFvdEVF41dFL8MRhm4,22166
322
+ dw_mcp/confine.py,sha256=bAitZXmyoNMFkmzNa7WwzYNgKhVLT5nUsMOAGe5t-bI,2766
323
+ dw_mcp/diagnose.py,sha256=qhXkYXesTazNHMlxmJz2fZjbijiaGLhlAFr_DdbXUhs,18210
324
+ dw_mcp/exports.py,sha256=U37jOe40K1HVM4ic_CpYFvkZiupDVWPCzWiOJYqvc8g,4388
325
+ dw_mcp/guides.py,sha256=QDvofzCO5FOXTNO5DW82UKqDn2IdvwNEr7rB91fHmxE,1762
326
+ dw_mcp/loras.py,sha256=dp0fUZ9YfECYnDemJNvq62ZbvXjJJaEAEPdkRKIDVGM,875
327
+ dw_mcp/media.py,sha256=q9FI3okCDBhCviADJoenxPULmBJYGbNsvjk0yZVKyD8,21180
328
+ dw_mcp/models.py,sha256=uzsUY-CgiaP1LZLbdLnVRVXFSK2kcXs_tNquRKM6d9w,4220
329
+ dw_mcp/prompts.py,sha256=6gVgr6PJKwqvMDEXhMqMkZ5Y2EQ2YxESZFSdS-boCvA,4156
330
+ dw_mcp/server.py,sha256=TW58QKdg1hvlgnptp8Of-_oNpAIwzKXEahqf6hYngXM,7736
331
+ dw_mcp/tools_authoring.py,sha256=_LrlHTwXVxb6I_8a7F11cby2rEBZ8didDX_5dvT4u-M,12321
332
+ dw_mcp/tools_catalog.py,sha256=kpa75deedQEFI90RHKjjqrNY9pFA4E5KtbtOogGwFtY,21962
333
+ dw_mcp/tools_jobs.py,sha256=Hk7MNtd-GA-he6VIepOJHkLnHD594IEMNuriqj88MEk,12015
334
+ dw_mcp/tools_media.py,sha256=YovyYnkRzhAjIQ54Sl12c-lOy9Jq5vrQWVRxd015ehU,16909
335
+ dw_mcp/workspaces.py,sha256=OF6oVMQx_pkTuRMLvbOYkpVWwcA6GQwaEf5k0oxqBnI,8449
336
+ diffusers_workflow-0.11.0.dist-info/METADATA,sha256=P7Mj4vsFRqR08lcGSSgaf0tdwSAW0ZW64ROEkzQDNnM,14939
337
+ diffusers_workflow-0.11.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
338
+ diffusers_workflow-0.11.0.dist-info/entry_points.txt,sha256=Dem_AOzV-Kcpr9AASlSvJ-S5sn3f6TQu6ABb6BbApho,148
339
+ diffusers_workflow-0.11.0.dist-info/top_level.txt,sha256=o-uFAN_oUOrhXfMKO39HsMs2r19L9LykxoVKj2S9q7U,10
340
+ diffusers_workflow-0.11.0.dist-info/RECORD,,
dw/__init__.py CHANGED
@@ -48,6 +48,24 @@ def _parallel_loading_default(platform):
48
48
  if "HF_ENABLE_PARALLEL_LOADING" not in os.environ:
49
49
  os.environ["HF_ENABLE_PARALLEL_LOADING"] = _parallel_loading_default(sys.platform)
50
50
 
51
+
52
+ def _inductor_cache_dir_default(environ):
53
+ """Where torch.compile keeps its on-disk cache.
54
+
55
+ Inductor's own default is /tmp/torchinductor_<user>, which a reboot wipes.
56
+ A fresh worker always retraces, but a cache hit skips codegen and kernel
57
+ builds - most of a cold compile, about 90s of MiniMax-H3's first step on a
58
+ 3090 - so the user's cache directory keeps that paid once per shape rather
59
+ than once per boot. An empty XDG_CACHE_HOME counts as unset, per the spec."""
60
+ base = environ.get("XDG_CACHE_HOME") or os.path.join(
61
+ os.path.expanduser("~"), ".cache"
62
+ )
63
+ return os.path.join(base, "dw", "torchinductor")
64
+
65
+
66
+ if "TORCHINDUCTOR_CACHE_DIR" not in os.environ:
67
+ os.environ["TORCHINDUCTOR_CACHE_DIR"] = _inductor_cache_dir_default(os.environ)
68
+
51
69
  # Suppress all common library warnings before any imports
52
70
  warnings.filterwarnings("ignore", category=FutureWarning)
53
71
  warnings.filterwarnings("ignore", category=UserWarning)
@@ -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 render_path
34
34
 
35
35
  logger = logging.getLogger("dw")
36
36
 
@@ -109,13 +109,9 @@ def _lora_problems(steps, source_indices, written=None, supplied=()):
109
109
  """
110
110
  written_steps = (written or {}).get("steps")
111
111
  found = []
112
- for index, step in enumerate(steps):
113
- if not isinstance(step, dict):
114
- continue
115
- pipeline = step.get("pipeline")
116
- if not isinstance(pipeline, dict):
117
- continue
118
- source = references.author_index(source_indices, index)
112
+ for _, _, pipeline, source, where in references.iter_steps(
113
+ steps, source_indices, "pipeline"
114
+ ):
119
115
  from_pretrained = pipeline.get(FROM_PRETRAINED_KEY)
120
116
  workflow = (
121
117
  from_pretrained.get(WORKFLOW_KEY)
@@ -127,12 +123,6 @@ def _lora_problems(steps, source_indices, written=None, supplied=()):
127
123
  loras = pipeline.get(LORAS_KEY)
128
124
  if not isinstance(loras, list):
129
125
  continue
130
- name = step.get("name")
131
- where = (
132
- f" in member '{name}'"
133
- if isinstance(name, str) and MEMBER_SEPARATOR in name
134
- else ""
135
- )
136
126
  for position, lora in enumerate(loras):
137
127
  if not isinstance(lora, dict):
138
128
  continue
@@ -212,18 +202,12 @@ def _disabled_loras(steps, source_indices, written=None, supplied=()):
212
202
  engine's, and so is saying that it was used."""
213
203
  written_steps = (written or {}).get("steps")
214
204
  found = []
215
- for index, step in enumerate(steps):
216
- pipeline = step.get("pipeline") if isinstance(step, dict) else None
217
- loras = pipeline.get(LORAS_KEY) if isinstance(pipeline, dict) else None
205
+ for _, _, pipeline, source, where in references.iter_steps(
206
+ steps, source_indices, "pipeline"
207
+ ):
208
+ loras = pipeline.get(LORAS_KEY)
218
209
  if not isinstance(loras, list):
219
210
  continue
220
- source = references.author_index(source_indices, index)
221
- name = step.get("name")
222
- where = (
223
- f" in member '{name}'"
224
- if isinstance(name, str) and MEMBER_SEPARATOR in name
225
- else ""
226
- )
227
211
  for position, lora in enumerate(loras):
228
212
  if not isinstance(lora, dict) or lora.get(MODEL_NAME_KEY) is not None:
229
213
  continue
dw/argument_media.py CHANGED
@@ -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