# Skill: full/natural-voice — "עברית טבעית ושיבוט קול" (Complete video)

Your own voice, in Hebrew that sounds like a person and not like a machine reading a page — what the owner's own reels were made of, for everyone. Your voice is cloned once from a few minutes of you talking; the script is written for the ear; inside every take a voice director (Gemini) adds what a Hebrew voice needs and nobody knows to add: niqqud only on the words a voice misreads (אֶשְׁלַח, הַסֵּפֶר), an English delivery tag where the delivery changes — friendly for an offer, quiet for a story, a real shout at the climax — and the stability that fits. The words never change. Three takes are made, Gemini 3.1 Pro listens to all of them and names every word read wrong, and the best clean take becomes a faceless reel: stock footage, every word on screen as it is said, sound and music under the voice. Or keep only the voice-over, for your own video.

**Includes:** your voice cloned once from 1–3 minutes of you talking · a script written for the ear, not for the page · a voice director inside every take: niqqud only where a voice misreads, a delivery tag per line, the right stability · three takes, and Gemini listens to all of them before one is chosen · every word right — a misread word is fixed and re-read · a faceless reel around the voice: stock footage, every word on screen, title cards · sound design and music under the voice · or only the voice-over, for your own video
**Built on:** hook `words` ("מילה-מילה", `/skills/hook-words.md`) + captions `volt` ("וולט", `/skills/captions-volt.md`)
**Price:** 240–280 credits per finished minute · 30 s ≈ 125–150 credits
**Uses:** `/v1/ai/voices/clone` · `/v1/ai/voice` · `/v1/ai/text` · `/v1/studio/convert` · `/v1/studio/kinetic` · `/v1/ai/sound-effects` · `/v1/ai/music` · `/v1/stock/broll-plan` · `/v1/studio/edit`

Base URL: `https://apihub.co.il` · Auth: `Authorization: Bearer <API key>` · Docs: `/docs`
Send the same `X-Tag: <job name>` header on every call of one video; `GET /v1/usage?tag=<job name>` then
returns exactly what it cost. Times in request bodies are **seconds on the edited (output) timeline**.
Unknown fields are rejected with the name of the right field — read the error instead of guessing.
**Files are kept 24 hours** (renders, uploads, generated clips/images/music) — download the finished video.

**Models.** ElevenLabs Instant Voice Clone (once) and eleven_v4, the newest ElevenLabs model, read the script;
Gemini 3.5 Flash directs the Hebrew inside the voice call (niqqud, delivery tags, stability — free); Gemini 3.1 Pro listens
to the takes; Gemini Flash-Lite picks the moments and the stock (Pexels, Pixabay, CC0). Everything is priced by the
script's length.

---

## 1. Your voice — once

```jsonc
POST /v1/ai/voices/clone { "name": "My voice", "language": "he",
  "audio_urls": [ "<recording 1>", "<recording 2>" ],          // 1–5 files, 1–3 minutes in all
  "consent": { "accepted": true, "subject": "self", "basis": "own" } }   // ≈ 282 credits, once
// → voice_id — yours alone: only your account sees it and can read with it
```

**The recordings decide the clone.** What worked for the owner's own clone:
- **1–3 minutes of you talking the way you talk in your videos** — with energy, not reading a page. A flat recording
  gives a flat clone, whatever the text says later.
- **Hebrew recordings for a Hebrew voice.** A clone made in another language speaks Hebrew with that accent.
- **One speaker, a quiet room, the phone close to the mouth, no music.** Background noise is cleaned
  (`remove_background_noise`, on by default) but a clean recording clones better.
- Upload the files first (`POST /v1/studio/uploads`) and send their urls.

**Only your own voice, or the voice of someone who agreed** (`"subject": "other"` with their name and `"basis": "consent"`).
A recording the provider flags for the speaker's own verification is refused and nothing is kept (`voice_needs_verification`):
the speaker verifies on ElevenLabs' site; it is never worked around.

**No recordings?** A ready Israeli voice from `GET /v1/ai/voices`: "Itai" (`JIxTgeeS5w0UQyBxEnrl`, an upbeat creator),
"Omer" (`k77ZRVqAFg9Hd0ltAuON`, a confident advert voice), "API Hub · Israeli speaker A" (`SxE1yZJthRl35h6VxNqR`).
The library's other voices speak Hebrew with an accent.



## 2. Write it for the ear

The voice reads exactly what you write. The owner's reels sounded human because the script was spoken Hebrew before
any voice read it:
- **Say it, don't write it.** Short sentences, the way you would say it to a friend. "אני אהיה הראשון", not «אני אהיה האחד הזה».
- **One way of addressing the viewer** all through (אתה / את / אתם) — a voice cannot fix a switch.
- **Numbers in words** where the form matters ("שלוש צפיות", "עשרים אנשים"); prices and years as digits are fine.
- **A Latin acronym after a consonant:** "סרטונים של AI", not "סרטוני AI" — after a vowel the voice adds an h ("hey-hay").
- **"..." where you want a real pause; a comma for flow; no "—"** (the voice stops dead on it; the director turns it into a comma).
- **Leave the niqqud and the tags out.** The voice endpoint directs Hebrew itself (step 3). Write `mood` instead.

## 3. The voice — three takes, directed for you

```jsonc
POST /v1/ai/voice { "text": "<the script>", "voice_id": "<your voice_id>", "timestamps": true,
  "mood": "<how it is said: motivational, starts calm and builds to a shout>" }    // send it 3 times at once
// ≈ 38 credits per 1,000 characters a take · eleven_v4, the newest ElevenLabs model
// → output.url (mp3), output.duration_seconds, output.words (plain, timed — the captions),
//   output.text (the script, plain), output.directed { tts, stability, tags, vocalised_words }
```

**What the director does** (`prepare`, on by default for Hebrew): Gemini reads the script and adds what the owner added
by hand — niqqud on every Hebrew word, with the reading the sentence means (אֶשְׁלַח, הַסֵּפֶר, שִׁנָּה), English words
and brands left in Latin letters (ChatGPT, AI), an English delivery tag where the delivery changes ([friendly, energetic]
for a tip or an offer, [storytelling], [firmly], [yelling furiously, out of breath] for a real shout), and the stability
that fits (0.3 lively speech, 0.4 calm narration, 0.15–0.2 a climax). The words never change: an answer that changes one is thrown away and the script is read as sent.
`output.directed.tts` is exactly what the voice read. The three takes share one direction and differ in the reading.

- **`mood` is the best lever you have.** "warm explainer for beginners", "funny, deadpan", "a personal story, quiet
  then proud", "an offer, upbeat, ends with a call to action". Without it the director reads the words.
- **A long script = one call per passage of one energy** (up to ~400 characters each), with `previous_text` and
  `next_text` = the neighbouring passages, so the voice flows across them. Each passage gets its own `mood`.
- **Measured on the owner's clone** (Gemini 3.1 Pro ranking 4 shuffled takes, 3 rounds): directed beat plain in 11 of 12
  rounds — a motivational script's delivery 9.0 against 3.3.

## 4. Listen before you choose

```jsonc
POST /v1/ai/text { "quality": "best", "json": true, "temperature": 0.2, "max_tokens": 6000,
  "system": "You are a demanding native Israeli voice director. You hear several takes of the same Hebrew text, in order (take 1, take 2, …). For EACH take: list every word that is heard differently from the text (the word as written and what was heard, in Latin letters), score naturalness 1-10 (sounds like a real Israeli person, not a robot or a radio announcer) and delivery 1-10 (fits the intended delivery and what the words mean), and add a one-line note. Then rank the takes best to worst. Answer JSON: {\"takes\": [{\"n\": 1, \"wrong_words\": [{\"word\": \"\", \"heard\": \"\"}], \"naturalness\": 0, \"delivery\": 0, \"note\": \"\"}], \"ranking\": [1]}",
  "prompt": "The text: <output.text>. The intended delivery: <mood>.",
  "media": [ { "url": "<take 1 mp3>", "type": "audio" }, { "url": "<take 2 mp3>", "type": "audio" }, { "url": "<take 3 mp3>", "type": "audio" } ] }
// ≈ 14 credits · → { takes: [ { n, wrong_words, naturalness, delivery, note } ], ranking }
```

- **Take the best-ranked take with no wrong word.**
- **A word wrong in one take only** — that take is out; the others read it right.
- **A word wrong in every take** — it is the text: take `output.directed.tts`, put niqqud on that one word (or say it
  another way: a synonym, the number in words) and send it with `"prepare": false` (read exactly as sent), two takes.
- A whole-take check sometimes reports a word that was fine. When a common word is flagged in only one take, cut that
  word out (`POST /v1/studio/convert` with `trim` ±0.15 s around its time in `output.words`) and ask an open question
  about the short clip: "transcribe this word exactly as heard, in Latin letters".
- **Your ear is final.** Play the winner before you build on it.

