{"id":"full-youtube-reel","kind":"complete","name":{"he":"מיוטיוב לריל","en":"YouTube to reel"},"one_line":{"he":"סרטון מיוטיוב הופך לריל אנכי, לפי הזכויות שלכם: מחפשים ביוטיוב (רק Creative Commons כשהסרטון לא שלכם) או מביאים קישור, ו-Gemini צופה בו במקום ומתכנן את הריל — השניות הכי חזקות…","en":"A YouTube video becomes a vertical reel, on your rights: search YouTube (Creative Commons only, when the video is not yours) or bring a link, and Gemini watches it where it is and…"},"listed":true,"version":"1.0","updated":"2026-10-09","when_to_use":["A finished video in one skill: a YouTube search or a link — your licence decides the path, Gemini watches the video and picks the reel, its strongest seconds, never cut mid-word, the video's own shots inserted as cut-aways, captions and a hook.","A talking video should come out as a finished post, not just captioned."],"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)."],"example":{"video_url":"https://media.gpt.org.il/lookbook/examples/youtube-reel-tos.mp4","credits":118,"seconds":32.4},"preview":null,"price":{"unit":"minute","from":115,"to":195,"note":"per finished minute; 30 s ≈ 80–155 credits — generated media is priced per asset, so half a minute is not half the price"},"inputs":[{"name":"youtube_url","type":"url","required":true,"limits":"a link, or a search (Creative Commons only when the video is not the customer's)","notes":null},{"name":"license","type":"choice","required":true,"limits":"own · creative-commons · licensed","notes":"declared by the customer — ask"}],"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":"GET","path":"/v1/youtube/search","what":"Search YouTube","body":null,"async":false,"optional":false},{"method":"POST","path":"/v1/studio/youtube-reel","what":"YouTube to reel: plan it step by step, on your licence","body":{"youtube_url":"<youtube url — from the recipe>"},"async":false,"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/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/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.","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":"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":["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":"edit","level":"ai","hebrew":true,"recommended":false,"new":true,"creator":false,"topics":["complete","captions","hook","broll"]},"links":{"recipe":"/skills/full-youtube-reel.md","docs":"/docs?tool=video-studio","run":"/v1/skills/apihub-youtube-reel/run"}}