npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@taskmagic/apps-unmixr

v0.0.2

Published

AI text-to-speech and voiceover generation with [Unmixr](https://unmixr.com) — API docs: https://unmixr.com/api/v2/docs/

Readme

Unmixr

AI text-to-speech and voiceover generation with Unmixr — API docs: https://unmixr.com/api/v2/docs/

The API is REST under https://unmixr.com/api/v2, authenticated with Authorization: Bearer <API key>. Every path ends in a trailing slash (/short-tts/, /voices/, /credits/); the piece appends one automatically because a missing slash is answered with a redirect rather than the endpoint.

  • Actions: Text to Speech, Create Long TTS Project, Get Long TTS Project, List Voices, Get Voice, List Cloned Voices, Estimate Credits, Get Credit Balance.
  • Triggers: none — see No triggers below.

Connection: sign in at app.unmixr.com, open app.unmixr.com/manage-api-keys/ (the Manage API Keys page), create a key and choose v2 as the key version, then paste it into the connection. API access is a paid feature — it starts on the Starter plan ($19/month); a free account answers every call with 401 and a "no API access" message.

Notes

  • Text to Speech is synchronous and capped at 2,000 characters. Past the cap Unmixr answers with application code 502 telling you to use Long TTS, so the action checks the length locally first and points you at Create Long TTS Project without spending a request.
  • Long TTS gives you one audio file per paragraph, not one merged track. The API publishes no stitched output URL: each paragraph carries its own audio_url, which stays null until that paragraph finishes. Get Long TTS Project therefore returns an arrayaudio_urls in paragraph order, plus paragraph_count, completed_paragraph_count, failed_paragraph_count and is_finished. Joining them into a single file is up to you. Project status is processing, success, partial (some paragraphs failed) or failed; paragraph status is processing, completed or failed. is_finished only means Unmixr has stopped working on the project — branch on is_successful / is_partial / is_failed before joining the files, because audio_urls omits paragraphs that never rendered.
  • The Long TTS callback URL is required even though the field looks optional. Unmixr documents callback as a required part of the request body, so the action refuses to submit without an https URL. Add a Catch Hook trigger to another TaskMagic flow and paste its webhook URL in; Unmixr will post progress there. The optional Callback Secret is passed through so the receiving flow can verify the sender.
  • No triggers. Unmixr has no account-level webhook registration endpoint — the callback object is supplied per Long TTS request, which makes it a callback rather than a subscribable webhook. A trigger could never register or unregister itself, so none is shipped. Use the callback URL above, or poll with Get Long TTS Project.
  • No voice-cloning action — deliberately. Unmixr does expose voice cloning (POST /api/v1/clone-voice/, and v1/v2 keys are interchangeable, so it is technically reachable). It is left out on purpose: Unmixr's guidance is that a user may clone a voice "given they have their consent", but there is no technical consent-verification gate — the attestation is the only control. Automating the creation of voice clones from arbitrary uploaded audio is exactly the impersonation-risk surface we do not want to make one click away. Reading the clones an account already has is fine and is covered by List Cloned Voices, whose UUIDs work anywhere a voice ID is accepted (they also appear at the top of the Voice dropdown).
  • Prosody controls are not in this version. v1 of the API names these fields speaking_rate / speaking_pitch / speaking_volume / output_type / pronunciation_dict, while the v2 docs name them speed / pitch / volume / output_format / pronunciations. We could not verify the v2 names against a live key, so v0.0.1 ships only the fields we are confident about — text, voice_id, output_format, response_type and language on Text to Speech, and text / character / voice_id / pause_before_ms / pause_after_ms / type on Long TTS paragraphs. response_type offers URL and Base64 only; Unmixr's raw-bytes option is left out because a binary body cannot survive a JSON step output intact. style, speed, pitch, volume, pronunciations and the per-character instructions will be added once they are confirmed against a real account.
  • The voice list is plan-filtered, and 1,100+ voices deep. The Voice dropdown searches server-side with ?q= as you type instead of loading everything. Because the catalogue only contains voices your plan can use, a voice_id saved in a published flow can start failing after a plan change — that is application code 600 / 601 / 602, and the piece turns those into a message telling you to re-pick a voice.
  • Application codes are not HTTP codes. Alongside real statuses (200, 202, 400, 401, 404, 422, 429) Unmixr returns its own codes in the 500–602 range, which the piece maps to plain messages: 501 the voice is OpenAI-compatible and needs your own OpenAI-API-Key header (not sent by this piece — pick another voice), 502 text over 2,000 characters, 504 out of voice-cloning credits, 505 out of speech credits, 508 generation failed (not charged), 600/601/602 voice not API-enabled / unavailable / not in your plan.
  • The error body shape is inferred, not documented. Unmixr's docs print no error example. Success bodies carry success and code, and the error table lists a numeric code with a message, so errors are most likely {"success": false, "code": N, "message": "..."}. The piece parses that shape defensively and falls back to the raw body and HTTP status when the expected fields are missing.
  • Rate limits are unpublished. Unmixr answers 429 when you exceed them but documents no numbers, so every call retries up to three times with exponential backoff before failing. Only a 429 is retried — a rate-limited call is refused before anything is generated, so replaying it cannot charge twice, whereas a timed-out call may already have been billed.
  • Credits are charged per character, vary by voice, and only on success. Use Estimate Credits to price a script for free before generating, and Get Credit Balance for the remaining balance, the plan name and the plan's Long TTS limits (max_text_length, max_paragraph_text_length, max_paragraphs, max_chapters).
  • No custom API call action. A passthrough would hand this connection's API key to any URL a flow supplies, and the endpoints people actually automate are covered above.