Skip to content

feat(cli): lambda render --width/--height at a whole-number multiple renders at that scale - #6390

Merged
miguel-heygen merged 1 commit into
mainfrom
feat/lambda-size-flags-scale
Oct 26, 2026
Merged

miguel-heygen merged 1 commit into
mainfrom
feat/lambda-size-flags-scale

Conversation

@miguel-heygen

Copy link
Copy Markdown
Collaborator

lambda render --width 3840 --height 2160 on a 1920×1080 composition used to render at 1080p and only print a warning, so a 4K export meant rewriting the canvas.

A size that is a whole-number multiple of the composition's own now renders at that scale (3840×2160 on 1920×1080 is scale 2), through the same output-resolution path as --output-resolution. The rule lives next to the existing preset compatibility check, so the aspect and whole-number constraints are the same ones the render pipeline enforces. The composition's own size changes nothing. A smaller size, or one that is not a supported multiple, fails before anything is deployed with a message naming the composition's size and the sizes available. An explicit --output-resolution still wins, and a site with no local project is passed through untouched.

Tests cover the multiple, the composition's own size, an unsupported or smaller size, an explicit preset, and a missing project.

Not covered: only multiples that match a preset size (for example 3840×2160, 2160×3840, 2160×2160) are accepted; any other multiple, like 2560×1440 on 1280×720, is refused until the pipeline takes an arbitrary scale. Local hyperframes render has no width/height flags, so it keeps using --resolution and the same compatibility check.

@github-actions

Copy link
Copy Markdown
Contributor

Edit accuracy: accurate 271 (base branch 271), smooth 135 of those

The gate passes.
Smoothness is reported in the artifact, not gated. A case fails only if it fails 2 of 3 runs.

Quarantined, measured but not gated (0)

Unstable (3)

  • seqplainkeys-none-center-r0-root-z100: tracking 0.06, pressJump 0, drop 0, reload 0, render 0.03, renderKey -, undo false, teleport true / tracking 0.06, pressJump 0, drop 0, reload 0, render 0.03, renderKey -, undo true, teleport true / tracking 0.06, pressJump 0, drop 0, reload 0, render 0.03, renderKey -, undo true, teleport true
  • seqplainkeys-none-px-r0-root-z100: tracking 0.06, pressJump 0, drop 0, reload 0, render 0.03, renderKey -, undo false, teleport true / tracking 0.06, pressJump 0, drop 0, reload 0, render 0.03, renderKey -, undo true, teleport true / tracking 0.06, pressJump 0, drop 0, reload 0, render 0.03, renderKey -, undo true, teleport true
  • seqheldtwice-tlhold-px-r0-root-z100: tracking 120.29, pressJump 312.3, drop 0, reload 0, render 0.02, renderKey -, undo true, teleport false / tracking 0.41, pressJump 0.11, drop 0.35, reload 0.35, render 0.02, renderKey -, undo true, teleport true / tracking 0.41, pressJump 0.11, drop 0.35, reload 0.35, render 0.02, renderKey -, undo true, teleport true

@heygengenesis heygengenesis Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verdict: APPROVE · 0 blocker · 1 important · 1 nit · head ef8d4ef7

  • important — skills/hyperframes-cli/references/lambda.md:104 (the agent-facing CLI skill) still says a mismatched --width/--height "silently produces 1080p" and prints a warning that's suppressed under --json. At this head the same input renders at scale 2 or fails before deploy. Agents reading that reference will give wrong advice. Rewrite the paragraph to the new rule and regenerate skills-manifest.json. docs/packages/cli.mdx:2250 ("Render dimensions in pixels") could take the same wording as the new flag help.
Scope

I read every changed file. The distributed planner only validates config.width/height and lays out from the composition, so a derived outputResolution takes the same path as --output-resolution. The aspect-agnostic flag stays false on the derived path, which is correct because the preset is concrete. In render-batch the check runs before the variable pre-validation and before any AWS call. CI is green at this head. cloudrun render still ignores a mismatched --width/--height without a word. That predates this PR and is out of its scope; parity there is a possible follow-up.

if (width < compositionWidth || height < compositionHeight) {
return {
ok: false,
message: `${width}×${height} is smaller than the composition (${composition}). Use the composition's size, or a whole-number multiple of it.`,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nit — this branch also catches a wrong orientation, not just a smaller size. A portrait 1080×1920 composition run with the --width 1920 --height 1080 that every documented example uses gets "1920×1080 is smaller than the composition (1080×1920)", and that's probably the most common way to land here. Something like "does not match the composition (1080×1920)" when one side is larger and the other smaller would point at the real fix.

@miguel-heygen
miguel-heygen added this pull request to the merge queue Oct 26, 2026
Merged via the queue into main with commit 8d773fc Oct 26, 2026
83 checks passed
@miguel-heygen
miguel-heygen deleted the feat/lambda-size-flags-scale branch October 26, 2026 05:13
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.

1 participant