Skip to content

Feature request: persistent piloted-Chrome profile for hCaptcha solver (--captcha-profile-dir) #3

Description

@jmoranii

Problem

Every suno generate invocation spawns a fresh piloted Chrome to solve hCaptcha. Since the piloted profile is ephemeral — no persistent suno.com session — Suno's hCaptcha flow surfaces a Google OAuth popup ("Continue as <user>") that requires a manual click before the solver can proceed. The CLI's log says it's headless, but in practice the OAuth popup forces a visible Chrome window with focus stolen from whatever the user is doing.

Repro

  1. brew install paperfoot/tap/suno (0.5.7)
  2. suno auth --login (succeeds via Chrome cookie extraction; Pro Plan, Clerk session healthy)
  3. suno generate --title "test" --tags "edm" --lyrics-file ./lyrics.txt --wait --download ./out/
  4. A visible Chrome window opens with the Suno landing page and a Google "Continue as <user>" popup → user must click to proceed
  5. Re-run step 3 from a fresh shell → window re-opens, same popup, same manual click required

Cookie-only commands (credits, list, info, status) all work silently — the issue is exclusively the generation-time captcha flow.

Why it matters

This blocks fully unattended workflows:

  • Agentic coding-agent integration — e.g. invoking suno-cli from a Claude Code / Cursor / Aider background job; the agent can't click the popup
  • Batch generation — N songs back-to-back means N popup clicks; defeats the point of --wait
  • Remote / SSH / headless servers — the OAuth popup never reaches a user who isn't physically at the desktop
  • Repeat casual use — even just 3–5 songs in a session, the popup-stealing-focus friction accumulates fast

Proposed fix

Persistent piloted-Chrome profile. First invocation: profile is empty, popup appears, user clicks once. Second invocation onward: piloted Chrome reuses the profile dir, the suno.com session is already authed, hCaptcha solver runs silently (or with a much less interactive challenge).

CLI shape:

suno generate ... --captcha-profile-dir ~/.config/suno/captcha-profile/

Or as a sticky config key:

suno config set captcha_profile_dir ~/.config/suno/captcha-profile/

Could also default to ${XDG_CONFIG_HOME:-~/.config}/suno/captcha-profile/ on first run with no flag needed, similar to how the auth state is already cached at ~/.config/suno/.

Alternatives considered

  • --no-captcha --token <solved> works but requires manual or 2Captcha-style external solving per call (paid, new account).
  • Third-party Suno API proxies (sunoapi.org, AceData) bypass captcha but defeat the entire membership-credits value prop of this CLI.
  • A persistent piloted profile feels like the lowest-friction native option that preserves "use my Suno membership."

Env

  • macOS 14.x (Darwin 23.6.0), Apple Silicon
  • suno-cli 0.5.7 (Homebrew, latest)
  • Chrome stable; main profile already logged into suno.com via Google SSO
  • Auth: Pro Plan, Clerk session refresh working; only generation-time captcha is interactive

Bonus context

Hit upstream schema drift on cover today (HTTP 422 — Suno added a required title to the cover-params body, CLI doesn't send one). Unrelated to captcha but worth flagging as a separate issue if not already known — happy to file separately.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions