Pipecat's internal StartFrame validation is rejecting all frames
pipecat version
0.0.95
Python version
3.11
Operating System
ubuntu 22.04
Question
i’m building a speech-to-speech bot using Pipecat 0.0.95 with the FastAPI runner and the SmallWebRTC client. I wrote a custom processor (GeminiLiveService) that forwards microphone audio to Google’s Gemini Live native audio websocket and streams the responses back. The problem: Pipecat keeps logging that the processor hasn’t received a StartFrame yet, so every InputAudioRawFrame that the transport sends upstream is rejected
What I've tried
What I’ve Tried
Override Call Order: Placed await super().process_frame(frame, direction) first in the method.
Async Start Method: Added async def start() to launch the Gemini WebSocket as soon as the StartFrame arrives.
Lifecycle Control: Allowed Pipecat to drive the lifecycle—no manual push of StartFrame.
Transport-Level Logging: Confirmed via input transport logs that the StartFrame is emitted before any audio frames.
Audio Chunk Rate Adjustment: Reduced audio chunk rate to 10 ms — same results.
Context
Pipecat 0.0.95 (conda env)
Python 3.11
Ubuntu 22.04
Transport: SmallWebRTC (FastAPI runner)
CPU-only environment (no PyTorch/TensorFlow installed)
Minimal pipeline: transport.input() -> GeminiLiveService -> transport.output()
If there’s a correct pattern for building a custom AIService that consumes upstream frames immediately after start-up, I’d appreciate pointers. Thanks!
It sounds like your custom FrameProcessor(s) are blocking the StartFrame. Make sure that your FrameProcessors push all frames. Read more about it here: https://docs.pipecat.ai/guides/fundamentals/custom-frame-processor
Note: The StartFrame must traverse the entire Pipeline before any other processing is done. This ensures that all processors are initialized and ready for processing.