## 5. The reel around the voice

The chosen take becomes a faceless reel: stock footage over the whole video, every word on screen as it is said,
title cards, sound and music under the voice — the narration path of `/skills/full-stock-faceless.md`. The WAV lets the
plan measure the voice and set the music under it; without it the music stays at a fixed 0.3 (`warnings` says so).

```jsonc
POST /v1/studio/convert { "video_url": "<the take's mp3>", "output": { "format": "wav" } }   // ≈ 5 credits — the music is set by it
POST /v1/studio/kinetic { "video_url": "https://media.gpt.org.il/samples/canvas-9x16-black-15min.mp4",
  "words": <the take's output.words, start/end × 1000 — ms>, "cut": false,
  "source": { "duration": <duration_seconds>, "fps": 30 }, "cut_audio_url": "<the wav>" }   // 1 credit
POST /v1/ai/text  — the kinetic picker: "system" = /skills/full-kinetic.md step 3 verbatim, "prompt" = the numbered words,
                    "media": [ { "url": "<the take's mp3>", "type": "audio" } ]       // ≈ 1 credit, Flash-Lite
POST /v1/ai/sound-effects  ×4 — the kit of /skills/full-stock-faceless.md step 4      // ≈ 1 credit each
POST /v1/ai/music { "prompt": "<the picker's music brief>", "duration": <ceil(duration_seconds + 1)>, "instrumental": true }
POST /v1/studio/kinetic { …the first body…, "emphasis": […], "scenes": […], "sounds": { … }, "music": { "url": "<mp3>" } }
POST /v1/stock/broll-plan { "style": "faceless", "words": <kinetic output.words>, "duration": <duration_seconds>,
  "edit": <kinetic output.edit>, "voice": { "url": "<the take's mp3>", "seconds": <duration_seconds> },
  "sounds": { "whoosh": "<the whoosh mp3>" }, "topic": "<one line>" }             // adds the voice and trims to it
POST /v1/studio/edit <output.edit>                                               // x-wait-ms: 90000, then poll
```

**Only the voice-over?** Stop after step 4: the mp3 and its timed words are the deliverable, ready for
`/v1/studio/edit` as `voiceover` over your own video, or for captions.

## What the example cost

The example: 22 seconds in the owner's own clone, a motivational script from a casual start to a shout, made
by this recipe on dev — 104 credits, the clone made before. Gemini ranked take 1 first (delivery 10, naturalness 9, no
misread word); the music sits 18 dB under the voice; 9 stock shots, one black title card.

| Step | Credits |
| --- | ---: |
| The voice, 3 directed takes | 30 |
| The check (Gemini 3.1 Pro listens to the takes) | 14 |
| The voice as WAV (the music level) | 5 |
| The kinetic plans | 2 |
| The picker | 1 |
| The sounds | 4 |
| The music | 23 |
| The stock plan | 3 |
| The render | 22 |
| **Total** | **104** |

The clone itself is ≈ 282 credits, once per voice; every video after it pays only the steps above.

## Tune it

`mood` (per passage) · `prepare: false` (read exactly as sent — your own tags and niqqud) · `stability` (overrides the
director's: lower = more acting) · `previous_text` / `next_text` · everything `/skills/full-stock-faceless.md` takes for the reel.

Send `x-wait-ms: 110000` to wait for the render in the same call; if the response is still
`processing`, poll `GET /v1/executions/{id}` until `status` is `completed` and read `output.url`.

## Check the bill

`GET /v1/usage?tag=<job name>` — per call, per operation and the total, in credits. Quote that to the
customer, not the estimate above.

## Rules that keep captions readable on every platform

- **Safe zone.** Keep text inside the middle 80% of the frame: `side_margin` ≥ 6 handles the sides; `margin`
  ≥ 12 keeps the bottom clear of the platform UI (username, buttons, progress bar).
- **A line never leaves the frame** — a line too wide for the side margins is set smaller automatically. Do
  not shrink the size yourself, wrap instead (`max_chars_per_line`).
- **Hebrew has no capitals** — keep `uppercase: false`; it only breaks Latin words mixed into a sentence.
- **Fonts.** `GET /v1/studio/fonts` lists the bundled families and which scripts they draw. A font that
  cannot draw the caption's language is swapped and reported in `warnings`.
- The customer's transcript wins: to fix a word, `GET /v1/speech/transcripts/{id}/captions`, edit the text,
  and send the list back as `captions.captions` — timing is kept when the word count is unchanged.
