Continuation Guide | Hume API

Octave supports continuation across generations. It carries context from earlier output into the next generation, keeping long-form speech coherent across multiple utterances so delivery stays natural, consistent, and emotionally continuous.

Ways to continue

1. Chain utterances in one request

2. Continue from a previous call

Pass context in the context field using one of:

Aspects of continuation

Narrative coherence

For long-form audio such as audiobooks, continuation keeps the narrative cohesive across utterances. It prevents abrupt shifts in delivery, pacing, and emotion, carries energy and emotional progression forward, and lets each segment build naturally on the last for a more authentic listen.

In the examples below, the same line is delivered with different emotions based on the context set by the preceding utterance.

With positive context ( excited interpretation)

curl "https://api.hume.ai/v0/tts/stream/json" \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "version": "1",
    "utterances": [\
      {\
        "text": "Our proposal has been accepted with full funding for the next three years!",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      },\
      {\
        "text": "I can't believe it!",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      }\
    ]
  }'

With negative context ( disappointed interpretation)

curl "https://api.hume.ai/v0/tts/stream/json" \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "version": "1",
    "utterances": [\
      {\
        "text": "After all our preparation... They've decided to cancel the entire project...",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      },\
      {\
        "text": "I can't believe it!",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      }\
    ]
  }'

Linguistic context

Continuation also provides linguistic context for proper pronunciation, particularly with homographs—words that are spelled the same but pronounced differently based on meaning. For example, Octave can correctly differentiate between:

Try these examples to see how Octave intelligently distinguishes between different pronunciations of the word “bow” based on contextual understanding:

With /bau/ pronunciation

curl https://api.hume.ai/v0/tts/stream/json \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "utterances": [\
      {\
        "text": "What a fantastic performance!",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      },\
      {\
        "text": "Now take a bow.",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      }\
    ]
  }'

With /bō/ pronunciation

curl https://api.hume.ai/v0/tts/stream/json \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "utterances": [\
      {\
        "text": "First take a quiver of arrows.",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      },\
      {\
        "text": "Now take a bow.",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      }\
    ]
  }'

Consistent voice

When continuing from an utterance, Octave intelligently handles voice consistency:

Below are sample requests which show how you can continue with the same voice:

For more information on specifying a voice in your request, see our voices guide.

Multiple utterances in a single request

curl "https://api.hume.ai/v0/tts/stream/json" \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "utterances": [\
      {\
        "text": "Gather around everyone! May I have your attention? Today we'll be learning about supermassive black holes at the center of galaxies.",\
        "description": "projecting in a large museum auditorium, enthusiastic, joyful, ostentatious",\
        "voice": {\
          "name": "Donovan Sinclair",\
          "provider": "HUME_AI"\
        },\
        "speed": 1.3\
      },\
      {\
        "text": "I've arranged for the museum guide to explain their special exhibit on black holes! I think you'll find it really helpful for the concepts we've been covering in class!",\
        "description": "pedagogical, enthusiastic, hinting",\
        "speed": 1.3\
      }\
    ]
  }'

Continuing from previous generation using context

# First request - capture the generation_id
GENERATION_ID=$(curl "https://api.hume.ai/v0/tts/stream/json" \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "utterances": [\
      {\
        "text": "Gather around everyone! May I have your attention? Today we'll be learning about supermassive black holes at the center of galaxies.",\
        "description": "projecting in a large museum auditorium, enthusiastic, joyful, ostentatious",\
        "voice": {\
          "name": "Donovan Sinclair",\
          "provider": "HUME_AI"\
        },\
        "speed": 1.3\
      }\
    ]
  }' | jq -r '.generations[0].generation_id')

# Second request using the generation_id from the first request
curl "https://api.hume.ai/v0/tts/stream/json" \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "utterances": [\
      {\
        "text": "I've arranged for the museum guide to explain their special exhibit on black holes. I think you'll find it really helpful for the concepts we've been covering in class.",\
        "description": "pedagogical, enthusiastic, hinting",\
        "voice": {\
          "name": "Donovan Sinclair",\
          "provider": "HUME_AI"\
        },\
        "speed": 1.3\
      },\
    ],
    "context": {
      "generation_id": "'$GENERATION_ID'"
    }
  }'

Changing voices mid-conversation

This intelligent handling of voice consistency saves development effort and ensures a seamless listening experience, making it easier to create dynamic, multi-character narratives without redundant voice specifications.

Notes and constraints