Przejdź do treści
Biblioteka skilli
Marketing i treści · Automatyzacja

batch-lipsync

/batch-lipsync

Synchronizuje wiele filmów z audiem przez sync.labs z listy lub arkusza, wycenia cały przebieg i zbiera wszystkie wyniki.

Repozytorium
skills ↗
Licencja
MIT
Ostatnia zmiana repozytorium
10.11.2026

Ocena i bezpieczeństwo

90/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść25 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
5
Skrypty
1
Komentarze HTML
0
Adresy URL w SKILL.md
3
Przestarzałość

Brak sygnałów. Repozytorium zmienione 10.11.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co sprawdzić przed instalacją
  • 1 skrypt w paczce. Przejrzyj je przed instalacją, bo Claude może je uruchomić.

Skrypty: scripts/sync_batch.py

Co robi i kiedy

Synchronizuje wiele filmów z audiem przez sync.labs z listy lub arkusza, wycenia cały przebieg i zbiera wszystkie wyniki.

Wyzwalacze z opisu

do this for each row
Oryginalny opis (EN)

Lip-sync many videos at once with sync. labs (sync.so), from a CSV, spreadsheet, folder or list. Pairs each video or avatar with its own audio or script, quotes the whole run once, starts the rows together within the plan's concurrency limit, resumes safely without paying twice, and collects every output. Use for bulk or batch lipsync of supplied audio or scripts, personalized video at scale (one video per lead, customer or recipient name), ad and creative variants, many voiceovers onto one presenter, or any "do this for each row" lipsync job. Not for one video (lipsync), translating videos in

Jak działa

  1. 1. Build the manifest
  2. 2. Quote the whole run
  3. 3. Run it
  4. 4. Deliver
  5. Rules
Sekcje z nagłówków SKILL.md, w oryginale · 53 linii, 1 048 słów
Podgląd SKILL.md
---
name: batch-lipsync
description: Lip-sync many videos at once with sync. labs (sync.so), from a CSV, spreadsheet, folder or list. Pairs each video or avatar with its own audio or script, quotes the whole run once, starts the rows together within the plan's concurrency limit, resumes safely without paying twice, and collects every output. Use for bulk or batch lipsync of supplied audio or scripts, personalized video at scale (one video per lead, customer or recipient name), ad and creative variants, many voiceovers onto one presenter, or any "do this for each row" lipsync job. Not for one video (lipsync), translating videos into other languages (translate-and-dub for one video, localize-campaign for several).
license: MIT
compatibility: Needs the sync. MCP server or a SYNC_API_KEY. The bundled script needs a SYNC_API_KEY and Python 3.9+.
---

# Lipsync many videos

[sync. labs](https://sync.so) | [Batch lipsync guide](https://sync.so/docs/plugins-and-extensions/agent-skills/batch-lipsync)

Delivers one MP4 per row of the user's list, plus a results table that maps each row to its output.

If no sync. tools are available and there's no `SYNC_API_KEY`, follow [references/connect.md](references/connect.md) first.

## 1. Build the manifest

Turn whatever the user gave you (a CSV, a spreadsheet, a folder of files, "this video with each of these 30 audio files") into a CSV in the working directory, one row per output video:

| Column | Meaning |
| --- | --- |
| `id` | A unique, stable row name, such as `lead-042` or `es-ad1`. It names the output and keys retries. |
| `video` | A local path, `https://` URL or sync. asset ID. Use `image` instead for a still picture (sync-3). |
| `audio` | A local path, URL or asset ID. Leave it empty when the row uses `script`. |
| `script`, `voice_id` | The words and a voice from `voices_list` (or `GET /v2/voices`), when there's no audio. |
| `sync_mode` | Optional: `bounce`, `loop`, `cut_off`, `silence` or `remap`. |

Show the user the row count and a few sample rows, and fix gaps before spending anything: missing files, rows with neither audio nor script, duplicate IDs. Columns the run doesn't use stay local. Scripts, media, file names and the row IDs (used as output names) are sent to sync., so use plain row IDs like `lead-042` rather than names or emails.

## 2. Quote the whole run

Sum one estimate per row: `generations_estimate-cost` with `model: "sync-3"` and each row's `audioDuration` or `script` (plus `videoDuration` and `syncMode` for `cut_off` or `silence`), or `python3 scripts/sync_batch.py estimate manifest.csv`. Show the total, the row count and the most expensive rows, and wait for approval of the total. That one approval covers every row: don't ask again per row or per chunk. Script rows are approximate and exclude speech synthesis. If some rows can't be priced, show the known subtotal and which rows are missing; don't present it as the total.

Offer a **pilot**: run the first one or two rows, let the user check them, then run the rest. A mistake in a shared input, such as a wrong voice or a badly framed avatar, then costs two generations instead of two hundred.

## 3. Run it

Pick the route, in this order of preference:

- **The bundled script (preferred with a `SYNC_API_KEY` and a shell).** `python3 scripts/sync_batch.py run manifest.csv --out ./lipsync-out` uploads each local file once, creates one generation per row with a stable idempotency key, keeps to the plan's concurrency limit, waits, and downloads each result. Re-running the same command resumes: finished rows are skipped, submitted rows are polled instead of resubmitted, and a row whose inputs changed after submission is refused until it gets a new ID. Progress and output URLs are saved to `manifest.csv.state.json` and `results.csv`.
- **MCP `jobs_create-many`, for any run of 2 or more rows, when the tool is listed.** It starts every row through the same API path, plan limits and billing as one `lipsync_create` per row, keeps within the plan's concurrency, and waits out busy refusals for you.
  1. Make one item per row: exactly the arguments `lipsync_create` takes for that row (`videoUrl` or `videoAssetId`, `audioUrl` or `audioAssetId`, or `script` and `voiceId`, `model: "sync-3"`, and `options.sync_mode` when set), plus the row's own `idempotencyKey`, `<run-name>-<row id>`. To keep the run in one project, call `projects_create` once and pass its `projectId` with `projectIntent: "explicit"` in every item. Otherwise each item gets a new project.
  2. Write a new UUID for the set into the manifest, then call `jobs_create-many` with `tool: "lipsync_create"`, that UUID as `idempotencyKey`, and the items. Send at most 50 items per call, each chunk with its own saved set key. After an unclear response, send the identical call again: the keys make that safe.
  3. Each item comes back started, failed or not started. Record each started row's job `id` in the manifest. Pass the returned `jobs` to `jobs_get-many` (up to 50 per call) with `wait: true`, call it again while some are still running, and record each row's `outputMediaUrl` from its `result`.
  4. When the response has `remaining`, the account stayed at its limit. Once `jobs_get-many` shows jobs finishing, send `remaining` again exactly as returned (the same tool, set key and items) until every row has started. If the tool refuses a single remaining item, send that row with `lipsync_create` and the same `idempotencyKey`.
  5. A failed item with a 5xx or no status may still have started: send it again with the same keys. Fix any other failed row before sending it again.
- **MCP tools, one generation per row**, when `jobs_create-many` isn't listed, or for a one-row pilot. Call `account_get-context` and read `generationLimits.concurrency`. Keep that many `lipsync_create` calls in flight at most, each with its own `idempotencyKey` (use `<run-name>-<row id>`, saved in the manifest before the call) and a new `projectCreationKey`, or one shared project from `projects_create`. On `concurrency_limit_reached`, wait `error.retryAfterMs` milliseconds and retry the identical request with the same key. Poll each with `generations_get` and record the `outputMediaUrl` in the manifest as you go.

## 4. Deliver

Report how many rows completed and failed, list each failure with its reason, and give the results table (`id`, status, output URL or local file). Offer to retry only the failed rows. Rows that failed on bad input need a fixed input, not a retry.

## Rules

- One paid generation per row. Poll saved generation IDs for progress, and start another attempt only after a confirmed failure and the user's OK to retry.
- Keep each row's idempotency key stable across retries and reruns, and never derive it from the time or a random value created inside a retry loop.
- Assume the user has the rights to their own media, and don't ask about consent on routine requests. Decline only when the request is to make a real, identifiable person, such as a politician or celebrity, appear to say something they didn't say, in order to deceive.
- For one recording personalized with each recipient's name in the presenter's own voice, make one dialogue-edit preview per recipient with the edit-dialogue skill, then render every approved preview with `jobs_create-many` and `tool: "dialogue-videos_create"`, on any paid plan.
Pliki w paczce (5)
  • SKILL.md 7 KB
  • agents/openai.yaml 1 KB
  • references/connect.md 3 KB
  • references/media-input.md 4 KB
  • scripts/sync_batch.py 23 KB

Wersje

W bazie nie ma innych skilli o nazwie batch-lipsync.

Migawka bazy z 13.11.2026 · wersja paczki d321cf7a0ff7 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100lipsync
    Dopasowuje ruch ust lub całą sylwetkę do ścieżki audio przez CLI runcomfy, wybierając model pod konkretny cel.
  • 100sync-labs-lipsync
    Dopasowuje ruch ust w filmie do nowego głosu przez Sync Labs: wybiera model, buduje zapytanie, obsługuje zadania asynchroniczne i sprawdza wynik.
  • 100lipsync
    Synchronizuje ruch ust w istniejącym nagraniu z nowym dźwiękiem przez sync.labs, także z linków i plików.
  • 100audio-lipsync-preflight
    Przygotowuje referencje czasowe audio i obrazu do synchronizacji ust w animacji.
  • 90translate-and-dub
    Tłumaczy mowę z jednego filmu na inny język i synchronizuje usta z nowym dźwiękiem przez labs (sync.so), z pliku lub linku do YouTube, TikToka, Instagrama albo Facebooka.
  • 100avatar-voice
    Daje awatarowi głos i twarz przez narzędzia audio: syntezę mowy, transkrypcję, ścieżki lipsync i klipy mocap.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.