diffusers-workflow 0.4.0a3__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 (244) hide show
  1. {diffusers_workflow-0.4.0a3/diffusers_workflow.egg-info → diffusers_workflow-0.4.0a8}/PKG-INFO +57 -24
  2. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/README.md +8 -4
  3. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8/diffusers_workflow.egg-info}/PKG-INFO +57 -24
  4. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/SOURCES.txt +26 -21
  5. diffusers_workflow-0.4.0a8/diffusers_workflow.egg-info/requires.txt +55 -0
  6. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/arguments.py +25 -1
  7. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/hub_cache.py +27 -1
  8. diffusers_workflow-0.4.0a8/dw/prompt_schema.json +48 -0
  9. diffusers_workflow-0.4.0a8/dw/prompts.py +145 -0
  10. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/repl.py +1 -1
  11. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/repl_commands.py +1 -1
  12. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/run.py +11 -0
  13. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/security.py +63 -23
  14. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/serve.py +22 -2
  15. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/app.py +238 -5
  16. diffusers_workflow-0.4.0a8/dw/server/enhancers.py +129 -0
  17. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/jobs.py +15 -0
  18. diffusers_workflow-0.4.0a3/dw/server/ui/assets/cssMode-CEh6hWi2.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/cssMode-4JQhrTTm.js +1 -1
  19. diffusers_workflow-0.4.0a3/dw/server/ui/assets/editor.api-CExg3_mM.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/editor.api-B_68laXH.js +1 -1
  20. diffusers_workflow-0.4.0a3/dw/server/ui/assets/freemarker2-DH6orYh2.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/freemarker2-C4IxK8gs.js +1 -1
  21. diffusers_workflow-0.4.0a3/dw/server/ui/assets/handlebars-CbrMVW4Q.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/handlebars-BArDGhF4.js +1 -1
  22. diffusers_workflow-0.4.0a3/dw/server/ui/assets/html-YDNPZw2M.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/html-8yKFx0-x.js +1 -1
  23. diffusers_workflow-0.4.0a3/dw/server/ui/assets/htmlMode-B_zSGWO2.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/htmlMode-BwXG6XFP.js +1 -1
  24. diffusers_workflow-0.4.0a8/dw/server/ui/assets/index-BY3Mtj4M.js +17 -0
  25. diffusers_workflow-0.4.0a8/dw/server/ui/assets/index-Bug26k2P.css +1 -0
  26. diffusers_workflow-0.4.0a3/dw/server/ui/assets/javascript-dYuBvioq.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/javascript-B3mqpFQQ.js +1 -1
  27. diffusers_workflow-0.4.0a3/dw/server/ui/assets/jsonMode-CUqLM39V.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/jsonMode-C1m5Z8Ha.js +1 -1
  28. diffusers_workflow-0.4.0a3/dw/server/ui/assets/liquid-D6vxBzMv.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/liquid-Cs5oVPJ1.js +1 -1
  29. diffusers_workflow-0.4.0a3/dw/server/ui/assets/lspLanguageFeatures-1WJ2palX.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/lspLanguageFeatures-CnroSKaf.js +1 -1
  30. diffusers_workflow-0.4.0a3/dw/server/ui/assets/mdx-SHQb6vmD.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/mdx-BGAIyUWE.js +1 -1
  31. diffusers_workflow-0.4.0a3/dw/server/ui/assets/monaco-CP-s5rcP.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/monaco-ab9gu2Wi.js +4 -4
  32. diffusers_workflow-0.4.0a3/dw/server/ui/assets/python-x0_EGHq9.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/python-XsfASqaE.js +1 -1
  33. diffusers_workflow-0.4.0a3/dw/server/ui/assets/razor-BZC4LQDP.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/razor-C-1xVmcy.js +1 -1
  34. diffusers_workflow-0.4.0a3/dw/server/ui/assets/tsMode-BTfA6SbD.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/tsMode-BDa9GeVq.js +1 -1
  35. diffusers_workflow-0.4.0a3/dw/server/ui/assets/typescript-CWA4MsNk.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/typescript-VE9GZNZf.js +1 -1
  36. diffusers_workflow-0.4.0a3/dw/server/ui/assets/workers-CWU0uvj5.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/workers-C_2pIPh_.js +1 -1
  37. diffusers_workflow-0.4.0a3/dw/server/ui/assets/xml-KmfTm3rg.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/xml-BJp06vju.js +1 -1
  38. diffusers_workflow-0.4.0a3/dw/server/ui/assets/yaml-nFO_dDS6.js → diffusers_workflow-0.4.0a8/dw/server/ui/assets/yaml-EI9SS79i.js +1 -1
  39. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/index.html +2 -2
  40. diffusers_workflow-0.4.0a8/dw/server/updater.py +119 -0
  41. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/workflow.py +13 -1
  42. diffusers_workflow-0.4.0a8/pyproject.toml +120 -0
  43. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_arguments.py +19 -0
  44. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_docs_links.py +8 -6
  45. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_examples.py +7 -6
  46. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_hub_cache.py +46 -0
  47. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_previous_results.py +18 -0
  48. diffusers_workflow-0.4.0a8/tests/test_prompts.py +227 -0
  49. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_security.py +60 -0
  50. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_server.py +255 -0
  51. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_text_sections.py +1 -1
  52. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_workflow.py +20 -0
  53. diffusers_workflow-0.4.0a3/diffusers_workflow.egg-info/requires.txt +0 -24
  54. diffusers_workflow-0.4.0a3/dw/server/ui/assets/index-B7-VcYS-.css +0 -1
  55. diffusers_workflow-0.4.0a3/dw/server/ui/assets/index-D_EiPU3b.js +0 -13
  56. diffusers_workflow-0.4.0a3/pyproject.toml +0 -66
  57. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/LICENSE +0 -0
  58. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/MANIFEST.in +0 -0
  59. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/dependency_links.txt +0 -0
  60. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/entry_points.txt +0 -0
  61. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/top_level.txt +0 -0
  62. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/__init__.py +0 -0
  63. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/cache_blocks.json +0 -0
  64. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/cache_blocks.py +0 -0
  65. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/community_pipelines/pipeline_flux_rf_inversion.py +0 -0
  66. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/events.py +0 -0
  67. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/introspection.py +0 -0
  68. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/log_setup.py +0 -0
  69. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/pipeline_processors/chain.py +0 -0
  70. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/pipeline_processors/config_objects.py +0 -0
  71. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/pipeline_processors/pipeline.py +0 -0
  72. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/pipeline_processors/remote.py +0 -0
  73. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/previous_results.py +0 -0
  74. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/prompt_weighting.py +0 -0
  75. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/repl_worker.py +0 -0
  76. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/result.py +0 -0
  77. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/schema.py +0 -0
  78. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/__init__.py +0 -0
  79. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/abap-08VXUWAP.js +0 -0
  80. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/apex-BWPQTe0t.js +0 -0
  81. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/azcli-Bc_sGQ0U.js +0 -0
  82. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/bat-i0X4ZdIN.js +0 -0
  83. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/bicep-B5-_aFwp.js +0 -0
  84. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/cameligo-DMUM7wLl.js +0 -0
  85. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/clojure-Cm7r79vr.js +0 -0
  86. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/codicon-Brq4_Ui5.ttf +0 -0
  87. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/coffee-Ba7i2nA0.js +0 -0
  88. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/cpp-C7h46wYY.js +0 -0
  89. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/csharp-BKxtCVv1.js +0 -0
  90. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/csp-bTuwJoIa.js +0 -0
  91. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/css-DIMkf-bt.js +0 -0
  92. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/css.worker-B3ciXF_0.js +0 -0
  93. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/cypher-CVaqCwHa.js +0 -0
  94. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/dart-onAF5SnQ.js +0 -0
  95. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/dockerfile-DZFCIeNp.js +0 -0
  96. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/ecl-D05T4iGw.js +0 -0
  97. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/editor-jjEx9u7D.css +0 -0
  98. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/editor.worker-q-txB4vs.js +0 -0
  99. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/elixir-6RTg0lbw.js +0 -0
  100. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/flow9-C5_-GSwl.js +0 -0
  101. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/fsharp-C8Ef5oNN.js +0 -0
  102. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/go-C-y9NEjX.js +0 -0
  103. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/graphql-fmXr3nnJ.js +0 -0
  104. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/hcl-CpzslTdj.js +0 -0
  105. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/html.worker-C93Ht9o9.js +0 -0
  106. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/ini-sBoK_t0W.js +0 -0
  107. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/java-BEtHBSE6.js +0 -0
  108. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/json.worker-B2V3pomh.js +0 -0
  109. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/julia-Bri6UV-V.js +0 -0
  110. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/kotlin-BOotOW0E.js +0 -0
  111. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/less-B9JPFI3C.js +0 -0
  112. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/lexon-CfSJPG6W.js +0 -0
  113. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/lua-CsQS60Ue.js +0 -0
  114. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/m3-D-oSqn_W.js +0 -0
  115. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/markdown-Cimd5fb3.js +0 -0
  116. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/mips-CIPQ_RoX.js +0 -0
  117. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/monaco--ixms01u.css +0 -0
  118. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/msdax-DauUninz.js +0 -0
  119. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/mysql-SOo6toE5.js +0 -0
  120. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/objective-c-FvmIjYaQ.js +0 -0
  121. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pascal-DrH0SRf2.js +0 -0
  122. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pascaligo-D-ptJ9y-.js +0 -0
  123. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/perl-oz_6vUea.js +0 -0
  124. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pgsql-DTj74zXo.js +0 -0
  125. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/php-nr791fC2.js +0 -0
  126. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pla-CopQ2nXW.js +0 -0
  127. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/postiats-43DmfD33.js +0 -0
  128. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/powerquery-D3hlyOfw.js +0 -0
  129. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/powershell-DmHpPYUd.js +0 -0
  130. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/protobuf-C531GsRP.js +0 -0
  131. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pug-Z5eAx3Zn.js +0 -0
  132. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/qsharp-DkqhCAOL.js +0 -0
  133. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/r-BwWrilGY.js +0 -0
  134. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/redis-ClamHrr6.js +0 -0
  135. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/redshift-DT7zqm-g.js +0 -0
  136. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/restructuredtext-BYgofb2h.js +0 -0
  137. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/ruby-DezsRK8O.js +0 -0
  138. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/rust-DdL9SqIa.js +0 -0
  139. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/sb-CcwsVR0C.js +0 -0
  140. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/scala-DHpiXF5c.js +0 -0
  141. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/scheme-BeGwcela.js +0 -0
  142. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/scss-gp-XZpBa.js +0 -0
  143. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/shell-CC2rA5mh.js +0 -0
  144. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/solidity-BEEn4gHE.js +0 -0
  145. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/sophia-CRfGWb83.js +0 -0
  146. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/sparql-D_Lu-MrJ.js +0 -0
  147. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/sql-NEE52Syq.js +0 -0
  148. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/st-DbInun42.js +0 -0
  149. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/swift-Bxkupp3x.js +0 -0
  150. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +0 -0
  151. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/tcl-DISqw1ZD.js +0 -0
  152. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/ts.worker-D7T1-Ig5.js +0 -0
  153. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/twig-De2hgUGE.js +0 -0
  154. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/typespec-B8J7ngcE.js +0 -0
  155. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/vb-DV3o63ZY.js +0 -0
  156. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/wgsl-DpFanUEy.js +0 -0
  157. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/settings.py +0 -0
  158. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/step.py +0 -0
  159. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/audio_utils.py +0 -0
  160. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/background_remover.py +0 -0
  161. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/borders.py +0 -0
  162. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/concat_videos.py +0 -0
  163. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/depth_estimator.py +0 -0
  164. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/diffusion_upscale.py +0 -0
  165. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/format_messages.py +0 -0
  166. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/gather.py +0 -0
  167. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/image_to_text.py +0 -0
  168. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/image_utils.py +0 -0
  169. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/interpolate_frames.py +0 -0
  170. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/model_cache.py +0 -0
  171. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/pair_audio.py +0 -0
  172. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/qr_code.py +0 -0
  173. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/restore_faces.py +0 -0
  174. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/rife_model.py +0 -0
  175. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/segment.py +0 -0
  176. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/task.py +0 -0
  177. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/tensor_image.py +0 -0
  178. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/text_generation.py +0 -0
  179. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/text_sections.py +0 -0
  180. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/upscale.py +0 -0
  181. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/video_utils.py +0 -0
  182. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/tasks/zoe_depth.py +0 -0
  183. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/teacache.py +0 -0
  184. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/teacache_models.json +0 -0
  185. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/test.py +0 -0
  186. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/type_helpers.py +0 -0
  187. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/validate.py +0 -0
  188. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/variables.py +0 -0
  189. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/worker.py +0 -0
  190. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/workflow_schema.json +0 -0
  191. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/workflows/augment_prompt.json +0 -0
  192. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/workflows/describe_image.json +0 -0
  193. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/workflows/h3_context_ir.json +0 -0
  194. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/dw/workflows/test.json +0 -0
  195. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/setup.cfg +0 -0
  196. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_argument_updates.py +0 -0
  197. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_audio_utils.py +0 -0
  198. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_borders.py +0 -0
  199. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_cache_blocks.py +0 -0
  200. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_chain.py +0 -0
  201. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_component_pruning.py +0 -0
  202. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_concat_videos.py +0 -0
  203. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_config_objects.py +0 -0
  204. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_configuration_schema.py +0 -0
  205. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_depth_estimator.py +0 -0
  206. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_device.py +0 -0
  207. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_device_helpers.py +0 -0
  208. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_diffusion_upscale.py +0 -0
  209. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_events.py +0 -0
  210. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_gather.py +0 -0
  211. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_image_to_text.py +0 -0
  212. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_image_utils.py +0 -0
  213. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_integration.py +0 -0
  214. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_interpolate_frames.py +0 -0
  215. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_introspection.py +0 -0
  216. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_list_images.py +0 -0
  217. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_model_cache.py +0 -0
  218. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_modular_pipeline.py +0 -0
  219. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_pair_audio.py +0 -0
  220. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_pipeline_caching.py +0 -0
  221. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_pipeline_components.py +0 -0
  222. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_prompt_parser.py +0 -0
  223. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_prompt_weighting.py +0 -0
  224. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_repl_commands.py +0 -0
  225. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_repl_ergonomics.py +0 -0
  226. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_repl_hierarchical.py +0 -0
  227. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_repl_reorganization.py +0 -0
  228. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_resize_bucket.py +0 -0
  229. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_result.py +0 -0
  230. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_scheduler_config.py +0 -0
  231. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_schema.py +0 -0
  232. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_segment.py +0 -0
  233. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_step.py +0 -0
  234. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_strip_exif_and_watermark.py +0 -0
  235. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_task.py +0 -0
  236. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_task_discovery.py +0 -0
  237. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_teacache.py +0 -0
  238. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_tensor_image.py +0 -0
  239. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_text_generation.py +0 -0
  240. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_type_helpers.py +0 -0
  241. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_variables.py +0 -0
  242. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_video_utils.py +0 -0
  243. {diffusers_workflow-0.4.0a3 → diffusers_workflow-0.4.0a8}/tests/test_worker.py +0 -0
  244. {diffusers_workflow-0.4.0a3 → 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.0a3
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
@@ -16,27 +16,56 @@ Classifier: Programming Language :: Python :: 3.14
16
16
  Requires-Python: >=3.10
17
17
  Description-Content-Type: text/markdown
18
18
  License-File: LICENSE
19
- Requires-Dist: torch>=2.0.0
20
- Requires-Dist: diffusers
21
- Requires-Dist: transformers
22
- Requires-Dist: accelerate
23
- Requires-Dist: huggingface_hub
24
- Requires-Dist: numpy
25
- Requires-Dist: Pillow
26
- Requires-Dist: av
27
- Requires-Dist: qrcode
28
- Requires-Dist: jsonschema
29
- Requires-Dist: concurrent-log-handler
30
- Requires-Dist: controlnet-aux
31
- Requires-Dist: soundfile
19
+ Requires-Dist: torch>=2.13.0
20
+ Requires-Dist: torchvision>=0.28.0
21
+ Requires-Dist: diffusers>=0.40.0
22
+ Requires-Dist: transformers>=5.16.1
23
+ Requires-Dist: accelerate>=1.14.0
24
+ Requires-Dist: peft>=0.20.0
25
+ Requires-Dist: safetensors>=0.8.0
26
+ Requires-Dist: huggingface-hub>=1.29.0
27
+ Requires-Dist: sentencepiece>=0.2.2
28
+ Requires-Dist: protobuf>=7.36.0
29
+ Requires-Dist: ftfy>=6.3.1
30
+ Requires-Dist: torchsde>=0.2.6
31
+ Requires-Dist: torchao>=0.18.0
32
+ Requires-Dist: optimum-quanto>=0.2.7
33
+ Requires-Dist: sdnq>=0.2.5
34
+ Requires-Dist: gguf>=0.19.0
35
+ Requires-Dist: bitsandbytes>=0.50.2; sys_platform == "linux"
36
+ Requires-Dist: controlnet-aux>=0.0.10
37
+ Requires-Dist: opencv-python-headless>=5.0.0.93
38
+ Requires-Dist: kornia>=0.8.3
39
+ Requires-Dist: spandrel>=0.4.2
40
+ Requires-Dist: facexlib>=0.3.0
41
+ Requires-Dist: numpy>=2.5.2
42
+ Requires-Dist: Pillow>=12.3.0
43
+ Requires-Dist: piexif>=1.1.3
44
+ Requires-Dist: imageio>=2.37.4
45
+ Requires-Dist: imageio-ffmpeg>=0.6.0
46
+ Requires-Dist: av>=18.1.0
47
+ Requires-Dist: soundfile>=0.14.0
48
+ Requires-Dist: matplotlib>=3.11.1
49
+ Requires-Dist: qrcode>=8.2
50
+ Requires-Dist: requests>=2.34.2
51
+ Requires-Dist: aiohttp>=3.14.3
52
+ Requires-Dist: beautifulsoup4>=4.15.0
53
+ Requires-Dist: jsonschema>=4.26.0
54
+ Requires-Dist: concurrent-log-handler>=0.9.29
55
+ Requires-Dist: python-dotenv>=1.2.3
56
+ Requires-Dist: packaging>=26.3
32
57
  Provides-Extra: server
33
- Requires-Dist: fastapi; extra == "server"
34
- Requires-Dist: uvicorn[standard]; extra == "server"
58
+ Requires-Dist: fastapi>=0.141.1; extra == "server"
59
+ Requires-Dist: uvicorn[standard]>=0.52.4; extra == "server"
35
60
  Provides-Extra: dev
36
- Requires-Dist: pytest; extra == "dev"
37
- Requires-Dist: pytest-cov; extra == "dev"
38
- Requires-Dist: black; extra == "dev"
39
- Requires-Dist: flake8; extra == "dev"
61
+ Requires-Dist: pytest>=9.1.1; extra == "dev"
62
+ Requires-Dist: pytest-cov>=7.1.0; extra == "dev"
63
+ Requires-Dist: pytest-xdist>=3.8.0; extra == "dev"
64
+ Requires-Dist: pytest-timeout>=2.4.0; extra == "dev"
65
+ Requires-Dist: pytest-mock>=3.15.1; extra == "dev"
66
+ Requires-Dist: pytest-asyncio>=1.4.0; extra == "dev"
67
+ Requires-Dist: httpx>=0.28.1; extra == "dev"
68
+ Requires-Dist: black>=26.5.1; extra == "dev"
40
69
  Requires-Dist: build; extra == "dev"
41
70
  Dynamic: license-file
42
71
 
@@ -63,6 +92,7 @@ A declarative workflow engine and web UI for the [Hugging Face Diffusers library
63
92
  - **Quantization** — BitsAndBytes, TorchAO, GGUF, SDNQ, optimum-quanto
64
93
  - **Inference acceleration** — TeaCache, FirstBlockCache, FasterCache, MagCache, TaylorSeerCache
65
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
66
96
  - **LoRA and IP-Adapter** support
67
97
  - **Composable workflows** from multiple JSON files with `builtin:` references
68
98
  - **Utility tasks** — upscaling, face restoration, segmentation, captioning, frame interpolation, QR codes, and more
@@ -106,6 +136,8 @@ Everything the engine does, in a browser backed by a persistent GPU worker — m
106
136
 
107
137
  ![The gallery with generated images and videos](docs/img/ui-gallery.jpg)
108
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
+
109
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.
110
142
 
111
143
  ![The model manager listing cached models with sizes](docs/img/ui-models.png)
@@ -117,14 +149,14 @@ Jobs queue, stream progress live (per denoising step), cancel cooperatively, and
117
149
  ### Run a Workflow
118
150
 
119
151
  ```bash
120
- python -m dw.run examples/flux/FluxDev.json
121
- 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
122
154
  ```
123
155
 
124
156
  ### Validate a Workflow
125
157
 
126
158
  ```bash
127
- python -m dw.validate examples/flux/FluxDev.json
159
+ python -m dw.validate workflows/flux/FluxDev.json
128
160
  ```
129
161
 
130
162
  ### Interactive REPL
@@ -284,7 +316,7 @@ a (photorealistic:1.4) portrait with (bright red hair:1.3) and [freckles]
284
316
 
285
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)
286
318
 
287
- See [examples/](examples/) for more workflow files.
319
+ See [workflows/](workflows/) for more workflow files.
288
320
 
289
321
  ## Documentation
290
322
 
@@ -298,6 +330,7 @@ See [examples/](examples/) for more workflow files.
298
330
  - [LoRA](docs/LORAS.md) — Loading and stacking LoRA adapters
299
331
  - [IP-Adapter](docs/IP_ADAPTER.md) — Image-prompt conditioning
300
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
301
334
  - [Tasks](docs/TASKS.md) — Image processing, ControlNet preprocessors, utilities
302
335
 
303
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.0a3
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
@@ -16,27 +16,56 @@ Classifier: Programming Language :: Python :: 3.14
16
16
  Requires-Python: >=3.10
17
17
  Description-Content-Type: text/markdown
18
18
  License-File: LICENSE
19
- Requires-Dist: torch>=2.0.0
20
- Requires-Dist: diffusers
21
- Requires-Dist: transformers
22
- Requires-Dist: accelerate
23
- Requires-Dist: huggingface_hub
24
- Requires-Dist: numpy
25
- Requires-Dist: Pillow
26
- Requires-Dist: av
27
- Requires-Dist: qrcode
28
- Requires-Dist: jsonschema
29
- Requires-Dist: concurrent-log-handler
30
- Requires-Dist: controlnet-aux
31
- Requires-Dist: soundfile
19
+ Requires-Dist: torch>=2.13.0
20
+ Requires-Dist: torchvision>=0.28.0
21
+ Requires-Dist: diffusers>=0.40.0
22
+ Requires-Dist: transformers>=5.16.1
23
+ Requires-Dist: accelerate>=1.14.0
24
+ Requires-Dist: peft>=0.20.0
25
+ Requires-Dist: safetensors>=0.8.0
26
+ Requires-Dist: huggingface-hub>=1.29.0
27
+ Requires-Dist: sentencepiece>=0.2.2
28
+ Requires-Dist: protobuf>=7.36.0
29
+ Requires-Dist: ftfy>=6.3.1
30
+ Requires-Dist: torchsde>=0.2.6
31
+ Requires-Dist: torchao>=0.18.0
32
+ Requires-Dist: optimum-quanto>=0.2.7
33
+ Requires-Dist: sdnq>=0.2.5
34
+ Requires-Dist: gguf>=0.19.0
35
+ Requires-Dist: bitsandbytes>=0.50.2; sys_platform == "linux"
36
+ Requires-Dist: controlnet-aux>=0.0.10
37
+ Requires-Dist: opencv-python-headless>=5.0.0.93
38
+ Requires-Dist: kornia>=0.8.3
39
+ Requires-Dist: spandrel>=0.4.2
40
+ Requires-Dist: facexlib>=0.3.0
41
+ Requires-Dist: numpy>=2.5.2
42
+ Requires-Dist: Pillow>=12.3.0
43
+ Requires-Dist: piexif>=1.1.3
44
+ Requires-Dist: imageio>=2.37.4
45
+ Requires-Dist: imageio-ffmpeg>=0.6.0
46
+ Requires-Dist: av>=18.1.0
47
+ Requires-Dist: soundfile>=0.14.0
48
+ Requires-Dist: matplotlib>=3.11.1
49
+ Requires-Dist: qrcode>=8.2
50
+ Requires-Dist: requests>=2.34.2
51
+ Requires-Dist: aiohttp>=3.14.3
52
+ Requires-Dist: beautifulsoup4>=4.15.0
53
+ Requires-Dist: jsonschema>=4.26.0
54
+ Requires-Dist: concurrent-log-handler>=0.9.29
55
+ Requires-Dist: python-dotenv>=1.2.3
56
+ Requires-Dist: packaging>=26.3
32
57
  Provides-Extra: server
33
- Requires-Dist: fastapi; extra == "server"
34
- Requires-Dist: uvicorn[standard]; extra == "server"
58
+ Requires-Dist: fastapi>=0.141.1; extra == "server"
59
+ Requires-Dist: uvicorn[standard]>=0.52.4; extra == "server"
35
60
  Provides-Extra: dev
36
- Requires-Dist: pytest; extra == "dev"
37
- Requires-Dist: pytest-cov; extra == "dev"
38
- Requires-Dist: black; extra == "dev"
39
- Requires-Dist: flake8; extra == "dev"
61
+ Requires-Dist: pytest>=9.1.1; extra == "dev"
62
+ Requires-Dist: pytest-cov>=7.1.0; extra == "dev"
63
+ Requires-Dist: pytest-xdist>=3.8.0; extra == "dev"
64
+ Requires-Dist: pytest-timeout>=2.4.0; extra == "dev"
65
+ Requires-Dist: pytest-mock>=3.15.1; extra == "dev"
66
+ Requires-Dist: pytest-asyncio>=1.4.0; extra == "dev"
67
+ Requires-Dist: httpx>=0.28.1; extra == "dev"
68
+ Requires-Dist: black>=26.5.1; extra == "dev"
40
69
  Requires-Dist: build; extra == "dev"
41
70
  Dynamic: license-file
42
71
 
@@ -63,6 +92,7 @@ A declarative workflow engine and web UI for the [Hugging Face Diffusers library
63
92
  - **Quantization** — BitsAndBytes, TorchAO, GGUF, SDNQ, optimum-quanto
64
93
  - **Inference acceleration** — TeaCache, FirstBlockCache, FasterCache, MagCache, TaylorSeerCache
65
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
66
96
  - **LoRA and IP-Adapter** support
67
97
  - **Composable workflows** from multiple JSON files with `builtin:` references
68
98
  - **Utility tasks** — upscaling, face restoration, segmentation, captioning, frame interpolation, QR codes, and more
@@ -106,6 +136,8 @@ Everything the engine does, in a browser backed by a persistent GPU worker — m
106
136
 
107
137
  ![The gallery with generated images and videos](docs/img/ui-gallery.jpg)
108
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
+
109
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.
110
142
 
111
143
  ![The model manager listing cached models with sizes](docs/img/ui-models.png)
@@ -117,14 +149,14 @@ Jobs queue, stream progress live (per denoising step), cancel cooperatively, and
117
149
  ### Run a Workflow
118
150
 
119
151
  ```bash
120
- python -m dw.run examples/flux/FluxDev.json
121
- 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
122
154
  ```
123
155
 
124
156
  ### Validate a Workflow
125
157
 
126
158
  ```bash
127
- python -m dw.validate examples/flux/FluxDev.json
159
+ python -m dw.validate workflows/flux/FluxDev.json
128
160
  ```
129
161
 
130
162
  ### Interactive REPL
@@ -284,7 +316,7 @@ a (photorealistic:1.4) portrait with (bright red hair:1.3) and [freckles]
284
316
 
285
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)
286
318
 
287
- See [examples/](examples/) for more workflow files.
319
+ See [workflows/](workflows/) for more workflow files.
288
320
 
289
321
  ## Documentation
290
322
 
@@ -298,6 +330,7 @@ See [examples/](examples/) for more workflow files.
298
330
  - [LoRA](docs/LORAS.md) — Loading and stacking LoRA adapters
299
331
  - [IP-Adapter](docs/IP_ADAPTER.md) — Image-prompt conditioning
300
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
301
334
  - [Tasks](docs/TASKS.md) — Image processing, ControlNet preprocessors, utilities
302
335
 
303
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,7 +46,9 @@ 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
51
+ dw/server/updater.py
48
52
  dw/server/ui/index.html
49
53
  dw/server/ui/assets/abap-08VXUWAP.js
50
54
  dw/server/ui/assets/apex-BWPQTe0t.js
@@ -60,45 +64,45 @@ dw/server/ui/assets/csharp-BKxtCVv1.js
60
64
  dw/server/ui/assets/csp-bTuwJoIa.js
61
65
  dw/server/ui/assets/css-DIMkf-bt.js
62
66
  dw/server/ui/assets/css.worker-B3ciXF_0.js
63
- dw/server/ui/assets/cssMode-CEh6hWi2.js
67
+ dw/server/ui/assets/cssMode-4JQhrTTm.js
64
68
  dw/server/ui/assets/cypher-CVaqCwHa.js
65
69
  dw/server/ui/assets/dart-onAF5SnQ.js
66
70
  dw/server/ui/assets/dockerfile-DZFCIeNp.js
67
71
  dw/server/ui/assets/ecl-D05T4iGw.js
68
72
  dw/server/ui/assets/editor-jjEx9u7D.css
69
- dw/server/ui/assets/editor.api-CExg3_mM.js
73
+ dw/server/ui/assets/editor.api-B_68laXH.js
70
74
  dw/server/ui/assets/editor.worker-q-txB4vs.js
71
75
  dw/server/ui/assets/elixir-6RTg0lbw.js
72
76
  dw/server/ui/assets/flow9-C5_-GSwl.js
73
- dw/server/ui/assets/freemarker2-DH6orYh2.js
77
+ dw/server/ui/assets/freemarker2-C4IxK8gs.js
74
78
  dw/server/ui/assets/fsharp-C8Ef5oNN.js
75
79
  dw/server/ui/assets/go-C-y9NEjX.js
76
80
  dw/server/ui/assets/graphql-fmXr3nnJ.js
77
- dw/server/ui/assets/handlebars-CbrMVW4Q.js
81
+ dw/server/ui/assets/handlebars-BArDGhF4.js
78
82
  dw/server/ui/assets/hcl-CpzslTdj.js
79
- dw/server/ui/assets/html-YDNPZw2M.js
83
+ dw/server/ui/assets/html-8yKFx0-x.js
80
84
  dw/server/ui/assets/html.worker-C93Ht9o9.js
81
- dw/server/ui/assets/htmlMode-B_zSGWO2.js
82
- dw/server/ui/assets/index-B7-VcYS-.css
83
- dw/server/ui/assets/index-D_EiPU3b.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
84
88
  dw/server/ui/assets/ini-sBoK_t0W.js
85
89
  dw/server/ui/assets/java-BEtHBSE6.js
86
- dw/server/ui/assets/javascript-dYuBvioq.js
90
+ dw/server/ui/assets/javascript-B3mqpFQQ.js
87
91
  dw/server/ui/assets/json.worker-B2V3pomh.js
88
- dw/server/ui/assets/jsonMode-CUqLM39V.js
92
+ dw/server/ui/assets/jsonMode-C1m5Z8Ha.js
89
93
  dw/server/ui/assets/julia-Bri6UV-V.js
90
94
  dw/server/ui/assets/kotlin-BOotOW0E.js
91
95
  dw/server/ui/assets/less-B9JPFI3C.js
92
96
  dw/server/ui/assets/lexon-CfSJPG6W.js
93
- dw/server/ui/assets/liquid-D6vxBzMv.js
94
- dw/server/ui/assets/lspLanguageFeatures-1WJ2palX.js
97
+ dw/server/ui/assets/liquid-Cs5oVPJ1.js
98
+ dw/server/ui/assets/lspLanguageFeatures-CnroSKaf.js
95
99
  dw/server/ui/assets/lua-CsQS60Ue.js
96
100
  dw/server/ui/assets/m3-D-oSqn_W.js
97
101
  dw/server/ui/assets/markdown-Cimd5fb3.js
98
- dw/server/ui/assets/mdx-SHQb6vmD.js
102
+ dw/server/ui/assets/mdx-BGAIyUWE.js
99
103
  dw/server/ui/assets/mips-CIPQ_RoX.js
100
104
  dw/server/ui/assets/monaco--ixms01u.css
101
- dw/server/ui/assets/monaco-CP-s5rcP.js
105
+ dw/server/ui/assets/monaco-ab9gu2Wi.js
102
106
  dw/server/ui/assets/msdax-DauUninz.js
103
107
  dw/server/ui/assets/mysql-SOo6toE5.js
104
108
  dw/server/ui/assets/objective-c-FvmIjYaQ.js
@@ -113,10 +117,10 @@ dw/server/ui/assets/powerquery-D3hlyOfw.js
113
117
  dw/server/ui/assets/powershell-DmHpPYUd.js
114
118
  dw/server/ui/assets/protobuf-C531GsRP.js
115
119
  dw/server/ui/assets/pug-Z5eAx3Zn.js
116
- dw/server/ui/assets/python-x0_EGHq9.js
120
+ dw/server/ui/assets/python-XsfASqaE.js
117
121
  dw/server/ui/assets/qsharp-DkqhCAOL.js
118
122
  dw/server/ui/assets/r-BwWrilGY.js
119
- dw/server/ui/assets/razor-BZC4LQDP.js
123
+ dw/server/ui/assets/razor-C-1xVmcy.js
120
124
  dw/server/ui/assets/redis-ClamHrr6.js
121
125
  dw/server/ui/assets/redshift-DT7zqm-g.js
122
126
  dw/server/ui/assets/restructuredtext-BYgofb2h.js
@@ -136,15 +140,15 @@ dw/server/ui/assets/swift-Bxkupp3x.js
136
140
  dw/server/ui/assets/systemverilog-Bz4Y3fRF.js
137
141
  dw/server/ui/assets/tcl-DISqw1ZD.js
138
142
  dw/server/ui/assets/ts.worker-D7T1-Ig5.js
139
- dw/server/ui/assets/tsMode-BTfA6SbD.js
143
+ dw/server/ui/assets/tsMode-BDa9GeVq.js
140
144
  dw/server/ui/assets/twig-De2hgUGE.js
141
- dw/server/ui/assets/typescript-CWA4MsNk.js
145
+ dw/server/ui/assets/typescript-VE9GZNZf.js
142
146
  dw/server/ui/assets/typespec-B8J7ngcE.js
143
147
  dw/server/ui/assets/vb-DV3o63ZY.js
144
148
  dw/server/ui/assets/wgsl-DpFanUEy.js
145
- dw/server/ui/assets/workers-CWU0uvj5.js
146
- dw/server/ui/assets/xml-KmfTm3rg.js
147
- dw/server/ui/assets/yaml-nFO_dDS6.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
148
152
  dw/tasks/audio_utils.py
149
153
  dw/tasks/background_remover.py
150
154
  dw/tasks/borders.py
@@ -206,6 +210,7 @@ tests/test_pipeline_components.py
206
210
  tests/test_previous_results.py
207
211
  tests/test_prompt_parser.py
208
212
  tests/test_prompt_weighting.py
213
+ tests/test_prompts.py
209
214
  tests/test_repl_commands.py
210
215
  tests/test_repl_ergonomics.py
211
216
  tests/test_repl_hierarchical.py
@@ -0,0 +1,55 @@
1
+ torch>=2.13.0
2
+ torchvision>=0.28.0
3
+ diffusers>=0.40.0
4
+ transformers>=5.16.1
5
+ accelerate>=1.14.0
6
+ peft>=0.20.0
7
+ safetensors>=0.8.0
8
+ huggingface-hub>=1.29.0
9
+ sentencepiece>=0.2.2
10
+ protobuf>=7.36.0
11
+ ftfy>=6.3.1
12
+ torchsde>=0.2.6
13
+ torchao>=0.18.0
14
+ optimum-quanto>=0.2.7
15
+ sdnq>=0.2.5
16
+ gguf>=0.19.0
17
+ controlnet-aux>=0.0.10
18
+ opencv-python-headless>=5.0.0.93
19
+ kornia>=0.8.3
20
+ spandrel>=0.4.2
21
+ facexlib>=0.3.0
22
+ numpy>=2.5.2
23
+ Pillow>=12.3.0
24
+ piexif>=1.1.3
25
+ imageio>=2.37.4
26
+ imageio-ffmpeg>=0.6.0
27
+ av>=18.1.0
28
+ soundfile>=0.14.0
29
+ matplotlib>=3.11.1
30
+ qrcode>=8.2
31
+ requests>=2.34.2
32
+ aiohttp>=3.14.3
33
+ beautifulsoup4>=4.15.0
34
+ jsonschema>=4.26.0
35
+ concurrent-log-handler>=0.9.29
36
+ python-dotenv>=1.2.3
37
+ packaging>=26.3
38
+
39
+ [:sys_platform == "linux"]
40
+ bitsandbytes>=0.50.2
41
+
42
+ [dev]
43
+ pytest>=9.1.1
44
+ pytest-cov>=7.1.0
45
+ pytest-xdist>=3.8.0
46
+ pytest-timeout>=2.4.0
47
+ pytest-mock>=3.15.1
48
+ pytest-asyncio>=1.4.0
49
+ httpx>=0.28.1
50
+ black>=26.5.1
51
+ build
52
+
53
+ [server]
54
+ fastapi>=0.141.1
55
+ uvicorn[standard]>=0.52.4
@@ -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
+ }