{"id":"full-voice-story","kind":"complete","name":{"he":"סיפור השראה בקול שלכם — מנאום, עם רגש","en":"An inspiring talk in Hebrew, in your own voice"},"one_line":{"he":"הרצאה מפורסמת הופכת לריל של שתי דקות בעברית, מסופר בקול שלכם — כמו שנעשה הריל של ג׳ק מא של הבעלים.","en":"A famous talk becomes a two-minute reel in Hebrew, told in your own voice — the way the owner's Jack Ma reel was made."},"listed":true,"version":"1.0","updated":"2026-10-09","when_to_use":["A finished video in one skill: one speaker's story picked from a whole talk — his own sentences only, in the order he said them, the Hebrew written for the ear and read by a native editor, your own cloned voice, two directed takes a passage, with emotion, Gemini listens to every take — names and numbers right, the speaker's own footage, cut to follow your voice, his face full screen.","The video must speak another language and still sound like the speaker."],"when_not_to_use":["Only captions or only a title are wanted: a caption or hook skill is many times cheaper.","The customer cannot declare a licence for the YouTube video (not theirs, not Creative Commons, no permission).","The person in the video has not agreed to their voice or face being used."],"example":{"video_url":"https://media.gpt.org.il/lookbook/examples/voice-story-he.mp4","credits":683,"seconds":119.3},"preview":null,"price":{"unit":"minute","from":340,"to":460,"note":"per finished minute; 30 s ≈ 200–325 credits — generated media is priced per asset, so half a minute is not half the price"},"inputs":[{"name":"youtube_url or video_url","type":"video","required":true,"limits":"a talk the customer may use: their own, Creative Commons by its owner, or with permission","notes":null},{"name":"voice_id","type":"text","required":true,"limits":"the customer's own cloned voice (POST /v1/ai/voices/clone, once)","notes":"a woman speaker → a woman's voice"},{"name":"target language","type":"language","required":true,"limits":null,"notes":"the language of the result (Hebrew in an Israeli voice, English, Russian…)"},{"name":"license","type":"choice","required":true,"limits":"own · creative-commons · licensed","notes":"declared by the customer — ask"},{"name":"consent","type":"consent","required":true,"limits":null,"notes":"the speaker agrees to their voice and face being used"}],"outputs":[{"name":"output.url","type":"video","required":true,"limits":"mp4, 9:16 1080p unless the request says otherwise","notes":"the file is deleted 24 hours after it is made: download it and tell the customer"},{"name":"cost","type":"number","required":true,"limits":null,"notes":"GET /v1/usage?tag=<job name> → totals.credits: quote this, not the estimate"}],"steps":[{"method":"POST","path":"/v1/studio/uploads","what":"Only for a file (not a link): get an upload URL, PUT the bytes to output.upload_url with output.headers, use output.url as the video","body":{"filename":"clip.mp4"},"async":false,"optional":true},{"method":"POST","path":"/v1/youtube/videos/{id}/file","what":"The video's file (own or licensed content)","body":{"license":"own"},"async":false,"optional":false},{"method":"POST","path":"/v1/speech/transcripts","what":"Transcribe audio or video","body":{"audio_url":"<audio url — from the recipe>"},"async":true,"optional":false},{"method":"POST","path":"/v1/ai/text","what":"Generate text (chat)","body":{"model":"gemini-3.5-flash","system":"<system — from the recipe>","prompt":"<prompt — from the recipe>"},"async":false,"optional":false},{"method":"POST","path":"/v1/ai/voices/clone","what":"Clone a voice","body":{"name":"<name — from the recipe>","audio_urls":["https://media.gpt.org.il/u/…/me-2min.mp3"]},"async":false,"optional":false},{"method":"POST","path":"/v1/ai/voice","what":"Voice-over (text to speech)","body":{"text":"<text — from the recipe>"},"async":false,"optional":false},{"method":"POST","path":"/v1/studio/uploads","what":"Upload a file (get an upload URL)","body":{"filename":"clip.mp4"},"async":false,"optional":false},{"method":"POST","path":"/v1/studio/convert","what":"Convert, compress, change speed, extract audio","body":{"video_url":"<video url — from the recipe>"},"async":true,"optional":false},{"method":"POST","path":"/v1/studio/edit","what":"Full edit in one render","body":{"video_url":"<video url — from the recipe>"},"async":true,"optional":false},{"method":"GET","path":"/v1/executions/{id}","what":"Poll a call that answered processing until it is completed (the file is output.url)","body":null,"async":false,"optional":false},{"method":"GET","path":"/v1/usage","what":"?tag=<job name>: what the whole job cost — quote it to the customer","body":null,"async":false,"optional":false}],"rules":["Show the customer the price (POST <path>/estimate with the same body, or the price above) and wait for their OK before any paid call.","Send Idempotency-Key: <job>-<step> on every POST. After a timeout send the same call with the SAME key — you get the same job back, never a second charge.","A long call answers status processing: poll GET /v1/executions/{id} every 5–10 s (or send x-wait-ms, up to 90000). Never send the job again to see whether it finished.","Send the same X-Tag: <job name> on every call of one job; GET /v1/usage?tag=<job name> is then what it really cost.","On-screen text is in the video's language and taken from what is actually said (a carousel: from the customer's brief). Never invent facts, names, prices or numbers.","A real person's face or voice needs their consent: send consent { accepted: true, subject: self | other, basis: own | consent | licensed } as the customer declares it — ask them; never fill it in yourself.","Taking a YouTube video's file needs the licence the customer declares — own (their channel) · creative-commons · licensed (written permission): ask which; never choose it yourself. A Creative Commons video keeps its credit line on screen.","Hebrew has no capitals: keep uppercase false (it only breaks the Latin words inside a Hebrew line).","Keep text inside the middle 80% of the frame: side_margin ≥ 6, margin ≥ 12 — the platform's buttons cover the rest.","Check the words against the speech before burning them in: a phrase lost by the speech model is transcribed again with speech_models [\"universal-2\"] and the words sent as `words`."],"common_errors":[{"code":"invalid_input","why":"400: a field is missing, misspelled or out of range — the message names it","fix":"Fix exactly that field and send again; send only the fields the recipe or the docs show."},{"code":"unauthorized","why":"401: the API key is missing, wrong or revoked","fix":"Ask the customer for a valid key (keys are made at /api-keys); never print it back."},{"code":"insufficient_credits","why":"402: the balance does not cover the estimate (details.required_credits)","fix":"Tell the customer the price and that the balance is short; do not retry until they top up."},{"code":"rate_limited","why":"429: too many calls a minute","fix":"Wait the retry-after seconds, then send the same call with the same Idempotency-Key."},{"code":"failed","why":"the execution's status is failed or timeout — nothing is charged for failed work","fix":"Read error.message, fix the input, and start again with a NEW Idempotency-Key."},{"code":"upload_too_large","why":"413: the file is bigger than the call takes","fix":"Upload the original through POST /v1/studio/uploads and send its output.url; never shrink the picture's shape."},{"code":"consent_required","why":"400: a face or a voice was sent without the person's consent declaration","fix":"Ask the customer who is in it and on what basis, then send consent { accepted, subject, basis }."},{"code":"license_mismatch","why":"400: creative-commons was declared for a video YouTube lists under its standard licence","fix":"Ask the customer whether it is their own channel (own) or they hold permission (licensed); otherwise the file cannot be taken."},{"code":"youtube_files_not_enabled","why":"403: taking YouTube files is switched on per account","fix":"Tell the customer to ask through the feedback button and name the channel; watching the link with POST /v1/ai/text works without it."},{"code":"skill_not_found","why":"404: no skill with this id or slug","fix":"Take the id from GET /v1/skills (items[].id or slug)."},{"code":"skill_not_available","why":"409: the skill is not on offer right now","fix":"Tell the customer and pick another skill from GET /v1/skills."},{"code":"skill_input_length","why":"422: the video is shorter or longer than the skill takes","fix":"Trim the video (POST /v1/studio/trim) or pick a skill that takes its length."},{"code":"duplicate_client_key","why":"409: a run with this client_key already exists","fix":"Do not start another: find it with GET /v1/agent/runs and follow it."}],"quality_check":["Every line keeps the original's meaning, names and numbers, and the punchline still lands in the new language.","The voice is clearly above the music all the way through.","The captions and every line on screen match what is said.","Watch the start, the middle and the end of the result before handing it over — not only its status.","Read `warnings` in the answer (a font swapped for the language, a picture that had to be enlarged) and tell the customer what they mean."],"tags":{"domain":"dub","level":"ai","hebrew":true,"recommended":false,"new":true,"creator":false,"topics":["complete","captions","hook","music","dub","voice"]},"links":{"recipe":"/skills/full-voice-story.md","docs":"/docs?tool=video-studio","run":"/v1/skills/apihub-voice-story/run"}}