diffusers-workflow 0.4.0a4__tar.gz → 0.4.0a8__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 (242) hide show
  1. {diffusers_workflow-0.4.0a4/diffusers_workflow.egg-info → diffusers_workflow-0.4.0a8}/PKG-INFO +9 -5
  2. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/README.md +8 -4
  3. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8/diffusers_workflow.egg-info}/PKG-INFO +9 -5
  4. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/SOURCES.txt +25 -21
  5. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/arguments.py +25 -1
  6. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/hub_cache.py +27 -1
  7. diffusers_workflow-0.4.0a8/dw/prompt_schema.json +48 -0
  8. diffusers_workflow-0.4.0a8/dw/prompts.py +145 -0
  9. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/repl.py +1 -1
  10. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/repl_commands.py +1 -1
  11. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/run.py +11 -0
  12. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/security.py +63 -23
  13. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/serve.py +22 -2
  14. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/app.py +204 -5
  15. diffusers_workflow-0.4.0a8/dw/server/enhancers.py +129 -0
  16. diffusers_workflow-0.4.0a4/dw/server/ui/assets/cssMode-DklhHuQC.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/cssMode-4JQhrTTm.js +1 -1
  17. diffusers_workflow-0.4.0a4/dw/server/ui/assets/editor.api-DCWJa9Fw.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/editor.api-B_68laXH.js +1 -1
  18. diffusers_workflow-0.4.0a4/dw/server/ui/assets/freemarker2-CVxDKoFq.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/freemarker2-C4IxK8gs.js +1 -1
  19. diffusers_workflow-0.4.0a4/dw/server/ui/assets/handlebars-DK-ehq_7.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/handlebars-BArDGhF4.js +1 -1
  20. diffusers_workflow-0.4.0a4/dw/server/ui/assets/html-CrtXvEnP.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/html-8yKFx0-x.js +1 -1
  21. diffusers_workflow-0.4.0a4/dw/server/ui/assets/htmlMode-D0r9dgS3.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/htmlMode-BwXG6XFP.js +1 -1
  22. diffusers_workflow-0.4.0a8/dw/server/ui/assets/index-BY3Mtj4M.js +17 -0
  23. diffusers_workflow-0.4.0a8/dw/server/ui/assets/index-Bug26k2P.css +1 -0
  24. diffusers_workflow-0.4.0a4/dw/server/ui/assets/javascript-rD650v5-.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/javascript-B3mqpFQQ.js +1 -1
  25. diffusers_workflow-0.4.0a4/dw/server/ui/assets/jsonMode-DvWKiZ5V.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/jsonMode-C1m5Z8Ha.js +1 -1
  26. diffusers_workflow-0.4.0a4/dw/server/ui/assets/liquid-DvjV9-yQ.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/liquid-Cs5oVPJ1.js +1 -1
  27. diffusers_workflow-0.4.0a4/dw/server/ui/assets/lspLanguageFeatures-Bv4c-HOB.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/lspLanguageFeatures-CnroSKaf.js +1 -1
  28. diffusers_workflow-0.4.0a4/dw/server/ui/assets/mdx-CmyDcP1k.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/mdx-BGAIyUWE.js +1 -1
  29. diffusers_workflow-0.4.0a4/dw/server/ui/assets/monaco-CFDZdQeR.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/monaco-ab9gu2Wi.js +4 -4
  30. diffusers_workflow-0.4.0a4/dw/server/ui/assets/python-BbNG9-ih.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/python-XsfASqaE.js +1 -1
  31. diffusers_workflow-0.4.0a4/dw/server/ui/assets/razor-BruFjATi.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/razor-C-1xVmcy.js +1 -1
  32. diffusers_workflow-0.4.0a4/dw/server/ui/assets/tsMode-DhwsPBWM.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/tsMode-BDa9GeVq.js +1 -1
  33. diffusers_workflow-0.4.0a4/dw/server/ui/assets/typescript-DLBTIt_O.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/typescript-VE9GZNZf.js +1 -1
  34. diffusers_workflow-0.4.0a4/dw/server/ui/assets/workers-BD2vxpDW.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/workers-C_2pIPh_.js +1 -1
  35. diffusers_workflow-0.4.0a4/dw/server/ui/assets/xml-BCRgtEff.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/xml-BJp06vju.js +1 -1
  36. diffusers_workflow-0.4.0a4/dw/server/ui/assets/yaml-B9W8qjO1.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/yaml-EI9SS79i.js +1 -1
  37. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/index.html +2 -2
  38. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/workflow.py +13 -1
  39. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/pyproject.toml +1 -1
  40. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_arguments.py +19 -0
  41. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_docs_links.py +8 -6
  42. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_examples.py +7 -6
  43. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_hub_cache.py +46 -0
  44. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_previous_results.py +18 -0
  45. diffusers_workflow-0.4.0a8/tests/test_prompts.py +227 -0
  46. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_security.py +60 -0
  47. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_server.py +166 -0
  48. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_text_sections.py +1 -1
  49. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_workflow.py +20 -0
  50. diffusers_workflow-0.4.0a4/dw/server/ui/assets/index-SQcvGbXy.css +0 -1
  51. diffusers_workflow-0.4.0a4/dw/server/ui/assets/index-qLIa9n7C.js +0 -13
  52. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/LICENSE +0 -0
  53. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/MANIFEST.in +0 -0
  54. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/dependency_links.txt +0 -0
  55. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/entry_points.txt +0 -0
  56. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/requires.txt +0 -0
  57. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/top_level.txt +0 -0
  58. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/__init__.py +0 -0
  59. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/cache_blocks.json +0 -0
  60. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/cache_blocks.py +0 -0
  61. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/community_pipelines/pipeline_flux_rf_inversion.py +0 -0
  62. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/events.py +0 -0
  63. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/introspection.py +0 -0
  64. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/log_setup.py +0 -0
  65. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/pipeline_processors/chain.py +0 -0
  66. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/pipeline_processors/config_objects.py +0 -0
  67. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/pipeline_processors/pipeline.py +0 -0
  68. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/pipeline_processors/remote.py +0 -0
  69. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/previous_results.py +0 -0
  70. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/prompt_weighting.py +0 -0
  71. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/repl_worker.py +0 -0
  72. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/result.py +0 -0
  73. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/schema.py +0 -0
  74. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/__init__.py +0 -0
  75. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/jobs.py +0 -0
  76. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/abap-08VXUWAP.js +0 -0
  77. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/apex-BWPQTe0t.js +0 -0
  78. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/azcli-Bc_sGQ0U.js +0 -0
  79. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/bat-i0X4ZdIN.js +0 -0
  80. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/bicep-B5-_aFwp.js +0 -0
  81. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/cameligo-DMUM7wLl.js +0 -0
  82. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/clojure-Cm7r79vr.js +0 -0
  83. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/codicon-Brq4_Ui5.ttf +0 -0
  84. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/coffee-Ba7i2nA0.js +0 -0
  85. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/cpp-C7h46wYY.js +0 -0
  86. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/csharp-BKxtCVv1.js +0 -0
  87. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/csp-bTuwJoIa.js +0 -0
  88. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/css-DIMkf-bt.js +0 -0
  89. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/css.worker-B3ciXF_0.js +0 -0
  90. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/cypher-CVaqCwHa.js +0 -0
  91. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/dart-onAF5SnQ.js +0 -0
  92. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/dockerfile-DZFCIeNp.js +0 -0
  93. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/ecl-D05T4iGw.js +0 -0
  94. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/editor-jjEx9u7D.css +0 -0
  95. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/editor.worker-q-txB4vs.js +0 -0
  96. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/elixir-6RTg0lbw.js +0 -0
  97. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/flow9-C5_-GSwl.js +0 -0
  98. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/fsharp-C8Ef5oNN.js +0 -0
  99. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/go-C-y9NEjX.js +0 -0
  100. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/graphql-fmXr3nnJ.js +0 -0
  101. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/hcl-CpzslTdj.js +0 -0
  102. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/html.worker-C93Ht9o9.js +0 -0
  103. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/ini-sBoK_t0W.js +0 -0
  104. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/java-BEtHBSE6.js +0 -0
  105. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/json.worker-B2V3pomh.js +0 -0
  106. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/julia-Bri6UV-V.js +0 -0
  107. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/kotlin-BOotOW0E.js +0 -0
  108. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/less-B9JPFI3C.js +0 -0
  109. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/lexon-CfSJPG6W.js +0 -0
  110. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/lua-CsQS60Ue.js +0 -0
  111. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/m3-D-oSqn_W.js +0 -0
  112. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/markdown-Cimd5fb3.js +0 -0
  113. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/mips-CIPQ_RoX.js +0 -0
  114. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/monaco--ixms01u.css +0 -0
  115. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/msdax-DauUninz.js +0 -0
  116. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/mysql-SOo6toE5.js +0 -0
  117. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/objective-c-FvmIjYaQ.js +0 -0
  118. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pascal-DrH0SRf2.js +0 -0
  119. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pascaligo-D-ptJ9y-.js +0 -0
  120. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/perl-oz_6vUea.js +0 -0
  121. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pgsql-DTj74zXo.js +0 -0
  122. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/php-nr791fC2.js +0 -0
  123. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pla-CopQ2nXW.js +0 -0
  124. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/postiats-43DmfD33.js +0 -0
  125. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/powerquery-D3hlyOfw.js +0 -0
  126. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/powershell-DmHpPYUd.js +0 -0
  127. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/protobuf-C531GsRP.js +0 -0
  128. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pug-Z5eAx3Zn.js +0 -0
  129. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/qsharp-DkqhCAOL.js +0 -0
  130. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/r-BwWrilGY.js +0 -0
  131. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/redis-ClamHrr6.js +0 -0
  132. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/redshift-DT7zqm-g.js +0 -0
  133. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/restructuredtext-BYgofb2h.js +0 -0
  134. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/ruby-DezsRK8O.js +0 -0
  135. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/rust-DdL9SqIa.js +0 -0
  136. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/sb-CcwsVR0C.js +0 -0
  137. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/scala-DHpiXF5c.js +0 -0
  138. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/scheme-BeGwcela.js +0 -0
  139. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/scss-gp-XZpBa.js +0 -0
  140. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/shell-CC2rA5mh.js +0 -0
  141. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/solidity-BEEn4gHE.js +0 -0
  142. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/sophia-CRfGWb83.js +0 -0
  143. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/sparql-D_Lu-MrJ.js +0 -0
  144. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/sql-NEE52Syq.js +0 -0
  145. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/st-DbInun42.js +0 -0
  146. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/swift-Bxkupp3x.js +0 -0
  147. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +0 -0
  148. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/tcl-DISqw1ZD.js +0 -0
  149. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/ts.worker-D7T1-Ig5.js +0 -0
  150. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/twig-De2hgUGE.js +0 -0
  151. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/typespec-B8J7ngcE.js +0 -0
  152. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/vb-DV3o63ZY.js +0 -0
  153. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/wgsl-DpFanUEy.js +0 -0
  154. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/updater.py +0 -0
  155. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/settings.py +0 -0
  156. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/step.py +0 -0
  157. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/audio_utils.py +0 -0
  158. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/background_remover.py +0 -0
  159. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/borders.py +0 -0
  160. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/concat_videos.py +0 -0
  161. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/depth_estimator.py +0 -0
  162. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/diffusion_upscale.py +0 -0
  163. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/format_messages.py +0 -0
  164. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/gather.py +0 -0
  165. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/image_to_text.py +0 -0
  166. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/image_utils.py +0 -0
  167. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/interpolate_frames.py +0 -0
  168. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/model_cache.py +0 -0
  169. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/pair_audio.py +0 -0
  170. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/qr_code.py +0 -0
  171. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/restore_faces.py +0 -0
  172. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/rife_model.py +0 -0
  173. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/segment.py +0 -0
  174. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/task.py +0 -0
  175. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/tensor_image.py +0 -0
  176. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/text_generation.py +0 -0
  177. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/text_sections.py +0 -0
  178. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/upscale.py +0 -0
  179. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/video_utils.py +0 -0
  180. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/zoe_depth.py +0 -0
  181. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/teacache.py +0 -0
  182. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/teacache_models.json +0 -0
  183. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/test.py +0 -0
  184. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/type_helpers.py +0 -0
  185. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/validate.py +0 -0
  186. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/variables.py +0 -0
  187. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/worker.py +0 -0
  188. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/workflow_schema.json +0 -0
  189. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/workflows/augment_prompt.json +0 -0
  190. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/workflows/describe_image.json +0 -0
  191. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/workflows/h3_context_ir.json +0 -0
  192. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/workflows/test.json +0 -0
  193. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/setup.cfg +0 -0
  194. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_argument_updates.py +0 -0
  195. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_audio_utils.py +0 -0
  196. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_borders.py +0 -0
  197. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_cache_blocks.py +0 -0
  198. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_chain.py +0 -0
  199. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_component_pruning.py +0 -0
  200. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_concat_videos.py +0 -0
  201. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_config_objects.py +0 -0
  202. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_configuration_schema.py +0 -0
  203. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_depth_estimator.py +0 -0
  204. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_device.py +0 -0
  205. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_device_helpers.py +0 -0
  206. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_diffusion_upscale.py +0 -0
  207. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_events.py +0 -0
  208. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_gather.py +0 -0
  209. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_image_to_text.py +0 -0
  210. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_image_utils.py +0 -0
  211. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_integration.py +0 -0
  212. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_interpolate_frames.py +0 -0
  213. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_introspection.py +0 -0
  214. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_list_images.py +0 -0
  215. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_model_cache.py +0 -0
  216. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_modular_pipeline.py +0 -0
  217. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_pair_audio.py +0 -0
  218. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_pipeline_caching.py +0 -0
  219. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_pipeline_components.py +0 -0
  220. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_prompt_parser.py +0 -0
  221. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_prompt_weighting.py +0 -0
  222. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_repl_commands.py +0 -0
  223. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_repl_ergonomics.py +0 -0
  224. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_repl_hierarchical.py +0 -0
  225. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_repl_reorganization.py +0 -0
  226. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_resize_bucket.py +0 -0
  227. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_result.py +0 -0
  228. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_scheduler_config.py +0 -0
  229. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_schema.py +0 -0
  230. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_segment.py +0 -0
  231. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_step.py +0 -0
  232. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_strip_exif_and_watermark.py +0 -0
  233. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_task.py +0 -0
  234. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_task_discovery.py +0 -0
  235. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_teacache.py +0 -0
  236. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_tensor_image.py +0 -0
  237. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_text_generation.py +0 -0
  238. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_type_helpers.py +0 -0
  239. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_variables.py +0 -0
  240. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_video_utils.py +0 -0
  241. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_worker.py +0 -0
  242. {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_worker_execute.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.4.0a4
3
+ Version: 0.4.0a8
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -92,6 +92,7 @@ A declarative workflow engine and web UI for the [Hugging Face Diffusers library
92
92
  - **Quantization** — BitsAndBytes, TorchAO, GGUF, SDNQ, optimum-quanto
93
93
  - **Inference acceleration** — TeaCache, FirstBlockCache, FasterCache, MagCache, TaylorSeerCache
94
94
  - **Prompt weighting** — A1111-style `(word:1.5)` syntax with long prompt support
95
+ - **Prompt library** — store prompts once in `prompts/` and reference them from any workflow as `prompt:name` or `prompt:folder/name`, with a web UI for browsing, editing, and AI-enhancing them
95
96
  - **LoRA and IP-Adapter** support
96
97
  - **Composable workflows** from multiple JSON files with `builtin:` references
97
98
  - **Utility tasks** — upscaling, face restoration, segmentation, captioning, frame interpolation, QR codes, and more
@@ -135,6 +136,8 @@ Everything the engine does, in a browser backed by a persistent GPU worker — m
135
136
 
136
137
  ![The gallery with generated images and videos](docs/img/ui-gallery.jpg)
137
138
 
139
+ **A prompt library shared by every workflow.** Store a prompt once, reference it anywhere as `prompt:name` — the Prompts page browses, edits, and filters the library, and an *Enhance with AI* panel expands an idea into a full prompt with a local language model.
140
+
138
141
  **A model manager for the disk your models actually consume.** The Hugging Face hub cache, inventoried: sizes, revisions, last-used dates, free space — download new models by id with live progress, delete with one click.
139
142
 
140
143
  ![The model manager listing cached models with sizes](docs/img/ui-models.png)
@@ -146,14 +149,14 @@ Jobs queue, stream progress live (per denoising step), cancel cooperatively, and
146
149
  ### Run a Workflow
147
150
 
148
151
  ```bash
149
- python -m dw.run examples/flux/FluxDev.json
150
- python -m dw.run examples/flux/FluxDev.json prompt="a cat" num_images_per_prompt=4
152
+ python -m dw.run workflows/flux/FluxDev.json
153
+ python -m dw.run workflows/flux/FluxDev.json prompt="a cat" num_images_per_prompt=4
151
154
  ```
152
155
 
153
156
  ### Validate a Workflow
154
157
 
155
158
  ```bash
156
- python -m dw.validate examples/flux/FluxDev.json
159
+ python -m dw.validate workflows/flux/FluxDev.json
157
160
  ```
158
161
 
159
162
  ### Interactive REPL
@@ -313,7 +316,7 @@ a (photorealistic:1.4) portrait with (bright red hair:1.3) and [freckles]
313
316
 
314
317
  **Interactive schema browser:** [View Schema](https://json-schema.app/view/%23?url=https%3A%2F%2Fraw.githubusercontent.com%2Fdkackman%2Fdiffusers-workflow%2Frefs%2Fheads%2Fmaster%2Fdw%2Fworkflow_schema.json)
315
318
 
316
- See [examples/](examples/) for more workflow files.
319
+ See [workflows/](workflows/) for more workflow files.
317
320
 
318
321
  ## Documentation
319
322
 
@@ -327,6 +330,7 @@ See [examples/](examples/) for more workflow files.
327
330
  - [LoRA](docs/LORAS.md) — Loading and stacking LoRA adapters
328
331
  - [IP-Adapter](docs/IP_ADAPTER.md) — Image-prompt conditioning
329
332
  - [Prompt Weighting](docs/PROMPT_WEIGHTING.md) — A1111-style syntax
333
+ - [Prompt References](docs/WORKFLOW_GUIDE.md#prompt-references) — The stored prompt library and `prompt:` references
330
334
  - [Tasks](docs/TASKS.md) — Image processing, ControlNet preprocessors, utilities
331
335
 
332
336
  ### Reference
@@ -21,6 +21,7 @@ A declarative workflow engine and web UI for the [Hugging Face Diffusers library
21
21
  - **Quantization** — BitsAndBytes, TorchAO, GGUF, SDNQ, optimum-quanto
22
22
  - **Inference acceleration** — TeaCache, FirstBlockCache, FasterCache, MagCache, TaylorSeerCache
23
23
  - **Prompt weighting** — A1111-style `(word:1.5)` syntax with long prompt support
24
+ - **Prompt library** — store prompts once in `prompts/` and reference them from any workflow as `prompt:name` or `prompt:folder/name`, with a web UI for browsing, editing, and AI-enhancing them
24
25
  - **LoRA and IP-Adapter** support
25
26
  - **Composable workflows** from multiple JSON files with `builtin:` references
26
27
  - **Utility tasks** — upscaling, face restoration, segmentation, captioning, frame interpolation, QR codes, and more
@@ -64,6 +65,8 @@ Everything the engine does, in a browser backed by a persistent GPU worker — m
64
65
 
65
66
  ![The gallery with generated images and videos](docs/img/ui-gallery.jpg)
66
67
 
68
+ **A prompt library shared by every workflow.** Store a prompt once, reference it anywhere as `prompt:name` — the Prompts page browses, edits, and filters the library, and an *Enhance with AI* panel expands an idea into a full prompt with a local language model.
69
+
67
70
  **A model manager for the disk your models actually consume.** The Hugging Face hub cache, inventoried: sizes, revisions, last-used dates, free space — download new models by id with live progress, delete with one click.
68
71
 
69
72
  ![The model manager listing cached models with sizes](docs/img/ui-models.png)
@@ -75,14 +78,14 @@ Jobs queue, stream progress live (per denoising step), cancel cooperatively, and
75
78
  ### Run a Workflow
76
79
 
77
80
  ```bash
78
- python -m dw.run examples/flux/FluxDev.json
79
- python -m dw.run examples/flux/FluxDev.json prompt="a cat" num_images_per_prompt=4
81
+ python -m dw.run workflows/flux/FluxDev.json
82
+ python -m dw.run workflows/flux/FluxDev.json prompt="a cat" num_images_per_prompt=4
80
83
  ```
81
84
 
82
85
  ### Validate a Workflow
83
86
 
84
87
  ```bash
85
- python -m dw.validate examples/flux/FluxDev.json
88
+ python -m dw.validate workflows/flux/FluxDev.json
86
89
  ```
87
90
 
88
91
  ### Interactive REPL
@@ -242,7 +245,7 @@ a (photorealistic:1.4) portrait with (bright red hair:1.3) and [freckles]
242
245
 
243
246
  **Interactive schema browser:** [View Schema](https://json-schema.app/view/%23?url=https%3A%2F%2Fraw.githubusercontent.com%2Fdkackman%2Fdiffusers-workflow%2Frefs%2Fheads%2Fmaster%2Fdw%2Fworkflow_schema.json)
244
247
 
245
- See [examples/](examples/) for more workflow files.
248
+ See [workflows/](workflows/) for more workflow files.
246
249
 
247
250
  ## Documentation
248
251
 
@@ -256,6 +259,7 @@ See [examples/](examples/) for more workflow files.
256
259
  - [LoRA](docs/LORAS.md) — Loading and stacking LoRA adapters
257
260
  - [IP-Adapter](docs/IP_ADAPTER.md) — Image-prompt conditioning
258
261
  - [Prompt Weighting](docs/PROMPT_WEIGHTING.md) — A1111-style syntax
262
+ - [Prompt References](docs/WORKFLOW_GUIDE.md#prompt-references) — The stored prompt library and `prompt:` references
259
263
  - [Tasks](docs/TASKS.md) — Image processing, ControlNet preprocessors, utilities
260
264
 
261
265
  ### Reference
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffusers-workflow
3
- Version: 0.4.0a4
3
+ Version: 0.4.0a8
4
4
  Summary: Declarative workflow engine and web UI for Hugging Face Diffusers
5
5
  Author: dkackman
6
6
  License: Apache-2.0
@@ -92,6 +92,7 @@ A declarative workflow engine and web UI for the [Hugging Face Diffusers library
92
92
  - **Quantization** — BitsAndBytes, TorchAO, GGUF, SDNQ, optimum-quanto
93
93
  - **Inference acceleration** — TeaCache, FirstBlockCache, FasterCache, MagCache, TaylorSeerCache
94
94
  - **Prompt weighting** — A1111-style `(word:1.5)` syntax with long prompt support
95
+ - **Prompt library** — store prompts once in `prompts/` and reference them from any workflow as `prompt:name` or `prompt:folder/name`, with a web UI for browsing, editing, and AI-enhancing them
95
96
  - **LoRA and IP-Adapter** support
96
97
  - **Composable workflows** from multiple JSON files with `builtin:` references
97
98
  - **Utility tasks** — upscaling, face restoration, segmentation, captioning, frame interpolation, QR codes, and more
@@ -135,6 +136,8 @@ Everything the engine does, in a browser backed by a persistent GPU worker — m
135
136
 
136
137
  ![The gallery with generated images and videos](docs/img/ui-gallery.jpg)
137
138
 
139
+ **A prompt library shared by every workflow.** Store a prompt once, reference it anywhere as `prompt:name` — the Prompts page browses, edits, and filters the library, and an *Enhance with AI* panel expands an idea into a full prompt with a local language model.
140
+
138
141
  **A model manager for the disk your models actually consume.** The Hugging Face hub cache, inventoried: sizes, revisions, last-used dates, free space — download new models by id with live progress, delete with one click.
139
142
 
140
143
  ![The model manager listing cached models with sizes](docs/img/ui-models.png)
@@ -146,14 +149,14 @@ Jobs queue, stream progress live (per denoising step), cancel cooperatively, and
146
149
  ### Run a Workflow
147
150
 
148
151
  ```bash
149
- python -m dw.run examples/flux/FluxDev.json
150
- python -m dw.run examples/flux/FluxDev.json prompt="a cat" num_images_per_prompt=4
152
+ python -m dw.run workflows/flux/FluxDev.json
153
+ python -m dw.run workflows/flux/FluxDev.json prompt="a cat" num_images_per_prompt=4
151
154
  ```
152
155
 
153
156
  ### Validate a Workflow
154
157
 
155
158
  ```bash
156
- python -m dw.validate examples/flux/FluxDev.json
159
+ python -m dw.validate workflows/flux/FluxDev.json
157
160
  ```
158
161
 
159
162
  ### Interactive REPL
@@ -313,7 +316,7 @@ a (photorealistic:1.4) portrait with (bright red hair:1.3) and [freckles]
313
316
 
314
317
  **Interactive schema browser:** [View Schema](https://json-schema.app/view/%23?url=https%3A%2F%2Fraw.githubusercontent.com%2Fdkackman%2Fdiffusers-workflow%2Frefs%2Fheads%2Fmaster%2Fdw%2Fworkflow_schema.json)
315
318
 
316
- See [examples/](examples/) for more workflow files.
319
+ See [workflows/](workflows/) for more workflow files.
317
320
 
318
321
  ## Documentation
319
322
 
@@ -327,6 +330,7 @@ See [examples/](examples/) for more workflow files.
327
330
  - [LoRA](docs/LORAS.md) — Loading and stacking LoRA adapters
328
331
  - [IP-Adapter](docs/IP_ADAPTER.md) — Image-prompt conditioning
329
332
  - [Prompt Weighting](docs/PROMPT_WEIGHTING.md) — A1111-style syntax
333
+ - [Prompt References](docs/WORKFLOW_GUIDE.md#prompt-references) — The stored prompt library and `prompt:` references
330
334
  - [Tasks](docs/TASKS.md) — Image processing, ControlNet preprocessors, utilities
331
335
 
332
336
  ### Reference
@@ -17,7 +17,9 @@ dw/hub_cache.py
17
17
  dw/introspection.py
18
18
  dw/log_setup.py
19
19
  dw/previous_results.py
20
+ dw/prompt_schema.json
20
21
  dw/prompt_weighting.py
22
+ dw/prompts.py
21
23
  dw/repl.py
22
24
  dw/repl_commands.py
23
25
  dw/repl_worker.py
@@ -44,6 +46,7 @@ dw/pipeline_processors/pipeline.py
44
46
  dw/pipeline_processors/remote.py
45
47
  dw/server/__init__.py
46
48
  dw/server/app.py
49
+ dw/server/enhancers.py
47
50
  dw/server/jobs.py
48
51
  dw/server/updater.py
49
52
  dw/server/ui/index.html
@@ -61,45 +64,45 @@ dw/server/ui/assets/csharp-BKxtCVv1.js
61
64
  dw/server/ui/assets/csp-bTuwJoIa.js
62
65
  dw/server/ui/assets/css-DIMkf-bt.js
63
66
  dw/server/ui/assets/css.worker-B3ciXF_0.js
64
- dw/server/ui/assets/cssMode-DklhHuQC.js
67
+ dw/server/ui/assets/cssMode-4JQhrTTm.js
65
68
  dw/server/ui/assets/cypher-CVaqCwHa.js
66
69
  dw/server/ui/assets/dart-onAF5SnQ.js
67
70
  dw/server/ui/assets/dockerfile-DZFCIeNp.js
68
71
  dw/server/ui/assets/ecl-D05T4iGw.js
69
72
  dw/server/ui/assets/editor-jjEx9u7D.css
70
- dw/server/ui/assets/editor.api-DCWJa9Fw.js
73
+ dw/server/ui/assets/editor.api-B_68laXH.js
71
74
  dw/server/ui/assets/editor.worker-q-txB4vs.js
72
75
  dw/server/ui/assets/elixir-6RTg0lbw.js
73
76
  dw/server/ui/assets/flow9-C5_-GSwl.js
74
- dw/server/ui/assets/freemarker2-CVxDKoFq.js
77
+ dw/server/ui/assets/freemarker2-C4IxK8gs.js
75
78
  dw/server/ui/assets/fsharp-C8Ef5oNN.js
76
79
  dw/server/ui/assets/go-C-y9NEjX.js
77
80
  dw/server/ui/assets/graphql-fmXr3nnJ.js
78
- dw/server/ui/assets/handlebars-DK-ehq_7.js
81
+ dw/server/ui/assets/handlebars-BArDGhF4.js
79
82
  dw/server/ui/assets/hcl-CpzslTdj.js
80
- dw/server/ui/assets/html-CrtXvEnP.js
83
+ dw/server/ui/assets/html-8yKFx0-x.js
81
84
  dw/server/ui/assets/html.worker-C93Ht9o9.js
82
- dw/server/ui/assets/htmlMode-D0r9dgS3.js
83
- dw/server/ui/assets/index-SQcvGbXy.css
84
- dw/server/ui/assets/index-qLIa9n7C.js
85
+ dw/server/ui/assets/htmlMode-BwXG6XFP.js
86
+ dw/server/ui/assets/index-BY3Mtj4M.js
87
+ dw/server/ui/assets/index-Bug26k2P.css
85
88
  dw/server/ui/assets/ini-sBoK_t0W.js
86
89
  dw/server/ui/assets/java-BEtHBSE6.js
87
- dw/server/ui/assets/javascript-rD650v5-.js
90
+ dw/server/ui/assets/javascript-B3mqpFQQ.js
88
91
  dw/server/ui/assets/json.worker-B2V3pomh.js
89
- dw/server/ui/assets/jsonMode-DvWKiZ5V.js
92
+ dw/server/ui/assets/jsonMode-C1m5Z8Ha.js
90
93
  dw/server/ui/assets/julia-Bri6UV-V.js
91
94
  dw/server/ui/assets/kotlin-BOotOW0E.js
92
95
  dw/server/ui/assets/less-B9JPFI3C.js
93
96
  dw/server/ui/assets/lexon-CfSJPG6W.js
94
- dw/server/ui/assets/liquid-DvjV9-yQ.js
95
- dw/server/ui/assets/lspLanguageFeatures-Bv4c-HOB.js
97
+ dw/server/ui/assets/liquid-Cs5oVPJ1.js
98
+ dw/server/ui/assets/lspLanguageFeatures-CnroSKaf.js
96
99
  dw/server/ui/assets/lua-CsQS60Ue.js
97
100
  dw/server/ui/assets/m3-D-oSqn_W.js
98
101
  dw/server/ui/assets/markdown-Cimd5fb3.js
99
- dw/server/ui/assets/mdx-CmyDcP1k.js
102
+ dw/server/ui/assets/mdx-BGAIyUWE.js
100
103
  dw/server/ui/assets/mips-CIPQ_RoX.js
101
104
  dw/server/ui/assets/monaco--ixms01u.css
102
- dw/server/ui/assets/monaco-CFDZdQeR.js
105
+ dw/server/ui/assets/monaco-ab9gu2Wi.js
103
106
  dw/server/ui/assets/msdax-DauUninz.js
104
107
  dw/server/ui/assets/mysql-SOo6toE5.js
105
108
  dw/server/ui/assets/objective-c-FvmIjYaQ.js
@@ -114,10 +117,10 @@ dw/server/ui/assets/powerquery-D3hlyOfw.js
114
117
  dw/server/ui/assets/powershell-DmHpPYUd.js
115
118
  dw/server/ui/assets/protobuf-C531GsRP.js
116
119
  dw/server/ui/assets/pug-Z5eAx3Zn.js
117
- dw/server/ui/assets/python-BbNG9-ih.js
120
+ dw/server/ui/assets/python-XsfASqaE.js
118
121
  dw/server/ui/assets/qsharp-DkqhCAOL.js
119
122
  dw/server/ui/assets/r-BwWrilGY.js
120
- dw/server/ui/assets/razor-BruFjATi.js
123
+ dw/server/ui/assets/razor-C-1xVmcy.js
121
124
  dw/server/ui/assets/redis-ClamHrr6.js
122
125
  dw/server/ui/assets/redshift-DT7zqm-g.js
123
126
  dw/server/ui/assets/restructuredtext-BYgofb2h.js
@@ -137,15 +140,15 @@ dw/server/ui/assets/swift-Bxkupp3x.js
137
140
  dw/server/ui/assets/systemverilog-Bz4Y3fRF.js
138
141
  dw/server/ui/assets/tcl-DISqw1ZD.js
139
142
  dw/server/ui/assets/ts.worker-D7T1-Ig5.js
140
- dw/server/ui/assets/tsMode-DhwsPBWM.js
143
+ dw/server/ui/assets/tsMode-BDa9GeVq.js
141
144
  dw/server/ui/assets/twig-De2hgUGE.js
142
- dw/server/ui/assets/typescript-DLBTIt_O.js
145
+ dw/server/ui/assets/typescript-VE9GZNZf.js
143
146
  dw/server/ui/assets/typespec-B8J7ngcE.js
144
147
  dw/server/ui/assets/vb-DV3o63ZY.js
145
148
  dw/server/ui/assets/wgsl-DpFanUEy.js
146
- dw/server/ui/assets/workers-BD2vxpDW.js
147
- dw/server/ui/assets/xml-BCRgtEff.js
148
- dw/server/ui/assets/yaml-B9W8qjO1.js
149
+ dw/server/ui/assets/workers-C_2pIPh_.js
150
+ dw/server/ui/assets/xml-BJp06vju.js
151
+ dw/server/ui/assets/yaml-EI9SS79i.js
149
152
  dw/tasks/audio_utils.py
150
153
  dw/tasks/background_remover.py
151
154
  dw/tasks/borders.py
@@ -207,6 +210,7 @@ tests/test_pipeline_components.py
207
210
  tests/test_previous_results.py
208
211
  tests/test_prompt_parser.py
209
212
  tests/test_prompt_weighting.py
213
+ tests/test_prompts.py
210
214
  tests/test_repl_commands.py
211
215
  tests/test_repl_ergonomics.py
212
216
  tests/test_repl_hierarchical.py
@@ -3,6 +3,7 @@ import copy
3
3
  import logging
4
4
  from inspect import Parameter, signature
5
5
  from .type_helpers import load_type_from_name, load_constant_from_name, has_method
6
+ from .prompts import PROMPT_PREFIX, fetch_prompt
6
7
  from diffusers.utils import load_image, load_video
7
8
  from .security import (
8
9
  validate_path,
@@ -92,6 +93,11 @@ def realize_args(arg, base_dir=None):
92
93
  # conventions below - what it holds is the value, not a file to load
93
94
  if is_constant_reference(v):
94
95
  arg[k] = fetch_constant(v)
96
+ # A stored prompt resolves the same way - to its text, under any
97
+ # name, before the media conventions could mistake it for a file.
98
+ # The workflow's directory anchors prompt-library discovery
99
+ elif is_prompt_reference(v):
100
+ arg[k] = fetch_prompt(v, base_dir=base_dir)
95
101
  # An explicit media reference loads under any argument name - the
96
102
  # key conventions below only cover arguments named like their media
97
103
  elif is_media_reference(v):
@@ -140,6 +146,9 @@ def realize_args(arg, base_dir=None):
140
146
  if is_constant_reference(item):
141
147
  arg[i] = fetch_constant(item)
142
148
  continue
149
+ if is_prompt_reference(item):
150
+ arg[i] = fetch_prompt(item, base_dir=base_dir)
151
+ continue
143
152
  if is_media_reference(item):
144
153
  arg[i] = fetch_media(item, base_dir)
145
154
  continue
@@ -152,6 +161,11 @@ def is_constant_reference(value):
152
161
  return isinstance(value, str) and value.startswith(CONSTANT_PREFIX)
153
162
 
154
163
 
164
+ def is_prompt_reference(value):
165
+ """Whether a value references a stored prompt in the prompt library."""
166
+ return isinstance(value, str) and value.startswith(PROMPT_PREFIX)
167
+
168
+
155
169
  def fetch_constant(reference):
156
170
  """Read the value a 'constant:' reference names.
157
171
 
@@ -703,12 +717,22 @@ def media_arguments(object_type, artifact):
703
717
  arguments["sample_rate"] = sample_rate
704
718
  return arguments
705
719
 
720
+ if audio is None and hasattr(artifact, "ndim") and artifact.ndim <= 3:
721
+ # A step that generates audio alone - a music pipeline, a slice_audio
722
+ # task - produces the waveform itself rather than an AudioVideo. It
723
+ # carries no rate of its own, so the reference declares 'sample_rate'
724
+ # alongside 'from_previous_result'
725
+ audio = torch.as_tensor(as_channels_samples(artifact))
726
+
706
727
  if audio is None:
707
728
  raise ValueError(
708
729
  f"{object_type.__name__} holds audio, but the step it names produced "
709
730
  f"none - reference a step that generates a soundtrack"
710
731
  )
711
- return {"audio": audio, "sample_rate": sample_rate}
732
+ arguments = {"audio": audio}
733
+ if sample_rate is not None:
734
+ arguments["sample_rate"] = sample_rate
735
+ return arguments
712
736
 
713
737
 
714
738
  def validate_media_location(location, base_dir=None):
@@ -17,6 +17,16 @@ import uuid
17
17
  from huggingface_hub import constants, scan_cache_dir
18
18
  from huggingface_hub.utils import CacheNotFound
19
19
 
20
+ try:
21
+ # Xet-backed downloads aggregate into two bars built from our tracker
22
+ # class: reconstruction (file bytes written) and transfer (network
23
+ # bytes). Only reconstruction matches the file-size total the manager
24
+ # reports against - counting both would double the progress - and the
25
+ # transfer bar is recognizable by the bar_format it is created with
26
+ from huggingface_hub.utils._xet_progress_reporting import XET_TRANSFER_BAR_FORMAT
27
+ except ImportError: # older huggingface_hub - no xet aggregation
28
+ XET_TRANSFER_BAR_FORMAT = None
29
+
20
30
  logger = logging.getLogger("dw")
21
31
 
22
32
 
@@ -250,13 +260,20 @@ def _tracker_class(manager, entry, cancel_event):
250
260
  def __init__(self, *args, **kwargs):
251
261
  self.n = 0
252
262
  self.total = kwargs.get("total")
263
+ # The xet transfer bar still ticks (cancellation works through
264
+ # it) but its network bytes stay out of the shared counters
265
+ self._counted = (
266
+ XET_TRANSFER_BAR_FORMAT is None
267
+ or kwargs.get("bar_format") != XET_TRANSFER_BAR_FORMAT
268
+ )
253
269
 
254
270
  def update(self, n=1):
255
271
  if cancel_event.is_set():
256
272
  raise DownloadCancelled()
257
273
  if n:
258
274
  self.n += n
259
- manager._add_progress(entry, n)
275
+ if self._counted:
276
+ manager._add_progress(entry, n)
260
277
  return True
261
278
 
262
279
  def close(self):
@@ -271,6 +288,15 @@ def _tracker_class(manager, entry, cancel_event):
271
288
  def set_postfix(self, *args, **kwargs):
272
289
  pass
273
290
 
291
+ def set_postfix_str(self, *args, **kwargs):
292
+ pass
293
+
294
+ @property
295
+ def format_dict(self):
296
+ # What tqdm exposes for rate rendering; huggingface_hub reads
297
+ # 'rate' from it when composing the xet speed postfix
298
+ return {"n": self.n, "total": self.total, "elapsed": 0, "rate": None}
299
+
274
300
  def __enter__(self):
275
301
  return self
276
302
 
@@ -0,0 +1,48 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "prompt_schema.json",
4
+ "title": "Stored prompt",
5
+ "description": "One prompt in the prompt library - the text a workflow loads with a 'prompt:' reference, plus the metadata the library pages show.",
6
+ "type": "object",
7
+ "required": ["text"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "text": {
11
+ "type": "string",
12
+ "minLength": 1,
13
+ "description": "The prompt text itself - what a 'prompt:' reference resolves to. May not begin with a reference prefix ('previous_result:', 'variable:', 'constant:', 'prompt:')."
14
+ },
15
+ "description": {
16
+ "type": "string",
17
+ "description": "Short summary shown on the prompt's library card."
18
+ },
19
+ "intended_model": {
20
+ "type": "string",
21
+ "description": "The model or model family the prompt was written for, such as 'minimax-h3'. Informational - the engine ignores it, but the library badges and filters by it and the enhancer uses it to preselect a preset."
22
+ },
23
+ "negative_prompt": {
24
+ "type": "string",
25
+ "description": "A negative prompt paired with the text, for models that take one."
26
+ },
27
+ "tags": {
28
+ "type": "array",
29
+ "items": { "type": "string" },
30
+ "description": "Free-form labels for filtering the library."
31
+ },
32
+ "enhanced": {
33
+ "type": "object",
34
+ "additionalProperties": false,
35
+ "description": "Provenance when the text came from the AI enhancer - which model expanded which idea.",
36
+ "properties": {
37
+ "model": {
38
+ "type": "string",
39
+ "description": "The LLM that generated the text."
40
+ },
41
+ "idea": {
42
+ "type": "string",
43
+ "description": "The idea the text was expanded from."
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,145 @@
1
+ """The prompt library: stored prompts a workflow references by name.
2
+
3
+ A prompt is one JSON file under the prompt directory - its text plus the
4
+ metadata the library pages show (description, intended model, tags). A
5
+ workflow argument written as 'prompt:name' or 'prompt:folder/name' loads
6
+ the file's text at run time, so the prompt is shared by reference rather
7
+ than copied into every workflow that uses it.
8
+ """
9
+
10
+ import json
11
+ import logging
12
+ import os
13
+
14
+ from .schema import load_schema, validate_data
15
+ from .security import validate_prompt_path, validate_prompt_reference
16
+
17
+ logger = logging.getLogger("dw")
18
+
19
+ # The prefix marking a value as a reference to a stored prompt. The name after it
20
+ # is rooted at the prompt directory, not the workflow file - prompts are a shared
21
+ # library, and the same reference means the same text from every workflow
22
+ PROMPT_PREFIX = "prompt:"
23
+
24
+ # The prefixes a stored prompt's text may not begin with. Resolved text is
25
+ # substituted where the reference stood, so text that itself looks like a
26
+ # reference would be resolved again - or worse, expand a step's iterations
27
+ RESERVED_TEXT_PREFIXES = ("previous_result:", "variable:", "constant:", PROMPT_PREFIX)
28
+
29
+
30
+ def get_prompt_dir(base_dir=None):
31
+ """The directory stored prompts are rooted at.
32
+
33
+ DW_PROMPT_DIR names it explicitly - the server sets it from --prompt-dir,
34
+ and the spawned worker inherits it. Without one it is ./prompts in the
35
+ working directory when that exists; otherwise the walk from the workflow
36
+ file's directory up toward the filesystem root finds the prompts/ folder
37
+ of the tree the workflow lives in - which is how a repo workflow run from
38
+ any working directory still reaches the library beside it. Read at call
39
+ time, not import time, so a test or worker sees the current value.
40
+
41
+ Args:
42
+ base_dir: The workflow file's directory, when one anchors the search
43
+ """
44
+ explicit = os.environ.get("DW_PROMPT_DIR")
45
+ if explicit:
46
+ return explicit
47
+ default = os.path.abspath("./prompts")
48
+ if os.path.isdir(default):
49
+ return default
50
+ if base_dir:
51
+ current = os.path.abspath(base_dir)
52
+ while True:
53
+ candidate = os.path.join(current, "prompts")
54
+ if os.path.isdir(candidate):
55
+ return candidate
56
+ parent = os.path.dirname(current)
57
+ if parent == current:
58
+ break
59
+ current = parent
60
+ return default
61
+
62
+
63
+ def resolve_prompt_reference(reference, prompt_dir=None, base_dir=None):
64
+ """Resolve a 'prompt:' reference to the file it names.
65
+
66
+ Args:
67
+ reference: The 'prompt:name' or 'prompt:folder/name' string
68
+ prompt_dir: Directory the name is rooted at; defaults to get_prompt_dir()
69
+ base_dir: The workflow file's directory, anchoring discovery when no
70
+ prompt directory is configured
71
+
72
+ Returns:
73
+ The validated absolute path of the prompt file
74
+
75
+ Raises:
76
+ InvalidInputError: If the name is not a valid prompt name
77
+ ValueError: If no prompt file exists under that name
78
+ """
79
+ name = validate_prompt_reference(reference.removeprefix(PROMPT_PREFIX).strip())
80
+ prompt_dir = prompt_dir or get_prompt_dir(base_dir)
81
+ path = os.path.join(prompt_dir, name + ".json")
82
+ if not os.path.isfile(path):
83
+ raise ValueError(
84
+ f"No prompt named '{name}' in {prompt_dir} - a prompt reference names "
85
+ f"a .json file under the prompt directory, without the extension"
86
+ )
87
+ return validate_prompt_path(path, prompt_dir)
88
+
89
+
90
+ def load_prompt(path):
91
+ """Read and validate one prompt file.
92
+
93
+ Args:
94
+ path: Path of the prompt file, already validated
95
+
96
+ Returns:
97
+ The prompt as a dict
98
+
99
+ Raises:
100
+ ValueError: If the file is not JSON or does not match the prompt schema
101
+ """
102
+ try:
103
+ with open(path, "r", encoding="utf-8") as file:
104
+ data = json.load(file)
105
+ except json.JSONDecodeError as error:
106
+ raise ValueError(f"Prompt file {path} is not valid JSON: {error}") from error
107
+
108
+ status, message = validate_data(data, load_schema("prompt"))
109
+ if not status:
110
+ raise ValueError(f"Prompt file {path} is not a valid prompt: {message}")
111
+
112
+ return data
113
+
114
+
115
+ def fetch_prompt(reference, prompt_dir=None, base_dir=None):
116
+ """Read the text a 'prompt:' reference names.
117
+
118
+ Args:
119
+ reference: The 'prompt:name' or 'prompt:folder/name' string
120
+ prompt_dir: Directory the name is rooted at; defaults to get_prompt_dir()
121
+ base_dir: The workflow file's directory, anchoring discovery when no
122
+ prompt directory is configured
123
+
124
+ Returns:
125
+ The prompt file's text field
126
+
127
+ Raises:
128
+ ValueError: If the prompt is missing, invalid, or its text is itself
129
+ a reference
130
+ """
131
+ path = resolve_prompt_reference(reference, prompt_dir, base_dir)
132
+ text = load_prompt(path)["text"]
133
+
134
+ # Arguments are realized more than once, and iteration expansion scans the
135
+ # realized template - text that begins like a reference would be treated
136
+ # as one on the next pass, so it is data that may not masquerade as syntax
137
+ if text.startswith(RESERVED_TEXT_PREFIXES):
138
+ raise ValueError(
139
+ f"Prompt '{reference}' has text beginning with a reference prefix "
140
+ f"({', '.join(RESERVED_TEXT_PREFIXES)}) - a prompt's text may not "
141
+ f"itself be a reference"
142
+ )
143
+
144
+ logger.info(f"Loaded prompt {reference} from {path}")
145
+ return text
@@ -50,7 +50,7 @@ class DiffusersWorkflowREPL(cmd.Cmd):
50
50
  self.globals = {
51
51
  "output_dir": "./outputs", # Default output directory
52
52
  "log_level": "INFO", # Default log level
53
- "workflow_dir": "./examples", # Default workflow directory
53
+ "workflow_dir": "./workflows", # Default workflow directory
54
54
  }
55
55
  self.current_workflow = None
56
56
  self.workflow_args = {} # Store workflow arguments
@@ -47,7 +47,7 @@ class ConfigCommands:
47
47
  " log_level - Logging level: DEBUG, INFO, WARNING, ERROR, CRITICAL"
48
48
  )
49
49
  print(" workflow_dir - Where 'workflow load <name>' and 'workflow list'")
50
- print(" look for workflows (default: ./examples)")
50
+ print(" look for workflows (default: ./workflows)")
51
51
  print()
52
52
  print("These apply to this REPL session. Standing settings (device,")
53
53
  print("log file, TF32) live in ~/.diffusers_helper/settings.json")
@@ -36,8 +36,19 @@ def main():
36
36
  default="INFO",
37
37
  help="Set the logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)",
38
38
  )
39
+ parser.add_argument(
40
+ "--prompt-dir",
41
+ type=str,
42
+ default=None,
43
+ help="Directory 'prompt:' references resolve against (default: "
44
+ "DW_PROMPT_DIR, else ./prompts if it exists, else the nearest "
45
+ "prompts/ above the workflow file)",
46
+ )
39
47
  args = parser.parse_args()
40
48
 
49
+ if args.prompt_dir:
50
+ os.environ["DW_PROMPT_DIR"] = os.path.abspath(args.prompt_dir)
51
+
41
52
  # Parse key-value pairs with validation
42
53
  variables = {}
43
54
  for variable in args.variables: