all dispatches
Aug 17, 20268 min read

Eachlabs for Lipsync, Face Swap, Moderation, and Video APIs

When model choice turns into routing work Ask a developer which lip sync model is best and you'll get an answer. Ask what happens when that model times out mid-queue, and the conversation gets quiet. That's the real work. Not picking a model — routing jobs. Lip sync takes an existing video plus replacement audio and has to preserve framing and identity. Face swap runs image-to-image and cares about expression, lighting, and how many faces are in frame. Moderation runs before or after generatio

Eachlabs for Lipsync, Face Swap, Moderation, and Video APIs

When model choice turns into routing work

Ask a developer which lip sync model is best and you'll get an answer. Ask what happens when that model times out mid-queue, and the conversation gets quiet.

That's the real work. Not picking a model — routing jobs. Lip sync takes an existing video plus replacement audio and has to preserve framing and identity. Face swap runs image-to-image and cares about expression, lighting, and how many faces are in frame. Moderation runs before or after generation and needs a verdict, not a render. Text-to-video takes a prompt and returns a clip with native synchronized audio. Four jobs. Four input shapes. Four failure modes.

Most pages you'll land on answer one of those questions in isolation, which is fine until you're wiring a backend. Then you need fallbacks when a first-choice model is unavailable, a way to switch endpoints without rewriting your queue, and moderation sitting in the same pipeline as generation rather than bolted on after.

Eachlabs is built for that layer: model API access across generative media models through one backend, so the routing logic lives in your workflow instead of in four separate integrations.

This piece walks through lip sync, face swap, moderation, and video generation — and the honest decision behind them. Sometimes going direct to a single provider's video API is the right call. Input shape, availability, and workflow stability decide it. Not benchmark scores.

Picking a model is easy. Routing between them is the actual work.
Picking a model is easy. Routing between them is the actual work.

Lipsync, face swap, moderation, and text-to-video are not the same routing problem

Ask "which model is best" and you'll get a shrug. Ask "what input do I have, what has to survive untouched, and what failure sends this job somewhere else" and the routing decision almost makes itself.

Lipsync splits first. If you already have talking-head footage and a new speech track, you want a video-to-video path. VEED Lipsync V2 on Eachlabs is the shape of that job: it regenerates mouth movement against replacement audio while leaving framing, background, and subject identity alone, works on live-action, animation, AI-generated avatars, and stock clips, and takes audio_url, video_url, version, and webhook_url in a single POST. Zero-shot, so no per-speaker training. If you have no footage at all, lipsync isn't your problem — generation is.

Face swap looks adjacent and isn't. AI Face Swap V1 is image-to-image, and the thing that matters is what it refuses to change: expression, lighting, skin tone, up to five faces in one frame. A general-purpose edit endpoint will happily re-render the whole image and quietly lose the pose you needed. Preservation is the spec, not a bonus.

Moderation is a control point, not a cleanup step. NSFW and identity checks belong before generation on user-supplied inputs and alongside it on outputs, because a swap or a lipsync job carries someone's face through your pipeline. Bolted on afterward, it's just an expensive apology.

Text-to-video is the widest fork. Prompt-only generation is fine for a single clip. Multi-shot work needs ordered keyframes, continuation from a final frame, and native synchronized audio with speech that actually lands on the lips — capabilities that vary sharply by model version, which is why the model maker's own API reference is the only trustworthy source for exact parameters, duration caps, and resolution tiers. Third-party roundups go stale fast.

Model API access only becomes useful when each of those questions has a named default and a named fallback.

Four different jobs, four different tools. They are not interchangeable.
Four different jobs, four different tools. They are not interchangeable.

How Eachlabs routes lipsync jobs without locking you into one model

Lipsync isn't generation. It's repair, dubbing, localization — you already have footage of someone talking, and you have new audio that has to land on their mouth without disturbing anything else. Framing stays. Background stays. Identity stays. That's the whole job, and it's why video-to-video models get judged on what they don't change.

VEED Lipsync V2 on Eachlabs shows the integration shape plainly: a REST-style call carrying audio_url, video_url, a pinned version, and a webhook_url, with a median runtime around a minute. Pinning the version matters more than it sounds — it's what stops a silent upstream update from changing your output. The webhook matters because a minute is too long to hold a request open in production. Fire the job, return, reconcile on callback.

Then the routing problem starts. One clip is a tight close-up. Another has a face turned three-quarters away, or a hand crossing the mouth. Some models process a whole shot as a single generation and hold the speaker consistent across frames; others stitch segments and drift. Language coverage varies. So does tolerance for animation versus live action versus AI-generated avatars. If you're hunting through a vendor's official API documentation to confirm parameters and supported regions, do exactly that — read the source, not a summary.

Here's the honest tradeoff. A single-model provider is simpler when you only ever need one behavior. It gets brittle the moment you need a fallback or a better fit for one difficult clip. Unified model API access means your orchestration pattern survives that swap; only the model identifier changes.

Lipsync is an alignment problem before it is a rendering problem.
Lipsync is an alignment problem before it is a rendering problem.

Face swap and moderation need different controls, not one generic media endpoint

Identity transfer and content screening get filed under "media API" together, then treated as if they need the same plumbing. They don't.

Face swap is image-to-image work, and the pass/fail test isn't whether a file comes back. It's whether expression survives, whether lighting on the new face matches the plate it landed on, whether the result reads as a photograph instead of a composite. Eachlabs's own face swap page describes AI Face Swap V1 as preserving expressions, lighting, and overall realism, with support for multiple swaps in a single image — which matters the moment your input is a group photo rather than a headshot. That page also sits inside a unified API layer, so the same request shape carries across model families.

Moderation is not a sibling of that. It's a gate. Screening should run before generation continues, with three outcomes wired in: block, reroute to a safer model, or flag for human review. Treat it as a return value your orchestration reads, not a report you check later. That's what keeps unreviewable output from reaching your storage, your CDN, and your review queue — the unglamorous part of production readiness.

So the routing logic stays simple. Identity transfer goes to face swap. Content screening goes to moderation. When a job needs both, sequence them, gate first. Practical model API access means the workflow knows which of those it's doing at every step.

Moderation is a filter with its own controls, not a setting on something else.
Moderation is a filter with its own controls, not a setting on something else.

Text-to-video routing depends on audio, scene control, and continuation

Most text-to-video comparisons stop at output quality. That's the wrong axis for a backend. What actually changes your architecture is what the model accepts on the way in, and what it hands back on the way out.

Start with input shape. A prompt-only endpoint means your upstream job is text assembly: build the prompt, fire, wait. The moment a model accepts an image, a reference video, or ordered keyframes, your pipeline grows an asset stage — storage, validation, frame ordering, and some way to keep continuity between shots. Reference-conditioned generation is where teams usually get surprised, because the guidance images have to be produced, versioned, and passed in a specific order before the video call ever happens.

FLUX 3 sits at the structured end. It takes text, an image, or ordered keyframes; produces multiple scenes and camera angles inside a single generation of up to twenty seconds; extends an existing clip from its final frame; and generates native synchronized audio, including multilingual speech with lip sync, alongside the frames. That combination lets one call carry scene logic your orchestration layer would otherwise have to stitch.

Happy Horse 1.1 solves a narrower, cleaner job: 1080p from a prompt alone, native audio and multilingual lip-sync included, clips in the three-to-fifteen-second range. No asset staging, no keyframe contract. For short social cuts or product beats, that constraint is a feature, not a limitation — and its prompt-only simplicity is genuinely easier to wire than a keyframe pipeline.

So route on the job, not the demo reel. Do you need scene structure, continuation from a prior clip, or a single prompt-to-clip call? Practical model API access means that answer can change per request without changing your code path.

Sometimes you call the provider directly. Sometimes the hub earns its place.
Sometimes you call the provider directly. Sometimes the hub earns its place.

When to call one provider directly, and when a unified API layer is the better fit

Sometimes the right answer is the boring one: integrate straight against a single provider. If your product does one thing — dub existing footage, swap one face, generate one clip format — and that behavior isn't going to change next quarter, a direct integration is fewer moving parts. One SDK, one auth flow, one schema to learn. If you're building on a specific vendor's video model, read that vendor's own API documentation and wire it up. Don't add a layer to solve a problem you don't have.

The calculus flips the moment you have more than one job. Lipsync on existing talking-head video is a different input shape than image-to-image face swap, which is different again from text-to-video with native synchronized audio, which is different again from running a moderation check before anything reaches a user. Four models, four contracts, four failure modes. That's where model API access through one layer starts paying rent: the same request envelope, the same webhook pattern, the same retry logic, and the freedom to swap the model behind a step without touching your backend.

Eachlabs's tradeoff is honest enough to state plainly. Orchestration is a layer, and layers cost something — indirection, one more dependency in your critical path. Choose it when flexibility across model generations matters more than a single frozen integration. Production readiness, not novelty, should decide.

What to check before you ship: pricing, latency, model availability, and reliability

How is usage metered? Media jobs don't bill like text. Video and lip sync work is usually measured against output duration, so a one-minute clip and a five-second clip aren't remotely the same job. Confirm the metering unit per model before you route production traffic through it, because switching models inside a workflow can change cost behavior even when the output looks identical. Eachlabs's model pages publish an estimated runtime and price field alongside each variant — read them per model, not per platform.

What latency should I plan for? Treat runtime as a routing input. The VEED Lipsync V2 page lists a median runtime around a minute; text-to-video with native synchronized audio runs longer. Anything past a few seconds wants a webhook and async completion handling, not a blocking request.

What happens when a model is unavailable? That's a routing question, not a vendor question. Your backend should fall back to a second model without a rewrite, which means keeping request shape and completion handling stable across media types.

Before you commit: verify the exact model version, input requirements, and retry behavior in the provider's own documentation — including Google's Gemini API and Vertex AI docs if you're evaluating Veo. Consistent model API access is only useful if the operational details hold under load.

If you want one backend for lipsync, face swap, moderation, and video APIs, Eachlabs is the place to start.