{"_id":"@dornick/parsers-audio","name":"@dornick/parsers-audio","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@dornick/parsers-audio","version":"0.1.0","description":"Lazy Whisper (transformers.js) parser for Dornick. Transcribes audio uploads in the browser.","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","typecheck":"tsc --noEmit","clean":"rm -rf dist","size":"size-limit"},"dependencies":{"@dornick/capabilities":"0.1.0","@dornick/parsers":"0.1.0","@huggingface/transformers":"^3.0.2"},"devDependencies":{"@size-limit/file":"^11.1.6","size-limit":"^11.1.6","tsup":"^8.3.0","typescript":"^5.5.4","vitest":"^4.1.7"},"license":"MIT","sideEffects":false,"publishConfig":{"access":"public"},"size-limit":[{"name":"@dornick/parsers-audio (gz)","path":"dist/index.js","limit":"1.0 KB","gzip":true}],"gitHead":"622e4ebed9c3aebadd808a2dd1f5f29c7d226040","_id":"@dornick/parsers-audio@0.1.0","_nodeVersion":"26.7.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-6+5dohd4ApNnJPm8hwcf4foMjMIv7Miz8K9t5qMEpmG/DPSX42isLOslzhGqRJHRo5i6Xq0Gw4h1chhAg62lRw==","shasum":"dbb0045c75dd00d1781025cfe53dfc0d25f7e230","tarball":"https://registry.npmjs.org/@dornick/parsers-audio/-/parsers-audio-0.1.0.tgz","fileCount":7,"unpackedSize":19647,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIC7NFUt4N2Lt8ktDR+3rGmv6H+HRcnqM8ibD7y2IhUJ2AiBaw8kC2Ogq86Z18C2uCGHtJzgUkl1i9pqf34pH6xfB/Q=="}]},"_npmUser":{"name":"dipankarsarkar","email":"me@dipankar.name"},"directories":{},"maintainers":[{"name":"dipankarsarkar","email":"me@dipankar.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/parsers-audio_0.1.0_1788784932952_0.411185156998094"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-07T12:42:12.598Z","0.1.0":"2026-09-07T12:42:13.073Z","modified":"2026-09-07T12:42:13.318Z"},"maintainers":[{"name":"dipankarsarkar","email":"me@dipankar.name"}],"description":"Lazy Whisper (transformers.js) parser for Dornick. Transcribes audio uploads in the browser.","license":"MIT","readme":"# @dornick/parsers-audio\n\n**Lazy Whisper (transformers.js) parser for Dornick — transcribe audio uploads in the browser.**\n\nCapability-gated on **WebGPU + `crossOriginIsolated`**. Auto-hides on browsers that can't run it efficiently.\n\n[![npm](https://img.shields.io/npm/v/@dornick/parsers-audio.svg?style=flat&color=4c1)](https://www.npmjs.com/package/@dornick/parsers-audio)\n[![license](https://img.shields.io/npm/l/@dornick/parsers-audio.svg?style=flat&color=blue)](../../LICENSE)\n\n## Install\n\n```sh\nnpm i @dornick/parsers-audio\n```\n\nDepends on [`@huggingface/transformers`](https://huggingface.co/docs/transformers.js). On first use, downloads the model (~40 MB for `whisper-tiny.en`); cached thereafter.\n\n## Use\n\n```ts\nimport { Dornick } from \"@dornick/core\";\nimport { whisperParser, whisperParserFor } from \"@dornick/parsers-audio\";\n\nconst dornick = new Dornick({ config, transport });\n\ndornick.parsers.add(whisperParser);                            // tiny.en default\ndornick.parsers.add(whisperParserFor(\"Xenova/whisper-base\"));  // larger model\n```\n\n## Paths produced\n\n| Path | Content |\n|---|---|\n| `transcript.txt` | The plain-text transcription |\n| `chunks.jsonl` | One JSON object per chunk: `{ text, timestamp: [start, end] }` |\n\n## Capability gate\n\n`requires: [\"webgpu\", \"crossOriginIsolated\"]`\n\n- **WebGPU** — without it, Whisper takes orders of magnitude longer per minute of audio. The gate hides the parser where it'd be too slow to be useful.\n- **`crossOriginIsolated`** — required for `SharedArrayBuffer`, which transformers.js uses for performant inference. To enable: serve your page with the headers `Cross-Origin-Opener-Policy: same-origin` and `Cross-Origin-Embedder-Policy: require-corp`.\n\n## Hosting headers (quick reference)\n\n```\nCross-Origin-Opener-Policy: same-origin\nCross-Origin-Embedder-Policy: require-corp\n```\n\nWithout these, the parser silently disappears from `paths()` and `dornick.capabilities.has(\"crossOriginIsolated\")` is false.\n\n## Models\n\n| Model | Size | Quality | Use it for |\n|---|---|---|---|\n| `Xenova/whisper-tiny.en` (default) | ~40 MB | OK | English-only quick transcripts |\n| `Xenova/whisper-base.en` | ~75 MB | Good | English, noisier audio |\n| `Xenova/whisper-small.en` | ~250 MB | Great | Demanding English transcripts |\n| `Xenova/whisper-tiny` | ~40 MB | OK | Multilingual |\n\nPass the model name to `whisperParserFor(name)`.\n\n## See also\n\n- [Concept: Capabilities](https://docs.neullabs.com/dornick/concepts/capabilities/) — why the gate matters\n- [Concept: Parsers](https://docs.neullabs.com/dornick/concepts/parsers/)\n- [Use case: KYC / AML intake](https://docs.neullabs.com/dornick/use-cases/kyc-intake/) — voice-confirm step\n- [Use case: SaaS copilot](https://docs.neullabs.com/dornick/use-cases/saas-copilot/) — dictation-driven replies\n\n## License\n\nMIT — © Dipankar Sarkar\n","readmeFilename":"README.md","_rev":"1-6483f3e163e420d52438360ed734caaa"}