Skip to content

[Partner Nodes] add optional auto-downscaling of videos for ByteDance 2 nodes#13465

Merged
Kosinkadink merged 2 commits intomasterfrom
feat/api-nodes/bytedance-automtic-downscale
Apr 21, 2026
Merged

[Partner Nodes] add optional auto-downscaling of videos for ByteDance 2 nodes#13465
Kosinkadink merged 2 commits intomasterfrom
feat/api-nodes/bytedance-automtic-downscale

Conversation

@bigcat88
Copy link
Copy Markdown
Contributor

@bigcat88 bigcat88 commented Apr 18, 2026

  • Restructured SEEDANCE2_REF_VIDEO_PIXEL_LIMITS to be per-resolution so 1920×1080 reference videos are accepted when output resolution is 1080p (previously blocked by the 927,408-pixel cap)
  • Added a shared _compute_downscale_dims helper and a new resize_video_to_pixel_budget utility
  • Added an opt-in advanced auto_downscale_videos toggle on ByteDance2ReferenceNode that transparently re-encodes oversized reference videos to fit the provider's per-resolution pixel budget before validation

API Node PR Checklist

Scope

  • Is API Node Change

Pricing & Billing

  • Need pricing update
  • No pricing update

If Need pricing update:

  • Metronome rate cards updated
  • Auto‑billing tests updated and passing

QA

  • QA done
  • QA not required

Comms

  • Informed Kosinkadink

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 18, 2026

📝 Walkthrough

Walkthrough

This change adds resolution-aware pixel budget validation and automatic video downscaling to Seedance 2.0 reference video handling. The ByteDance2ReferenceNode gains an optional auto_downscale input that, when enabled, automatically downscales reference videos to fit within a specified pixel budget. Supporting utility functions compute aspect-preserving downscaled dimensions, re-encode videos with h264 encoding and audio preservation, and validate videos against resolution-specific pixel limits. The validation function signature is updated to accept resolution as a parameter for looking up appropriate pixel limits.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: adding optional auto-downscaling of videos for ByteDance 2 nodes, which matches the primary objectives of the pull request.
Docstring Coverage ✅ Passed Docstring coverage is 81.82% which is sufficient. The required threshold is 80.00%.
Description check ✅ Passed The pull request description clearly relates to the changeset, describing the restructuring of pixel limits, new utility functions, and the auto-downscale feature for ByteDance reference videos.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@comfy_api_nodes/nodes_bytedance.py`:
- Around line 1496-1506: The synchronous PyAV re-encode in the block that checks
model.get("auto_downscale") and iterates reference_videos (calling
resize_video_to_pixel_budget) must be moved off the async event loop; replace
the direct calls to resize_video_to_pixel_budget with calls scheduled on a
thread executor (e.g., asyncio.to_thread or loop.run_in_executor), create async
tasks for each reference_videos entry, await them and then assign the returned
resized blobs back into reference_videos; ensure you keep the same checks for
max_px and model_id resolution and preserve the mapping keys when reassigning
results.

In `@comfy_api_nodes/util/conversions.py`:
- Around line 443-444: The code currently uses src_video_stream.average_rate
which can be None; replace that with a call that uses the Input.Video helper to
compute a safe frame rate (e.g. use src_video_stream.get_frame_rate() or an
equivalent function on the Input.Video object) when creating the output stream
via output_container.add_stream("h264", rate=...). Update the stream creation in
the block where src_video_stream is assigned (input_container.streams.video[0])
to pass the result of get_frame_rate() (or a small, documented fallback like 1)
instead of average_rate so variable-frame-rate or metadata-light inputs don't
cause a failure.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 78e75790-7bf3-4578-929a-b1e007b4e485

📥 Commits

Reviewing files that changed from the base of the PR and between 3086026 and 4510bac.

⛔ Files ignored due to path filters (1)
  • comfy_api_nodes/apis/bytedance.py is excluded by !comfy_api_nodes/apis/**
📒 Files selected for processing (3)
  • comfy_api_nodes/nodes_bytedance.py
  • comfy_api_nodes/util/__init__.py
  • comfy_api_nodes/util/conversions.py

Comment thread comfy_api_nodes/nodes_bytedance.py
Comment thread comfy_api_nodes/util/conversions.py Outdated
…nodes

Signed-off-by: bigcat88 <bigcat88@icloud.com>
@bigcat88 bigcat88 force-pushed the feat/api-nodes/bytedance-automtic-downscale branch from 4510bac to 7b0a0e2 Compare April 18, 2026 16:55
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@comfy_api_nodes/util/conversions.py`:
- Around line 141-146: After computing scale and applying max(2, ...) and the
evenness clamps to new_w and new_h, re-check the resulting pixel area (new_w *
new_h) against total_pixels; if the area exceeds total_pixels compute an
adjustment_scale = sqrt(total_pixels / (new_w * new_h)) and rescale new_w and
new_h by that factor (apply max(2, int(...)), then re-apply the evenness clamp).
Repeat or loop once more if necessary until new_w * new_h <= total_pixels. Use
the existing symbols scale, new_w, new_h, total_pixels, pixels, src_w, src_h to
locate and update the logic.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: a2928ddf-e79f-49f6-b661-ba0347750b92

