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.
- {diffusers_workflow-0.4.0a4/diffusers_workflow.egg-info → diffusers_workflow-0.4.0a8}/PKG-INFO +9 -5
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/README.md +8 -4
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8/diffusers_workflow.egg-info}/PKG-INFO +9 -5
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/SOURCES.txt +25 -21
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/arguments.py +25 -1
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/hub_cache.py +27 -1
- diffusers_workflow-0.4.0a8/dw/prompt_schema.json +48 -0
- diffusers_workflow-0.4.0a8/dw/prompts.py +145 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/repl.py +1 -1
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/repl_commands.py +1 -1
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/run.py +11 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/security.py +63 -23
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/serve.py +22 -2
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/app.py +204 -5
- diffusers_workflow-0.4.0a8/dw/server/enhancers.py +129 -0
- 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
- 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
- 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
- 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
- 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
- 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
- diffusers_workflow-0.4.0a8/dw/server/ui/assets/index-BY3Mtj4M.js +17 -0
- diffusers_workflow-0.4.0a8/dw/server/ui/assets/index-Bug26k2P.css +1 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/index.html +2 -2
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/workflow.py +13 -1
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/pyproject.toml +1 -1
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_arguments.py +19 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_docs_links.py +8 -6
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_examples.py +7 -6
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_hub_cache.py +46 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_previous_results.py +18 -0
- diffusers_workflow-0.4.0a8/tests/test_prompts.py +227 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_security.py +60 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_server.py +166 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_text_sections.py +1 -1
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_workflow.py +20 -0
- diffusers_workflow-0.4.0a4/dw/server/ui/assets/index-SQcvGbXy.css +0 -1
- diffusers_workflow-0.4.0a4/dw/server/ui/assets/index-qLIa9n7C.js +0 -13
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/LICENSE +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/MANIFEST.in +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/dependency_links.txt +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/entry_points.txt +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/requires.txt +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/top_level.txt +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/__init__.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/cache_blocks.json +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/cache_blocks.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/community_pipelines/pipeline_flux_rf_inversion.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/events.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/introspection.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/log_setup.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/pipeline_processors/chain.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/pipeline_processors/config_objects.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/pipeline_processors/pipeline.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/pipeline_processors/remote.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/previous_results.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/prompt_weighting.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/repl_worker.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/result.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/schema.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/__init__.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/jobs.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/abap-08VXUWAP.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/apex-BWPQTe0t.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/azcli-Bc_sGQ0U.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/bat-i0X4ZdIN.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/bicep-B5-_aFwp.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/cameligo-DMUM7wLl.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/clojure-Cm7r79vr.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/codicon-Brq4_Ui5.ttf +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/coffee-Ba7i2nA0.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/cpp-C7h46wYY.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/csharp-BKxtCVv1.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/csp-bTuwJoIa.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/css-DIMkf-bt.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/css.worker-B3ciXF_0.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/cypher-CVaqCwHa.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/dart-onAF5SnQ.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/dockerfile-DZFCIeNp.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/ecl-D05T4iGw.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/editor-jjEx9u7D.css +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/editor.worker-q-txB4vs.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/elixir-6RTg0lbw.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/flow9-C5_-GSwl.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/fsharp-C8Ef5oNN.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/go-C-y9NEjX.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/graphql-fmXr3nnJ.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/hcl-CpzslTdj.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/html.worker-C93Ht9o9.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/ini-sBoK_t0W.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/java-BEtHBSE6.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/json.worker-B2V3pomh.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/julia-Bri6UV-V.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/kotlin-BOotOW0E.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/less-B9JPFI3C.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/lexon-CfSJPG6W.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/lua-CsQS60Ue.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/m3-D-oSqn_W.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/markdown-Cimd5fb3.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/mips-CIPQ_RoX.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/monaco--ixms01u.css +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/msdax-DauUninz.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/mysql-SOo6toE5.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/objective-c-FvmIjYaQ.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pascal-DrH0SRf2.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pascaligo-D-ptJ9y-.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/perl-oz_6vUea.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pgsql-DTj74zXo.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/php-nr791fC2.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pla-CopQ2nXW.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/postiats-43DmfD33.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/powerquery-D3hlyOfw.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/powershell-DmHpPYUd.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/protobuf-C531GsRP.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/pug-Z5eAx3Zn.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/qsharp-DkqhCAOL.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/r-BwWrilGY.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/redis-ClamHrr6.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/redshift-DT7zqm-g.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/restructuredtext-BYgofb2h.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/ruby-DezsRK8O.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/rust-DdL9SqIa.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/sb-CcwsVR0C.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/scala-DHpiXF5c.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/scheme-BeGwcela.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/scss-gp-XZpBa.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/shell-CC2rA5mh.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/solidity-BEEn4gHE.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/sophia-CRfGWb83.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/sparql-D_Lu-MrJ.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/sql-NEE52Syq.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/st-DbInun42.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/swift-Bxkupp3x.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/tcl-DISqw1ZD.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/ts.worker-D7T1-Ig5.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/twig-De2hgUGE.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/typespec-B8J7ngcE.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/vb-DV3o63ZY.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/ui/assets/wgsl-DpFanUEy.js +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/server/updater.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/settings.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/step.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/audio_utils.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/background_remover.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/borders.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/concat_videos.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/depth_estimator.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/diffusion_upscale.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/format_messages.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/gather.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/image_to_text.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/image_utils.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/interpolate_frames.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/model_cache.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/pair_audio.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/qr_code.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/restore_faces.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/rife_model.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/segment.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/task.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/tensor_image.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/text_generation.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/text_sections.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/upscale.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/video_utils.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/tasks/zoe_depth.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/teacache.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/teacache_models.json +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/test.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/type_helpers.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/validate.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/variables.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/worker.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/workflow_schema.json +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/workflows/augment_prompt.json +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/workflows/describe_image.json +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/workflows/h3_context_ir.json +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/dw/workflows/test.json +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/setup.cfg +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_argument_updates.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_audio_utils.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_borders.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_cache_blocks.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_chain.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_component_pruning.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_concat_videos.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_config_objects.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_configuration_schema.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_depth_estimator.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_device.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_device_helpers.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_diffusion_upscale.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_events.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_gather.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_image_to_text.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_image_utils.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_integration.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_interpolate_frames.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_introspection.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_list_images.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_model_cache.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_modular_pipeline.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_pair_audio.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_pipeline_caching.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_pipeline_components.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_prompt_parser.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_prompt_weighting.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_repl_commands.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_repl_ergonomics.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_repl_hierarchical.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_repl_reorganization.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_resize_bucket.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_result.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_scheduler_config.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_schema.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_segment.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_step.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_strip_exif_and_watermark.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_task.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_task_discovery.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_teacache.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_tensor_image.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_text_generation.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_type_helpers.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_variables.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_video_utils.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_worker.py +0 -0
- {diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/tests/test_worker_execute.py +0 -0
{diffusers_workflow-0.4.0a4/diffusers_workflow.egg-info → diffusers_workflow-0.4.0a8}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: diffusers-workflow
|
|
3
|
-
Version: 0.4.
|
|
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
|

|
|
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
|

|
|
@@ -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
|
|
150
|
-
python -m dw.run
|
|
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
|
|
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 [
|
|
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
|

|
|
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
|

|
|
@@ -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
|
|
79
|
-
python -m dw.run
|
|
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
|
|
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 [
|
|
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
|
{diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8/diffusers_workflow.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: diffusers-workflow
|
|
3
|
-
Version: 0.4.
|
|
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
|

|
|
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
|

|
|
@@ -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
|
|
150
|
-
python -m dw.run
|
|
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
|
|
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 [
|
|
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
|
{diffusers_workflow-0.4.0a4 → diffusers_workflow-0.4.0a8}/diffusers_workflow.egg-info/SOURCES.txt
RENAMED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
81
|
+
dw/server/ui/assets/handlebars-BArDGhF4.js
|
|
79
82
|
dw/server/ui/assets/hcl-CpzslTdj.js
|
|
80
|
-
dw/server/ui/assets/html-
|
|
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-
|
|
83
|
-
dw/server/ui/assets/index-
|
|
84
|
-
dw/server/ui/assets/index-
|
|
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-
|
|
90
|
+
dw/server/ui/assets/javascript-B3mqpFQQ.js
|
|
88
91
|
dw/server/ui/assets/json.worker-B2V3pomh.js
|
|
89
|
-
dw/server/ui/assets/jsonMode-
|
|
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-
|
|
95
|
-
dw/server/ui/assets/lspLanguageFeatures-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
143
|
+
dw/server/ui/assets/tsMode-BDa9GeVq.js
|
|
141
144
|
dw/server/ui/assets/twig-De2hgUGE.js
|
|
142
|
-
dw/server/ui/assets/typescript-
|
|
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-
|
|
147
|
-
dw/server/ui/assets/xml-
|
|
148
|
-
dw/server/ui/assets/yaml-
|
|
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
|
-
|
|
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
|
-
|
|
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": "./
|
|
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: ./
|
|
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:
|