Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
ComfyUI
Commits
c2bb34d8
Commit
c2bb34d8
authored
Oct 18, 2023
by
comfyanonymous
Browse files
Implement updated FreeU as _for_testing->FreeU_V2 node
parent
d44a2de4
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
46 additions
and
0 deletions
+46
-0
comfy_extras/nodes_freelunch.py
comfy_extras/nodes_freelunch.py
+46
-0
No files found.
comfy_extras/nodes_freelunch.py
View file @
c2bb34d8
...
@@ -61,7 +61,53 @@ class FreeU:
...
@@ -61,7 +61,53 @@ class FreeU:
m
.
set_model_output_block_patch
(
output_block_patch
)
m
.
set_model_output_block_patch
(
output_block_patch
)
return
(
m
,
)
return
(
m
,
)
class
FreeU_V2
:
@
classmethod
def
INPUT_TYPES
(
s
):
return
{
"required"
:
{
"model"
:
(
"MODEL"
,),
"b1"
:
(
"FLOAT"
,
{
"default"
:
1.3
,
"min"
:
0.0
,
"max"
:
10.0
,
"step"
:
0.01
}),
"b2"
:
(
"FLOAT"
,
{
"default"
:
1.4
,
"min"
:
0.0
,
"max"
:
10.0
,
"step"
:
0.01
}),
"s1"
:
(
"FLOAT"
,
{
"default"
:
0.9
,
"min"
:
0.0
,
"max"
:
10.0
,
"step"
:
0.01
}),
"s2"
:
(
"FLOAT"
,
{
"default"
:
0.2
,
"min"
:
0.0
,
"max"
:
10.0
,
"step"
:
0.01
}),
}}
RETURN_TYPES
=
(
"MODEL"
,)
FUNCTION
=
"patch"
CATEGORY
=
"_for_testing"
def
patch
(
self
,
model
,
b1
,
b2
,
s1
,
s2
):
model_channels
=
model
.
model
.
model_config
.
unet_config
[
"model_channels"
]
scale_dict
=
{
model_channels
*
4
:
(
b1
,
s1
),
model_channels
*
2
:
(
b2
,
s2
)}
on_cpu_devices
=
{}
def
output_block_patch
(
h
,
hsp
,
transformer_options
):
scale
=
scale_dict
.
get
(
h
.
shape
[
1
],
None
)
if
scale
is
not
None
:
hidden_mean
=
h
.
mean
(
1
).
unsqueeze
(
1
)
B
=
hidden_mean
.
shape
[
0
]
hidden_max
,
_
=
torch
.
max
(
hidden_mean
.
view
(
B
,
-
1
),
dim
=-
1
,
keepdim
=
True
)
hidden_min
,
_
=
torch
.
min
(
hidden_mean
.
view
(
B
,
-
1
),
dim
=-
1
,
keepdim
=
True
)
hidden_mean
=
(
hidden_mean
-
hidden_min
.
unsqueeze
(
2
).
unsqueeze
(
3
))
/
(
hidden_max
-
hidden_min
).
unsqueeze
(
2
).
unsqueeze
(
3
)
h
[:,:
h
.
shape
[
1
]
//
2
]
=
h
[:,:
h
.
shape
[
1
]
//
2
]
*
((
scale
[
0
]
-
1
)
*
hidden_mean
+
1
)
if
hsp
.
device
not
in
on_cpu_devices
:
try
:
hsp
=
Fourier_filter
(
hsp
,
threshold
=
1
,
scale
=
scale
[
1
])
except
:
print
(
"Device"
,
hsp
.
device
,
"does not support the torch.fft functions used in the FreeU node, switching to CPU."
)
on_cpu_devices
[
hsp
.
device
]
=
True
hsp
=
Fourier_filter
(
hsp
.
cpu
(),
threshold
=
1
,
scale
=
scale
[
1
]).
to
(
hsp
.
device
)
else
:
hsp
=
Fourier_filter
(
hsp
.
cpu
(),
threshold
=
1
,
scale
=
scale
[
1
]).
to
(
hsp
.
device
)
return
h
,
hsp
m
=
model
.
clone
()
m
.
set_model_output_block_patch
(
output_block_patch
)
return
(
m
,
)
NODE_CLASS_MAPPINGS
=
{
NODE_CLASS_MAPPINGS
=
{
"FreeU"
:
FreeU
,
"FreeU"
:
FreeU
,
"FreeU_V2"
:
FreeU_V2
,
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment