Text to Dialogue continuity: 100-character context, 3 request IDs
ElevenLabs' Sept 28 changelog adds previous_text and future_text (100 chars max) and request-ID chaining (3 max). A Python limit check.

For multi-speaker scenes rendered in several requests, ElevenLabs' September 28 changelog, read 2026-10-03, lets you pass previous_text and future_text of up to 100 characters each, and previous_request_ids and next_request_ids of up to 3 IDs each, so prosody stays continuous across segments. It also lists a use_pvc_as_ivc parameter. The checker below catches limit mistakes before the request goes out.
The parameters
These are the fields named in the changelog.
| Field | Limit | Purpose |
|---|---|---|
previous_text | max 100 characters | Context before the segment |
future_text | max 100 characters | Context after the segment |
previous_request_ids | max 3 IDs | Earlier requests for continuity |
next_request_ids | max 3 IDs | Later requests for continuity |
use_pvc_as_ivc | boolean | Listed in the changelog entry |
A payload checker
It truncates nothing and raises on a violation, so a bad payload fails in your code, not in a paid request. It runs with the standard library.
def check_continuity(payload: dict) -> dict:
for key in ("previous_text", "future_text"):
v = payload.get(key)
if v is not None and len(v) > 100:
raise ValueError(f"{key} is {len(v)} chars, max 100")
for key in ("previous_request_ids", "next_request_ids"):
v = payload.get(key)
if v is not None and len(v) > 3:
raise ValueError(f"{key} has {len(v)} ids, max 3")
return payload
if __name__ == "__main__":
ok = check_continuity({"previous_text": "Hello there.", "previous_request_ids": ["a", "b"]})
print(ok)Choosing context text
With a 100 character window, give the last sentence or two of the previous line, not the whole paragraph. If a segment starts mid-argument, the tail of the previous speaker's line is the most useful context.
Ordering matters
Render segments in script order and keep each response's request ID. Only pass IDs of requests that already exist. Segment 3 can name segments 1 and 2 in previous_request_ids; next_request_ids is only usable once the following segments have been rendered, for example when you re-take a middle line.
If you re-take a middle segment, later segments may no longer match it. Re-render the following one or two lines, then listen to the seam.
Without a continuity field
If a speech tool has no continuity parameter, render one line per file and join them. Sume's timeline audio concatenates 1-20 parts into one gapless file with sample-domain joins and no re-synthesis, so line boundaries do not add silence. Prosody continuity is a different thing from a clean join: a join cannot fix a line read in the wrong mood.
Keep line text and file ids in one manifest so a single re-take replaces one part and the concat reruns.
Sources
Related posts
More in Developers
- How many video jobs fit in the queue on Thanksgiving week, by plan
Free accepts 6 generation jobs, Pro 24, Startup 48 and Scale 120. A wave of 75 percent of the free queue space keeps you clear of queue_full on Nov 23.
- Thin vs full webhook payloads: how Sume's job events work
Stripe made thin events generally available for API v1. Sume's job webhooks carry the result in the payload, are keyed by job_id, and can be redelivered.
- Three Sume throttle signals: rate_limited, queue_full, 503
OpenAI now splits 429 (traffic rising too fast) from 503 (overload). Sume has three: 429 rate_limited, 429 queue_full and 503 provider_capacity_exceeded.
- TikTok ad price must match the landing page: burn one price with Sume
TikTok's example: an ad saying 'up to 50% off' while the site says 30% is not allowed. Drive the video and the page from one price variable. Code included.
Written by Sume