{"_id":"@autokaka/havi","_rev":"9-4e386e3367c4d9e3d0b2e716f155ab5a","name":"@autokaka/havi","dist-tags":{"latest":"0.1.9"},"versions":{"0.1.0":{"name":"@autokaka/havi","version":"0.1.0","license":"MIT","_id":"@autokaka/havi@0.1.0","maintainers":[{"name":"autokaka","email":"qq1909698494@gmail.com"}],"homepage":"https://github.com/Autokaka/havi#readme","bugs":{"url":"https://github.com/Autokaka/havi/issues"},"bin":{"havi":"havi/havi.js"},"dist":{"shasum":"47e143a1907b7de7bbc929e3d79d8883b800a084","tarball":"https://registry.npmjs.org/@autokaka/havi/-/havi-0.1.0.tgz","fileCount":7,"integrity":"sha512-bzxKwJtfZhBWXRs5M4nOdsRvdRLE3U1MjbJbkEHazxB5ilwq5Dj3OVlJfCeHyN+MAOUYLCiaW0iqSTNnkxvfgA==","signatures":[{"sig":"MEQCIFOmHTiIM78qlmr7+t4jl4s4ISjFMCmgcYqsd2lbmgZ3AiB7STAl/R5wMGJhFHzjONF/Eie0s7V2ND6e5Lb43AyRPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8314},"main":"havi/index.js","type":"module","types":"havi/index.d.ts","engines":{"node":">=22"},"gitHead":"bfc4494a4febe42118e4e6dcdc538a9322076fd2","scripts":{"ship":"./ship.ts","build":"./build.ts","postinstall":"./postinstall.js"},"_npmUser":{"name":"autokaka","email":"qq1909698494@gmail.com"},"repository":{"url":"git+https://github.com/Autokaka/havi.git","type":"git"},"_npmVersion":"10.8.2","description":"Deterministic HTML-to-video renderer.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"fflate":"latest"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/havi_0.1.0_1779803929253_0.6665945544344172","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@autokaka/havi","version":"0.1.1","license":"MIT","_id":"@autokaka/havi@0.1.1","maintainers":[{"name":"autokaka","email":"qq1909698494@gmail.com"}],"homepage":"https://github.com/Autokaka/havi#readme","bugs":{"url":"https://github.com/Autokaka/havi/issues"},"bin":{"havi":"havi/havi.js"},"dist":{"shasum":"4223876923876f9974c6b6e112f8ee1fada360e3","tarball":"https://registry.npmjs.org/@autokaka/havi/-/havi-0.1.1.tgz","fileCount":7,"integrity":"sha512-0z9mwT+1Sp0TepS6HtMgD9zyEGOGUtYSM8C3W/moxnsf1SzblqVmwwNn8o8JNwgfilWQE+swiHzMfpjqDyVmVQ==","signatures":[{"sig":"MEUCIQCYcDY6w42ILsk9bsjvsCJTYqiX4H9ikF71lTTY3jlkQgIgAQMH8kAAW/AllyruUDefY1gnLBGYceUA4F3BXTbJfGA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8606},"main":"havi/index.js","type":"module","types":"havi/index.d.ts","engines":{"node":">=22"},"gitHead":"e4aa1a23f78635af74825b23c66ea659d453fd0d","scripts":{"ship":"./ship.ts","build":"./build.ts","postinstall":"./postinstall.js"},"_npmUser":{"name":"autokaka","email":"qq1909698494@gmail.com"},"repository":{"url":"git+https://github.com/Autokaka/havi.git","type":"git"},"_npmVersion":"10.8.2","description":"Deterministic HTML-to-video renderer.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"fflate":"latest"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/havi_0.1.1_1779895225130_0.4209497872807446","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@autokaka/havi","version":"0.1.2","license":"MIT","_id":"@autokaka/havi@0.1.2","maintainers":[{"name":"autokaka","email":"qq1909698494@gmail.com"}],"homepage":"https://github.com/Autokaka/havi#readme","bugs":{"url":"https://github.com/Autokaka/havi/issues"},"bin":{"havi":"havi/havi.js"},"dist":{"shasum":"28b90ade38d4ffb3200d38f9051d8d023c63d769","tarball":"https://registry.npmjs.org/@autokaka/havi/-/havi-0.1.2.tgz","fileCount":7,"integrity":"sha512-YFJlorLXzw8fwjujJkmQopMyOgtFDDlWjeyZuTko82ZjUpHr7TZQeahjQ+zpZXdQIMipq+OCbt2m97IEHA8eig==","signatures":[{"sig":"MEQCIFTzQEyN066piqafprjk8I8zW3nZ1SdUTrIU9FjURbSFAiAArlbSs11Z54y+6vO32RwhI8Noubu7AW/SpD6qncC+iA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8695},"main":"havi/index.js","type":"module","types":"havi/index.d.ts","engines":{"node":">=22"},"gitHead":"b4bcc67c54ada56d0163aba02a1a07d00bacf46c","scripts":{"ship":"./ship.ts","build":"./build.ts","postinstall":"./postinstall.js"},"_npmUser":{"name":"autokaka","email":"qq1909698494@gmail.com"},"repository":{"url":"git+https://github.com/Autokaka/havi.git","type":"git"},"_npmVersion":"10.8.2","description":"Deterministic HTML-to-video renderer.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"fflate":"latest"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/havi_0.1.2_1779899386864_0.4313722722852267","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@autokaka/havi","version":"0.1.3","license":"BSD-3-Clause","_id":"@autokaka/havi@0.1.3","maintainers":[{"name":"autokaka","email":"qq1909698494@gmail.com"}],"homepage":"https://github.com/Autokaka/havi#readme","bugs":{"url":"https://github.com/Autokaka/havi/issues"},"bin":{"havi":"havi/havi.js"},"dist":{"shasum":"655a082d17baae93eb3b8a027449213f98983430","tarball":"https://registry.npmjs.org/@autokaka/havi/-/havi-0.1.3.tgz","fileCount":7,"integrity":"sha512-PW8NI60Xc9B3asUjPxflYNeHwDYnZ64yOQ3mpUZARuoBFoZVX64sUf29aPsLy8ZoIKLAKCXFN/AbH8w6ZrNexQ==","signatures":[{"sig":"MEQCHwfIKuh91cOFXs6roYGBikhIqVwjo/Znj9GMLtrDER0CIQCTkeLhVFMB4/XyuV3LpCPgpgNxwL7Omrw+MhcfyIPATg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11368},"main":"havi/index.js","type":"module","types":"havi/index.d.ts","engines":{"node":">=22"},"gitHead":"3869912cb5b752f77f333a95be445528c6184286","scripts":{"ship":"./ship.ts","build":"./build.ts","postinstall":"./postinstall.js"},"_npmUser":{"name":"autokaka","email":"qq1909698494@gmail.com"},"repository":{"url":"git+https://github.com/Autokaka/havi.git","type":"git"},"_npmVersion":"10.9.8","description":"Deterministic HTML-to-video renderer.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"fflate":"latest"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/havi_0.1.3_1781177274566_0.8998500776721388","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@autokaka/havi","version":"0.1.4","license":"BSD-3-Clause","_id":"@autokaka/havi@0.1.4","maintainers":[{"name":"autokaka","email":"qq1909698494@gmail.com"}],"homepage":"https://github.com/Autokaka/havi#readme","bugs":{"url":"https://github.com/Autokaka/havi/issues"},"bin":{"havi":"havi/havi.js"},"dist":{"shasum":"552054ead71fe928c26c5c35d2de2be1531f3229","tarball":"https://registry.npmjs.org/@autokaka/havi/-/havi-0.1.4.tgz","fileCount":7,"integrity":"sha512-Qi4XFtAYj2RoP2JvPB4mR+bEu3ufEOC/1CXKiHENt9ByKiA6j2jEDEHNyNADBDpCtedNoY7qaF+NUXf0ZX5eew==","signatures":[{"sig":"MEUCIAMT9uNsNM6s3gBqbhQz3bbdWvG/MBr/N4DkqF/iT8GsAiEAq9660JlgCdDlZfMos308nJsdhsjYM++q2Zb7vqHhji0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11368},"main":"havi/index.js","type":"module","types":"havi/index.d.ts","engines":{"node":">=22"},"gitHead":"fbdb95cebdbb1a02a7ccb7d9a5a207ccb75d419b","scripts":{"ship":"./ship.ts","build":"./build.ts","postinstall":"./postinstall.js"},"_npmUser":{"name":"autokaka","email":"qq1909698494@gmail.com"},"repository":{"url":"git+https://github.com/Autokaka/havi.git","type":"git"},"_npmVersion":"10.9.8","description":"Deterministic HTML-to-video renderer.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"fflate":"latest"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/havi_0.1.4_1781180644104_0.3013751637962989","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@autokaka/havi","version":"0.1.6","license":"BSD-3-Clause","_id":"@autokaka/havi@0.1.6","maintainers":[{"name":"autokaka","email":"qq1909698494@gmail.com"}],"homepage":"https://github.com/Autokaka/havi#readme","bugs":{"url":"https://github.com/Autokaka/havi/issues"},"bin":{"havi":"havi/havi.js"},"dist":{"shasum":"257e8b1633d72e72f1c0072d18e2ebd272d13179","tarball":"https://registry.npmjs.org/@autokaka/havi/-/havi-0.1.6.tgz","fileCount":7,"integrity":"sha512-bSFFs5Htpf6arhZ9HV7yU6GAzbP5UxZi+3vOZlJ45RLBdWgjgaWIQEw3YenvqR0UuUP4zhBsWbPdKvJWeJEevg==","signatures":[{"sig":"MEUCIQC6n/+LWVrxdFTzD20pIAPIlg923yeAGTb6izWYbutkNwIgZeleAa1i/TA7FRZu1wp0KvKV5wTfY4jGx38yaSXv1zY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11678},"main":"havi/index.js","type":"module","types":"havi/index.d.ts","engines":{"node":">=22"},"gitHead":"7af8b4d1a7f6521631c004ba7f8d127ca394797a","scripts":{"ship":"./ship.ts","build":"./build.ts","postinstall":"./postinstall.js"},"_npmUser":{"name":"autokaka","email":"qq1909698494@gmail.com"},"repository":{"url":"git+https://github.com/Autokaka/havi.git","type":"git"},"_npmVersion":"10.9.8","description":"Deterministic HTML-to-video renderer.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"fflate":"latest"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/havi_0.1.6_1781185143638_0.6502474234789164","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@autokaka/havi","version":"0.1.7","license":"BSD-3-Clause","_id":"@autokaka/havi@0.1.7","maintainers":[{"name":"autokaka","email":"qq1909698494@gmail.com"}],"homepage":"https://github.com/Autokaka/havi#readme","bugs":{"url":"https://github.com/Autokaka/havi/issues"},"bin":{"havi":"havi/havi.js"},"dist":{"shasum":"09a66cd16d247b457cf4caf67926c83a5781cdb2","tarball":"https://registry.npmjs.org/@autokaka/havi/-/havi-0.1.7.tgz","fileCount":7,"integrity":"sha512-vYem7cidp4GP2id4R5Z5Rqw2IeQ00OA6yjBEIzLTvpTjTzwk+Kn39bePu71Yy6csEG+tDm7ZXveZ08QGFsh5ig==","signatures":[{"sig":"MEQCIDCw3zaAsvoK2LAECAkwLa7gFQMC1iEfXt8KyEzRRHP1AiBJYDG5ORA30N+CntRBIcyuX1dj7fZHqfbZaJYSVuzPUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11678},"main":"havi/index.js","type":"module","types":"havi/index.d.ts","engines":{"node":">=22"},"gitHead":"f78ec75a2a1ddbda0582a4c62bc2da713cd0ba2a","scripts":{"ship":"./ship.ts","build":"./build.ts","postinstall":"./postinstall.js"},"_npmUser":{"name":"autokaka","email":"qq1909698494@gmail.com"},"repository":{"url":"git+https://github.com/Autokaka/havi.git","type":"git"},"_npmVersion":"10.9.8","description":"Deterministic HTML-to-video renderer.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"fflate":"latest"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/havi_0.1.7_1781189729606_0.12481091455408144","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@autokaka/havi","version":"0.1.8","license":"BSD-3-Clause","_id":"@autokaka/havi@0.1.8","maintainers":[{"name":"autokaka","email":"qq1909698494@gmail.com"}],"homepage":"https://github.com/Autokaka/havi#readme","bugs":{"url":"https://github.com/Autokaka/havi/issues"},"bin":{"havi":"havi/havi.js"},"dist":{"shasum":"6119d07468fe1f7c85edb09bfc0278a03a481701","tarball":"https://registry.npmjs.org/@autokaka/havi/-/havi-0.1.8.tgz","fileCount":7,"integrity":"sha512-RQtsbx+3GvKS1nOb8OVPn70w359ajakBfAXUy6tVjIOXCt6DpFE/lqFJWsU7igHwOb72sVtquy3I72CUoZTj+Q==","signatures":[{"sig":"MEQCIEMnVkMHv2p60FarykQ5pQw9Y+JMjEIshfH9m0kMj4HwAiA0i6h3E0hT130kaQjX9+nqXva2CknP+nK/UgN19Bd2KA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11678},"main":"havi/index.js","type":"module","types":"havi/index.d.ts","engines":{"node":">=22"},"gitHead":"d9fc4b2843438d5ac849bf8bd8fafbe6ef70c6fb","scripts":{"ship":"./ship.ts","build":"./build.ts","postinstall":"./postinstall.js"},"_npmUser":{"name":"autokaka","email":"qq1909698494@gmail.com"},"repository":{"url":"git+https://github.com/Autokaka/havi.git","type":"git"},"_npmVersion":"10.9.8","description":"Deterministic HTML-to-video renderer.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"fflate":"latest"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"latest"},"_npmOperationalInternal":{"tmp":"tmp/havi_0.1.8_1781191237101_0.16103080487536303","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@autokaka/havi","version":"0.1.9","description":"Deterministic HTML-to-video renderer.","type":"module","bin":{"havi":"havi/havi.js"},"main":"havi/index.js","types":"havi/index.d.ts","scripts":{"postinstall":"./postinstall.js","build":"./build.ts","ship":"./ship.ts"},"dependencies":{"fflate":"latest"},"repository":{"type":"git","url":"git+https://github.com/Autokaka/havi.git"},"engines":{"node":">=22"},"license":"BSD-3-Clause","devDependencies":{"@types/bun":"latest","typescript":"latest"},"_id":"@autokaka/havi@0.1.9","gitHead":"77150fec1799b460cc33d5495783de4c84c0fa58","bugs":{"url":"https://github.com/Autokaka/havi/issues"},"homepage":"https://github.com/Autokaka/havi#readme","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-q99szF+mWEqG61hJPKG+bkFZcm+zrhpXxIQRd96/eMVjBvwwgF4ZokTrYgFQnCwtbZO1lNezq7nAbwGB/7ObuA==","shasum":"91bedd12f8878839d84485a3d270cdc5886aa41c","tarball":"https://registry.npmjs.org/@autokaka/havi/-/havi-0.1.9.tgz","fileCount":7,"unpackedSize":11678,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCLZNMp37ndl7xjeEypnja1hg998Kpse13v/GuCtbQJRAIhAPkaafPZVoYngYBnRBzuG70UbKnyA0b4vcmr+pReeH4W"}]},"_npmUser":{"name":"autokaka","email":"qq1909698494@gmail.com"},"directories":{},"maintainers":[{"name":"autokaka","email":"qq1909698494@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/havi_0.1.9_1781193582090_0.3658171820777594"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-26T13:58:49.133Z","modified":"2026-06-11T15:59:42.360Z","0.1.0":"2026-05-26T13:58:49.390Z","0.1.1":"2026-05-27T15:20:25.356Z","0.1.2":"2026-05-27T16:29:47.029Z","0.1.3":"2026-06-11T11:27:54.702Z","0.1.4":"2026-06-11T12:24:04.239Z","0.1.6":"2026-06-11T13:39:03.792Z","0.1.7":"2026-06-11T14:55:29.774Z","0.1.8":"2026-06-11T15:20:37.244Z","0.1.9":"2026-06-11T15:59:42.262Z"},"bugs":{"url":"https://github.com/Autokaka/havi/issues"},"license":"BSD-3-Clause","homepage":"https://github.com/Autokaka/havi#readme","repository":{"type":"git","url":"git+https://github.com/Autokaka/havi.git"},"description":"Deterministic HTML-to-video renderer.","maintainers":[{"name":"autokaka","email":"qq1909698494@gmail.com"}],"readme":"# havi\n\nTurn any webpage into a video. Deterministic, frame-perfect, offline.\n\nhavi renders HTML — animations, video, canvas, SVG, WebGL — to an MP4 by driving a real Chromium and capturing each frame against a virtual clock. The same input produces the same bytes every run, so it fits CI, golden-file tests, and automated content pipelines.\n\n## Install\n\n```sh\nnpm i @autokaka/havi\n```\n\nThe package ships its own Chromium (CEF) and ffmpeg, so there is nothing else to install and no network needed at render time. Prebuilt for macOS arm64, Linux x64, Linux arm64, and Windows x64.\n\n## Quick start\n\nCLI:\n\n```sh\nnpx havi https://example.com -o demo.mp4\n```\n\nNode or Bun:\n\n```js\nimport { havi } from \"@autokaka/havi\";\n\nconst result = await havi.render({\n  options: {\n    source: \"https://example.com\",\n    width: 1920,\n    height: 1080,\n    fps: 60,\n    duration: 10,\n    out: \"demo.mp4\",\n  },\n});\n\nconsole.log(result.out, result.frames);\n```\n\n## How it works\n\nEach render runs in its own short-lived `havi` process: it loads the page once to warm an isolated cache, reloads into that warm cache, then steps a pinned virtual clock frame by frame. Every frame is gated on a two-signal check (the browser's virtual-time budget plus an embedded per-frame timestamp), so frame N is pixel-identical across runs regardless of real-world timing, network jitter, or machine speed. Captured frames are piped straight to ffmpeg.\n\nBecause each render is a separate process with its own cache, you can run as many at once as you like — havi does not cap concurrency. Control how many run in parallel from your own code; each one is independent and cleans up after itself.\n\n## CLI\n\n```\nhavi <source> [options]\n\n  -W, --width <px>       output width            (default 1920)\n  -H, --height <px>      output height           (default 1080)\n  -f, --fps <n>          frames per second       (default 30)\n  -t, --duration <sec>   seconds to capture      (default 5)\n  -o, --out <path>       output file             (default out.mp4)\n      --tolerant         render partial DOM if the page is slow to load\n      --proxy <json>     HTTP rewrite/block/mock rules\n```\n\n`<source>` accepts an http(s) URL, a local file path, or a `data:` URI.\n\n## API\n\n```ts\nimport { havi } from \"@autokaka/havi\";\n\nconst result = await havi.render({\n  options: {\n    source: string,        // URL, file path, or data: URI\n    out?: string,          // default \"out.mp4\"\n    width?: number,        // default 1920\n    height?: number,       // default 1080\n    fps?: number,          // default 30\n    duration?: number,     // seconds, default 5\n    tolerant?: boolean,    // render partial DOM on slow load\n    proxy?: ProxyRule[],   // HTTP rewrite/block/mock\n  },\n  onProgress?: (e) => void,  // { frame, total }\n  onConsole?: (e) => void,   // { level, source, message }\n  signal?: AbortSignal,      // cancel this render\n});\n// result: { frames, width, height, fps, out, elapsedMs }\n```\n\n`havi.renderHelp()` returns the CLI help text.\n\nCancel a render with an `AbortSignal`:\n\n```js\nconst controller = new AbortController();\nsetTimeout(() => controller.abort(), 5000);\nawait havi.render({ options: { source, out }, signal: controller.signal });\n```\n\n### Proxy rules\n\nRewrite, block, or mock requests during a render. First match wins.\n\n```js\nproxy: [\n  { pattern: \"https://api.public.com/**\", to: \"https://api.internal/\" },\n  { pattern: \"**/*.gtag*\", block: true },\n  { pattern: \"https://mock.api/**\", status: 200, body: \"{}\",\n    headers: { \"content-type\": \"application/json\" } },\n]\n```\n\n## Output\n\nMP4 (H.265/HEVC), web-ready with faststart. Transparent pages produce HEVC with an alpha channel (`yuva420p`), suitable for compositing.\n\n## License\n\nBSD 3-Clause. See [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}