Ray 3.2 extend bills one 5-second block whatever duration you send

Ray 3.2 single-keyframe extend is $0.15, $0.30 or $1.20 per call at 540p, 720p, 1080p, even if duration is set. Chain math and Sume's per-clip equivalents.

5 min readSume
All posts

Luma's pay-as-you-go page says a Ray 3.2 single-keyframe extend always bills as one 5-second block, even if video.duration is present on the request. The price per extend call is $0.15 at 540p, $0.30 at 720p and $1.20 at 1080p. Extend is standard dynamic range only, so HDR and EXR never apply to it.

Ray 3.2 single-keyframe extend, USD per call (Luma pricing page, read 2026-10-09)
ResolutionPer extend callSame as a 5-second generation?
540p$0.15Yes ($0.15)
720p$0.30Yes ($0.30)
1080p$1.20Yes ($1.20)

What that means for chaining

Because the call is a fixed block, a chain of N extends at 1080p costs N x $1.20 no matter what duration field you send, and one 5-second base clip adds another $1.20. Five blocks at 1080p is therefore 5 x $1.20 = $6.00. At 720p the same five blocks cost 5 x $0.30 = $1.50, and at 540p 5 x $0.15 = $0.75.

The practical rule is to not spend effort tuning the duration field on extend calls, since the bill ignores it. The page does not say how many seconds of video each extend adds, so do not budget finished length from the price alone; read the output length from the job.

How a 25-second target maps to Sume

Sume has no extend endpoint, and Sume does not list Ray 3.2. Its video jobs are one clip per job, so a long take is either one job on a model with a long maximum or several jobs joined later. The video docs give 4 to 30 seconds for seedance-2.5, 2 to 30 seconds for wan-3.0, 5 to 15 seconds for minimax-h3 and minimax-h3-max, and 3 to 10 seconds for gemini-omni-flash-1.1.

  • One 25-second job on wan-3.0 at 1080p: 25 x $0.25 = $6.25.
  • Two jobs on minimax-h3-max at 1080p, 15 s + 10 s: 25 x $0.20 = $5.00.
  • Five 5-second jobs on gemini-omni-flash-1.1 at 1080p: 25 x $0.1875 = $4.6875.
  • One 25-second job on seedance-2.5 at 1080p: 25 x $1.42155 = $35.54.

Check before you chain

Sume reserves the estimated price when it accepts a job and releases the reservation if the job fails. Joining clips afterwards is a separate step; the timeline docs describe it, and you should confirm continuity by eye, since separate jobs do not share state.

A budget helper

This short function prices a chain from Luma's per-call figures. It is plain arithmetic, so it runs as is with any Python 3 interpreter.

Use it before you queue a long sequence; then compare the total with the one-job options on Sume above.

RATE = {"540p": 0.15, "720p": 0.30, "1080p": 1.20}  # USD per 5-second block

def chain_cost(extends, res, base_blocks=1):
    if res not in RATE:
        raise ValueError("unknown resolution")
    if extends < 0 or base_blocks < 1:
        raise ValueError("bad counts")
    return round((base_blocks + extends) * RATE[res], 2)

for res in RATE:
    print(res, chain_cost(4, res))
# 540p 0.75, 720p 1.5, 1080p 6.0

Failed extends and refunds

Luma's pricing page says synchronous errors are never charged, because the reserve is released the moment the request is rejected. For asynchronous failures the charge depends on the failure code: content_moderated, generation_failed and output_not_found are refunded, while budget_exhausted can carry a partial charge. A chain of extends is a sequence of separate billed calls, so a failure in block four does not undo the three blocks that already succeeded.

Sources

Related posts

More in Pricing

All Pricing posts

Written by Sume