{"_id":"@livliv-dev/player","_rev":"2-3663451c7091ad950cbc57c3003f774b","name":"@livliv-dev/player","dist-tags":{"latest":"0.3.0"},"versions":{"0.0.0-stage":{"name":"@livliv-dev/player","version":"0.0.0-stage","_id":"@livliv-dev/player@0.0.0-stage","stub":true,"maintainers":[{"name":"livliv-dev-personal","email":"itsyeko@live.com"}],"dist":{"shasum":"a16580c4b95b7d6542be3033439e42ce43f14b17","tarball":"https://registry.npmjs.org/@livliv-dev/player/-/player-0.0.0-stage.tgz","fileCount":2,"integrity":"sha512-4UhrngqCQt8sOuTCv0ZjDDG+p5M0uz9e5heGWtyEGBs+DHkn9PTgqwUzNJqOY7FVAsiyzvolbHMwTLzDCja+3w==","signatures":[{"sig":"MEQCIGq1JYj56ABrDDFMAK2OKt19ciAPQ8MiTyGAckMy8eEhAiAVzLElfqI73cxcXbj59I58RfgT7rxspKu+mXJ80s/iGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":340},"_npmUser":{"name":"livliv-dev-personal","email":"itsyeko@live.com"},"description":"Temporary package placeholder for staged publishing","directories":{}},"0.3.0":{"_id":"@livliv-dev/player@0.3.0","bugs":{"url":"https://github.com/livliv-dev/player/issues"},"dist":{"shasum":"fb3031f3275299f471ad7f0810af99fa3a57a7b1","tarball":"https://registry.npmjs.org/@livliv-dev/player/-/player-0.3.0.tgz","fileCount":46,"integrity":"sha512-4IRlS2R3pL7DTWdm/atfUP2cBPF64WzbT+wfSTOOKWEToY+3Oh8L06B6P8S4V00PX6eVTeaaZT5rQMSVqH1vjA==","signatures":[{"sig":"MEQCIDnj2LhBEB9TLKUlHnT5tTKM2oEKkkpS3wZ1hPBrZd9cAiAwqje692cNh4k5tqWdXAu2YqTOywro9rpHAykkSwFAsw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBtmkU+hEJh4Hc7o+WIUTa+Yrwm1PukbiBrsZ5ZaK+KcAiEAkMFoR8PKP4fp5/KDtixfs0Jm8nvBBfABV4Qo5EKvPEc="}],"unpackedSize":338753},"main":"./dist/index.js","name":"@livliv-dev/player","type":"module","_from":"file:/Users/yeko/Documents/livemaker/data.nosync/release/livliv-dev-player-0.3.0/livliv-dev-player-0.3.0.tgz","types":"./dist/types/src/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/types/src/index.d.ts","import":"./dist/index.js"},"./png":{"types":"./dist/types/src/png.d.ts","import":"./dist/png.js"},"./vrm":{"types":"./dist/types/src/vrm.d.ts","import":"./dist/vrm.js"},"./body":{"types":"./dist/types/src/body.d.ts","import":"./dist/body.js"},"./voice":{"types":"./dist/types/src/voice.d.ts","import":"./dist/voice.js"},"./tracking":{"types":"./dist/types/src/tracking.d.ts","import":"./dist/tracking.js"},"./package.json":"./package.json"},"license":"Apache-2.0","scripts":{"test":"node --disable-warning=ExperimentalWarning --import ./test/ts.mjs --test \"test/*.test.ts\"","build":"rm -rf dist && vite build && tsc -p tsconfig.build.json && node scripts/dts-extensions.mjs && node scripts/pack-characters.mjs","check":"tsc -p tsconfig.json","prepack":"npm run build","test:types":"node test/types.mjs","test:browser":"node test/smoke.mjs","test:engines":"node test/smoke.mjs firefox && node test/smoke.mjs webkit","prepublishOnly":"npm run check && npm test"},"version":"0.3.0","_npmUser":{"name":"livliv-dev-personal","email":"itsyeko@live.com"},"homepage":"https://github.com/livliv-dev/player#readme","keywords":["avatar","vtuber","pngtuber","vrm","character","puppet","webgl2","lip-sync","face-tracking"],"_resolved":"/Users/yeko/Documents/livemaker/data.nosync/release/livliv-dev-player-0.3.0/livliv-dev-player-0.3.0.tgz","_integrity":"sha512-4IRlS2R3pL7DTWdm/atfUP2cBPF64WzbT+wfSTOOKWEToY+3Oh8L06B6P8S4V00PX6eVTeaaZT5rQMSVqH1vjA==","repository":{"url":"git+https://github.com/livliv-dev/player.git","type":"git"},"_npmVersion":"10.9.2","description":"LivLiv Player: a lightweight 2.5D character player for the web, with lip sync and webcam face tracking. Plays LivLiv, VRM and PNGTuber characters; WebGL2, no dependencies in the core.","directories":{},"maintainers":[{"name":"livliv-dev-personal","email":"itsyeko@live.com"}],"sideEffects":false,"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.3.4","three":"0.186.0","typescript":"~6.0.3","@types/three":"0.186.0","playwright-core":"^1.64.1","@pixiv/three-vrm":"3.5.5","@mediapipe/tasks-vision":"1.1.1"},"peerDependencies":{"three":">=0.170.0","@pixiv/three-vrm":"^3.5.5","@mediapipe/tasks-vision":"1.1.1"},"peerDependenciesMeta":{"three":{"optional":true},"@pixiv/three-vrm":{"optional":true},"@mediapipe/tasks-vision":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/player_0.3.0_1793949761427_0.6078689158793096"}}},"time":{"created":"2026-11-06T07:21:25.789Z","modified":"2026-11-06T07:22:41.791Z","0.0.0-stage":"2026-11-06T07:21:25.789Z","0.3.0":"2026-11-06T07:22:41.562Z"},"description":"LivLiv Player: a lightweight 2.5D character player for the web, with lip sync and webcam face tracking. Plays LivLiv, VRM and PNGTuber characters; WebGL2, no dependencies in the core.","maintainers":[{"name":"livliv-dev-personal","email":"itsyeko@live.com"}],"readme":"<p align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"media/livliv-player-wordmark-white.svg\">\n    <img alt=\"LivLiv Player\" src=\"media/livliv-player-wordmark-2000.png\" width=\"360\">\n  </picture>\n</p>\n\n<p align=\"center\">\n  超轻量的 2.5D 网页角色播放器，支持口型同步和摄像头面捕，几行代码就能接入网页、直播画面和应用。<br>\n  自带 21 个风格各异的精选角色，即开即用。\n</p>\n\n<p align=\"center\"><a href=\"README.md\">English</a> · <b>中文</b> · <a href=\"README.ja.md\">日本語</a></p>\n\n<p align=\"center\"><img src=\"media/demo.gif\" alt=\"精选角色在呼吸、眨眼、转头、说话\" width=\"720\"></p>\n\n特点：\n\n- WebGL2，无依赖，核心 gzip 后约 30 KB\n- 口型同步（麦克风、音频、视频）和摄像头面捕（MediaPipe），都在浏览器里运行，按需引入\n- 支持 LivLiv、VRM 和 PNGTuber 三种角色，用同一套接口\n- [`characters/`](characters/) 里有 21 个精选角色，可以直接用\n\n## 试一试\n\n- **在线**：示例页在 [livliv-dev.github.io/player](https://livliv-dev.github.io/player/)。\n- **在本地**：`npm install && npm run build`，用任意静态服务器打开这个目录，访问 `/example/demo.html`\n  （表情、动作、麦克风、摄像头；`?model=../characters/<id>/` 换一个角色）。`/example/png.html` 和\n  `/example/vrm.html` 是 PNGTuber 和 VRM。\n- **在 livliv.ai 上**：那里的每个角色页都用同一套渲染播放这个角色。从 [livliv.ai/discover](https://livliv.ai/discover) 开始。\n\n## 在自己的页面里用\n\n```sh\nnpm install @livliv-dev/player\n```\n\n```js\nimport { Player } from '@livliv-dev/player'\n\nconst player = new Player(document.querySelector('canvas'))\nawait player.load('characters/k01/')   // 含 model.json 和 textures/ 的文件夹，或一个 .livliv 文件\n\nplayer.setExpression('smile')          // 可用的 id 在 player.expressions 里\nplayer.act('nod')\nplayer.params.mouthOpen = 0.6          // 0..1\n```\n\n口型同步和面捕：\n\n```js\nimport { createSpeech } from '@livliv-dev/player/voice'\nimport { startFaceTracking } from '@livliv-dev/player/tracking'   // 需要 @mediapipe/tasks-vision\n\nconst speech = createSpeech(player)\nbutton.onclick = () => { speech.unlock(); speech.say('/reply.mp3') }\n\nawait startFaceTracking(player)\n```\n\nVRM 和 PNGTuber 用同一套接口：\n\n```js\nimport { BodyPlayer } from '@livliv-dev/player/body'\nimport { VrmBody } from '@livliv-dev/player/vrm'    // 需要 three 和 @pixiv/three-vrm\nimport { PngBody } from '@livliv-dev/player/png'\n\nconst vrm = new BodyPlayer(canvasA, new VrmBody())\nawait vrm.load('/avatars/me.vrm')\nconst png = new BodyPlayer(canvasB, new PngBody())\nawait png.load({ closed: 'me-closed.png', open: 'me-open.png' })\n```\n\n完整的 API 见 [API.md](API.md)（英文）：选项、参数、表情和动作、驱动、VRM 和 PNGTuber、不可信文件的上限、模型包和格式版本。LivLiv 模型包格式（`.livliv`、`model.json` v4）见 [FORMAT.md](FORMAT.md)，JSON Schema 在 [`schema/`](schema/)；v4 之前导出的模型包见 [FORMAT-v3.md](FORMAT-v3.md)，照样能播放。\n\n> npm 包里只有播放器。精选角色在这个仓库的 [`characters/`](characters/) 里，把要用的角色连同许可一起复制到你的页面旁边。\n\n## 精选角色\n\n`characters/` 里有 21 个角色，可以直接 `load()`。它们右下角带一个小小的 LivLiv 标，播放器会画出来。它们**不**适用 Apache 许可。大部分由 LivLiv 制作：个人非商业用途可以免费使用，请署名（「角色：LivLiv（livliv.ai）」）；不能出售、不能商用、不能用来训练 AI 模型。Nana 是 LivLiv 的吉祥物。完整条款见 [characters/LICENSE.md](characters/LICENSE.md)。\n\nKujira、Kujira Q 和 Pen 来自别人的作品，不适用上面的许可和署名。它们的来源、署名和条款见 [characters/CREDITS.md](characters/CREDITS.md)。\n\n每个角色还带一张 `cover.webp`（512 x 768，约 50 KB），是它的第一帧，不带标。`player.load(source, { poster })` 会在第一帧出来之前把它显示在画布上。如果想在脚本运行之前就有画面，就把它放在画布下面（`object-fit: contain`），角色好了再淡入，[example/loading.js](example/loading.js) 就是这样做的。\n\n角色列表见[英文 README](README.md#featured-characters)。\n\n## 用自己的角色\n\n可以导入 PNGTuber 的几张图，或 VRM（用 three.js 画）；也可以在 [livliv.ai](https://livliv.ai) 用一张图做出自己的角色。\n\n- **PNGTuber**：两张图（闭嘴、张嘴），有闭眼的两张更好。\n- **VRM**：VRoid Studio 或任何能导出 VRM 0.x / 1.0 的工具做的。\n- **LivLiv 模型**：在 [livliv.ai](https://livliv.ai) 用一张图做出角色，在角色页下载**模型包**（一个 `.livliv` 文件），直接传给 `load()`（URL，或用户选的 `File`），解压后的文件夹也可以。免费版的模型包带 LivLiv 水印，播放器会画出来。\n\n## 关于播放器和角色\n\nLivLiv Player 和 `.livliv` 格式是 LivLiv 独立做的，没有用 Live2D 的软件或 Cubism SDK，也不读 `.moc3` / `.cmo3` 文件。「Live2D」是 Live2D Inc. 的商标，LivLiv 与其无关联。\n\n在 livliv.ai 上制作角色会用到 AI。播放器本身只负责播放：不调用 AI 服务，只读取你指给它的文件。面捕在浏览器里运行 Google 的 MediaPipe，摄像头画面不离开设备；网络方面的细节见 API.md。\n\n仓库里的精选角色也是在 LivLiv 上做的，同样用到了 AI；Kujira、Kujira Q 和 Pen 改编自别人的角色（[来源](characters/CREDITS.md)）。Nana 精修版（`d03ft`）另外用 LivLiv 自己的工具加了会摆动的部件和转头的关键形。\n\n模型包里的 `meta.author` 和 `meta.license` 记的是署名和使用条款，请保留并遵守。公开展示用 LivLiv 做的角色时，请注明 AI 参与制作，不要说成手绘或人工绑定的作品。\n\n## 不写代码，直接嵌入\n\n```html\n<iframe src=\"https://livliv.ai/live/k01\" width=\"480\" height=\"640\" allow=\"camera; microphone\"\n  style=\"border:0;background:transparent\"></iframe>\n```\n\n同一个 `/live/<id>` 页面背景透明，可以直接作为 OBS 的浏览器源。\n\n## 开发\n\n```sh\ngit clone https://github.com/livliv-dev/player\ncd player\nnpm install\nnpm run check          # 类型检查\nnpm run build          # dist/：index.js、tracking.js、voice.js、body.js、png.js、vrm.js（ES 模块）、chunks/ 和 types/\nnpm test               # 单元测试和模糊测试（Node 22.18 及以上，不需要浏览器）\nnpm run test:browser   # 在无头 Chromium 里画出每个精选角色；先执行一次 npx playwright-core install chromium-headless-shell\nnpm run test:engines   # 在 Firefox 和 WebKit 上跑一个小样本，机器要能启动 WebGL2（有 GPU 或软件 GL）；先执行一次 npx playwright-core install firefox webkit\n```\n\n`src/runtime/` 是 livliv.ai 自己在用的渲染和动作代码，这个仓库从它发布。参见 [CONTRIBUTING.md](CONTRIBUTING.md)。安全问题请按 [SECURITY.md](SECURITY.md) 报告。\n\n## 浏览器支持\n\n需要 WebGL2 和 ES2023：Chrome / Edge 97+、Firefox 104+、Safari 15.4+。目前在桌面最新版上测过，手机还没有测。\n\n## 许可\n\n代码采用 [Apache License 2.0](LICENSE)（另见 [NOTICE](NOTICE)）。精选角色有自己的许可：[characters/LICENSE.md](characters/LICENSE.md)。两份许可都不包括 LivLiv 的名称和标志。\n\n## 致谢\n\n感谢上善无形、ZipZipPipe 和贱兔死顺盖，Kujira、Kujira Q 和 Pen 基于他们的角色，详见 [characters/CREDITS.md](characters/CREDITS.md)。\n","readmeFilename":"README.zh-CN.md","homepage":"https://github.com/livliv-dev/player#readme","keywords":["avatar","vtuber","pngtuber","vrm","character","puppet","webgl2","lip-sync","face-tracking"],"repository":{"url":"git+https://github.com/livliv-dev/player.git","type":"git"},"bugs":{"url":"https://github.com/livliv-dev/player/issues"},"license":"Apache-2.0"}