mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-02-07 03:52:32 +08:00
update price badges
This commit is contained in:
parent
447e1575ec
commit
7a1dd5ab3c
@ -30,6 +30,30 @@ from comfy_api_nodes.util import (
|
|||||||
validate_image_dimensions,
|
validate_image_dimensions,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
_EUR_TO_USD = 1.19
|
||||||
|
|
||||||
|
|
||||||
|
def _tier_price_eur(megapixels: float) -> float:
|
||||||
|
"""Price in EUR for a single Magnific upscaling step based on input megapixels."""
|
||||||
|
if megapixels <= 1.3:
|
||||||
|
return 0.10
|
||||||
|
if megapixels <= 3.0:
|
||||||
|
return 0.20
|
||||||
|
if megapixels <= 6.4:
|
||||||
|
return 0.30
|
||||||
|
return 1.20
|
||||||
|
|
||||||
|
|
||||||
|
def _calculate_magnific_upscale_price_usd(width: int, height: int, scale: int) -> float:
|
||||||
|
"""Calculate total Magnific upscale price in USD for given input dimensions and scale factor."""
|
||||||
|
num_steps = int(math.log2(scale))
|
||||||
|
total_eur = 0.0
|
||||||
|
pixels = width * height
|
||||||
|
for _ in range(num_steps):
|
||||||
|
total_eur += _tier_price_eur(pixels / 1_000_000)
|
||||||
|
pixels *= 4
|
||||||
|
return round(total_eur * _EUR_TO_USD, 2)
|
||||||
|
|
||||||
|
|
||||||
class MagnificImageUpscalerCreativeNode(IO.ComfyNode):
|
class MagnificImageUpscalerCreativeNode(IO.ComfyNode):
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -103,11 +127,20 @@ class MagnificImageUpscalerCreativeNode(IO.ComfyNode):
|
|||||||
],
|
],
|
||||||
is_api_node=True,
|
is_api_node=True,
|
||||||
price_badge=IO.PriceBadge(
|
price_badge=IO.PriceBadge(
|
||||||
depends_on=IO.PriceBadgeDepends(widgets=["scale_factor"]),
|
depends_on=IO.PriceBadgeDepends(widgets=["scale_factor", "auto_downscale"]),
|
||||||
expr="""
|
expr="""
|
||||||
(
|
(
|
||||||
$max := widgets.scale_factor = "2x" ? 1.326 : 1.657;
|
$ad := widgets.auto_downscale;
|
||||||
{"type": "range_usd", "min_usd": 0.11, "max_usd": $max}
|
$mins := $ad
|
||||||
|
? {"2x": 0.12, "4x": 0.24, "8x": 0.36, "16x": 0.36}
|
||||||
|
: {"2x": 0.12, "4x": 0.24, "8x": 0.36, "16x": 0.59};
|
||||||
|
$maxs := {"2x": 0.36, "4x": 0.59, "8x": 0.71, "16x": 0.83};
|
||||||
|
{
|
||||||
|
"type": "range_usd",
|
||||||
|
"min_usd": $lookup($mins, widgets.scale_factor),
|
||||||
|
"max_usd": $lookup($maxs, widgets.scale_factor),
|
||||||
|
"format": { "approximate": true }
|
||||||
|
}
|
||||||
)
|
)
|
||||||
""",
|
""",
|
||||||
),
|
),
|
||||||
@ -168,6 +201,10 @@ class MagnificImageUpscalerCreativeNode(IO.ComfyNode):
|
|||||||
f"Use a smaller input image or lower scale factor."
|
f"Use a smaller input image or lower scale factor."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
final_height, final_width = get_image_dimensions(image)
|
||||||
|
actual_scale = int(scale_factor.rstrip("x"))
|
||||||
|
price_usd = _calculate_magnific_upscale_price_usd(final_width, final_height, actual_scale)
|
||||||
|
|
||||||
initial_res = await sync_op(
|
initial_res = await sync_op(
|
||||||
cls,
|
cls,
|
||||||
ApiEndpoint(path="/proxy/freepik/v1/ai/image-upscaler", method="POST"),
|
ApiEndpoint(path="/proxy/freepik/v1/ai/image-upscaler", method="POST"),
|
||||||
@ -189,6 +226,7 @@ class MagnificImageUpscalerCreativeNode(IO.ComfyNode):
|
|||||||
ApiEndpoint(path=f"/proxy/freepik/v1/ai/image-upscaler/{initial_res.task_id}"),
|
ApiEndpoint(path=f"/proxy/freepik/v1/ai/image-upscaler/{initial_res.task_id}"),
|
||||||
response_model=TaskResponse,
|
response_model=TaskResponse,
|
||||||
status_extractor=lambda x: x.status,
|
status_extractor=lambda x: x.status,
|
||||||
|
price_extractor=lambda _: price_usd,
|
||||||
poll_interval=10.0,
|
poll_interval=10.0,
|
||||||
max_poll_attempts=480,
|
max_poll_attempts=480,
|
||||||
)
|
)
|
||||||
@ -257,8 +295,14 @@ class MagnificImageUpscalerPreciseV2Node(IO.ComfyNode):
|
|||||||
depends_on=IO.PriceBadgeDepends(widgets=["scale_factor"]),
|
depends_on=IO.PriceBadgeDepends(widgets=["scale_factor"]),
|
||||||
expr="""
|
expr="""
|
||||||
(
|
(
|
||||||
$max := widgets.scale_factor = "2x" ? 1.326 : 1.657;
|
$mins := {"2x": 0.12, "4x": 0.24, "8x": 0.36, "16x": 0.59};
|
||||||
{"type": "range_usd", "min_usd": 0.11, "max_usd": $max}
|
$maxs := {"2x": 1.43, "4x": 1.78, "8x": 2.02, "16x": 2.14};
|
||||||
|
{
|
||||||
|
"type": "range_usd",
|
||||||
|
"min_usd": $lookup($mins, widgets.scale_factor),
|
||||||
|
"max_usd": $lookup($maxs, widgets.scale_factor),
|
||||||
|
"format": { "approximate": true }
|
||||||
|
}
|
||||||
)
|
)
|
||||||
""",
|
""",
|
||||||
),
|
),
|
||||||
@ -321,6 +365,9 @@ class MagnificImageUpscalerPreciseV2Node(IO.ComfyNode):
|
|||||||
f"Use a smaller input image or lower scale factor."
|
f"Use a smaller input image or lower scale factor."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
final_height, final_width = get_image_dimensions(image)
|
||||||
|
price_usd = _calculate_magnific_upscale_price_usd(final_width, final_height, requested_scale)
|
||||||
|
|
||||||
initial_res = await sync_op(
|
initial_res = await sync_op(
|
||||||
cls,
|
cls,
|
||||||
ApiEndpoint(path="/proxy/freepik/v1/ai/image-upscaler-precision-v2", method="POST"),
|
ApiEndpoint(path="/proxy/freepik/v1/ai/image-upscaler-precision-v2", method="POST"),
|
||||||
@ -339,6 +386,7 @@ class MagnificImageUpscalerPreciseV2Node(IO.ComfyNode):
|
|||||||
ApiEndpoint(path=f"/proxy/freepik/v1/ai/image-upscaler-precision-v2/{initial_res.task_id}"),
|
ApiEndpoint(path=f"/proxy/freepik/v1/ai/image-upscaler-precision-v2/{initial_res.task_id}"),
|
||||||
response_model=TaskResponse,
|
response_model=TaskResponse,
|
||||||
status_extractor=lambda x: x.status,
|
status_extractor=lambda x: x.status,
|
||||||
|
price_extractor=lambda _: price_usd,
|
||||||
poll_interval=10.0,
|
poll_interval=10.0,
|
||||||
max_poll_attempts=480,
|
max_poll_attempts=480,
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user