Status: post-Milestone-8 development public-client workflow enabled; production approval and complete live validation remain blocked
Reviewed: 2026-07-26; API Terms effective 2026-07-07
Sources: API documentation, API terms, official example
This is an independent integration plan. It does not assert endorsement or a partnership with TONE3000.
The repository now contains provider-neutral interfaces, a TONE3000 adapter,
external-browser PKCE/state handling, bounded token refresh, platform secure
credentials, WinHTTP transport, typed current-user/exact-tone/model endpoints,
streamed individual model_url download, schema-2 creator/license provenance,
and deterministic mocks. The default API policy is 100 requests/minute with a
bounded queue/retries and Retry-After support.
The Settings page reports Development registration, fixed local callback,
connection status, and explicit Connect/Disconnect/Test/Cancel/Open actions.
The checked-in public desktop client ID is centralized in
Tone3000Configuration.cpp; it has the t3k_pub_ prefix and is not a
credential. There is no client secret. Construction, scan, restore, and merely
opening Settings remain inert: only an explicit account or hosted-selection
action may bind the callback and open a browser.
Milestone 5 adds visible hosted entry points, architecture pre-selection, waiting/cancel/reopen states, exact tone resolution, bounded all-page model listing, compatibility classification, a native exact-variant and attribution surface, pack-local filtering, explicit individual download, cached-variant recognition, downloaded-only navigation, removal protection, and an activation request boundary. Download success and DSP activation remain separate states.
Still not implemented: /tones/search, native catalog browsing, whole-tone
ZIP, bulk/background download, automatic model choice, upload/training,
account proxying, local file upload, automatic DSP activation, or unapproved
production branding/callback behavior.
The initial Online tab will use the provider-hosted select_tone OAuth prompt for discovery. Amphibia will not implement unrestricted native text search, scrape public pages, crawl the catalog, bulk-sync, or mirror metadata.
After a successful selection, Amphibia may use the documented authenticated detail flow to:
- Resolve the selected tone with
GET /api/v1/tones/{tone_id}. - Page through
GET /api/v1/models?tone_id={tone_id}(documented maximum page size 300). - Show the returned exact model/IR variants and their available metadata.
- Download only the user-selected variant from its bearer-authorized
model_url.
Whole-tone ZIP download is not required and is described as an approved-partner capability. It will not be used.
- Authorization Code with PKCE S256 is mandatory.
- Authorization endpoint:
GET /api/v1/oauth/authorize. - Token/refresh endpoint:
POST /api/v1/oauth/tokenwith form encoding. - Required authorization values include the public
client_id, exactredirect_uri,response_type=code, code challenge/method,state, and prompt. - A publishable
t3k_pub...client ID may be present in a native binary. At3k_cs...client secret is server-only and must never be added to Amphibia source, binaries, CI variables used by the client, state, or logs. - A successful hosted selection returns
code,state, andtone_id; cancel/error paths must be handled separately. - Token refresh may rotate the refresh token. Store the replacement atomically. On
invalid_grant, clear the credential and require an explicit new login. - Use the external system browser. No embedded credential webview is planned.
Only one authorization request may be active per process. A fresh random state and verifier are required for every request; neither is persisted after completion, cancellation, or timeout.
The owner-registered development redirect is exactly
http://127.0.0.1:43821/oauth/callback. Amphibia binds the actual receiver
exclusively to IPv4 loopback on port 43821 and retains that socket through the
flow. It never substitutes localhost, a wildcard/LAN/IPv6 address, another
port/path, HTTPS, a random port, or a custom scheme. Failure to acquire the
port prevents browser launch and offers Retry or Cancel.
The hosted selector documents:
format=namorformat=ir.- Gear filters including
amp,amp-cab,cab,pedal,outboard,space, andexperimental. - A singular architecture filter of
1,2, orcustom.
A critical limitation is that omitting architecture returns A1 plus Custom and excludes A2. The documentation does not state that the parameter can contain multiple architectures. Amphibia must not invent a comma-separated/multi-value form.
Initial safe UX:
- “TONE3000 A1 / Custom” launches
select_tonewithformat=namand no architecture filter, using the documented default behavior. - “TONE3000 A2” launches a separate selector with
format=nam&architecture=2. - “TONE3000 IR” launches a separate selector with
format=ir.
If the provider confirms a supported multi-architecture selector, the UX may combine the first two. Regardless of provider metadata, the downloaded .nam is locally inspected before its architecture label or activation is accepted.
A tone may expose multiple models. The documented model record includes an ID, name, URL, size enum, tone ID, and architecture_version (1, 2, custom, or null for non-NAM content). Amphibia will:
- Never auto-pick a model when multiple compatible variants exist.
- Persist
provider=tone3000, tone ID, exact model ID, local SHA-256, and display/attribution metadata. - Treat a short-lived model URL as transport data only; never persist it in state.
- Verify that the local file type and inspected architecture agree with the requested content type before activation.
- Keep the prior active model/IR if detail lookup, pagination, download, validation, or loading fails.
At the Online entry point, show the full approved TONE3000 brand treatment before using a compact T3K label in constrained UI. Item/detail surfaces should show the provider mark plus title, gear/format, creator, and exact model selector. Include “Powered by TONE3000” and a link back where the provider terms/guidelines require them.
Use neutral language such as “Independent open-source integration; not endorsed by TONE3000” unless written approval permits different wording. Preserve creator attribution and provider-supplied license/source metadata in the local library.
The API documentation currently states a default 100 requests/minute limit, but a separate search endpoint is more heavily limited and production search access requires contact. Amphibia will honor response headers where present, cap concurrency, use bounded exponential backoff with jitter for retryable failures, and not retry authentication or validation failures blindly.
Offline/provider-unavailable behavior:
- Local provider and cached valid assets remain available.
- Online lists show a clear unavailable/offline status.
- No background login prompt or download occurs.
- Cache metadata is not discarded due solely to an API failure.
- A stale presigned/model URL is resolved again only after an explicit user action or restore request.
These are release gates, not implementation guesses:
- The OAuth/API examples use prompt
load_tone, while free-tier/terms prose refers toget_tone. Initial Amphibia scope needs onlyselect_tone; any later load prompt requires confirmation of the canonical name. - The fixed development callback is configured; separate production registration, brand approval, and release authorization are not implied.
- A single hosted selection spanning both A1 and A2 is undocumented because omission excludes A2 and the architecture parameter appears singular.
- Native unrestricted search is outside the documented free-tier surface. “Search TONE3000” is product wording for opening the provider-hosted selector, not a native
/tones/searchclient. - API and terms can change or access can be revoked. Re-verify the contract immediately before implementation and release, and isolate it behind
Tone3000Provider. - Official brand assets and their permissible packaging form must be obtained/confirmed; do not scrape the website logo.
Milestone 4 now provides 26 native foundation tests covering PKCE vectors/random contracts, strict/single-use OAuth callbacks and lifecycle endings, disabled ambiguous prompts, URL/redirect/redaction/retry/rate policy, typed parsing/API requests, secure download/promotion/provenance, unconfigured/explicit provider lifecycle, bounded cross-process refresh locking, real WinHTTP loopback GET/POST/redirect/limit/truncation/cancellation/streaming, browser validation, and an isolated Windows Credential Manager store/load/replace/remove cycle. Schema-1 migration and provider association preservation also run in the Milestone 3 suite.
These include deterministic mocks plus a real fixed IPv4 loopback receiver. They prove exclusive bind, one bounded callback, wrong-path/oversize rejection, port conflict, timeout/cancellation/shutdown release, and no random fallback. They do not establish production callback approval, live token refresh/download behavior, certificate failure behavior against a real service, process-crash recovery, or macOS operation.
Milestone 5 added the callback interface, hosted selection UI/model, explicit
variant/attribution presentation, cross-process browser-flow ownership, and
deterministic development mocks. This corrective patch selects the fixed
receiver in the Windows standalone and VST3 products. A real development
boundary attempt confirmed the listener owned 127.0.0.1:43821 before the
browser step and that cancellation released it. Account authorization was not
completed, so token exchange, current user, metadata, download, promotion,
audition, offline restore, and disconnect retention remain blocked/not
attempted and are not counted as live passes.
Follow-up input-dispatch coverage makes terminal hosted-selection UI states
explicitly dismissible: after Cancel or failure, the panel's Close action
hides the panel only and does not issue a second provider cancellation. The
same regression also verifies that a ready selection remains interactive rather
than presenting a terminal close action. This is local UI/state coverage; it
does not add a live account or content-flow claim.
The wizard's TONE3000 page is informational and optional. It reads no token and starts no browser, callback receiver, credential lookup, DNS, or HTTP operation on entry. It reports the optional development registration, explains that local NAM/IR operation is unaffected, and permits Skip/Next and normal setup completion. The shared Settings TONE3000 section owns the registration, callback, connection, secure-store status, and explicit provider actions.
Setup JSON stores only the boolean tone3000_configured readiness projection;
tokens, codes, PKCE values, client secrets, callback material, signed URLs, and
provider payloads are forbidden. See TONE3000_BRANDING_COMPLIANCE.md.
Installer and portable binaries contain the expected publishable public client
configuration but no client secret, token, signed URL, account payload, model,
or new brand asset. Normal upgrade/uninstall preserves the isolated Windows
Credential Manager target. Explicit interactive user-data
cleanup calls CredDelete only for
org.amphibiaaudio.Amphibia.TONE3000/oauth-v1; silent uninstall preserves it.
With credentialed elevation, cleanup may run in the administrator's credential
context, so users should disconnect in Amphibia before uninstall when exact
per-user removal matters.