Hypernatural

TechniqueBy HypernaturalVersion 3, Oct 29, 2026

gemini-rank-voices

Have Gemini listen to candidate voices' ElevenLabs library previews next to the character's images and rank them by fit, 1 to 10, with what it actually heard. A noisy listener: use it to narrow a shortlist to the 3 worth auditioning and to annotate the review page, then let the person pick. Use only when the person wants a voice matched to a face or a detailed character; a plain request ("a British woman") skips it and auditions 3 picked on metadata.

SKILL.md

Gemini ranks voices

Give it the character's images, the casting brief and a set of voices (each with its library preview) and you get every voice rated for fit from 1 to 10, best first, with what the voice sounds like, its strengths and its problems. It is one listener's opinion and a noisy one: it decides which 3 voices get auditioned and gives the person notes, but the person picks. It is for matching a voice to a face or a detailed character; for a plain request (guide-cast-a-voice), skip it and audition 3 picked on metadata.

Inputs

  • The pass's brief.json (from elevenlabs-voice-search), with its audition passage.
  • The character images.
  • Per voice: voice_id, library name, previews/<voice_id>.mp3.

Run it

Build one request from references/listening-prompt.md: one user turn of ordered parts (instructions, images, then per voice its label and preview, then the brief and the audition passage) and the response schema there. Images and audio are local paths; the engine uploads them. Find the model's id with models("gemini") and describe it before the first run in a job (earlier jobs used gemini-3.1-pro-preview):

run("<gemini id>", {
  "contents": [{"role": "user", "parts": [
    {"text": "<instructions>"},
    {"fileData": {"mimeType": "image/jpeg", "fileUri": "<pass>/images/front.jpg"}},
    {"text": "Voice 1: voice_id=<voice_id> (<library name>)"},
    {"text": "Library preview:"},
    {"fileData": {"mimeType": "audio/mpeg", "fileUri": "<pass>/previews/<voice_id>.mp3"}},
    …,
    {"text": "<closing text>"}]}],
  "generationConfig": {"responseMimeType": "application/json",
                       "responseSchema": <the schema in references/listening-prompt.md>}},
  into="<pass>", unit="preview_ratings")

The gateway's Gemini adapter is being built in hn4a; describe gives its exact fields.

One listen per pass: the whole shortlist (12) in one call, previews only, no TTS spent. Save as preview_ratings.json. Drop any voice_id that wasn't sent and any duplicate, and sort by fit, highest first. The top 3 are auditioned on the passage (elevenlabs-tts-v4); the person listens to those, so there is no second listen.

What you get

ratings: per voice voice_id, heard, fit (8 and up means it would cast it), strengths, problems. Put the top 3 on a review page with each voice's audition and preview to play, the listener's notes under them, and the brief in the header; the person picks one or writes a note for another pass. Record the pick, its voice id and its performance guide in AGENTS.md.

Tips and traps

  • The listener is noisy. One voice went from 9/10 to 4/10 between two runs, and the director picked voices it had ranked 3rd and 4th. Never cast from the ranking alone.
  • Previews rank worse than auditions: a weak voice can make the top 3. Audition 3, never more, and let the person hear them. If none fits, the person's note starts another pass, or they ask to hear the next 3.
  • Some voices degrade under eleven_v4 (the audition doesn't sound like the preview). Asked whether two clips are the same voice, Gemini was inconclusive (5 to 7 out of 10 for every variant). The person hears it on the review page.
  • It judges by ear, not by the name: it marked down a polished corporate-tutorial read and voices that sounded younger than the face.
  • A different shortlist means a new listen; don't reuse preview_ratings.json.

Check it

Every voice sent comes back rated once; heard describes sound (pitch, texture, age, accent, delivery) rather than repeating the library description.

Go make something cool.

Install the app, open your agent, describe the video. That's the whole onboarding.

Sticker HypernaturalSticker BannerSticker TVBoy