mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-05-15 03:27:24 +08:00
Merge branch 'master' into save_3d_update
This commit is contained in:
commit
3492418f21
@ -89,3 +89,12 @@ rules:
|
||||
then:
|
||||
field: description
|
||||
function: truthy
|
||||
|
||||
overrides:
|
||||
# /ws uses HTTP 101 (Switching Protocols) — a legitimate response for a
|
||||
# WebSocket upgrade, but not a 2xx, so operation-success-response fires
|
||||
# as a false positive. OpenAPI 3.x has no native WebSocket support.
|
||||
- files:
|
||||
- "openapi.yaml#/paths/~1ws"
|
||||
rules:
|
||||
operation-success-response: off
|
||||
|
||||
@ -338,8 +338,25 @@ class LTXVAddGuide(io.ComfyNode):
|
||||
noise_mask = get_noise_mask(latent)
|
||||
|
||||
_, _, latent_length, latent_height, latent_width = latent_image.shape
|
||||
|
||||
# For mid-video multi-frame guides, prepend+strip a throwaway first frame so the VAE's "first latent = 1 pixel frame" asymmetry lands on the discarded slot
|
||||
time_scale_factor = scale_factors[0]
|
||||
num_frames_to_keep = ((image.shape[0] - 1) // time_scale_factor) * time_scale_factor + 1
|
||||
resolved_frame_idx = frame_idx
|
||||
if frame_idx < 0:
|
||||
_, num_keyframes = get_keyframe_idxs(positive)
|
||||
resolved_frame_idx = max((latent_length - num_keyframes - 1) * time_scale_factor + 1 + frame_idx, 0)
|
||||
causal_fix = resolved_frame_idx == 0 or num_frames_to_keep == 1
|
||||
|
||||
if not causal_fix:
|
||||
image = torch.cat([image[:1], image], dim=0)
|
||||
|
||||
image, t = cls.encode(vae, latent_width, latent_height, image, scale_factors)
|
||||
|
||||
if not causal_fix:
|
||||
t = t[:, :, 1:, :, :]
|
||||
image = image[1:]
|
||||
|
||||
frame_idx, latent_idx = cls.get_latent_index(positive, latent_length, len(image), frame_idx, scale_factors)
|
||||
assert latent_idx + t.shape[2] <= latent_length, "Conditioning frames exceed the length of the latent sequence."
|
||||
|
||||
@ -352,6 +369,7 @@ class LTXVAddGuide(io.ComfyNode):
|
||||
t,
|
||||
strength,
|
||||
scale_factors,
|
||||
causal_fix=causal_fix,
|
||||
)
|
||||
|
||||
# Track this guide for per-reference attention control.
|
||||
|
||||
@ -40,23 +40,13 @@ def composite(destination, source, x, y, mask = None, multiplier = 8, resize_sou
|
||||
|
||||
inverse_mask = torch.ones_like(mask) - mask
|
||||
|
||||
source_rgb = source[:, :3, :visible_height, :visible_width]
|
||||
dest_slice = destination[..., top:bottom, left:right]
|
||||
|
||||
if destination.shape[1] == 4:
|
||||
if torch.max(dest_slice) == 0:
|
||||
destination[:, :3, top:bottom, left:right] = source_rgb
|
||||
destination[:, 3:4, top:bottom, left:right] = mask
|
||||
else:
|
||||
destination[:, :3, top:bottom, left:right] = (mask * source_rgb) + (inverse_mask * dest_slice[:, :3])
|
||||
destination[:, 3:4, top:bottom, left:right] = torch.max(mask, dest_slice[:, 3:4])
|
||||
else:
|
||||
source_portion = mask * source_rgb
|
||||
destination_portion = inverse_mask * dest_slice
|
||||
destination[..., top:bottom, left:right] = source_portion + destination_portion
|
||||
source_portion = mask * source[..., :visible_height, :visible_width]
|
||||
destination_portion = inverse_mask * destination[..., top:bottom, left:right]
|
||||
|
||||
destination[..., top:bottom, left:right] = source_portion + destination_portion
|
||||
return destination
|
||||
|
||||
|
||||
class LatentCompositeMasked(IO.ComfyNode):
|
||||
@classmethod
|
||||
def define_schema(cls):
|
||||
@ -95,23 +85,18 @@ class ImageCompositeMasked(IO.ComfyNode):
|
||||
display_name="Image Composite Masked",
|
||||
category="image",
|
||||
inputs=[
|
||||
IO.Image.Input("destination"),
|
||||
IO.Image.Input("source"),
|
||||
IO.Int.Input("x", default=0, min=0, max=nodes.MAX_RESOLUTION, step=1),
|
||||
IO.Int.Input("y", default=0, min=0, max=nodes.MAX_RESOLUTION, step=1),
|
||||
IO.Boolean.Input("resize_source", default=False),
|
||||
IO.Image.Input("destination", optional=True),
|
||||
IO.Mask.Input("mask", optional=True),
|
||||
],
|
||||
outputs=[IO.Image.Output()],
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def execute(cls, source, x, y, resize_source, destination = None, mask = None) -> IO.NodeOutput:
|
||||
if destination is None: # transparent rgba
|
||||
B, H, W, C = source.shape
|
||||
destination = torch.zeros((B, H, W, 4), dtype=source.dtype, device=source.device)
|
||||
if C == 3:
|
||||
source = torch.nn.functional.pad(source, (0, 1), value=1.0)
|
||||
def execute(cls, destination, source, x, y, resize_source, mask = None) -> IO.NodeOutput:
|
||||
destination, source = node_helpers.image_alpha_fix(destination, source)
|
||||
destination = destination.clone().movedim(-1, 1)
|
||||
output = composite(destination, source.movedim(-1, 1), x, y, mask, 1, resize_source).movedim(1, -1)
|
||||
|
||||
35
openapi.yaml
35
openapi.yaml
@ -2071,7 +2071,6 @@ paths:
|
||||
type: integer
|
||||
description: Number of assets marked as missing
|
||||
|
||||
|
||||
# ===========================================================================
|
||||
# Cloud-runtime FE-facing operations
|
||||
#
|
||||
@ -2122,7 +2121,11 @@ paths:
|
||||
operationId: getCloudJobStatus
|
||||
tags: [queue]
|
||||
summary: Get status of a cloud job
|
||||
description: "[cloud-only] Returns the current execution status of a cloud job."
|
||||
deprecated: true
|
||||
description: |
|
||||
**Deprecated.** This endpoint is superseded by `GET /api/jobs/{job_id}`.
|
||||
Clients should migrate; the endpoint is retained for backward
|
||||
compatibility but will be removed in a future release.
|
||||
x-runtime: [cloud]
|
||||
parameters:
|
||||
- name: job_id
|
||||
@ -2192,7 +2195,11 @@ paths:
|
||||
operationId: getHistoryV2
|
||||
tags: [history]
|
||||
summary: Get paginated execution history (v2)
|
||||
description: "[cloud-only] Returns a paginated list of execution history entries in the v2 format, with richer metadata than the legacy history endpoint."
|
||||
deprecated: true
|
||||
description: |
|
||||
**Deprecated.** This endpoint is superseded by `GET /api/jobs`.
|
||||
Clients should migrate; the endpoint is retained for backward
|
||||
compatibility but will be removed in a future release.
|
||||
x-runtime: [cloud]
|
||||
parameters:
|
||||
- name: limit
|
||||
@ -2231,7 +2238,11 @@ paths:
|
||||
operationId: getHistoryV2ByPromptId
|
||||
tags: [history]
|
||||
summary: Get v2 history for a specific prompt
|
||||
description: "[cloud-only] Returns the v2 history entry for a specific prompt execution."
|
||||
deprecated: true
|
||||
description: |
|
||||
**Deprecated.** This endpoint is superseded by `GET /api/jobs/{prompt_id}`.
|
||||
Clients should migrate; the endpoint is retained for backward
|
||||
compatibility but will be removed in a future release.
|
||||
x-runtime: [cloud]
|
||||
parameters:
|
||||
- name: prompt_id
|
||||
@ -2266,7 +2277,12 @@ paths:
|
||||
operationId: getCloudLogs
|
||||
tags: [system]
|
||||
summary: Get cloud execution logs
|
||||
description: "[cloud-only] Returns execution logs for the authenticated user's cloud jobs."
|
||||
deprecated: true
|
||||
description: |
|
||||
**Deprecated.** This endpoint returns a static placeholder response and
|
||||
provides no real log data. It is retained only to avoid breaking clients
|
||||
that still call it. Clients should remove their dependency; the endpoint
|
||||
will be removed in a future release.
|
||||
x-runtime: [cloud]
|
||||
parameters:
|
||||
- name: job_id
|
||||
@ -5370,7 +5386,12 @@ paths:
|
||||
operationId: viewVideo
|
||||
tags: [view]
|
||||
summary: View or download a video file
|
||||
description: "[cloud-only] Serves a video file from the output directory. Used by the frontend video player."
|
||||
deprecated: true
|
||||
description: |
|
||||
**Deprecated.** This endpoint is an alias of `GET /api/view` added for
|
||||
legacy history-queue video playback. Callers should use `/api/view`
|
||||
directly; the endpoint is retained for backward compatibility but will
|
||||
be removed in a future release.
|
||||
x-runtime: [cloud]
|
||||
parameters:
|
||||
- name: filename
|
||||
@ -5523,7 +5544,6 @@ paths:
|
||||
schema:
|
||||
$ref: "#/components/schemas/CloudError"
|
||||
|
||||
|
||||
components:
|
||||
parameters:
|
||||
ComfyUserHeader:
|
||||
@ -6875,7 +6895,6 @@ components:
|
||||
error:
|
||||
type: string
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Cloud-runtime schemas
|
||||
#
|
||||
|
||||
Loading…
Reference in New Issue
Block a user