📥 Commits

Reviewing files that changed from the base of the PR and between 4510bac and 7b0a0e2.

⛔ Files ignored due to path filters (1)
  • comfy_api_nodes/apis/bytedance.py is excluded by !comfy_api_nodes/apis/**
📒 Files selected for processing (3)
  • comfy_api_nodes/nodes_bytedance.py
  • comfy_api_nodes/util/__init__.py
  • comfy_api_nodes/util/conversions.py
✅ Files skipped from review due to trivial changes (1)
  • comfy_api_nodes/util/init.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • comfy_api_nodes/nodes_bytedance.py

Comment thread comfy_api_nodes/util/conversions.py
@Kosinkadink Kosinkadink merged commit b38dd0f into master Apr 21, 2026
22 checks passed
@bigcat88 bigcat88 deleted the feat/api-nodes/bytedance-automtic-downscale branch April 21, 2026 17:46
Kosinkadink added a commit that referenced this pull request Apr 24, 2026
* fix: pin SQLAlchemy>=2.0 in requirements.txt (fixes #13036) (#13316)

* Refactor io to IO in nodes_ace.py (#13485)

* Bump comfyui-frontend-package to 1.42.12 (#13489)

* Make the ltx audio vae more native. (#13486)

* feat(api-nodes): add automatic downscaling of videos for ByteDance 2 nodes (#13465)

* Support standalone LTXV audio VAEs (#13499)

* [Partner Nodes]  added 4K resolution for Veo models; added Veo 3 Lite model (#13330)

* feat(api nodes): added 4K resolution for Veo models; added Veo 3 Lite model

Signed-off-by: bigcat88 <bigcat88@icloud.com>

* increase poll_interval from 5 to 9

---------

Signed-off-by: bigcat88 <bigcat88@icloud.com>
Co-authored-by: Jedrzej Kosinski <kosinkadink1@gmail.com>

* Bump comfyui-frontend-package to 1.42.14 (#13493)

* Add gpt-image-2 as version option (#13501)

* Allow logging in comfy app files. (#13505)

* chore: update workflow templates to v0.9.59 (#13507)

* fix(veo): reject 4K resolution for veo-3.0 models in Veo3VideoGenerationNode (#13504)

The tooltip on the resolution input states that 4K is not available for
veo-3.1-lite or veo-3.0 models, but the execute guard only rejected the
lite combination. Selecting 4K with veo-3.0-generate-001 or
veo-3.0-fast-generate-001 would fall through and hit the upstream API
with an invalid request.

Broaden the guard to match the documented behavior and update the error
message accordingly.

Co-authored-by: Jedrzej Kosinski <kosinkadink1@gmail.com>

* feat: RIFE and FILM frame interpolation model support (CORE-29) (#13258)

* initial RIFE support

* Also support FILM

* Better RAM usage, reduce FILM VRAM peak

* Add model folder placeholder

* Fix oom fallback frame loss

* Remove torch.compile for now

* Rename model input

* Shorter input type name

---------

* fix: use Parameter assignment for Stable_Zero123 cc_projection weights (fixes #13492) (#13518)

On Windows with aimdo enabled, disable_weight_init.Linear uses lazy
initialization that sets weight and bias to None to avoid unnecessary
memory allocation. This caused a crash when copy_() was called on the
None weight attribute in Stable_Zero123.__init__.

Replace copy_() with direct torch.nn.Parameter assignment, which works
correctly on both Windows (aimdo enabled) and other platforms.

* Derive InterruptProcessingException from BaseException (#13523)

* bump manager version to 4.2.1 (#13516)

* ModelPatcherDynamic: force cast stray weights on comfy layers (#13487)

the mixed_precision ops can have input_scale parameters that are used
in tensor math but arent a weight or bias so dont get proper VRAM
management. Treat these as force-castable parameters like the non comfy
weight, random params are buffers already are.

* Update logging level for invalid version format (#13526)

* [Partner Nodes] add SD2 real human support (#13509)

* feat(api-nodes): add SD2 real human support

Signed-off-by: bigcat88 <bigcat88@icloud.com>

* fix: add validation before uploading Assets

Signed-off-by: bigcat88 <bigcat88@icloud.com>

* Add asset_id and group_id displaying on the node

Signed-off-by: bigcat88 <bigcat88@icloud.com>

* extend poll_op to use instead of custom async cycle

Signed-off-by: bigcat88 <bigcat88@icloud.com>

* added the polling for the "Active" status after asset creation

Signed-off-by: bigcat88 <bigcat88@icloud.com>

* updated tooltip for group_id

* allow usage of real human in the ByteDance2FirstLastFrame node

* add reference count limits

* corrected price in status when input assets contain video

Signed-off-by: bigcat88 <bigcat88@icloud.com>

---------

Signed-off-by: bigcat88 <bigcat88@icloud.com>

* feat: SAM (segment anything) 3.1 support (CORE-34) (#13408)

* [Partner Nodes] GPTImage: fix price badges, add new resolutions (#13519)

* fix(api-nodes): fixed price badges, add new resolutions

Signed-off-by: bigcat88 <bigcat88@icloud.com>

* proper calculate the total run cost when "n > 1"

Signed-off-by: bigcat88 <bigcat88@icloud.com>

---------

Signed-off-by: bigcat88 <bigcat88@icloud.com>

* chore: update workflow templates to v0.9.61 (#13533)

* chore: update embedded docs to v0.4.4 (#13535)

* add 4K resolution to Kling nodes (#13536)

Signed-off-by: bigcat88 <bigcat88@icloud.com>

* Fix LTXV Reference Audio node (#13531)

* comfy-aimdo 0.2.14: Hotfix async allocator estimations (#13534)

This was doing an over-estimate of VRAM used by the async allocator when lots
of little small tensors were in play.

Also change the versioning scheme to == so we can roll forward aimdo without
worrying about stable regressions downstream in comfyUI core.

* Disable sageattention for SAM3 (#13529)

Causes Nans

* execution: Add anti-cycle validation (#13169)

Currently if the graph contains a cycle, the just inifitiate recursions,
hits a catch all then throws a generic error against the output node
that seeded the validation. Instead, fail the offending cycling mode
chain and handlng it as an error in its own right.

Co-authored-by: guill <jacob.e.segal@gmail.com>

* chore: update workflow templates to v0.9.62 (#13539)

---------

Signed-off-by: bigcat88 <bigcat88@icloud.com>
Co-authored-by: Octopus <liyuan851277048@icloud.com>
Co-authored-by: comfyanonymous <121283862+comfyanonymous@users.noreply.github.com>
Co-authored-by: Comfy Org PR Bot <snomiao+comfy-pr@gmail.com>
Co-authored-by: Alexander Piskun <13381981+bigcat88@users.noreply.github.com>
Co-authored-by: Jukka Seppänen <40791699+kijai@users.noreply.github.com>
Co-authored-by: AustinMroz <austin@comfy.org>
Co-authored-by: Daxiong (Lin) <contact@comfyui-wiki.com>
Co-authored-by: Matt Miller <matt@miller-media.com>
Co-authored-by: blepping <157360029+blepping@users.noreply.github.com>
Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
Co-authored-by: rattus <46076784+rattus128@users.noreply.github.com>
Co-authored-by: guill <jacob.e.segal@gmail.com>
HeinzDBV pushed a commit to HeinzDBV/ComfyUI that referenced this pull request Apr 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants