MAISON TSMSUCH MILLION. VERY TECHNICALLY.

5 min de lecture

Suno Client : piloter Suno depuis Node.js

Suno Client 0.1.0 est sur npm : un client TypeScript non officiel pour générer de la musique avec Suno, conçu pour remarquer quand Suno change son API.

Le Shiba en costume, une patte sur une platine où tourne un vinyle, l’autre levée, entouré de volutes dorées, à côté d’un ordinateur portable et d’une pochette noire.

Suno Client 0.1.0 est publié sur npm ce midi. C’est un client TypeScript pour Node qui pilote Suno : lancer une génération, suivre les morceaux en cours, récupérer l’audio, les paroles et les données musicales. Je l’ai écrit pour la musique de mes directs, et il est open source, sur GitHub.

Avant toute chose : ce n’est pas une API officielle

Suno n’a pas d’API publique. Suno Client parle aux points d’accès de l’application web, avec votre session de navigateur, ce qui sort des conditions d’utilisation de Suno. Un bannissement tomberait sur un compte payant, celui-là même qui détient sans doute les droits commerciaux de vos morceaux. Le dépôt le dit en tête de page, et je le redis ici : décidez si ce risque vous convient avant de construire dessus.

Le vrai problème : savoir quand Suno bouge

Tous les clients non officiels finissent par casser, parce que Suno modifie son API et que personne ne s’en aperçoit avant la production. Début août 2026, Suno a cessé d’accepter un titre non renseigné, et le client open source le plus complet est resté en panne deux semaines. Ses 134 tests n’ont rien vu : ils vérifiaient son propre format de sortie et ne touchaient jamais le réseau.

Suno Client est donc construit autour d’une seule question : comment apprendre que Suno a changé avant que vos utilisateurs ne s’en chargent ?

Le Shiba en costume observe à la loupe un pic sur la bande de papier d’un sismographe en laiton, posé sur un bureau laqué noir.
Le but : voir la secousse avant que quelqu’un tombe.

Trois garde-fous

Une sonde de schéma gratuite. Suno vérifie le format d’une requête avant le reste. Une requête au bon format mais qui vise un modèle inexistant est donc refusée sans rien générer et sans coûter de crédit, et la raison du refus dit si notre format est toujours accepté. Si Suno se plaint du jeton, tout va bien ; s’il se plaint d’un champ, le format a bougé, et la sonde nomme le champ. Elle continue de fonctionner quand le compte est bloqué par un captcha.

Gratuite en crédits, la sonde ne l’est pas en réputation : chaque essai est une création refusée, et une rafale ressemble à un abus. Pendant le développement, elle a d’ailleurs déclenché le captcha du compte de test. Elle ne tourne donc qu’une fois par jour, avec une seule variante.

Une empreinte des réponses. Les schémas Zod laissent passer les champs inconnus, pour qu’un ajout de Suno ne casse jamais la lecture. À côté, chaque réponse est comparée à une empreinte de référence : un champ nouveau est une simple information, un champ que le client lit et qui disparaît ou change de type est une erreur.

Des erreurs qui disent quoi faire. Chaque erreur porte deux indications : retryable, la même requête pourra réussir plus tard, et alert, il faut un humain. Un programme qui tourne longtemps traverse les premières et s’arrête bruyamment sur les secondes. Traiter un changement de format comme un incident passager, c’est brûler des crédits sur des requêtes qui ne réussiront jamais.

Trois façons dont Suno Client repère un changement de l’API de Suno Premièrement, une sonde de schéma quotidienne qui ne coûte aucun crédit : une requête au bon format mais visant un modèle inexistant. Si Suno la refuse pour le jeton, le format est toujours bon ; s’il la refuse pour un champ manquant ou mal typé, le format a changé et la sonde nomme le champ. Deuxièmement, chaque réponse est comparée à une empreinte de référence : un champ nouveau est une information, un champ lu par le client qui disparaît ou change de type est une erreur, le reste un avertissement. Troisièmement, chaque erreur dit quoi faire : retryable, on réessaie plus tard ; alert, un humain doit intervenir. 1 · SONDE DE SCHÉMA, 0 CRÉDIT Requête au bon format mais un modèle qui n’existe pas Refus sur le jeton le format tient Refus sur un champ dérive : la sonde le nomme 2 · EMPREINTE DES RÉPONSES Réponse de Suno comparée à la référence info champ nouveau warn autre écart error champ lu disparu 3 · DES ERREURS QUI DISENT QUOI FAIRE SunoError deux booléens retryable on réessaie plus tard alert un humain doit agir
Trois façons d’apprendre que Suno a changé, de la plus utile à la moins utile.

