Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
842d508
Fix minimax music not working on non dynamic vram. (#15588)
comfyanonymous Aug 13, 2026
72865f4
ComfyUI v0.33.1
Aug 13, 2026
0b91398
[Partner Nodes] feat(ByteDance): add Seedance 2.5 task_type for video…
bigcat88 Aug 15, 2026
c1fe0fd
[Partner Nodes] feat(x-comfy-credits): remove custom price extractor …
bigcat88 Aug 16, 2026
ed798ca
[Partner Nodes] feat(FishAudio): implement basic nodes (#15612)
bigcat88 Aug 17, 2026
847ce97
[Partner Nodes] feat(ByteDance): add 1080p resolution to Seedance 2.5…
bigcat88 Aug 17, 2026
a4ae91e
chore: update workflow templates to v0.11.43 (#15690)
comfyui-wiki Aug 17, 2026
06f08ff
Bump comfyui-frontend-package to 1.49.6 (#15526)
comfy-pr-bot Aug 13, 2026
7cee3ce
ComfyUI v0.33.2
Aug 17, 2026
89f9072
[Partner Nodes] feat(Gemini-LLM): Add Gemini 3.7 Flash to the Gemini …
bigcat88 Aug 19, 2026
8268a79
[Partner Nodes] chore(Prune): rename Ideogram P-Image node (#15751)
bigcat88 Aug 20, 2026
db387a6
[Partner Nodes] feat(Bytedance): add new Seedream node with Fast Mode…
bigcat88 Aug 20, 2026
6aa1def
[Partner Nodes] feat(BFL): add Flux Video Upscale node (#15753)
bigcat88 Aug 20, 2026
3a38f8d
chore: update workflow templates to v0.11.44 (#15754)
comfyui-wiki Aug 20, 2026
4da9e2d
ComfyUI v0.33.3
Aug 20, 2026
af9ba78
[Partner Nodes] Stop adding an opaque alpha channel to API node image…
christian-byrne Aug 15, 2026
24f90db
Remove kling-v2 from Kling Image Generation node (#15676)
bigcat88 Aug 17, 2026
0729e7f
[Partner Nodes] feat(ByteDance): add vCube Video Enhance node (#15755)
bigcat88 Aug 22, 2026
d623aa5
[Partner Nodes] feat(Wan): add Wan 3.0 video generation nodes (#15843)
bigcat88 Aug 24, 2026
412cc26
[Partner Nodes] feat(Meshy): add Meshy-7 support (#15807)
bigcat88 Aug 24, 2026
52c7d6a
chore: update workflow templates to v0.11.46 (#15864)
comfyui-wiki Aug 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion comfy/model_prefetch.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def cleanup_prefetch_queues():
GRAPH_CAPTURE_STREAMS = {}

def prefetch_queue_pop(queue, device, module, dtype=None, core=None, enable_graph=False, generator=None):
enable_graph = enable_graph and not args.disable_cuda_graphs and comfy.model_management.is_device_cuda(device)
enable_graph = enable_graph and not args.disable_cuda_graphs and comfy.model_management.is_device_cuda(device) and getattr(module, "_v_block", None) is not None
if queue is None:
if core is not None:
core()
Expand Down
10 changes: 10 additions & 0 deletions comfy_api_nodes/apis/bfl.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,3 +166,13 @@ class Flux3VideoContinuationRequest(Flux3VideoRequest):
start_video: str = Field(
..., description="MP4 (URL or base64); the new clip carries on from its final frames."
)


class BFLFluxVideoUpscaleRequest(BaseModel):
model_config = ConfigDict(extra="forbid")

input_video: str = Field(..., description="MP4 (URL or base64), 1 to 20 seconds.")
upscale_factor: float = Field(2.0, ge=1.5, le=3.0)
creativity: int = Field(1, description="0 preserves the source precisely, 1 enhances detail.")
prompt: str | None = Field(None)
safety_tolerance: int = Field(2, ge=0, le=4)
76 changes: 46 additions & 30 deletions comfy_api_nodes/apis/bytedance.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ class Seedream4Options(BaseModel):


class Seedream5OptimizePromptOptions(BaseModel):
thinking: Literal["auto", "enabled", "disabled"] = Field(...)
thinking: Literal["auto", "enabled", "disabled"] | None = Field(None)
mode: Literal["standard", "fast"] | None = Field(None)


class Seedream4TaskCreationRequest(BaseModel):
Expand Down Expand Up @@ -116,6 +117,7 @@ class Seedance2TaskCreationRequest(BaseModel):
seed: int | None = Field(None, ge=0, le=2147483647)
watermark: bool | None = Field(None)
output_format: str | None = Field(None)
omni_reference_task_type: str | None = Field(None, description="One of: auto, reference, edit, extend.")


class TaskCreationResponse(BaseModel):
Expand Down Expand Up @@ -186,35 +188,6 @@ class SeedanceVirtualLibraryCreateAssetRequest(BaseModel):
asset_type: str | None = Field(None, description="BytePlus asset type. Defaults to Image server-side when omitted.")


# Dollars per 1K tokens, keyed by (model_id, has_video_input, resolution).
SEEDANCE2_PRICE_PER_1K_TOKENS = {
("dreamina-seedance-2-0-260128", False, "480p"): 0.007,
("dreamina-seedance-2-0-260128", True, "480p"): 0.0043,
("dreamina-seedance-2-0-260128", False, "720p"): 0.007,
("dreamina-seedance-2-0-260128", True, "720p"): 0.0043,
("dreamina-seedance-2-0-260128", False, "1080p"): 0.0077,
("dreamina-seedance-2-0-260128", True, "1080p"): 0.0047,
("dreamina-seedance-2-0-260128", False, "4k"): 0.004,
("dreamina-seedance-2-0-260128", True, "4k"): 0.0024,
("dreamina-seedance-2-0-fast-260128", False, "480p"): 0.0056,
("dreamina-seedance-2-0-fast-260128", True, "480p"): 0.0033,
("dreamina-seedance-2-0-fast-260128", False, "720p"): 0.0056,
("dreamina-seedance-2-0-fast-260128", True, "720p"): 0.0033,
("dreamina-seedance-2-0-mini", False, "480p"): 0.0035,
("dreamina-seedance-2-0-mini", True, "480p"): 0.0021,
("dreamina-seedance-2-0-mini", False, "720p"): 0.0035,
("dreamina-seedance-2-0-mini", True, "720p"): 0.0021,
("dreamina-seedance-2-5-260628", False, "480p"): 0.0107,
("dreamina-seedance-2-5-260628", True, "480p"): 0.0064,
("dreamina-seedance-2-5-260628", False, "720p"): 0.0107,
("dreamina-seedance-2-5-260628", True, "720p"): 0.0064,
}


def seedance2_price_per_1k_tokens(model_id: str, has_video_input: bool, resolution: str) -> float | None:
return SEEDANCE2_PRICE_PER_1K_TOKENS.get((model_id, has_video_input, resolution))


RECOMMENDED_PRESETS = [
("1024x1024 (1:1)", 1024, 1024),
("864x1152 (3:4)", 864, 1152),
Expand Down Expand Up @@ -329,6 +302,7 @@ def seedance2_price_per_1k_tokens(model_id: str, has_video_input: bool, resoluti
"dreamina-seedance-2-5-260628": {
"480p": {"min": 409_600, "max": 8_295_044},
"720p": {"min": 409_600, "max": 8_295_044},
"1080p": {"min": 409_600, "max": 8_295_044},
},
}

Expand Down Expand Up @@ -412,3 +386,45 @@ class SeedAudioResponse(BaseModel):
original_duration: float | None = Field(default=None)
code: int | None = Field(default=None)
message: str | None = Field(default=None)


class MediaKitVideoEnhanceRequest(BaseModel):
video_url: str = Field(...)
tool_version: str = Field(...)
scene: str | None = Field(None)
enhance_style: str | None = Field(None)
resolution: str | None = Field(None)
resolution_limit: int | None = Field(None)
fps: float | None = Field(None)
bitrate_level: str = Field(...)


class MediaKitError(BaseModel):
code: str | None = Field(None)
type: str | None = Field(None)
message: str | None = Field(None)
param: str | None = Field(None)


class MediaKitTaskCreateResponse(BaseModel):
success: bool = Field(...)
task_id: str | None = Field(None)
request_id: str | None = Field(None)
error: MediaKitError | None = Field(None)


class MediaKitTaskResult(BaseModel):
video_url: str = Field(...)
duration: float | None = Field(None)
fps: float | None = Field(None)
resolution: str | None = Field(None)
tool_version: str | None = Field(None)


class MediaKitTaskResponse(BaseModel):
success: bool = Field(...)
task_id: str | None = Field(None)
task_type: str | None = Field(None)
status: str | None = Field(None)
result: MediaKitTaskResult | None = Field(None)
error: MediaKitError | None = Field(None)
49 changes: 49 additions & 0 deletions comfy_api_nodes/apis/fishaudio.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
from pydantic import BaseModel, Field


class FishAudioProsody(BaseModel):
speed: float = Field(1.0, description="Speaking rate multiplier, 0.5-2.0")
volume: float = Field(0.0, description="Volume adjustment in decibels")


class FishAudioTTSRequest(BaseModel):
text: str = Field(..., description="Text to synthesize")
reference_id: str | list[str] | None = Field(None, description="Voice model ID or list of IDs")
temperature: float = Field(0.7, description="Expressiveness, 0-1")
top_p: float = Field(0.7, description="Nucleus sampling diversity, (0, 1]")
prosody: FishAudioProsody = Field(..., description="Speed and volume adjustments")
normalize: bool = Field(True, description="Normalize numbers and text for English and Chinese")
format: str = Field("wav", description="Output audio format")


class FishAudioASRRequest(BaseModel):
language: str | None = Field(None, description="Optional ISO 639-1 language hint")
ignore_timestamps: bool = Field(True, description="Skip precise timestamp computation")


class FishAudioASRSegment(BaseModel):
text: str | None = Field(None, description="Segment text")
start: float | None = Field(None, description="Segment start time in seconds")
end: float | None = Field(None, description="Segment end time in seconds")


class FishAudioASRResponse(BaseModel):
text: str | None = Field(None, description="Transcribed text")
duration: float | None = Field(None, description="Audio duration in seconds")
segments: list[FishAudioASRSegment] | None = Field(None, description="Timestamped transcript segments")
language_code: str | None = Field(None, description="Detected language as ISO 639-1 code")
language: str | None = Field(None, description="Detected language display name")


class FishAudioCreateModelRequest(BaseModel):
type: str = Field("tts", description="Model type")
title: str = Field(..., description="Voice model name")
train_mode: str = Field("fast", description="Training mode; fast is instantly available")
visibility: str = Field("private", description="Model visibility")
enhance_audio_quality: bool = Field(..., description="Enhance reference audio quality")


class FishAudioCreateModelResponse(BaseModel):
id: str = Field(..., alias="_id", description="Voice model ID for use as reference_id")
state: str | None = Field(None, description="Training state")
visibility: str | None = Field(None, description="Model visibility")
14 changes: 11 additions & 3 deletions comfy_api_nodes/apis/meshy.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class InputShouldRemesh(TypedDict):
class InputShouldTexture(TypedDict):
should_texture: str
enable_pbr: bool
texture_resolution: str
texture_prompt: str
texture_image: Input.Image | None

Expand All @@ -25,7 +26,7 @@ class MeshyTaskResponse(BaseModel):
class MeshyTextToModelRequest(BaseModel):
mode: str = Field("preview")
prompt: str = Field(..., max_length=600)
art_style: str = Field(..., description="'realistic' or 'sculpture'")
art_style: str = Field(...)
ai_model: str = Field(...)
topology: str | None = Field(..., description="'quad' or 'triangle'")
target_polycount: int | None = Field(..., ge=100, le=300000)
Expand All @@ -35,6 +36,7 @@ class MeshyTextToModelRequest(BaseModel):
)
symmetry_mode: str = Field(..., description="'auto', 'off' or 'on'")
pose_mode: str = Field(...)
ultra_mode: bool = Field(False)
seed: int = Field(...)
moderation: bool = Field(False)

Expand All @@ -43,6 +45,7 @@ class MeshyRefineTask(BaseModel):
mode: str = Field("refine")
preview_task_id: str = Field(...)
enable_pbr: bool | None = Field(...)
texture_resolution: str = Field(...)
texture_prompt: str | None = Field(...)
texture_image_url: str | None = Field(...)
ai_model: str = Field(...)
Expand All @@ -61,7 +64,9 @@ class MeshyImageToModelRequest(BaseModel):
)
should_texture: bool = Field(...)
enable_pbr: bool | None = Field(...)
texture_resolution: str | None = Field(None)
pose_mode: str = Field(...)
ultra_mode: bool = Field(False)
texture_prompt: str | None = Field(None, max_length=600)
texture_image_url: str | None = Field(None)
seed: int = Field(...)
Expand All @@ -80,6 +85,7 @@ class MeshyMultiImageToModelRequest(BaseModel):
)
should_texture: bool = Field(...)
enable_pbr: bool | None = Field(...)
texture_resolution: str | None = Field(None)
pose_mode: str = Field(...)
texture_prompt: str | None = Field(None, max_length=600)
texture_image_url: str | None = Field(None)
Expand All @@ -103,8 +109,10 @@ class MeshyTextureRequest(BaseModel):
ai_model: str = Field(...)
enable_original_uv: bool = Field(...)
enable_pbr: bool = Field(...)
text_style_prompt: str | None = Field(...)
image_style_url: str | None = Field(...)
texture_resolution: str = Field(...)
text_style_prompt: str | None = Field(None)
image_style_url: str | None = Field(None)
multiview_image_urls: list[str] | None = Field(None)


class MeshyModelsUrls(BaseModel):
Expand Down
26 changes: 26 additions & 0 deletions comfy_api_nodes/apis/wan.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,32 @@ class Wan27Text2VideoTaskCreationRequest(BaseModel):
parameters: Wan27Text2VideoParametersField = Field(...)


class Wan3MediaItem(BaseModel):
type: str = Field(...)
url: str = Field(...)


class Wan3InputField(BaseModel):
prompt: str | None = Field(None)
media: list[Wan3MediaItem] | None = Field(None)


class Wan3ParametersField(BaseModel):
resolution: str = Field(...)
ratio: str = Field(...)
duration: int = Field(..., ge=-1, le=30)
seed: int = Field(..., ge=0, le=2147483647)
audio: bool = Field(True)
prompt_extend: bool = Field(True)
watermark: bool = Field(False)


class Wan3TaskCreationRequest(BaseModel):
model: str = Field(...)
input: Wan3InputField = Field(...)
parameters: Wan3ParametersField = Field(...)


class TaskCreationOutputField(BaseModel):
task_id: str = Field(...)
task_status: str = Field(...)
Expand Down
Loading
Loading