Spaces:
Running on Zero
Download VALIDATION.md from fffiloni/ZONOS3-Mini: direct link, hf CLI and curl.
- Browser
- Download file 23.2 kB
-
https://huggingface.co/spaces/fffiloni/ZONOS3-Mini/resolve/main/VALIDATION.md
- Command line
-
hf download hf://spaces/fffiloni/ZONOS3-Mini/VALIDATION.md
-
curl -L -o VALIDATION.md https://huggingface.co/spaces/fffiloni/ZONOS3-Mini/resolve/main/VALIDATION.md
A newer version of the Gradio SDK is available: 6.31.0
Validation · 0.3.5 · 2026-11-10
Current release
- Actual Gradio browser rendering in WebKit and Chromium at 320, 390, 600, 601, 768 and 1440 CSS px: Speaking rate and Sampling have matching slider and numeric-field columns and widths, centered label/value rows, full-width mobile tracks, no horizontal overflow and 44 px slider targets. Mobile and desktop screenshots inspected.
- Browser checks passed for pointer/keyboard slider updates, numeric-to-slider synchronization, track fill, range endpoints, visible keyboard focus, closing/reopening settings, and Reset sampling preserving Speaking rate. A 4 px inherited bottom margin on the rate value caused a 2 px center offset; explicitly zeroing numeric-field margins removes it.
- All nine examples selected their declared text/language/voice without generating audio and preserved the chosen rate. Preset/Voice clip switching preserved the draft. Fixed seed and normalization settings persisted. No JavaScript page errors in either browser engine.
- A CPU fixture using the actual controller captured rate=12.5, seed=42, normalize=false and reset sampling defaults at the engine prepare boundary, then intentionally returned an error without inference. Generate recovered normally. These are UI/transport checks, not new GPU or physical iPhone tests.
- Two targeted existing contract tests passed: unchanged public 13-input / 5-output API and atomic custom-settings snapshot. Models, dependencies, API, audio player, waveform and inference logic are unchanged.
v0.3.4 evidence
- 11 targeted local tests passed: playback PCM texture and frequency response, bounded geometry, NaN/Infinity handling, silence/DC/pause settling, unchanged request-wave helper, UI/API contracts, pinned upstream imports and complete archive imports. The existing protobuf deprecation warning remains visible.
- Actual Gradio rendering in WebKit and Chromium at 320, 390, 768 and 1440 CSS px: no horizontal overflow; playback/seek/download targets at least 44 px; state icons visible with correct contrast. Mobile and desktop screenshots inspected.
- Actual playback of a 3.933-second English/Savannah WAV generated on deployed v0.3.3: successive waveform frames vary with real audio, with denser short oscillations, rounded crests and smooth edges. Quiet intervals and pause settle to a flat line. The pending-request animation remains unchanged.
- Browser checks passed for automatic playback of two successive takes on the same media element, pause, pointer/keyboard seek, timestamp/progress synchronization, replay, downloaded RIFF/WAV bytes and reduced motion. Cancel and validation-error paths preserve the preceding audio without replaying it.
- Request inference in the browser fixture was simulated using the actual controller and real WAV above; it was not another GPU inference. Physical iPhone/Safari remains untested.
- WebKit exposed a ResizeObserver feedback warning during viewport changes. Reader layout writes now run in the next animation frame, with cancellation on unmount. Repeating the complete browser checks produced no page errors in either engine; warnings were not suppressed.
- Models, dependency pins, inference parameters, sampling sliders/defaults, GPU lifecycle and the 13-input / 5-output API are unchanged. Changes to the waveform affect drawing only, not generated audio or playback volume.
v0.3.3 evidence
- 11 targeted local tests passed: waveform energy/geometry and temporal response, UI API snapshot, completion recovery, upstream runtime imports, example mappings and complete archive imports. Existing protobuf deprecation warning remains visible. The engine and GPU lifecycle were not modified.
- WebKit and Chromium at 320, 390, 768 and 1440 CSS px: all four sampling sliders visible, at least 130 px wide with 44 px input height, no horizontal overflow. Native pointer and keyboard changes synchronize the numeric field; numeric edits synchronize the slider. The CPU fixture received the exact selected values in the original API arguments. Reset restored all four pairs and the next submitted values to their defaults.
- Actual playback of a 3.933-second English/Savannah WAV generated from the deployed v0.3.2 engine drove the revised wave. Inspected mobile waveform frames showed quiet, near-flat intervals and broader rounded crests on louder syllables. Measured geometry varied during playback and remained inside the display area. Pause and reduced-motion mode returned to the exact baseline. Auto-play still worked; no JavaScript page errors in either engine.
- Fixture synthesis progress was simulated; playback was actual browser media playback using the real WAV above. Sampling values were checked at the fixture handler boundary, not inferred from labels. Mobile sampling screenshots were inspected. The slider tracks were subsequently brightened for contrast; no event code changed.
- This release preserves all model revisions, dependency pins, inference parameters, defaults and the 13-input / 5-output API. Display gain changes only the visualization, not playback volume or generated audio.
Remaining limits: physical iPhone/Safari and acoustic review of all example languages. Linux WebKit checks do not imply a physical-device test.
v0.3.2 deployed evidence
- Commit
9684bdcee282f5d8de03cc5f7c05d19cd4d97cb8reached RUNNING. Fresh WebKit and Chromium loaded the initial shell and versioned interface on the direct URL; WebKit also loaded the Hugging Face iframe without page errors. - A live iframe generation produced 3.6 seconds of audio and automatically played in WebKit (clock observed at 1.068 seconds, paused=false, no media error). Logs show synthesis exit/release HTTP 200/return followed by alignment exit/release HTTP 200/return and request cleanup.
v0.3.2 pre-deployment evidence
- 61 local tests passed, including the unchanged synthesis API, lifecycle and packaging checks. New ASGI tests verify insertion before framework markup, no-store entry headers and untouched API/SSE/media/asset responses. The five boot/UI contracts also passed after the final readiness change. The existing protobuf deprecation warning remains visible.
- Actual WebKit and Chromium rendering with an iPhone-sized viewport: automatic playback succeeded on two successive results using the same media element. Disabling auto-play prevented playback, and the preference survived reload. A simulated browser-policy rejection left an explicit message and usable manual Play control; manual playback then succeeded after restoring the browser method.
- Cancelled and invalid requests preserved the previous audio without replaying it. The curve changed during actual WAV playback and settled to the exact flat baseline on pause. No JavaScript page errors were observed. Viewports at 320, 390, 768 and 1440 CSS px had no horizontal overflow.
- Startup checks in both engines: initial HTML includes the compact 280 px loading shell and no-store header; the shell disappears after the text, player and settings signal readiness. Blocking framework JavaScript kept the shell visible, then exposed Reload and Open in a new tab after the timeout. Mobile loading and playback screenshots were inspected.
- Browser inference was a CPU fixture with simulated request progress and a real 3.933-second English/Savannah WAV obtained from the deployed v0.3.1 engine. The fixture is not a new GPU inference or a GPU-release test.
- Models, pinned dependencies, inference parameters, GPU lifecycle and 13-input / 5-output API are unchanged. Auto-play is a local browser preference. Entry loading changes use the public ASGI middleware interface and explicit Gradio client rendering.
Remaining limits: physical Safari/iPhone, background-tab media policy across devices, and acoustic review of all language examples. Linux WebKit is not a physical iOS test. The policy-refusal case was simulated; playback success above was actual browser media playback. Earlier GPU-release evidence applies to the unchanged engine.
v0.3.1 evidence
- 59 local tests passed: examples and preset/language mappings, unchanged public API, wave energy/geometry, time-based attack and release, generation lifecycle, session isolation and complete source-package imports. The existing protobuf deprecation warning remains visible.
- The live v0.3.0 baseline at
ba8c1f3fd8218768930ce6ab5bf372657908cc05reproduced the example-button mismatch: English inherited a 4 px bottom margin and measured 44 px high; Français measured 48 px. The replacement grid has nine 44 px buttons, zero margins and equal underline positions within each row. - Actual Chromium rendering at 320, 390, 768 and 1440 CSS px: no horizontal overflow; all nine example buttons update text, language and preset without publishing an audio result or requesting synthesis. English, French, German, Spanish, Italian, Portuguese, Japanese, Mandarin and Korean are included.
- A single live English/Savannah request on the unchanged v0.3.0 engine produced a 3.933-second WAV with ready alignment. The v0.3.1 UI fixture replayed this actual WAV; fixture request progress was simulated, not a new GPU inference.
- In that browser fixture, the activity curve starts while the request is pending. Playback changes the curve using the actual signal; pause and end settle to the exact flat baseline. Seeking back after the end restores Play instead of leaving Replay. Reduced-motion playback stays flat. No JavaScript errors were observed. Mobile and desktop screenshots were inspected.
- Models, runtime revisions, inference parameters, dependencies, GPU lifecycle and public 13-input / 5-output contract are unchanged. The waveform is now explicitly an audio-reactive illustration; its shape is not a literal PCM plot.
Remaining limits: physical Safari/iPhone testing and acoustic review of the seven new language examples. Browser checks above used Chromium with responsive viewports, not actual mobile hardware. Earlier live GPU-release evidence below applies to the unchanged engine, and is not replaced by a green Space badge.
v0.3.0 evidence
- 58 local tests passed, including exact Unicode transcript preservation, rejection of invalid timestamps, alignment failure retaining the new WAV, cancellation between allocations, session isolation, the original 13/5 public API, HTTP transport and complete archive imports. The pinned Qwen processor was loaded and prepared actual 16 kHz features locally; GPU inference was tested separately below.
- Chromium UI tests used a clearly identified CPU fixture for simulated synthesis and timing. Checked at 320, 390, 768 and 1440 px: no horizontal overflow; two-line viewport and automatic page changes; seek/replay; preserving a draft while replaying an old take; custom upload, 2-second trim, reset/remove; microphone capture using Chromium's simulated device; no JavaScript errors. No real microphone or physical iPhone/Safari test is implied.
- Simulated delayed microphone permission: switching back to Preset re-enabled submission, prevented recording, and ended all acquired tracks when the pending permission request resolved.
- Live ZeroGPU candidate commit
1b2da16badf9b62ca7534af6ebfaadca61bbef56: French/Gaspard produced a 4.133-second WAV and 8 aligned words; English/Savannah produced a 3.933-second WAV and 11 aligned words. Both downloaded files were mono 44.1 kHz PCM16; returned word fragments reconstruct the exact input text. - For both live requests, logs show synthesis exit → SDK release HTTP 200 → synthesis return → alignment enter/exit → a second SDK release HTTP 200 → alignment return → request cleanup. This confirms two separate released allocations for these requests, not merely a running Space badge.
- Public live Chromium at 390 px: actual generated 3.467-second audio played with advancing clock and no media error; four words illuminated by 1.34 seconds; seeking moved to the next pair of lines; replay reset illumination; no JavaScript errors.
- Observed startup notices: public unauthenticated model-download notice and upstream torch weight_norm deprecation. They do not indicate failed inference; no kernels were added or warnings hidden.
Remaining limits: physical Safari/iOS, a real microphone, live cancellation during the short aligner forward pass, all languages/presets, quota/OOM and sustained load. Alignment timestamps are model predictions with 80 ms granularity, not a manually reviewed linguistic accuracy benchmark. Failure fallback and cancellation between phases are covered by deterministic local tests.
Earlier release evidence
v0.2.1
Completed locally
48 targeted tests passed across input validation, audio files, lifecycle, pinned runtime contracts, real HTTP transport with a simulated engine, and fresh-process imports from the extracted release archive.
| Check | Evidence and boundary |
|---|---|
| Input validation | Empty/long text, unsupported language, malformed picker, invalid numeric values, reference consent; no inference on failure |
| Lifecycle tests | Synthetic CPU engine: one shared inference slot, separate outputs, duplicate protection, cooperative cancellation, retry, early generator close, cleanup before final yield, previous result retained on error |
| Gradio HTTP transport | Actual local HTTP server + gradio_client: injected session, generation with synthetic PCM, WAV download, validation failure, cancel endpoint |
| Dependency resolution | Pinned requirements resolve; pip check passes in the tested environment |
| Runtime contracts | Official synthesis callbacks, default decoder, revision propagation and critical speaker/codec imports checked without downloading weights |
| Actual small model assets | Pinned model configuration inspected; Gaspard's official preset is a finite 192-dimensional embedding |
| Python and JavaScript | Python tests pass; both UI scripts pass node --check |
| Gradio startup | Interface-only launch and HTTP responses confirmed |
The tested Python environment uses Python 3.12 and matching torch/torchaudio 2.9.1 CPU wheels, not the production CUDA wheels. Direct package pins match tested-dependencies.json; some transitive packages came from the development environment. The dependency resolver does not substitute for a fresh HF container build.
A DeprecationWarning originates in the installed protobuf dependency's use of datetime.utcfromtimestamp. It is not suppressed. It did not fail imports/tests and provides no evidence of a CUDA or kernel problem; no kernel package was added to address it.
Still incomplete: mobile/Safari review, microphone capture/trim, all languages and all presets, disconnect/quota/OOM paths, sustained multi-user load, and comprehensive audio-quality or performance benchmarking. Browser verification described below was at desktop width.
Live checks completed
Space: https://huggingface.co/spaces/fffiloni/ZONOS3-Mini — hardware reported zero-a10g (ZeroGPU).
The functional engine checks below ran on commit 0bee3df29cd70757f6a48a6076f734b0059bb39d (v0.1.1); v0.1.2 changes layout/logging without changing inference. Dates use 2026-11-10. The failed initial v0.1.0 deployment is superseded by the complete source package.
| Check | Observed result |
|---|---|
| HF build | Completed with Hub 1.31.0; the preinstalled datasets conflict is absent |
| Startup | LM, keep2 decoder, MECT encoder, EN/FR normalizers and 23 presets loaded; Space reached RUNNING |
| French / Gaspard | Downloaded non-silent mono PCM16 WAV, 44.1 kHz, 5.4 seconds; this one request measured 5.09 seconds client wall time and 3.34 seconds inside the GPU function |
| English / Savannah | Downloaded non-silent mono PCM16 WAV, 44.1 kHz, 2.8 seconds; this one request measured 1.34 seconds client wall time and 0.92 seconds inside the GPU function |
| Reference clip | Reused our synthetic Gaspard smoke-test take as the authorized clip; MECT path returned a 2.867-second mono 44.1 kHz WAV |
| Cancellation | API progress reported actual synthesis; /cancel then produced Cancelled, with a skip update for audio. A subsequent request succeeded |
| GPU release | Run logs show GPU-function exit, SDK POST to the device release endpoint with HTTP 200, decorated-call return, then request cleanup. Query values are omitted. This is observed release-path evidence, not a utilization dashboard measurement |
| Browser | French example fills fields without generating; generation publishes a WAV, waveform and player; play and pause advance the actual audio clock without media errors; a second take also plays |
These are individual smoke-test observations, not speed/quality claims or guarantees. The actual API returns UI updates as well as the audio metadata. The final browser layout and any remaining device-specific behavior should continue to be reviewed against the supplied visual references.
Remaining and repeatable acceptance checks
Use short non-sensitive test phrases. Record the Space commit, build logs, hardware, dependency versions and random request IDs. Do not interpret a cached SDK worker as an active allocation, or a green Space badge as proof of inference success.
- Clean startup: verify the model revision in
startup_model_loading, all model/decoder/MECT downloads and CUDA placements complete beforestartup_complete; no lazy model loading error on the first allocation. Confirmsdk_versionand installed Gradio match. Review warnings rather than hiding them. - Short preset take: fixed seed, English/Savannah, then French/Gaspard. Check valid speech, language, complete ending and 44.1 kHz mono WAV; compare the reference runtime for unexpected changes. Record measured latency and peak memory only if available.
- Each language/preset: verify the exposed selection reaches the correct upstream language and embedding. In particular test French with an English preset and Japanese with an available preset. Test numbers/abbreviations with normalization on/off.
- Voice clip: use an authorized non-sensitive 5–10 second recording, then test microphone/upload/clear/trim, stereo and alternate rates. Confirm the MECT path, clip duration and consent validation. Check that a failure leaves the preceding output playable.
- Lease release after success: correlate app IDs with the SDK/platform allocation/release logs. Confirm return/release precedes CPU export. If the platform exposes no allocation telemetry, mark this check unverified; do not infer it from an idle UI.
- Cancel and disconnect: cancel while waiting, allocating, preparing and generating; close/reload the browser during generation; repeat through the same API Client. Observe actual lease release and worker/task completion. Ensure no take is published after cancellation and another session continues. Allocation/preparation cancellation may take until the next callback.
- Failure and retry: exercise a quota/authentication failure and a controlled decoder/inference failure in a staging copy. Keep the native HF error visible, restore controls, retain the previous valid WAV, and successfully retry. Never intentionally exhaust shared hardware memory to test this.
- Concurrency/isolation: run two sessions with different text/seed/voice; submit a duplicate in one. Verify serialized engine access, distinct files/results and that cancellation affects only the originating session. Test an API queue cancellation as well as UI cancellation.
- Desktop/mobile: check 1440, 768, 390 and 320 CSS px at 100% zoom. Verify black background, centered text → waveform → language/voice → Generate composition, no horizontal scroll, readable expanded options, unclipped native audio controls, seed editing and Reset sampling. Check keyboard, visible focus and useful screen-reader names.
- Browser media: play/pause/seek/replay/download at least three consecutive takes; test Safari/iOS Web Audio resumption, native fallback, reduced motion and expired files. The previous AudioContext must close and duplicate listeners must not accumulate. Native mic permission remains a browser decision.
- Progress: submitting is immediate but does not claim inference; waiting/allocation remain native; inference is shown from actual callbacks; no fabricated percentages, elapsed values or ETA. “Ready” appears only after the file exists and the job is finished. Buttons must recover after a network failure or reconnect.
Eight requests may execute the controller concurrently while waiting for its single inference slot; additional requests remain in Gradio's queue (maximum queue size 16). Cancellation before a queued request enters the controller remains subject to Gradio's native queue behavior. Review this behavior on the deployed version before altering queue settings or hiding native progress.
Release gate
The deployed Space passed the smoke tests recorded above. The broader checklist is not fully complete. Preserve the distinction between these observed results, simulated tests and remaining device/error cases in subsequent releases.
0.2.0 UI validation
48 local tests pass, including executable JS contracts for smooth waveform edges, bounded display gain and all settings in the original API argument order. Chrome desktop on deployed commit 255bed9642bb7aa396ea7a91712292f339acb334: settings expand/collapse, source switching and native reference uploader visibility, random/fixed seed, paired numeric/range value, sampling reset, French example preserving other settings, real Gaspard generation (4.133333-second WAV, seed 42), activity-to-ready transition, playback/replay and retention of the prior audio after a validation error all observed. No horizontal overflow at the tested desktop width.
The empty-text test exposed an imperative disabled-button state after failure. Completion now explicitly restores the button, and an explicit failure event clears request activity. The nine affected JS/API/HTTP contract tests pass after this fix, including a new regression test (49 tests in the suite). Live retry confirmed on 215ce624a08c2e3fa55d969a495db82e55d45de3: empty-text error stops activity and restores Generate; the next English request completes with a playable WAV. A subsequent scheduler refusal also stops activity and preserves that WAV.
Runtime logs show gpu_function_exit → SDK /release HTTP 200 → gpu_call_returned → request_finished for the real UI generation. This verifies the release path, not hardware utilization. Mobile/Safari, microphone capture and reference trimming have not been re-tested in this UI revision. Inference math, model revisions and hardware are unchanged.
0.2.1 reservation fix
The long-text cancellation attempt was rejected before allocation because the effective requested duration exceeded the visitor cap. It is not counted as a cancellation pass. The reservation now spans 30–60 seconds (45–90 after the observed pinned SDK factor). No claim about a runtime speed improvement is made. A targeted budget regression test covers short, maximum-length and expanded normalized text. Live long-text and cancellation checks of this revision remain pending.