Pensé pour un direct

Une génération Suno prend environ deux minutes, et c’est justement la partie intéressante quand on la raconte en direct. Lancer une génération rend donc une tâche qu’on suit morceau par morceau :

const job = await suno.generate({ title, tags, lyrics });

for await (const update of job.watch()) {
  for (const clip of update.changed) {
    await chat.say(`${clip.title} : ${clip.status}`);
  }
}

La tâche se reprend après un redémarrage, à partir des identifiants des morceaux. Et un seul appel, suno.track(), rend tout ce qu’il faut à un overlay : titre, style, paroles, pochette, paroles minutées mot à mot, mesures, tempo et tonalité. Les mesures viennent de la grille rythmique calculée par Suno, pas d’un tempo fixe : les visuels restent calés même quand le morceau ralentit. Ces données sont lues sur des points d’accès qui, à ma connaissance, ne figuraient encore dans aucun autre client non officiel.

Trois choses à garder en tête quand les demandes viennent d’inconnus : un texte refusé par Suno arrive comme invalid_input, il faut répondre dans le chat et ne pas réessayer ; un compte bloqué par un captcha ne peut plus générer, et seul un humain sur suno.com peut le débloquer ; chaque appel coûte 10 crédits et rend deux morceaux.

Installer

npm install suno-client, sous Node 22 ou plus. Le paquet est livré en ESM et en CommonJS, avec ses types, et la version 0.1.0 passe 262 tests. Pour la licence, j’ai choisi la WTFPL : mettre des conditions sur un client issu de la rétro-ingénierie aurait été une plaisanterie d’un autre genre.

Le détail de ce qui marche, de ce qui ne marche pas et de ce que ça a coûté d’apprendre est dans docs/STATUS.md. Much music. Such types.

Questions fréquentes

Suno a-t-il une API officielle ?

Non. Suno Client parle à l’API privée de l’application web avec votre session de navigateur, ce qui sort des conditions d’utilisation de Suno. Mieux vaut le savoir avant de s’en servir sur un compte payant.

Comment installer Suno Client ?

Avec npm install suno-client, sous Node 22 ou plus. Le paquet fonctionne en ESM comme en CommonJS, avec ses types TypeScript.

Combien coûte une génération avec Suno ?

10 crédits par appel, pour deux morceaux. La sonde de schéma quotidienne de Suno Client ne coûte aucun crédit, et générer des paroles seules est gratuit.

Comment Suno Client détecte-t-il un changement de l’API ?

Par trois moyens : une sonde quotidienne qui vérifie le format des requêtes sans rien générer, une empreinte de chaque réponse comparée à une référence, et des erreurs qui disent s’il faut réessayer ou alerter quelqu’un.

Peut-on utiliser Suno Client dans un bot ou un overlay de stream ?

Oui. Une génération se suit morceau par morceau, se reprend après un redémarrage, et suno.track() renvoie en un appel le titre, les paroles minutées, les mesures, le tempo et la tonalité.

Sources

  1. Suno Client sur GitHubGitHub
  2. Suno Client sur npmnpm
  3. Ce qui marche, ce qui ne marche pas (docs/STATUS.md)GitHub
  4. ZodZod
  5. Conditions d’utilisation de SunoSuno
QR code de don Dogecoin vers DKZFD5h85VJFXkjj2EaZiEJZtzZhYBsqEQ
SCANNER AVEC VOTRE PORTEFEUILLE

Le fonds du rebond.

Soutenir les projets.

Lui ne vous demandera jamais rien. Alors c’est nous qui posons ce QR code. Si vous utilisez twichat ou appréciez les directs, vous pouvez contribuer au développement des projets. Choisissez votre monnaie et le montant de votre choix.

DOGECOIN · MONTANT LIBRE

Blason TSMMAISON TSM

D.O.G.E.

Do Only Good
Everyday.

Du Dogecoin, j’ai gardé un million de raisons de ne pas me prendre au sérieux. Oui, même avec mon portrait encadré d’or. Le reste se raconte en direct.