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
- VS Code 1.140 shared MCP config files: what goes in the Sume entry
VS Code 1.140 lets MCP servers live in portable config files shared across Copilot tools. For Sume the entry is one URL, and no key belongs in the file.
- What a media MCP server should declare at server/discover
MCP 2026-07-28 adds a required server/discover call. A media server has more to say than versions: async jobs, wait limits, scopes. Where Sume documents each.
- whisper-1 or gpt-transcribe for subtitles: what OpenAI assigns to each
OpenAI recommends gpt-transcribe, gpt-4o-transcribe-diarize for speakers, whisper-1 for translation and subtitles. Plus the 25 MB limit and a chunking script.
- Windsurf now redirects to Devin Desktop: where Sume MCP setup lives
Windsurf redirects to Devin Desktop, and Cascade was removed in v3.9.19. Re-add Sume's hosted MCP URL there and verify it with mcp_health and tools_list.
Written by Sume