diffusers-workflow 0.11.0__tar.gz → 0.11.1__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.11.0/diffusers_workflow.egg-info → diffusers_workflow-0.11.1}/PKG-INFO +1 -1
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1/diffusers_workflow.egg-info}/PKG-INFO +1 -1
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/diffusers_workflow.egg-info/SOURCES.txt +5 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/ACCELERATION.md +17 -1
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/LORAS.md +4 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/RECIPES_24GB.md +73 -17
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/RELEASING.md +41 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/SERVER.md +3 -1
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/TASKS.md +1 -1
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/WORKER_GUIDE.md +7 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/WORKFLOW_GUIDE.md +12 -1
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/media.py +23 -5
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_ownership.py +18 -2
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/adapters.py +103 -36
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/components.py +17 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/pipeline.py +32 -1
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/step_cache.py +117 -17
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/restore_faces.py +18 -8
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/worker.py +44 -10
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/workflow.py +8 -2
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/workflow_run.py +41 -7
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/pyproject.toml +1 -1
- diffusers_workflow-0.11.1/tests/test_catalog_speed_defaults.py +76 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_catalog_structure.py +4 -1
- diffusers_workflow-0.11.1/tests/test_media_decode_threads.py +81 -0
- diffusers_workflow-0.11.1/tests/test_restore_faces_helper_cache.py +93 -0
- diffusers_workflow-0.11.1/tests/test_runtime_settings.py +151 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_step_cache.py +188 -72
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_worker_execute.py +46 -1
- diffusers_workflow-0.11.1/tests/test_workflow_run_keys.py +42 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_workflow_step_cache.py +120 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/LICENSE +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/MANIFEST.in +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/README.md +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/diffusers_workflow.egg-info/dependency_links.txt +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/diffusers_workflow.egg-info/entry_points.txt +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/diffusers_workflow.egg-info/requires.txt +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/diffusers_workflow.egg-info/top_level.txt +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/__init__.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/adapter_compatibility.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/argument_media.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/argument_warnings.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/arguments.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/assessment_rules.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/assets.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/audio_qc.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/cache_blocks.json +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/cache_blocks.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/community_pipelines/pipeline_flux_rf_inversion.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/community_pipelines/pipeline_ltx2_refine.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/content_types.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/devices.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/dissolve_frame_errors.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/AGENT_LOOP.md +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/ARCHITECTURE.md +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/DEPENDENCIES.md +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/IP_ADAPTER.md +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/MCP.md +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/PROMPT_WEIGHTING.md +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/QUANTIZATION.md +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/REMOTE.md +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/SECURITY.md +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/SECURITY_QUICKREF.md +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/TESTING.md +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/docs/WORKSPACES.md +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/download_watch.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/dsp.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/elision.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/events.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/for_each.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/guides.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/hold_audio.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/host_memory.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/host_memory_projection.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/hub_cache.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/introspection.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/kernel_availability.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/library.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/locations.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/log_setup.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/lora_catalog.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/lora_catalog_schema.json +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/lora_hub.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/media_frames.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/media_types.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/outbound.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/output_extraction.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/path_redaction.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/chain.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/config_objects.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/h3_guide_steps.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/h3_guides.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/h3_hold.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/h3_hold_steps.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/h3_rules.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/placement.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/progress.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/remote.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/plan.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/previous_results.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/probe_paths.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/prompt_schema.json +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/prompt_weighting.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/prompts.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/realize.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/reference_limits.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/reference_names.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/references.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/result.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/run.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/runs.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/scalar_result_validation.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/schema.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/script_lines.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/security.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/serve.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/__init__.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/admission.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/api_models.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/app.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/assess.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/catalog.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/catalog_shape.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/deps.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/enhancers.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/exports.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/guides.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/http_security.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/inline_media.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/job_history.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/job_record.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/job_results.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/jobs.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/mcp_mount.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/netinfo.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/observed_cost.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/outputs.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/pool.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/__init__.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/assets.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/files.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/gallery.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/jobs.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/library.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/loras.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/media.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/routes/system.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/sysinfo.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/abap-08VXUWAP.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/apex-BWPQTe0t.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/azcli-Bc_sGQ0U.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/bat-i0X4ZdIN.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/bicep-B5-_aFwp.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/cameligo-DMUM7wLl.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/clojure-Cm7r79vr.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/codicon-DF1abBS2.ttf +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/coffee-Ba7i2nA0.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/cpp-C7h46wYY.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/csharp-BKxtCVv1.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/csp-bTuwJoIa.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/css-DIMkf-bt.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/css.worker-C6lDtRpF.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/cssMode-ukxfz-ce.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/cypher-CVaqCwHa.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/dart-onAF5SnQ.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/dockerfile-DZFCIeNp.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/ecl-D05T4iGw.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/editor-DjpsE8to.css +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/editor.api-Bkt_tsj1.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/editor.worker-BmdWdrHZ.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/elixir-6RTg0lbw.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/flow9-C5_-GSwl.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/freemarker2-DbXygLvH.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/fsharp-C8Ef5oNN.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/go-C-y9NEjX.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/graphql-fmXr3nnJ.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/handlebars-BdhZGoSz.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/hcl-CpzslTdj.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/html-Chhg10Tp.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/html.worker-C5yZDBHz.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/htmlMode-cC3JW4lx.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/index-BYEwBCrU.css +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/index-CkD0GJG0.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/ini-sBoK_t0W.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/java-BEtHBSE6.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/javascript-BWWLMkof.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/json.worker-DdeUAmHa.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/jsonMode-DrC8C29V.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/julia-Bri6UV-V.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/kotlin-BOotOW0E.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/less-B9JPFI3C.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/lexon-CfSJPG6W.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/liquid-CXdQfmUT.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/lspLanguageFeatures-BgAhb71w.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/lua-CsQS60Ue.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/m3-D-oSqn_W.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/markdown-Cimd5fb3.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/mdx-CQS0lFaZ.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/mips-CIPQ_RoX.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/monaco-Z_sI-RLU.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/monaco-n7clI0si.css +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/msdax-DauUninz.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/mysql-SOo6toE5.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/objective-c-FvmIjYaQ.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/pascal-DrH0SRf2.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/pascaligo-D-ptJ9y-.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/perl-oz_6vUea.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/pgsql-DTj74zXo.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/php-nr791fC2.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/pla-CopQ2nXW.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/postiats-43DmfD33.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/powerquery-D3hlyOfw.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/powershell-DmHpPYUd.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/protobuf-C531GsRP.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/pug-Z5eAx3Zn.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/python-C9MtI630.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/qsharp-DkqhCAOL.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/r-BwWrilGY.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/razor-DPO5mHyR.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/redis-ClamHrr6.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/redshift-DT7zqm-g.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/restructuredtext-BYgofb2h.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/ruby-DezsRK8O.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/rust-DdL9SqIa.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/sb-CcwsVR0C.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/scala-DHpiXF5c.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/scheme-BeGwcela.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/scss-gp-XZpBa.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/shell-CC2rA5mh.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/solidity-BEEn4gHE.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/sophia-CRfGWb83.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/sparql-D_Lu-MrJ.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/sql-NEE52Syq.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/st-DbInun42.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/swift-Bxkupp3x.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/tcl-DISqw1ZD.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/ts.worker-DGGa2mF8.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/tsMode-D8vGBTVc.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/twig-De2hgUGE.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/typescript-DyoEkQLT.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/typespec-B8J7ngcE.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/vb-DV3o63ZY.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/wgsl-DpFanUEy.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/workers-Bdewp_DS.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/xml-DmmKOVWo.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/assets/yaml-C4jCTuer.js +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/ui/index.html +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/updater.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/server/worker_memory.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/settings.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/shot_span_preflight.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/shots.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/slice_preflight.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/step.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/step_value_checks.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/subfolders.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/task_domains.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/task_problems.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/assess.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/audio_dynamics.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/audio_handlers.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/audio_transcription.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/audio_utils.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/background_remover.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/beats.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/borders.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/compose_text.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/concat_videos.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/cuts.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/depth_estimator.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/diffusion_upscale.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/dissolve_videos.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/face_track.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/finish.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/finish_handlers.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/fit.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/format_messages.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/gather.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/grade.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/h3_latent_upscale.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/h3_latent_upscaler_model.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/image_ops.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/image_to_text.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/image_utils.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/interpolate_frames.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/join_into_song.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/joins.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/judge.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/loop_bed.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/lut.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/measure_sync.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/model_cache.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/model_handlers.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/pair_audio.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/qr_code.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/registry.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/rife_model.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/script_check.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/segment.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/select.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/speech_generation.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/stabilize.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/task.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/tensor_image.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/text_generation.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/text_sections.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/trim.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/upscale.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/video_handlers.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/video_utils.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/voice_attribution.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/windows.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/tasks/zoe_depth.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/test.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/trust.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/type_helpers.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/type_references.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/validate.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/validation.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/variable_constraints.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/variables.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/video_extensions.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/video_size_errors.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/vram_estimate.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/vram_inheritance.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/window_count_errors.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/worker_manager.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/worker_protocol.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/workflow_schema.json +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/workflows/h3_context_ir.json +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/workflows/test.json +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/workspace.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/writers.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/__init__.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/__main__.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/assets.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/authoring.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/catalog.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/client.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/confine.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/diagnose.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/exports.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/guides.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/loras.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/media.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/models.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/prompts.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/server.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/tools_authoring.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/tools_catalog.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/tools_jobs.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/tools_media.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw_mcp/workspaces.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/setup.cfg +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_admission.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_admission_capacity.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_analyze_beats.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_api_contract.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_arch_metrics.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_arch_report.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_architecture_map.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_argument_updates.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_arguments.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_assemble_and_score_target_lufs.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_assess.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_assessment_rules.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_assets.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_attention_slicing.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_audio_utils.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_best_of_n_template.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_borders.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_cache_blocks.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_catalog_shape.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_chain.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ci_config.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_cli.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_component_name_errors.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_component_pruning.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_component_type_errors.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_compose_text.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_concat_videos.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_config_objects.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_configuration_schema.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_content_types.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_depth_estimator.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_device.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_device_helpers.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_device_portability.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_dialogue_short_voices.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_diffusion_upscale.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_dissolve_frame_errors.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_dissolve_videos.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_docs_links.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_download_watch.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_dsp.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_elision.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_events.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_examples.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_face_track.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_find_loop_bed.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_finish.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_fit_templates.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_fit_to_model.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_for_each.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_gather.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_grade.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_guide_chain_validation.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_guides_validation.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_adapters.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_context_ir.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_guides.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_hold_audio.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_latent_upscale.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_refine.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_rules.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_schedule.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_upscaler_source.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_h3_vram_ceiling.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_hf_placement.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_host_memory.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_host_memory_projection.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_hub_cache.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_image_ops.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_image_to_text.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_image_utils.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_inductor_cache_default.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ingredients_grid.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_inherited_cost.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_integration.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_interpolate_frames.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_introspection.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_job_history_device.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_job_history_wal.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_job_progress.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_job_warnings.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_jobs_listing.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_jobs_reused.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_join_into_song.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_join_windows.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_judge.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_kernel_availability.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_library_path.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_library_sources.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_list_images.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_locations.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_lora_alpha.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_lora_catalog.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_lora_disable.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_lora_hub.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_lora_library.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ltx2_diffusion_decode.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ltx2_extend_clip.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ltx2_ic_loras.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ltx2_refine_pipeline.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ltx_prompt_library.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_lut.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_assets.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_authoring.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_catalog.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_client.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_confine.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_diagnose.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_exports.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_guides.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_loras.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_main.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_media.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_models.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_prompts.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_server.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_twins.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mcp_workspaces.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_measure_sync.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_media_audio.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_media_frames.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_media_info.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_media_layering.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mix_audio.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_model_cache.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_modular_output_properties.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_modular_pipeline.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_modular_progress.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mps_fallback_warning.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_mps_rope_precision.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_null_media.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_numeric_coercion.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_observed_cost.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_offload_placement.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_outbound.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_output_references.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_pair_audio.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_pair_audio_fit.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_parallel_loading_default.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_path_redaction.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_phase_events.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_pipeline_caching.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_pipeline_components.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_plan.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_plan_cuts.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_plugin_skills.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_prepare_pipeline.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_previous_result_walker_parity.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_previous_results.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_prompt_library.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_prompt_parser.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_prompt_references.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_prompt_weighting.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_prompts.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_read_frame_range.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_real_models.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_realize.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_recenter_crop.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_reference_limits.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_reference_names.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_reference_skip_sets.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_references.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_rerun_new_seed.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_resize_bucket.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_restore_faces_video.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_result.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_result_fps.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_result_output_naming.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_rule_parity.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_runs.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_scalar_result_validation.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_scheduler_config.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_schema.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_script_check.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_auth.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_decoder_bombs.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_input_caps.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_ssrf.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_symlinks.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_trust_gate.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_security_web_headers.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_segment.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_select.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_select_validation.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_separate_stems.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_serve_main.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_assess.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_downloads.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_exports.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_gallery_image.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_guides.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_info.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_jobs.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_library_path.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_loras.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_mcp.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_server_workspaces.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_shaping_logs.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_shot_span_preflight.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_shots.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_slice_preflight.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_speech_generation.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_stabilize.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_step.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_strip_exif_and_watermark.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_sub_workflow_resolver.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_subfolders.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_task.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_task_discovery.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_task_domains.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_task_public_imports.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_task_registry_rules.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_task_signature_errors.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_template_defaults.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_template_subfolders.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_tensor_image.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_text_generation.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_text_sections.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_transcribe_audio.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_trim_video.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_type_helpers.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_type_helpers_concurrency.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_ui_twins.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_updater.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_validate_arguments.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_validation.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_variable_constraints.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_variables.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_video_extensions.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_video_size_errors.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_video_utils.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_voice_attribution.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_vram_estimate.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_vram_guides.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_vram_inheritance.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_window_count_errors.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_window_video.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_worker.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_worker_job_peak_rss.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_worker_manager.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_worker_messages.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_worker_pool.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_workflow.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_workflow_snapshot.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_workflow_trust.py +0 -0
- {diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/tests/test_workspace.py +0 -0
{diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/diffusers_workflow.egg-info/SOURCES.txt
RENAMED
|
@@ -361,6 +361,7 @@ tests/test_best_of_n_template.py
|
|
|
361
361
|
tests/test_borders.py
|
|
362
362
|
tests/test_cache_blocks.py
|
|
363
363
|
tests/test_catalog_shape.py
|
|
364
|
+
tests/test_catalog_speed_defaults.py
|
|
364
365
|
tests/test_catalog_structure.py
|
|
365
366
|
tests/test_chain.py
|
|
366
367
|
tests/test_ci_config.py
|
|
@@ -463,6 +464,7 @@ tests/test_mcp_twins.py
|
|
|
463
464
|
tests/test_mcp_workspaces.py
|
|
464
465
|
tests/test_measure_sync.py
|
|
465
466
|
tests/test_media_audio.py
|
|
467
|
+
tests/test_media_decode_threads.py
|
|
466
468
|
tests/test_media_frames.py
|
|
467
469
|
tests/test_media_info.py
|
|
468
470
|
tests/test_media_layering.py
|
|
@@ -507,12 +509,14 @@ tests/test_reference_skip_sets.py
|
|
|
507
509
|
tests/test_references.py
|
|
508
510
|
tests/test_rerun_new_seed.py
|
|
509
511
|
tests/test_resize_bucket.py
|
|
512
|
+
tests/test_restore_faces_helper_cache.py
|
|
510
513
|
tests/test_restore_faces_video.py
|
|
511
514
|
tests/test_result.py
|
|
512
515
|
tests/test_result_fps.py
|
|
513
516
|
tests/test_result_output_naming.py
|
|
514
517
|
tests/test_rule_parity.py
|
|
515
518
|
tests/test_runs.py
|
|
519
|
+
tests/test_runtime_settings.py
|
|
516
520
|
tests/test_scalar_result_validation.py
|
|
517
521
|
tests/test_scheduler_config.py
|
|
518
522
|
tests/test_schema.py
|
|
@@ -590,6 +594,7 @@ tests/test_worker_manager.py
|
|
|
590
594
|
tests/test_worker_messages.py
|
|
591
595
|
tests/test_worker_pool.py
|
|
592
596
|
tests/test_workflow.py
|
|
597
|
+
tests/test_workflow_run_keys.py
|
|
593
598
|
tests/test_workflow_snapshot.py
|
|
594
599
|
tests/test_workflow_step_cache.py
|
|
595
600
|
tests/test_workflow_trust.py
|
|
@@ -136,6 +136,18 @@ Select the attention implementation diffusers uses for the duration of each pipe
|
|
|
136
136
|
|
|
137
137
|
Common values: `"flash"`, `"flash_hub"`, `"sage"`, `"sage_hub"`, `"native"`, `"flex"`. The full set is diffusers' `AttentionBackendName` enum - availability depends on what's installed (`flash-attn`, `sageattention`, etc.) and the platform. `_hub`-suffixed backends are fetched from the Hugging Face Hub kernel registry on first use, which needs the `kernels` package installed (`pip install kernels`) - it is not a dw dependency, and no bundled workflow sets a backend, so each runs on a plain install. diffusers also refuses a Hub kernel whose publisher it does not list as trusted - `sage_hub` among them, since SageAttention 2 comes from `SageAttention/sage-attention` - until `DIFFUSERS_TRUST_REMOTE_KERNELS=true`, which allows remote code from any such publisher. On an RTX 3090 `sage_hub` measured about 30% faster per MiniMax-H3 step (13.8 s against 19.2 s at 960x544x124, 54.7 s against 81.2 s at 345 frames); the local `sage` backend needs `sageattention>=2.1.1`, which PyPI does not carry.
|
|
138
138
|
|
|
139
|
+
The MiniMax-H3 baselines expose this as a variable: `attention_backend` on
|
|
140
|
+
[video-with-audio.json](../workflows/templates/minimax/video-with-audio.json),
|
|
141
|
+
[video-with-audio-768p.json](../workflows/templates/minimax/video-with-audio-768p.json),
|
|
142
|
+
[image-to-video.json](../workflows/templates/minimax/image-to-video.json) and
|
|
143
|
+
[reference-to-video.json](../workflows/templates/minimax/reference-to-video.json), pinned
|
|
144
|
+
on the transformer and `null` by default. Pass `attention_backend=sage_hub` to a box with
|
|
145
|
+
the `kernels` package and `DIFFUSERS_TRUST_REMOTE_KERNELS=true` in its `.env`; on MPS
|
|
146
|
+
leave it null. The other H3 templates take the same key under `components.transformer`
|
|
147
|
+
(`transformer_ref` for a ref2va workflow). LTX-2.5 cannot use it: its transformer
|
|
148
|
+
passes an attention mask, and sage attention refuses one ("`attn_mask` is not supported
|
|
149
|
+
for sage attention", measured 2026-10-10), so the LTX templates expose no backend.
|
|
150
|
+
|
|
139
151
|
A component can also pin its backend persistently instead, via `set_attention_backend`:
|
|
140
152
|
|
|
141
153
|
```json
|
|
@@ -232,7 +244,11 @@ Three older per-component knobs, set in the pipeline `configuration` beside
|
|
|
232
244
|
|
|
233
245
|
## Memory Offloading
|
|
234
246
|
|
|
235
|
-
`offload` (`"model"` or `"sequential"`) and `group_offload` trade speed for VRAM by streaming weights between system memory and the accelerator instead of keeping everything resident. `"model"` moves whole submodules and costs the least speed; `"sequential"` moves individual layers and is the slowest but uses the least memory; block/leaf-level `group_offload` sits between the two and is what a modular pipeline's self-loaded components use, since they aren't reachable in time for `offload`. Full configuration syntax is in [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md#memory-offloading). Omit both for the fastest run, when VRAM allows it.
|
|
247
|
+
`offload` (`"model"` or `"sequential"`) and `group_offload` trade speed for VRAM by streaming weights between system memory and the accelerator instead of keeping everything resident. `"model"` moves whole submodules and costs the least speed; `"sequential"` moves individual layers and is the slowest but uses the least memory; block/leaf-level `group_offload` sits between the two and is what a modular pipeline's self-loaded components use, since they aren't reachable in time for `offload`. Full configuration syntax is in [WORKFLOW_GUIDE.md](WORKFLOW_GUIDE.md#memory-offloading). Omit both for the fastest run, when VRAM allows it. Measured on an RTX 3090 (RECIPES_24GB.md): sequential
|
|
248
|
+
offload costs about 6x per step on FLUX dev and 3.4x on Z-Image against model offload;
|
|
249
|
+
a block-level, streamed `group_offload` of the transformer from pinned host memory
|
|
250
|
+
matches the resident per-step cost while holding one block on the card, at ~22 GB of
|
|
251
|
+
pinned host RAM per FLUX pipeline - the placement the unquantized FLUX templates use.
|
|
236
252
|
|
|
237
253
|
`"residency": "on_demand"` on a component is the cheap case of the same trade: the model rests in system memory and is moved to the device whole around each of its own calls. That is a bad deal for anything called once per step, and a good one for a VAE called twice a run - it frees the VAE's VRAM for the denoise loop at the cost of two transfers, where group offloading the same VAE would restream it once per decode tile. See [On-demand components](WORKFLOW_GUIDE.md#on-demand-components).
|
|
238
254
|
|
|
@@ -48,6 +48,10 @@ LoRA (Low-Rank Adaptation) models apply lightweight style or subject modificatio
|
|
|
48
48
|
|
|
49
49
|
Any other property (e.g. `revision`) is forwarded as-is to the underlying `load_lora_weights()` call.
|
|
50
50
|
|
|
51
|
+
`scale` and `alpha` are set in place on the loaded adapter, so a server run that changes
|
|
52
|
+
only them reuses the warm pipeline instead of reloading it; changing `model_name` or
|
|
53
|
+
`weight_name` reloads.
|
|
54
|
+
|
|
51
55
|
## Multiple LoRAs
|
|
52
56
|
|
|
53
57
|
Stack multiple LoRAs. They are blended via weighted adapter composition:
|
|
@@ -12,23 +12,79 @@ The general recipe, in order of impact:
|
|
|
12
12
|
|
|
13
13
|
## Flux dev (12B)
|
|
14
14
|
|
|
15
|
-
The bf16 transformer is ~
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
| **
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
15
|
+
The bf16 transformer is ~22 GB, so on 24 GB it cannot sit beside its own activations
|
|
16
|
+
with any margin, and it cannot sit beside the T5 encoder or the VAE at all. Three
|
|
17
|
+
placements, measured on an RTX 3090 (2026-10-10, cold load included):
|
|
18
|
+
|
|
19
|
+
| Placement | 1024x1024, 25 steps, 1 image, dev + LoRA | 768x768, 25 steps, 4 images, Krea | 1232x1632, 50 steps, Fill |
|
|
20
|
+
| --------- | ----------------------------------------- | --------------------------------- | ------------------------- |
|
|
21
|
+
| `offload: "sequential"` | 273 s (10.8 s/step) | not measured - same per-step cost | not measured |
|
|
22
|
+
| `offload: "model"` | 61 s (1.7 s/step) at **23.3 GB reserved, 491 MB free** | **OOM** at 23.45 GiB | not attempted |
|
|
23
|
+
| **transformer `group_offload`, block-level, streamed, pinned host copies** | 78 s (1.5 s/step), 17.7 GB peak reserved, 6 GB free | 131 s (3.2 s/step) | 152 s denoise (3.0 s/step), 1 s decode |
|
|
24
|
+
|
|
25
|
+
Model offload is the fastest placement that loads, and the one #580 (9c708a12) retired:
|
|
26
|
+
at 1024x1024 it runs with a few hundred MB to spare and fails on anything larger -
|
|
27
|
+
a batch, a second encoder resident for prompt weighting, a cache's state. Sequential
|
|
28
|
+
offload is safe everywhere and 6x slower per step. The streamed group offload is both:
|
|
29
|
+
the transformer's blocks are copied in one at a time from pinned host memory under a
|
|
30
|
+
CUDA stream, so each step costs the same as the resident model's, and the card holds
|
|
31
|
+
one block plus the activations. It is what every unquantized FLUX template now uses:
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
"configuration": {
|
|
35
|
+
"component_type": "FluxPipeline",
|
|
36
|
+
"components": {
|
|
37
|
+
"transformer": {
|
|
38
|
+
"group_offload": {
|
|
39
|
+
"offload_type": "block_level",
|
|
40
|
+
"num_blocks_per_group": 1,
|
|
41
|
+
"use_stream": true,
|
|
42
|
+
"record_stream": true
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"text_encoder": { "device": "cuda" },
|
|
46
|
+
"text_encoder_2": { "device": "cuda" },
|
|
47
|
+
"vae": { "device": "cuda" }
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Two things the shape depends on. The non-offloaded components are placed explicitly:
|
|
53
|
+
with no pipeline-level `offload`, nothing else moves them, and a T5 or VAE left on the
|
|
54
|
+
CPU costs a minute per prompt encode and per decode (measured: 70 s before the first
|
|
55
|
+
step, 185 s decoding). And the host copies are pinned - diffusers' default,
|
|
56
|
+
`low_cpu_mem_usage: false` - which holds ~22 GB of unswappable host memory per loaded
|
|
57
|
+
FLUX pipeline and takes ~35 s once per load; with `low_cpu_mem_usage: true` the copies
|
|
58
|
+
come from pageable memory at 8 s/step, barely ahead of sequential. A host with less
|
|
59
|
+
than 32 GB free should take `offload: "sequential"` instead.
|
|
60
|
+
|
|
61
|
+
Compile and caching stack on top as before: `compile: {repeated_blocks: true}` measured
|
|
62
|
+
52 s vs 55 s per image on the old model-offload placement; `cache: first_block` is
|
|
63
|
+
[step-caching.json](../workflows/templates/step-caching.json). TorchAO int8 is over 60 s
|
|
64
|
+
per *denoising step* on Ampere - do not use it there; float8 needs compute capability
|
|
65
|
+
8.9+ (Ada) and is unmeasured; GGUF Q8 ([flux-gguf.json](../workflows/models/flux-gguf.json))
|
|
66
|
+
loads with the least VRAM and is unmeasured for speed.
|
|
67
|
+
|
|
68
|
+
**Examples:** [lora.json](../workflows/templates/lora.json), [flux-dev-compile.json](../workflows/models/flux-dev-compile.json), [flux-gguf.json](../workflows/models/flux-gguf.json), [step-caching.json](../workflows/templates/step-caching.json)
|
|
69
|
+
|
|
70
|
+
## Z-Image Turbo (6B)
|
|
71
|
+
|
|
72
|
+
Fits a 24 GB card in bf16 with model offload, and that is the configuration to use.
|
|
73
|
+
Measured on an RTX 3090 (960x544, 9 steps, 4 images per prompt, cold load included,
|
|
74
|
+
2026-10-10):
|
|
75
|
+
|
|
76
|
+
| Offload | Load | Denoise | Decode | Total | Peak VRAM reserved |
|
|
77
|
+
| ------- | ---- | ------- | ------ | ----- | ------------------ |
|
|
78
|
+
| `sequential` | 18 s | 84 s | 2 s | 107 s | 1.1 GB |
|
|
79
|
+
| **`model`** | 4 s | 25 s | 9 s | 41 s | 13.0 GB |
|
|
80
|
+
| none (resident) | 11 s | 17 s | 2 s | 33 s | 23.7 GB, 95 MB free at decode |
|
|
81
|
+
|
|
82
|
+
Sequential offload streams the transformer's layers every step and costs 3.4x on the
|
|
83
|
+
denoise for a model that does not need the room. Resident is faster still but decodes
|
|
84
|
+
four images with nothing to spare, so [z-image.json](../workflows/models/z-image.json)
|
|
85
|
+
and the Z-Image portrait steps of the MiniMax templates use `"offload": "model"`. The
|
|
86
|
+
decode's 9 s under model offload is the VAE swapping in; `vae.enable_slicing` would
|
|
87
|
+
trade it for per-image decodes.
|
|
32
88
|
|
|
33
89
|
## Qwen-Image (20B)
|
|
34
90
|
|
|
@@ -7,6 +7,47 @@ notes from commits at tag time (see below). This section is a scratch pad
|
|
|
7
7
|
for items a branch's author wants the next release note to name; clear it
|
|
8
8
|
when a release ships.
|
|
9
9
|
|
|
10
|
+
### 0.11.1
|
|
11
|
+
|
|
12
|
+
<!-- Drafted from v0.11.0..develop. Paste into the GitHub release body once the tag has published: gh release edit v0.11.1 --notes-file ... -->
|
|
13
|
+
|
|
14
|
+
A speed release. The unquantized FLUX templates run about 3.5x faster on
|
|
15
|
+
a 24 GB card, Z-Image Turbo about 2.6x, a LoRA scale or scheduler shift
|
|
16
|
+
change no longer reloads the model, and switching workflows keeps the
|
|
17
|
+
models the next one shares. Every number below was measured on an RTX 3090;
|
|
18
|
+
the placement tables are in docs/RECIPES_24GB.md.
|
|
19
|
+
|
|
20
|
+
**Workflow speed**
|
|
21
|
+
|
|
22
|
+
- The 14 unquantized FLUX templates and `models/flux-krea` stream the
|
|
23
|
+
transformer block by block from pinned host memory (`group_offload`)
|
|
24
|
+
instead of `offload: "sequential"`: a 25-step 1024x1024 image takes 78 s
|
|
25
|
+
instead of 273 s (1.5 s/step against 10.8), with 6 GB of VRAM to spare -
|
|
26
|
+
enough for the 4-image batches `offload: "model"` runs out of memory on.
|
|
27
|
+
It holds ~22 GB of pinned host RAM per loaded FLUX pipeline.
|
|
28
|
+
- Z-Image Turbo (`models/z-image` and the MiniMax portrait steps) takes
|
|
29
|
+
`offload: "model"`: four 960x544 images in 41 s instead of 107 s.
|
|
30
|
+
- The four MiniMax-H3 family baselines expose `attention_backend` (null by
|
|
31
|
+
default; `sage_hub` measured about 30% faster per step on a 3090; it needs
|
|
32
|
+
the `kernels` package and `DIFFUSERS_TRUST_REMOTE_KERNELS=true`, see
|
|
33
|
+
docs/ACCELERATION.md). LTX-2.5 cannot use sage attention (its attention
|
|
34
|
+
mask is refused).
|
|
35
|
+
- A LoRA `scale`/`alpha` change or a scheduler `shift` change re-applies on
|
|
36
|
+
the warm pipeline instead of reloading it. Removing an alpha or shift still
|
|
37
|
+
reloads, and a `pipeline_reference` runs at the referenced step's own values.
|
|
38
|
+
- Switching workflows in the worker keeps the warm pipelines the next
|
|
39
|
+
workflow loads anyway, instead of releasing everything first.
|
|
40
|
+
- `restore_faces` builds its face helper once per run instead of once per
|
|
41
|
+
frame, and picture frames decode with libav threading, so video inputs
|
|
42
|
+
process faster.
|
|
43
|
+
- Catalog defaults corrected: compose-workflows video steps run 5 steps
|
|
44
|
+
(was 20) and the prompt-weighting schnell workflow runs 4 steps at guidance
|
|
45
|
+
0 (was 20).
|
|
46
|
+
- The six 9-step minimax ref2va templates drop a dead `first_block` cache,
|
|
47
|
+
and minimax/shots-batch drops its `release_pipeline`: a no-op inside the
|
|
48
|
+
run, but it unloaded H3 at job end, so H3 now stays resident after a
|
|
49
|
+
shots-batch job, which is the win.
|
|
50
|
+
|
|
10
51
|
### 0.11.0
|
|
11
52
|
|
|
12
53
|
<!-- Drafted from v0.10.0..develop. Paste into the GitHub release body once the tag has published: gh release edit v0.11.0 --notes-file ... -->
|
|
@@ -222,7 +222,9 @@ Among the free cards a job fits, dispatch prefers the one it has an affinity
|
|
|
222
222
|
for: a rerun goes to the card that ran the original, and any job to the card
|
|
223
223
|
whose worker last ran the same workflow (the same file, or an inline
|
|
224
224
|
definition's `id`) - that worker's pipelines and step cache are warm, and a
|
|
225
|
-
worker
|
|
225
|
+
worker's step cache and any model the next workflow does not load are freed
|
|
226
|
+
when the workflow changes, while a model both workflows load (same weights
|
|
227
|
+
identity) stays warm. `clear_memory` still empties the card by hand. A busy preferred card is not
|
|
226
228
|
waited for. A validation's cache probe and its `plan.estimate` ask about the
|
|
227
229
|
card the job would be dispatched to now, and the estimate names it in
|
|
228
230
|
`priced_for`. Memory is per card: `GET /api/memory` and `POST
|
|
@@ -2632,7 +2632,7 @@ Restore and enhance faces in images using spandrel-compatible face restoration m
|
|
|
2632
2632
|
| `eye_dist_threshold` | No | Skip faces with eye distance below this (default: 5) |
|
|
2633
2633
|
| `upsample_img` | No | Pre-upscaled background image (e.g., from a prior upscale step) |
|
|
2634
2634
|
|
|
2635
|
-
Models are loaded via spandrel, so any `.pth`/`.safetensors` face restoration weights work. CodeFormer requires `pip install spandrel-extra-arches` (non-commercial license).
|
|
2635
|
+
Models are loaded via spandrel, so any `.pth`/`.safetensors` face restoration weights work. CodeFormer requires `pip install spandrel-extra-arches` (non-commercial license). The detector and parser are loaded once per settings/device and reused across frames; `release_models` drops them with the restorer.
|
|
2636
2636
|
|
|
2637
2637
|
**Example:** [restore-faces.json](../workflows/templates/restore-faces.json) — Generate a portrait, then restore faces with GFPGAN v1.4.
|
|
2638
2638
|
|
|
@@ -28,6 +28,13 @@ The worker cleans up automatically between runs (garbage collection + GPU
|
|
|
28
28
|
cache clearing). If memory grows unexpectedly, `GET /api/memory` reports the
|
|
29
29
|
current reading and `POST /api/memory/clear` resets it.
|
|
30
30
|
|
|
31
|
+
Switching to a different workflow releases only the models the next workflow
|
|
32
|
+
does not load: the worker prepares the incoming definition, and a pipeline
|
|
33
|
+
both workflows load (same weights identity) stays warm. The step cache and
|
|
34
|
+
the task model cache are still emptied, and if the incoming definition cannot
|
|
35
|
+
be prepared everything is released. `clear_memory` (`POST /api/memory/clear`)
|
|
36
|
+
remains the way to empty the card by hand.
|
|
37
|
+
|
|
31
38
|
## Troubleshooting
|
|
32
39
|
|
|
33
40
|
**Worker crashes**: `JobManager` detects it and starts a fresh worker on the
|
|
@@ -112,6 +112,10 @@ inverted latents:
|
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
`reference_name` must name a step earlier in the same workflow that has a `pipeline`.
|
|
115
|
+
Two steps whose pipelines differ only in a LoRA's `scale` or `alpha` or a scheduler's
|
|
116
|
+
`shift` share one warm model, and a reference always runs at the referenced step's own
|
|
117
|
+
values; `release_pipeline` on either step frees the shared model, as it does for two
|
|
118
|
+
identical steps.
|
|
115
119
|
See [workflows/templates/community-pipeline.json](../workflows/templates/community-pipeline.json) for a full example.
|
|
116
120
|
|
|
117
121
|
### Task Steps
|
|
@@ -1173,7 +1177,7 @@ Control how models use memory:
|
|
|
1173
1177
|
```
|
|
1174
1178
|
|
|
1175
1179
|
- `"model"` — Moves entire models between CPU and GPU. Good balance of speed and memory.
|
|
1176
|
-
- `"sequential"` — Moves individual layers. Slowest but uses least GPU memory. On MPS it is downgraded to `"model"` with a warning: with unified memory there is no separate pool to keep small, so the per-layer copies cost speed and save nothing.
|
|
1180
|
+
- `"sequential"` — Moves individual layers. Slowest but uses least GPU memory (measured at 6x the per-step cost of model offload on FLUX dev and 3.4x on Z-Image; a streamed block-level `group_offload` of the transformer is the usual better answer - see [RECIPES_24GB.md](RECIPES_24GB.md#flux-dev-12b)). On MPS it is downgraded to `"model"` with a warning: with unified memory there is no separate pool to keep small, so the per-layer copies cost speed and save nothing.
|
|
1177
1181
|
`exclude_from_cpu_offload` names components the sweep should leave alone.
|
|
1178
1182
|
- Omit for no offloading (fastest, requires enough VRAM).
|
|
1179
1183
|
|
|
@@ -1325,6 +1329,13 @@ The step-level `release_pipeline` flag unloads the step's pipeline after its res
|
|
|
1325
1329
|
saved. A later `pipeline_reference` to a released step is an error, and the process-wide
|
|
1326
1330
|
step cache will not retain it.
|
|
1327
1331
|
|
|
1332
|
+
What keeps a pipeline warm: the server's worker keeps a pipeline loaded across runs for as
|
|
1333
|
+
long as what it *loads* is unchanged. A LoRA's `scale` and `alpha` and a scheduler's (or
|
|
1334
|
+
`audio_scheduler`'s) `shift` are applied in place on the warm pipeline, so iterating on
|
|
1335
|
+
them costs no reload; removing (nulling) an alpha or a shift reloads, so the checkpoint
|
|
1336
|
+
default comes back. Changing a LoRA's `model_name` or `weight_name`, the quantization,
|
|
1337
|
+
the placement or the scheduler type reloads it.
|
|
1338
|
+
|
|
1328
1339
|
#### Releasing task models mid-workflow
|
|
1329
1340
|
|
|
1330
1341
|
Task models - the checkpoints behind `text_generation`, `segment`, `depth_estimator` and
|
|
@@ -33,6 +33,15 @@ from .dsp import SILENCE_DBFS, dbfs, integrated_lufs, layout_name, true_peak_dbf
|
|
|
33
33
|
|
|
34
34
|
logger = logging.getLogger("dw")
|
|
35
35
|
|
|
36
|
+
|
|
37
|
+
def _threaded(stream):
|
|
38
|
+
"""A video stream set to decode on every core. libav defaults a
|
|
39
|
+
software h264 decode to one thread; AUTO lets it pick frame and
|
|
40
|
+
slice threading for the codec. Header-only reads do not call this."""
|
|
41
|
+
stream.thread_type = "AUTO"
|
|
42
|
+
return stream
|
|
43
|
+
|
|
44
|
+
|
|
36
45
|
# The most a soundtrack may be as base64 before the gallery route refuses to
|
|
37
46
|
# extract it whole - the twin of dw_mcp/media.py's MAX_RETURNED_BYTES (the
|
|
38
47
|
# MCP package's cap on any inline payload). Two constants because dw_mcp
|
|
@@ -345,7 +354,7 @@ def video_shape(path):
|
|
|
345
354
|
fps = float(stream.average_rate) if stream.average_rate else None
|
|
346
355
|
count = int(stream.frames) if stream.frames else None
|
|
347
356
|
if count is None:
|
|
348
|
-
count = sum(1 for _ in container.decode(stream))
|
|
357
|
+
count = sum(1 for _ in container.decode(_threaded(stream)))
|
|
349
358
|
return {
|
|
350
359
|
"frame_count": count,
|
|
351
360
|
"fps": fps,
|
|
@@ -383,6 +392,8 @@ def read_frames(path, indexes, fit=None):
|
|
|
383
392
|
wanted = sorted(set(int(i) for i in indexes))
|
|
384
393
|
found = {}
|
|
385
394
|
with av.open(path) as container:
|
|
395
|
+
# Not _threaded: frame threads hold frames in flight, and a backward
|
|
396
|
+
# seek after a decoded frame then yields stale ones (tests/test_media_decode_threads.py)
|
|
386
397
|
stream = container.streams.video[0]
|
|
387
398
|
fps = float(stream.average_rate) if stream.average_rate else None
|
|
388
399
|
start_pts = stream.start_time if stream.start_time is not None else 0
|
|
@@ -479,6 +490,8 @@ def read_frame_range(path, start, stop):
|
|
|
479
490
|
)
|
|
480
491
|
out = None
|
|
481
492
|
with av.open(path) as container:
|
|
493
|
+
# Not _threaded: frame threads hold frames in flight, and a backward
|
|
494
|
+
# seek after a decoded frame then yields stale ones (tests/test_media_decode_threads.py)
|
|
482
495
|
stream = container.streams.video[0]
|
|
483
496
|
fps = float(stream.average_rate) if stream.average_rate else None
|
|
484
497
|
start_pts = stream.start_time if stream.start_time is not None else 0
|
|
@@ -513,7 +526,7 @@ def count_video_frames(path):
|
|
|
513
526
|
"""The picture frame count of `path`, by decoding every frame rather
|
|
514
527
|
than reading the header. Nothing is held but the frame in hand."""
|
|
515
528
|
with av.open(path) as container:
|
|
516
|
-
return sum(1 for _ in container.decode(container.streams.video[0]))
|
|
529
|
+
return sum(1 for _ in container.decode(_threaded(container.streams.video[0])))
|
|
517
530
|
|
|
518
531
|
|
|
519
532
|
def decode_audio_video(handle):
|
|
@@ -531,7 +544,7 @@ def decode_audio_video(handle):
|
|
|
531
544
|
sample_rate = None
|
|
532
545
|
|
|
533
546
|
with av.open(handle) as container:
|
|
534
|
-
video_stream = container.streams.video[0]
|
|
547
|
+
video_stream = _threaded(container.streams.video[0])
|
|
535
548
|
frame_rate = (
|
|
536
549
|
float(video_stream.average_rate) if video_stream.average_rate else None
|
|
537
550
|
)
|
|
@@ -559,7 +572,10 @@ def decode_rgb_frames(path):
|
|
|
559
572
|
"""Every picture frame of `path` as an (height, width, 3) uint8 array,
|
|
560
573
|
in order."""
|
|
561
574
|
with av.open(path) as container:
|
|
562
|
-
return [
|
|
575
|
+
return [
|
|
576
|
+
frame.to_ndarray(format="rgb24")
|
|
577
|
+
for frame in container.decode(_threaded(container.streams.video[0]))
|
|
578
|
+
]
|
|
563
579
|
|
|
564
580
|
|
|
565
581
|
def read_thumbnails_and_track(path, thumb_width, thumb_height):
|
|
@@ -575,7 +591,9 @@ def read_thumbnails_and_track(path, thumb_width, thumb_height):
|
|
|
575
591
|
thumbs = []
|
|
576
592
|
chunks = []
|
|
577
593
|
with av.open(path) as container:
|
|
578
|
-
video =
|
|
594
|
+
video = (
|
|
595
|
+
_threaded(container.streams.video[0]) if container.streams.video else None
|
|
596
|
+
)
|
|
579
597
|
audio = container.streams.audio[0] if container.streams.audio else None
|
|
580
598
|
if video is None and audio is None:
|
|
581
599
|
raise ValueError(f"{path} has neither a video nor an audio stream")
|
|
@@ -62,6 +62,11 @@ class PipelineOwnership:
|
|
|
62
62
|
# pipeline_reference still address pipelines by the step that made
|
|
63
63
|
# them
|
|
64
64
|
self.keys_by_step = {}
|
|
65
|
+
# Step name -> the step's pipeline definition as the workflow holds
|
|
66
|
+
# it (never a loading copy), so a pipeline_reference can put the
|
|
67
|
+
# referenced step's own scale, alpha and shift back on a model a
|
|
68
|
+
# step differing only in those shares with it
|
|
69
|
+
self.definitions_by_step = {}
|
|
65
70
|
# Step name -> _Deferred for each cache hit whose pipeline was not
|
|
66
71
|
# resident and so was not loaded
|
|
67
72
|
self.deferred = {}
|
|
@@ -92,9 +97,16 @@ class PipelineOwnership:
|
|
|
92
97
|
)
|
|
93
98
|
return self.running[step_name]
|
|
94
99
|
|
|
95
|
-
def record(self, step_name, key):
|
|
96
|
-
"""Record which cache key a step's pipeline lives under this run
|
|
100
|
+
def record(self, step_name, key, pipeline_definition=None):
|
|
101
|
+
"""Record which cache key a step's pipeline lives under this run,
|
|
102
|
+
and the definition it was loaded or wrapped from."""
|
|
97
103
|
self.keys_by_step[step_name] = key
|
|
104
|
+
if pipeline_definition is not None:
|
|
105
|
+
self.definitions_by_step[step_name] = pipeline_definition
|
|
106
|
+
|
|
107
|
+
def definition_for(self, step_name):
|
|
108
|
+
"""The pipeline definition `step_name` recorded this run, or None."""
|
|
109
|
+
return self.definitions_by_step.get(step_name)
|
|
98
110
|
|
|
99
111
|
def key_for(self, step_name):
|
|
100
112
|
"""The cache key `step_name` recorded this run, or None."""
|
|
@@ -286,6 +298,10 @@ def wrap_resident(
|
|
|
286
298
|
new_pipeline_wrapper.pipeline_definition.get("seed", default_seed)
|
|
287
299
|
)
|
|
288
300
|
|
|
301
|
+
# The key the hit matched on is the weights identity: a scale, alpha or
|
|
302
|
+
# shift may differ from the values the resident model last ran with
|
|
303
|
+
new_pipeline_wrapper.apply_runtime_settings()
|
|
304
|
+
|
|
289
305
|
# A cache hit and a cold load look identical from the outside -
|
|
290
306
|
# same step, same dot - and they differ by minutes
|
|
291
307
|
emit_phase("cached", detail=new_pipeline_wrapper.name)
|
|
@@ -101,11 +101,103 @@ def active_loras(loras):
|
|
|
101
101
|
]
|
|
102
102
|
|
|
103
103
|
|
|
104
|
+
def adapter_settings(loras):
|
|
105
|
+
"""(adapter_names, adapter_weights, alphas) for the active entries of
|
|
106
|
+
`loras`. An adapter is named by its own adapter_name or its ORIGINAL
|
|
107
|
+
index - a nulled entry keeps its slot, so the name a hit re-applies to
|
|
108
|
+
is the name the load gave. Reads the entries, never pops them.
|
|
109
|
+
|
|
110
|
+
`or` on adapter_name, because a variable nulled by the caller arrives as
|
|
111
|
+
a present None; float() on scale, because the schema takes a 'variable:'
|
|
112
|
+
reference there, and a variable declared as a string default substitutes
|
|
113
|
+
as one."""
|
|
114
|
+
names, weights, alphas = [], [], {}
|
|
115
|
+
for i, lora in enumerate(loras or []):
|
|
116
|
+
if not isinstance(lora, dict) or lora.get("model_name") is None:
|
|
117
|
+
continue
|
|
118
|
+
name = lora.get("adapter_name") or str(i)
|
|
119
|
+
names.append(name)
|
|
120
|
+
scale = lora.get("scale")
|
|
121
|
+
weights.append(1.0 if scale is None else float(scale))
|
|
122
|
+
if lora.get("alpha") is not None:
|
|
123
|
+
alphas[name] = lora["alpha"]
|
|
124
|
+
return names, weights, alphas
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def set_adapter_scales(pipeline, names, weights):
|
|
128
|
+
"""Set each named adapter's scale on every loaded layer that carries it,
|
|
129
|
+
without re-activating the adapters.
|
|
130
|
+
|
|
131
|
+
The warm-pipeline path. diffusers' set_adapters() activates as well as
|
|
132
|
+
scales, and activation goes through peft's set_adapter(), which sets
|
|
133
|
+
requires_grad on the adapter weights - after a run under model offload
|
|
134
|
+
those are inference tensors, and torch refuses ("Setting requires_grad=True
|
|
135
|
+
on inference tensor outside InferenceMode" - seen on a 3090 the first time
|
|
136
|
+
a scale changed on a warm Flux pipeline, 2026-10-10).
|
|
137
|
+
A pipeline that already ran holds the adapters active, so a hit only
|
|
138
|
+
needs each layer's set_scale(), which recomputes scale * alpha / rank and
|
|
139
|
+
touches no tensor.
|
|
140
|
+
|
|
141
|
+
Raises:
|
|
142
|
+
ValueError: if an adapter is carried by no loaded layer - a scale
|
|
143
|
+
that applied to nothing would silently run the old value
|
|
144
|
+
"""
|
|
145
|
+
touched = {name: 0 for name in names}
|
|
146
|
+
for module in _lora_layers(pipeline):
|
|
147
|
+
scaling = getattr(module, "scaling", None)
|
|
148
|
+
if not isinstance(scaling, dict):
|
|
149
|
+
continue
|
|
150
|
+
for name, weight in zip(names, weights):
|
|
151
|
+
if name in scaling:
|
|
152
|
+
module.set_scale(name, weight)
|
|
153
|
+
touched[name] += 1
|
|
154
|
+
missing = [name for name, count in touched.items() if not count]
|
|
155
|
+
if missing:
|
|
156
|
+
raise ValueError(
|
|
157
|
+
f"Cannot set the scale of adapter(s) {missing} - no loaded layer "
|
|
158
|
+
"carries them. Nothing would have been scaled."
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def apply_adapter_settings(loras, pipeline, activate=False):
|
|
163
|
+
"""Set each active LoRA's alpha, then every scale, on a pipeline that
|
|
164
|
+
already holds the adapters. Alpha first: the scale pass is what recomputes
|
|
165
|
+
each layer's scaling from it. No-op with no active entry.
|
|
166
|
+
|
|
167
|
+
`activate` is the cold path, right after load_lora_weights: diffusers'
|
|
168
|
+
set_adapters() activates the adapters and sets their scales in one call.
|
|
169
|
+
A warm pipeline (a cache hit) has them active already and takes the
|
|
170
|
+
scale-only path - see set_adapter_scales for why it must.
|
|
171
|
+
"""
|
|
172
|
+
names, weights, alphas = adapter_settings(loras)
|
|
173
|
+
if not names:
|
|
174
|
+
return
|
|
175
|
+
for name, alpha in alphas.items():
|
|
176
|
+
set_adapter_alpha(pipeline, name, alpha)
|
|
177
|
+
logger.info(f"Setting adapter weights: {list(zip(names, weights))}")
|
|
178
|
+
if activate:
|
|
179
|
+
# Positionally - diffusers' mixin calls the second parameter
|
|
180
|
+
# 'adapter_weights' while custom pipelines that delegate to the model
|
|
181
|
+
# (ostris/Krea2OstrisEdit) call it 'weights'
|
|
182
|
+
pipeline.set_adapters(names, weights)
|
|
183
|
+
else:
|
|
184
|
+
set_adapter_scales(pipeline, names, weights)
|
|
185
|
+
|
|
186
|
+
|
|
104
187
|
def load_loras(loras, pipeline):
|
|
105
|
-
"""Load and configure LoRA models.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
188
|
+
"""Load and configure LoRA models.
|
|
189
|
+
|
|
190
|
+
Names, scales and alphas come from adapter_settings, read before the
|
|
191
|
+
entries are popped, so a load and a later cache hit's
|
|
192
|
+
apply_adapter_settings set the same values on the same names."""
|
|
193
|
+
# A snapshot of each entry's runtime keys, taken before the pops below
|
|
194
|
+
settings = [
|
|
195
|
+
{k: lora.get(k) for k in ("model_name", "adapter_name", "scale", "alpha")}
|
|
196
|
+
if isinstance(lora, dict)
|
|
197
|
+
else lora
|
|
198
|
+
for lora in loras or []
|
|
199
|
+
]
|
|
200
|
+
names = iter(adapter_settings(settings)[0])
|
|
109
201
|
|
|
110
202
|
for i, lora in enumerate(loras or []):
|
|
111
203
|
if isinstance(lora, dict) and lora.get("model_name") is None:
|
|
@@ -117,40 +209,15 @@ def load_loras(loras, pipeline):
|
|
|
117
209
|
logger.info(f"Loading LoRA: {model_name}")
|
|
118
210
|
emit_phase("loading", detail=f"LoRA: {model_name}")
|
|
119
211
|
|
|
120
|
-
#
|
|
121
|
-
#
|
|
122
|
-
|
|
123
|
-
|
|
212
|
+
# Popped before the load: everything left in the dict is a keyword
|
|
213
|
+
# argument to load_lora_weights; the scale and alpha are applied to
|
|
214
|
+
# the layers afterwards rather than passed to it
|
|
215
|
+
for key in ("adapter_name", "scale", "alpha"):
|
|
216
|
+
lora.pop(key, None)
|
|
124
217
|
|
|
125
|
-
|
|
126
|
-
# 'variable:' reference here, and a variable declared as a string default
|
|
127
|
-
# substitutes as one
|
|
128
|
-
scale = lora.pop("scale", None)
|
|
129
|
-
scale = 1.0 if scale is None else float(scale)
|
|
130
|
-
adapter_weights.append(scale)
|
|
218
|
+
pipeline.load_lora_weights(model_name, adapter_name=next(names), **lora)
|
|
131
219
|
|
|
132
|
-
|
|
133
|
-
# argument to load_lora_weights, and the alpha is applied to the layers
|
|
134
|
-
# afterwards rather than passed to it
|
|
135
|
-
alpha = lora.pop("alpha", None)
|
|
136
|
-
if alpha is not None:
|
|
137
|
-
alphas[adapter_name] = alpha
|
|
138
|
-
|
|
139
|
-
# Load the LoRA with the adapter name
|
|
140
|
-
pipeline.load_lora_weights(model_name, adapter_name=adapter_name, **lora)
|
|
141
|
-
|
|
142
|
-
for adapter_name, alpha in alphas.items():
|
|
143
|
-
set_adapter_alpha(pipeline, adapter_name, alpha)
|
|
144
|
-
|
|
145
|
-
# Set adapter weights for all loaded LoRAs
|
|
146
|
-
if adapter_names:
|
|
147
|
-
logger.info(
|
|
148
|
-
f"Setting adapter weights: {list(zip(adapter_names, adapter_weights))}"
|
|
149
|
-
)
|
|
150
|
-
# Positionally - diffusers' mixin calls the second parameter 'adapter_weights'
|
|
151
|
-
# while custom pipelines that delegate to the model (ostris/Krea2OstrisEdit)
|
|
152
|
-
# call it 'weights'
|
|
153
|
-
pipeline.set_adapters(adapter_names, adapter_weights)
|
|
220
|
+
apply_adapter_settings(settings, pipeline, activate=True)
|
|
154
221
|
|
|
155
222
|
|
|
156
223
|
def load_ip_adapter(ip_adapter_definition, pipeline):
|
{diffusers_workflow-0.11.0 → diffusers_workflow-0.11.1}/dw/pipeline_processors/components.py
RENAMED
|
@@ -447,6 +447,23 @@ def load_and_configure_scheduler(
|
|
|
447
447
|
),
|
|
448
448
|
)
|
|
449
449
|
|
|
450
|
+
apply_scheduler_shift(scheduler_definition, pipeline, component_name)
|
|
451
|
+
|
|
452
|
+
|
|
453
|
+
def apply_scheduler_shift(scheduler_definition, pipeline, component_name="scheduler"):
|
|
454
|
+
"""Set the shift a scheduler definition names on an already-loaded
|
|
455
|
+
scheduler; nothing when the definition is None or names no shift.
|
|
456
|
+
|
|
457
|
+
A load sets it after any scheduler replacement, and a pipeline cache hit
|
|
458
|
+
sets it again (Pipeline.apply_runtime_settings), because the cache key
|
|
459
|
+
leaves the shift out - a run that only moves it reuses the warm pipeline.
|
|
460
|
+
|
|
461
|
+
Raises:
|
|
462
|
+
ValueError: if the scheduler is registered but not loaded, or has no
|
|
463
|
+
set_shift()
|
|
464
|
+
"""
|
|
465
|
+
if scheduler_definition is None:
|
|
466
|
+
return
|
|
450
467
|
shift = scheduler_definition.get("shift", None)
|
|
451
468
|
if shift is None:
|
|
452
469
|
return
|