diffusers-workflow 0.4.0a3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- diffusers_workflow-0.4.0a3.dist-info/METADATA +310 -0
- diffusers_workflow-0.4.0a3.dist-info/RECORD +171 -0
- diffusers_workflow-0.4.0a3.dist-info/WHEEL +5 -0
- diffusers_workflow-0.4.0a3.dist-info/entry_points.txt +6 -0
- diffusers_workflow-0.4.0a3.dist-info/licenses/LICENSE +201 -0
- diffusers_workflow-0.4.0a3.dist-info/top_level.txt +1 -0
- dw/__init__.py +353 -0
- dw/arguments.py +906 -0
- dw/cache_blocks.json +16 -0
- dw/cache_blocks.py +145 -0
- dw/community_pipelines/pipeline_flux_rf_inversion.py +1184 -0
- dw/events.py +78 -0
- dw/hub_cache.py +289 -0
- dw/introspection.py +458 -0
- dw/log_setup.py +45 -0
- dw/pipeline_processors/chain.py +750 -0
- dw/pipeline_processors/config_objects.py +235 -0
- dw/pipeline_processors/pipeline.py +1687 -0
- dw/pipeline_processors/remote.py +18 -0
- dw/previous_results.py +259 -0
- dw/prompt_weighting.py +378 -0
- dw/repl.py +298 -0
- dw/repl_commands.py +808 -0
- dw/repl_worker.py +129 -0
- dw/result.py +850 -0
- dw/run.py +92 -0
- dw/schema.py +24 -0
- dw/security.py +379 -0
- dw/serve.py +70 -0
- dw/server/__init__.py +2 -0
- dw/server/app.py +588 -0
- dw/server/jobs.py +547 -0
- dw/server/ui/assets/abap-08VXUWAP.js +1 -0
- dw/server/ui/assets/apex-BWPQTe0t.js +1 -0
- dw/server/ui/assets/azcli-Bc_sGQ0U.js +1 -0
- dw/server/ui/assets/bat-i0X4ZdIN.js +1 -0
- dw/server/ui/assets/bicep-B5-_aFwp.js +2 -0
- dw/server/ui/assets/cameligo-DMUM7wLl.js +1 -0
- dw/server/ui/assets/clojure-Cm7r79vr.js +1 -0
- dw/server/ui/assets/codicon-Brq4_Ui5.ttf +0 -0
- dw/server/ui/assets/coffee-Ba7i2nA0.js +1 -0
- dw/server/ui/assets/cpp-C7h46wYY.js +1 -0
- dw/server/ui/assets/csharp-BKxtCVv1.js +1 -0
- dw/server/ui/assets/csp-bTuwJoIa.js +1 -0
- dw/server/ui/assets/css-DIMkf-bt.js +3 -0
- dw/server/ui/assets/css.worker-B3ciXF_0.js +93 -0
- dw/server/ui/assets/cssMode-CEh6hWi2.js +1 -0
- dw/server/ui/assets/cypher-CVaqCwHa.js +1 -0
- dw/server/ui/assets/dart-onAF5SnQ.js +1 -0
- dw/server/ui/assets/dockerfile-DZFCIeNp.js +1 -0
- dw/server/ui/assets/ecl-D05T4iGw.js +1 -0
- dw/server/ui/assets/editor-jjEx9u7D.css +1 -0
- dw/server/ui/assets/editor.api-CExg3_mM.js +847 -0
- dw/server/ui/assets/editor.worker-q-txB4vs.js +30 -0
- dw/server/ui/assets/elixir-6RTg0lbw.js +1 -0
- dw/server/ui/assets/flow9-C5_-GSwl.js +1 -0
- dw/server/ui/assets/freemarker2-DH6orYh2.js +3 -0
- dw/server/ui/assets/fsharp-C8Ef5oNN.js +1 -0
- dw/server/ui/assets/go-C-y9NEjX.js +1 -0
- dw/server/ui/assets/graphql-fmXr3nnJ.js +1 -0
- dw/server/ui/assets/handlebars-CbrMVW4Q.js +1 -0
- dw/server/ui/assets/hcl-CpzslTdj.js +1 -0
- dw/server/ui/assets/html-YDNPZw2M.js +1 -0
- dw/server/ui/assets/html.worker-C93Ht9o9.js +506 -0
- dw/server/ui/assets/htmlMode-B_zSGWO2.js +1 -0
- dw/server/ui/assets/index-B7-VcYS-.css +1 -0
- dw/server/ui/assets/index-D_EiPU3b.js +13 -0
- dw/server/ui/assets/ini-sBoK_t0W.js +1 -0
- dw/server/ui/assets/java-BEtHBSE6.js +1 -0
- dw/server/ui/assets/javascript-dYuBvioq.js +1 -0
- dw/server/ui/assets/json.worker-B2V3pomh.js +62 -0
- dw/server/ui/assets/jsonMode-CUqLM39V.js +7 -0
- dw/server/ui/assets/julia-Bri6UV-V.js +1 -0
- dw/server/ui/assets/kotlin-BOotOW0E.js +1 -0
- dw/server/ui/assets/less-B9JPFI3C.js +2 -0
- dw/server/ui/assets/lexon-CfSJPG6W.js +1 -0
- dw/server/ui/assets/liquid-D6vxBzMv.js +1 -0
- dw/server/ui/assets/lspLanguageFeatures-1WJ2palX.js +4 -0
- dw/server/ui/assets/lua-CsQS60Ue.js +1 -0
- dw/server/ui/assets/m3-D-oSqn_W.js +1 -0
- dw/server/ui/assets/markdown-Cimd5fb3.js +1 -0
- dw/server/ui/assets/mdx-SHQb6vmD.js +1 -0
- dw/server/ui/assets/mips-CIPQ_RoX.js +1 -0
- dw/server/ui/assets/monaco--ixms01u.css +1 -0
- dw/server/ui/assets/monaco-CP-s5rcP.js +56 -0
- dw/server/ui/assets/msdax-DauUninz.js +1 -0
- dw/server/ui/assets/mysql-SOo6toE5.js +1 -0
- dw/server/ui/assets/objective-c-FvmIjYaQ.js +1 -0
- dw/server/ui/assets/pascal-DrH0SRf2.js +1 -0
- dw/server/ui/assets/pascaligo-D-ptJ9y-.js +1 -0
- dw/server/ui/assets/perl-oz_6vUea.js +1 -0
- dw/server/ui/assets/pgsql-DTj74zXo.js +1 -0
- dw/server/ui/assets/php-nr791fC2.js +1 -0
- dw/server/ui/assets/pla-CopQ2nXW.js +1 -0
- dw/server/ui/assets/postiats-43DmfD33.js +1 -0
- dw/server/ui/assets/powerquery-D3hlyOfw.js +1 -0
- dw/server/ui/assets/powershell-DmHpPYUd.js +1 -0
- dw/server/ui/assets/protobuf-C531GsRP.js +2 -0
- dw/server/ui/assets/pug-Z5eAx3Zn.js +1 -0
- dw/server/ui/assets/python-x0_EGHq9.js +1 -0
- dw/server/ui/assets/qsharp-DkqhCAOL.js +1 -0
- dw/server/ui/assets/r-BwWrilGY.js +1 -0
- dw/server/ui/assets/razor-BZC4LQDP.js +1 -0
- dw/server/ui/assets/redis-ClamHrr6.js +1 -0
- dw/server/ui/assets/redshift-DT7zqm-g.js +1 -0
- dw/server/ui/assets/restructuredtext-BYgofb2h.js +1 -0
- dw/server/ui/assets/ruby-DezsRK8O.js +1 -0
- dw/server/ui/assets/rust-DdL9SqIa.js +1 -0
- dw/server/ui/assets/sb-CcwsVR0C.js +1 -0
- dw/server/ui/assets/scala-DHpiXF5c.js +1 -0
- dw/server/ui/assets/scheme-BeGwcela.js +1 -0
- dw/server/ui/assets/scss-gp-XZpBa.js +3 -0
- dw/server/ui/assets/shell-CC2rA5mh.js +1 -0
- dw/server/ui/assets/solidity-BEEn4gHE.js +1 -0
- dw/server/ui/assets/sophia-CRfGWb83.js +1 -0
- dw/server/ui/assets/sparql-D_Lu-MrJ.js +1 -0
- dw/server/ui/assets/sql-NEE52Syq.js +1 -0
- dw/server/ui/assets/st-DbInun42.js +1 -0
- dw/server/ui/assets/swift-Bxkupp3x.js +1 -0
- dw/server/ui/assets/systemverilog-Bz4Y3fRF.js +1 -0
- dw/server/ui/assets/tcl-DISqw1ZD.js +1 -0
- dw/server/ui/assets/ts.worker-D7T1-Ig5.js +67738 -0
- dw/server/ui/assets/tsMode-BTfA6SbD.js +11 -0
- dw/server/ui/assets/twig-De2hgUGE.js +1 -0
- dw/server/ui/assets/typescript-CWA4MsNk.js +1 -0
- dw/server/ui/assets/typespec-B8J7ngcE.js +1 -0
- dw/server/ui/assets/vb-DV3o63ZY.js +1 -0
- dw/server/ui/assets/wgsl-DpFanUEy.js +298 -0
- dw/server/ui/assets/workers-CWU0uvj5.js +1 -0
- dw/server/ui/assets/xml-KmfTm3rg.js +1 -0
- dw/server/ui/assets/yaml-nFO_dDS6.js +1 -0
- dw/server/ui/index.html +17 -0
- dw/settings.py +77 -0
- dw/step.py +132 -0
- dw/tasks/audio_utils.py +266 -0
- dw/tasks/background_remover.py +43 -0
- dw/tasks/borders.py +113 -0
- dw/tasks/concat_videos.py +80 -0
- dw/tasks/depth_estimator.py +54 -0
- dw/tasks/diffusion_upscale.py +109 -0
- dw/tasks/format_messages.py +24 -0
- dw/tasks/gather.py +139 -0
- dw/tasks/image_to_text.py +43 -0
- dw/tasks/image_utils.py +661 -0
- dw/tasks/interpolate_frames.py +227 -0
- dw/tasks/model_cache.py +39 -0
- dw/tasks/pair_audio.py +58 -0
- dw/tasks/qr_code.py +19 -0
- dw/tasks/restore_faces.py +175 -0
- dw/tasks/rife_model.py +192 -0
- dw/tasks/segment.py +121 -0
- dw/tasks/task.py +474 -0
- dw/tasks/tensor_image.py +57 -0
- dw/tasks/text_generation.py +168 -0
- dw/tasks/text_sections.py +80 -0
- dw/tasks/upscale.py +203 -0
- dw/tasks/video_utils.py +154 -0
- dw/tasks/zoe_depth.py +71 -0
- dw/teacache.py +376 -0
- dw/teacache_models.json +99 -0
- dw/test.py +29 -0
- dw/type_helpers.py +68 -0
- dw/validate.py +43 -0
- dw/variables.py +153 -0
- dw/worker.py +517 -0
- dw/workflow.py +553 -0
- dw/workflow_schema.json +1157 -0
- dw/workflows/augment_prompt.json +65 -0
- dw/workflows/describe_image.json +58 -0
- dw/workflows/h3_context_ir.json +57 -0
- dw/workflows/test.json +31 -0
dw/tasks/gather.py
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import glob as glob_lib
|
|
2
|
+
import logging
|
|
3
|
+
from diffusers.utils import load_image, load_video
|
|
4
|
+
from ..arguments import fetch_image, fetch_video
|
|
5
|
+
from ..security import validate_url, SecurityError
|
|
6
|
+
|
|
7
|
+
logger = logging.getLogger("dw")
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def gather_images(glob=None, urls=None):
|
|
11
|
+
"""
|
|
12
|
+
Gather images from local files and/or URLs.
|
|
13
|
+
|
|
14
|
+
Args:
|
|
15
|
+
glob: Pattern for matching local image files (e.g., "images/*.png")
|
|
16
|
+
urls: List of URLs to download images from
|
|
17
|
+
|
|
18
|
+
Returns:
|
|
19
|
+
List of loaded images
|
|
20
|
+
|
|
21
|
+
Raises:
|
|
22
|
+
ValueError: If no images are found
|
|
23
|
+
SecurityError: If validation fails
|
|
24
|
+
"""
|
|
25
|
+
if urls is None:
|
|
26
|
+
urls = []
|
|
27
|
+
images = []
|
|
28
|
+
|
|
29
|
+
# Load local images matching glob pattern
|
|
30
|
+
if glob is not None:
|
|
31
|
+
logger.debug(f"Searching for images matching pattern: {glob}")
|
|
32
|
+
image_paths = glob_lib.glob(glob)
|
|
33
|
+
logger.info(f"Found {len(image_paths)} local images")
|
|
34
|
+
|
|
35
|
+
for path in image_paths:
|
|
36
|
+
try:
|
|
37
|
+
logger.debug(f"Loading image from: {path}")
|
|
38
|
+
images.append(fetch_image(path))
|
|
39
|
+
except SecurityError:
|
|
40
|
+
raise
|
|
41
|
+
except Exception as e:
|
|
42
|
+
logger.error(
|
|
43
|
+
f"Failed to load image from {path}: {str(e)}", exc_info=True
|
|
44
|
+
)
|
|
45
|
+
raise
|
|
46
|
+
|
|
47
|
+
# Load images from URLs
|
|
48
|
+
for url in urls:
|
|
49
|
+
try:
|
|
50
|
+
logger.debug(f"Loading image from URL: {url}")
|
|
51
|
+
validated_url = validate_url(url)
|
|
52
|
+
images.append(load_image(validated_url))
|
|
53
|
+
except SecurityError:
|
|
54
|
+
raise
|
|
55
|
+
except Exception as e:
|
|
56
|
+
logger.error(
|
|
57
|
+
f"Failed to load image from URL {url}: {str(e)}", exc_info=True
|
|
58
|
+
)
|
|
59
|
+
raise
|
|
60
|
+
|
|
61
|
+
# Validate that we found at least one image
|
|
62
|
+
if len(images) == 0:
|
|
63
|
+
error_msg = "No images found"
|
|
64
|
+
logger.error(error_msg)
|
|
65
|
+
raise ValueError(error_msg)
|
|
66
|
+
|
|
67
|
+
logger.debug(f"Successfully gathered {len(images)} images")
|
|
68
|
+
return images
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def gather_videos(glob=None, urls=None):
|
|
72
|
+
"""
|
|
73
|
+
Gather videos from local files and/or URLs.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
glob: Pattern for matching local video files (e.g., "videos/*.mp4")
|
|
77
|
+
urls: List of URLs to download videos from
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
List of loaded videos
|
|
81
|
+
"""
|
|
82
|
+
if urls is None:
|
|
83
|
+
urls = []
|
|
84
|
+
videos = []
|
|
85
|
+
|
|
86
|
+
# Load local videos matching glob pattern
|
|
87
|
+
if glob is not None:
|
|
88
|
+
logger.debug(f"Searching for videos matching pattern: {glob}")
|
|
89
|
+
video_paths = glob_lib.glob(glob)
|
|
90
|
+
logger.info(f"Found {len(video_paths)} local videos")
|
|
91
|
+
|
|
92
|
+
for path in video_paths:
|
|
93
|
+
try:
|
|
94
|
+
logger.debug(f"Loading video from: {path}")
|
|
95
|
+
videos.append(fetch_video(path))
|
|
96
|
+
except SecurityError:
|
|
97
|
+
raise
|
|
98
|
+
except Exception as e:
|
|
99
|
+
logger.error(
|
|
100
|
+
f"Failed to load video from {path}: {str(e)}", exc_info=True
|
|
101
|
+
)
|
|
102
|
+
raise
|
|
103
|
+
|
|
104
|
+
# Load videos from URLs
|
|
105
|
+
for url in urls:
|
|
106
|
+
try:
|
|
107
|
+
logger.debug(f"Loading video from URL: {url}")
|
|
108
|
+
validated_url = validate_url(url)
|
|
109
|
+
videos.append(load_video(validated_url))
|
|
110
|
+
except SecurityError:
|
|
111
|
+
raise
|
|
112
|
+
except Exception as e:
|
|
113
|
+
logger.error(
|
|
114
|
+
f"Failed to load video from URL {url}: {str(e)}", exc_info=True
|
|
115
|
+
)
|
|
116
|
+
raise
|
|
117
|
+
|
|
118
|
+
# Validate that we found at least one video
|
|
119
|
+
if len(videos) == 0:
|
|
120
|
+
error_msg = "No videos found"
|
|
121
|
+
logger.error(error_msg)
|
|
122
|
+
raise ValueError(error_msg)
|
|
123
|
+
|
|
124
|
+
logger.debug(f"Successfully gathered {len(videos)} videos")
|
|
125
|
+
return videos
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def gather_inputs(kwargs):
|
|
129
|
+
"""
|
|
130
|
+
Gather input arguments for passing to next task.
|
|
131
|
+
|
|
132
|
+
Args:
|
|
133
|
+
kwargs: Dictionary of input arguments
|
|
134
|
+
|
|
135
|
+
Returns:
|
|
136
|
+
Input arguments unchanged
|
|
137
|
+
"""
|
|
138
|
+
logger.debug(f"Gathering input arguments: {kwargs}")
|
|
139
|
+
return kwargs
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Image captioning via HuggingFace transformers.
|
|
3
|
+
|
|
4
|
+
Captioning is text generation that happens to be given a picture, so this
|
|
5
|
+
delegates to the text_generation task rather than keeping a second copy of
|
|
6
|
+
the pipeline handling. Transformers 5 removed the dedicated "image-to-text"
|
|
7
|
+
task this used to build, and with it the BLIP-style captioning models; the
|
|
8
|
+
work is done by vision-language models now.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import logging
|
|
12
|
+
from .text_generation import generate_text, _DEFAULT_VISION_MODEL
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger("dw")
|
|
15
|
+
|
|
16
|
+
_DEFAULT_MODEL = _DEFAULT_VISION_MODEL
|
|
17
|
+
_DEFAULT_PROMPT = "Describe this image."
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def image_to_text(image, device="cpu", **kwargs):
|
|
21
|
+
"""Generate a text caption for an image.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
image: PIL Image (or URL/path) to caption.
|
|
25
|
+
device: Target device ("cuda", "mps", "cpu").
|
|
26
|
+
**kwargs:
|
|
27
|
+
model_name: HuggingFace model ID of a vision-language model
|
|
28
|
+
(default: HuggingFaceTB/SmolVLM-256M-Instruct).
|
|
29
|
+
prompt: What to ask about the image (default: "Describe this
|
|
30
|
+
image."). Ask a narrower question for a narrower caption.
|
|
31
|
+
system_prompt: Optional system instruction for the model.
|
|
32
|
+
max_new_tokens: Max tokens to generate (default: 50).
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
Caption string.
|
|
36
|
+
"""
|
|
37
|
+
prompt = kwargs.pop("prompt", _DEFAULT_PROMPT)
|
|
38
|
+
kwargs.setdefault("model_name", _DEFAULT_MODEL)
|
|
39
|
+
kwargs.setdefault("max_new_tokens", 50)
|
|
40
|
+
|
|
41
|
+
caption = generate_text(prompt, device=device, image=image, **kwargs)
|
|
42
|
+
logger.info(f"Caption: {caption[:100]}{'...' if len(caption) > 100 else ''}")
|
|
43
|
+
return caption
|