We are seeing an issue where the egress recording for an Agent Participant contains an echo of the agent’s audio, even though the echo did not occur during the actual call.
This was observed in the following room/session - RM_ZcvBdCCf5b7t. Project Id - p_3tqm7ro6kbs.
Room Link - Sign in | LiveKit Cloud
We also have the original recording from the dialer side, which confirms that there was no echo in the actual agent audio. However, the LiveKit egress recording includes an echo on the agent’s track.
Happy to share both recordings with the LiveKit team for debugging. Please feel free to DM me on the LiveKit Community Slack or reach out via email: zaheer.abbas@prodigaltech.com
@Zaheer_Abbas almost certainly one of two things: a custom Room Composite layout that’s double-capturing the agent’s audio, or the v1.11+ audio drift-compensation introduced in https://github.com/livekit/egress/pull/974.
Two questions to narrow it:
- Egress type,
RoomComposite (with custom layout?), TrackComposite, TrackEgress, or ParticipantEgress?
- Approx Cloud egress version at the time of
RM_ZcvBdCCf5b7t?
If Room Composite with a custom layout: check the layout HTML every element rendering remote agent audio must be muted (or removed). Chrome’s audio loopback captures whatever plays in the page and the mixer pulls the track directly > delayed doubling that sounds like echo.
If it’s not Room Composite, https://github.com/livekit/egress/pull/974 (shipped v1.11.0) added pitch-based time-stretching on RTCP drift; with TTS audio that can produce echo-like wobble…
Connecting you on slack as well.
- We are using a normal
RoomComposite request (No custom layout), we are NOT recording video, it is an audio only request. Please check the Room’s logs or egress log on LiveKit side once
- I don’t know the cloud version - we are using LiveKit cloud, unsure where I can check which cloud egress version we are using, this occurred today (May 7, 2026), please check the LiveKit cloud dashboard for exact timestamp as I have shared the Room ID in my original message
req = api.RoomCompositeEgressRequest(
room_name=ctx.room.name,
audio_only=True,
audio_mixing=api.AudioMixing.DUAL_CHANNEL_AGENT,
file_outputs=[
api.EncodedFileOutput(
file_type=api.EncodedFileType.OGG,
filepath=file_path,
disable_manifest=True,
s3=api.S3Upload(**redacted),
)
],
webhooks=webhooks,
)
res = await livekit_api.egress.start_room_composite_egress(req)
Lmk if you need further info
Thanks for the detail, audio_only=True + default template + DUAL_CHANNEL_AGENT narrows this a lot.
Likely, it’s coming from the dual-channel/agent code path, the same area that bit your project before in [BUG] Audio Mixing Parameter is NOT being adhered to consistently · Issue #939 · livekit/egress · GitHub (mono fallback) and in #952 (45s agent blank). DUAL_CHANNEL_AGENT runs through the SDK-source pipeline (not the Chrome/WEB path), which had significant mixer changes around v1.11, notably https://github.com/livekit/egress/pull/974 added pitch-based time-stretching on RTCP drift. With TTS-clock audio, that mixer has been known to produce stretching artifacts that perceptually sound like echo.
For diagnostic, drop audio_mixing (defaults to a single mono mix) and re-run the same flow. If the echo disappears, it’s the dual-channel pipeline.. If it persists, it’s something deeper in the mixer or source-subscription side, we can than do a quick huddle..
@Muhammad_Usman_Bashir - I am NOT seeing this consistently and unable to reproduce this again. We have noticed this for the above Room (RM_ZcvBdCCf5b7t) and wanted to report this once here to debug further and see if this is a bug on LiveKit egress side
Makes sense, intermittent ones are the worst to chase without a reliable repro.
For the next occurrence, the highest-value artifacts to preserve are:
- the OGG file itself (so the team can spectrogram the echo and see if it’s a copy of agent-track audio, a delayed mix, or a pitch artifact)..
- the egress ID + exact UTC timestamp range..
- the dialer-side reference recording you mentioned..
Do you happen have Agent Insights enabled? If so can you share the session id and the Insights access with me?
@CWilson - no we dont have agent insighta enabled because of compliance reasons. Room Id - RM_ZcvBdCCf5b7t . Project Id - p_3tqm7ro6kbs - does this help check further on your end?
Interesting so Egress is fine for compliance but Insights is not. Curious what the distinction is there.
The egress’ recording is being stored on our cloud which we run through redaction as soon as audio data is available on our end. The Insights’ recording and transcript are being stored in LiveKit cloud
I did not see any issue with the session id. Is it possible that something in that redaction process is causnig an echo?
No the redaction just mutes the audio where it sees any redacted entities that are available. It wouldn’t echo throughout the audio file for the agent participant.
@Milos_Pesic may have an idea but I don’t know any reason you would hear an echo.
I will take a look - there is one thing that we can immediately exclude - time stretching @Muhammad_Usman_Bashir mentioned is an experimental feature and at the moment not used in Livekit Cloud Egress.
@Milos_Pesic, good call, that rules out the time-stretching path. With the custom-layout double-attach also out (default template), the closest open public-source hypothesis is the SDK-source channel routing for DUAL_CHANNEL_AGENT; SDK RoomComposite produces split stereo audio instead of mixed output · Issue #1199 · livekit/egress · GitHub sits in that area for audio-only RoomComposite. Past that, it’s beyond what’s visible without internal Cloud telemetry. Appreciate the look.