diff --git a/.github/workflows/deploy-huggingface-spaces.yml b/.github/workflows/deploy-huggingface-spaces.yml index f5b3bb8..ee879d7 100644 --- a/.github/workflows/deploy-huggingface-spaces.yml +++ b/.github/workflows/deploy-huggingface-spaces.yml @@ -27,7 +27,7 @@ jobs: HF_USERNAME: ${{ secrets.HF_USERNAME }} - run: |- - git clone https://$HF_USERNAME:$HF_TOKEN@huggingface.co/spaces/moeru-ai/airi --depth 1 packages/stage/dist + git clone https://$HF_USERNAME:$HF_TOKEN@huggingface.co/spaces/moeru-ai/airi --depth 1 packages/stage-web/dist env: HF_TOKEN: ${{ secrets.HF_TOKEN }} HF_USERNAME: ${{ secrets.HF_USERNAME }} @@ -87,7 +87,7 @@ jobs: git push -f - id: airi_diff - working-directory: ./packages/stage/dist + working-directory: ./packages/stage-web/dist run: |- git lfs ls-files --all git add . @@ -96,7 +96,7 @@ jobs: fi - if: steps.airi_diff.outputs.changes == 'true' - working-directory: ./packages/stage/dist + working-directory: ./packages/stage-web/dist env: HF_TOKEN: ${{ secrets.HF_TOKEN }} HF_USERNAME: ${{ secrets.HF_USERNAME }} diff --git a/cspell.config.yaml b/cspell.config.yaml index 8ef70a3..f179d0e 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -8,6 +8,7 @@ words: - airi - airi-vtuber - Attributify + - audioworklet - Ayaka - Bitstream - bumpp @@ -55,6 +56,7 @@ words: - logg - Maru - micvad + - mkdist - Morioki - Myriam - Neko diff --git a/package.json b/package.json index fc7713a..33548eb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "airi-vtuber", "type": "module", - "packageManager": "pnpm@9.15.2", + "packageManager": "pnpm@9.15.3", "description": "LLM powered virtual character", "author": { "name": "Neko Ayaka", @@ -28,27 +28,27 @@ "sizecheck": "npx vite-bundle-visualizer" }, "devDependencies": { - "@antfu/eslint-config": "^3.12.1", - "@antfu/ni": "^0.23.2", + "@antfu/eslint-config": "^3.13.0", + "@antfu/ni": "^23.2.0", "@cspell/dict-ru_ru": "^2.2.4", "@types/node": "^22.10.5", - "@unocss/eslint-config": "^0.65.3", - "@unocss/eslint-plugin": "^0.65.3", - "bumpp": "^9.9.2", + "@unocss/eslint-config": "^0.65.4", + "@unocss/eslint-plugin": "^0.65.4", + "bumpp": "^9.10.0", "cross-env": "^7.0.3", "eslint": "^9.17.0", "eslint-plugin-cypress": "^4.1.0", - "eslint-plugin-format": "^0.1.3", + "eslint-plugin-format": "^1.0.1", "lint-staged": "^15.3.0", - "pnpm": "^9.15.2", - "rollup": "^4.29.1", + "pnpm": "^9.15.3", + "rollup": "^4.30.1", "simple-git-hooks": "^2.11.1", - "taze": "^0.18.0", - "typescript": "~5.7.2", + "taze": "^18.1.0", + "typescript": "~5.7.3", "unbuild": "3.0.0-rc.11", - "unocss": "^0.65.3", + "unocss": "^0.65.4", "vite": "^6.0.7", - "vite-plugin-inspect": "^0.10.6", + "vite-plugin-inspect": "^10.0.6", "vitest": "^2.1.8" }, "workspaces": [ diff --git a/packages/hfup/package.json b/packages/hfup/package.json index 56f4453..83d1366 100644 --- a/packages/hfup/package.json +++ b/packages/hfup/package.json @@ -16,6 +16,11 @@ "directory": "packages/huggingspace" }, "exports": { + ".": { + "types": "./dist/vite/index.d.ts", + "import": "./dist/vite/index.mjs", + "require": "./dist/vite/index.cjs" + }, "./vite": { "types": "./dist/vite/index.d.ts", "import": "./dist/vite/index.mjs", diff --git a/packages/moonshine-web/package.json b/packages/moonshine-web/package.json index 850adef..9d0c062 100644 --- a/packages/moonshine-web/package.json +++ b/packages/moonshine-web/package.json @@ -2,7 +2,7 @@ "name": "@proj-airi/moonshine-web", "type": "module", "private": true, - "packageManager": "pnpm@9.15.2", + "packageManager": "pnpm@9.15.3", "description": "Yet another WebGPU based STT + VAD with Moonshine model re-implemented", "author": { "name": "Neko Ayaka", @@ -19,7 +19,7 @@ }, "dependencies": { "@tresjs/core": "^4.3.2", - "@unocss/reset": "^0.65.3", + "@unocss/reset": "^0.65.4", "@vueuse/core": "^12.3.0", "@vueuse/motion": "^2.2.6", "ofetch": "^1.4.1", @@ -29,7 +29,7 @@ "devDependencies": { "@huggingface/transformers": "^3.2.4", "@types/audioworklet": "^0.0.65", - "@types/three": "^0.171.0", + "@types/three": "^0.172.0", "@vitejs/plugin-vue": "^5.2.1", "@webgpu/types": "^0.1.52", "hfup": "workspace:^", diff --git a/packages/tamagotchi/.gitignore b/packages/stage-tamagotchi/.gitignore similarity index 100% rename from packages/tamagotchi/.gitignore rename to packages/stage-tamagotchi/.gitignore diff --git a/packages/tamagotchi/README.md b/packages/stage-tamagotchi/README.md similarity index 100% rename from packages/tamagotchi/README.md rename to packages/stage-tamagotchi/README.md diff --git a/packages/tamagotchi/build/entitlements.mac.plist b/packages/stage-tamagotchi/build/entitlements.mac.plist similarity index 100% rename from packages/tamagotchi/build/entitlements.mac.plist rename to packages/stage-tamagotchi/build/entitlements.mac.plist diff --git a/packages/tamagotchi/build/icon.icns b/packages/stage-tamagotchi/build/icon.icns similarity index 100% rename from packages/tamagotchi/build/icon.icns rename to packages/stage-tamagotchi/build/icon.icns diff --git a/packages/tamagotchi/build/icon.ico b/packages/stage-tamagotchi/build/icon.ico similarity index 100% rename from packages/tamagotchi/build/icon.ico rename to packages/stage-tamagotchi/build/icon.ico diff --git a/packages/tamagotchi/build/icon.png b/packages/stage-tamagotchi/build/icon.png similarity index 100% rename from packages/tamagotchi/build/icon.png rename to packages/stage-tamagotchi/build/icon.png diff --git a/packages/tamagotchi/electron-builder.yml b/packages/stage-tamagotchi/electron-builder.yml similarity index 100% rename from packages/tamagotchi/electron-builder.yml rename to packages/stage-tamagotchi/electron-builder.yml diff --git a/packages/stage-tamagotchi/electron.vite.config.ts b/packages/stage-tamagotchi/electron.vite.config.ts new file mode 100644 index 0000000..ac639bc --- /dev/null +++ b/packages/stage-tamagotchi/electron.vite.config.ts @@ -0,0 +1,36 @@ +import { join, resolve } from 'node:path' +import { Download } from '@proj-airi/unplugin-download' +import { DownloadLive2DSDK } from '@proj-airi/unplugin-live2d-sdk' +import vue from '@vitejs/plugin-vue' +import { defineConfig, externalizeDepsPlugin } from 'electron-vite' +import unocss from 'unocss/vite' + +export default defineConfig({ + main: { + plugins: [externalizeDepsPlugin()], + }, + preload: { + plugins: [externalizeDepsPlugin()], + }, + renderer: { + optimizeDeps: { + exclude: [ + '@proj-airi/stage-ui/*', + ], + }, + resolve: { + alias: { + '@renderer': resolve(join('src', 'renderer', 'src')), + '@proj-airi/stage-ui': resolve(join(import.meta.dirname, '..', 'stage-ui', 'dist')), + '@proj-airi/stage-ui/stores': resolve(join(import.meta.dirname, '..', 'stage-ui', 'dist', 'stores')), + }, + }, + plugins: [ + vue(), + unocss(), + DownloadLive2DSDK(), + Download('https://dist.ayaka.moe/live2d-models/hiyori_free_zh.zip', 'hiyori_free_zh.zip', 'assets/live2d/models'), + Download('https://dist.ayaka.moe/live2d-models/hiyori_pro_zh.zip', 'hiyori_pro_zh.zip', 'assets/live2d/models'), + ], + }, +}) diff --git a/packages/stage-tamagotchi/package.json b/packages/stage-tamagotchi/package.json new file mode 100644 index 0000000..5b2c3a9 --- /dev/null +++ b/packages/stage-tamagotchi/package.json @@ -0,0 +1,121 @@ +{ + "name": "@proj-airi/stage-tamagotchi", + "version": "1.0.0", + "description": "An Electron application with Vue and TypeScript", + "author": "LemonNekoGH", + "homepage": "https://electron-vite.org", + "main": "./out/main/index.js", + "scripts": { + "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", + "typecheck:web": "vue-tsc --noEmit -p tsconfig.web.json --composite false", + "typecheck": "npm run typecheck:node && npm run typecheck:web", + "start": "electron-vite preview", + "dev": "electron-vite dev", + "build": "npm run typecheck && electron-vite build", + "postinstall": "electron-builder install-app-deps", + "build:unpack": "npm run build && electron-builder --dir", + "build:win": "npm run build && electron-builder --win", + "build:mac": "npm run build && electron-builder --mac", + "build:linux": "npm run build && electron-builder --linux" + }, + "dependencies": { + "@11labs/client": "^0.0.4", + "@electron-toolkit/preload": "^3.0.1", + "@electron-toolkit/utils": "^3.0.0", + "@formkit/auto-animate": "^0.8.2", + "@gcornut/valibot-json-schema": "^0.42.0", + "@huggingface/transformers": "^3.2.4", + "@pixi/app": "6", + "@pixi/constants": "6", + "@pixi/core": "6", + "@pixi/display": "6", + "@pixi/extensions": "6", + "@pixi/loaders": "6", + "@pixi/math": "6", + "@pixi/runner": "6", + "@pixi/settings": "6", + "@pixi/sprite": "6", + "@pixi/ticker": "6", + "@pixi/utils": "6", + "@pixiv/three-vrm": "^3.3.2", + "@pixiv/three-vrm-animation": "^3.3.2", + "@pixiv/three-vrm-core": "^3.3.2", + "@proj-airi/stage-ui": "workspace:^", + "@ricky0123/vad-web": "^0.0.22", + "@tresjs/cientos": "^4.0.3", + "@tresjs/core": "^4.3.2", + "@types/yauzl": "^2.10.3", + "@typeschema/valibot": "^0.14.0", + "@unhead/vue": "^1.11.15", + "@unocss/reset": "^0.65.4", + "@vueuse/core": "^12.3.0", + "@vueuse/head": "^2.0.0", + "@vueuse/shared": "^12.3.0", + "@xsai/generate-speech": "^0.0.24", + "@xsai/generate-text": "^0.0.24", + "@xsai/model": "^0.0.24", + "@xsai/providers": "^0.0.24", + "@xsai/shared-chat": "^0.0.24", + "@xsai/stream-text": "^0.0.24", + "defu": "^6.1.4", + "jszip": "^3.10.1", + "nprogress": "^0.2.0", + "ofetch": "^1.4.1", + "onnxruntime-web": "^1.20.1", + "pinia": "^2.3.0", + "pixi-filters": "^4.2.0", + "pixi-live2d-display": "^0.4.0", + "rehype-stringify": "^10.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.1", + "shiki": "^1.26.1", + "three": "^0.172.0", + "unified": "^11.0.5", + "valibot": "1.0.0-beta.9", + "vaul-vue": "^0.2.0", + "vue": "^3.5.13", + "vue-demi": "^0.14.10", + "vue-i18n": "^11.0.1", + "vue-router": "^4.5.0", + "yauzl": "^3.2.0", + "zod": "^3.24.1" + }, + "devDependencies": { + "@electron-toolkit/tsconfig": "^1.0.1", + "@iconify-json/carbon": "^1.2.5", + "@iconify-json/eos-icons": "^1.2.2", + "@iconify-json/lucide": "^1.2.22", + "@iconify-json/mingcute": "^1.2.3", + "@iconify-json/solar": "^1.2.2", + "@iconify-json/svg-spinners": "^1.2.2", + "@intlify/unplugin-vue-i18n": "^6.0.3", + "@proj-airi/elevenlabs": "workspace:^", + "@proj-airi/unplugin-download": "workspace:^", + "@proj-airi/unplugin-live2d-sdk": "workspace:^", + "@shikijs/markdown-it": "^1.26.1", + "@types/markdown-it-link-attributes": "^3.0.5", + "@types/nprogress": "^0.2.3", + "@types/three": "^0.172.0", + "@vitejs/plugin-vue": "^5.2.1", + "@vue-macros/volar": "^0.30.9", + "@vueuse/motion": "^2.2.6", + "electron": "^31.7.6", + "electron-builder": "^24.13.3", + "electron-vite": "^2.3.0", + "markdown-it-link-attributes": "^4.0.1", + "unocss-preset-animations": "^1.1.0", + "unocss-preset-shadcn": "^0.3.1", + "unocss-preset-theme": "^0.14.1", + "unplugin-auto-import": "^19.0.0", + "unplugin-vue-components": "^28.0.0", + "unplugin-vue-macros": "^2.13.7", + "unplugin-vue-markdown": "^28.0.0", + "unplugin-vue-router": "^0.10.9", + "vite-bundle-visualizer": "^1.2.1", + "vite-plugin-pwa": "^0.21.1", + "vite-plugin-vue-devtools": "^7.7.0", + "vite-plugin-vue-layouts": "^0.11.0", + "vite-plugin-webfont-dl": "^3.10.4", + "vue-tsc": "^2.2.0" + } +} diff --git a/packages/tamagotchi/src/main/index.ts b/packages/stage-tamagotchi/src/main/index.ts similarity index 84% rename from packages/tamagotchi/src/main/index.ts rename to packages/stage-tamagotchi/src/main/index.ts index 88a5594..d540a53 100644 --- a/packages/tamagotchi/src/main/index.ts +++ b/packages/stage-tamagotchi/src/main/index.ts @@ -1,6 +1,5 @@ -import { readFileSync } from 'node:fs' import { join } from 'node:path' -import { platform } from 'node:process' +import { env, platform } from 'node:process' import { electronApp, is, optimizer } from '@electron-toolkit/utils' import { app, BrowserWindow, ipcMain, shell } from 'electron' import icon from '../../build/icon.png?asset' @@ -38,13 +37,8 @@ function createWindow(): void { // HMR for renderer base on electron-vite cli. // Load the remote URL for development or the local html file for production. - if (is.dev) { - // try to read port number from stage.dev.json - const devFile = readFileSync(join(import.meta.dirname, '../../../stage/stage.dev.json'), 'utf-8') - const devInfo = JSON.parse(devFile) as { address: { address: string, family: string, port: number } } - mainWindow.loadURL(`http://localhost:${devInfo.address.port}`).catch((e) => { - console.error('Failed to load URL', e) - }) + if (is.dev && env.ELECTRON_RENDERER_URL) { + mainWindow.loadURL(env.ELECTRON_RENDERER_URL) } else { mainWindow.loadFile(join(import.meta.dirname, '..', '..', 'out', 'renderer', 'index.html')) diff --git a/packages/tamagotchi/src/preload/index.d.ts b/packages/stage-tamagotchi/src/preload/index.d.ts similarity index 100% rename from packages/tamagotchi/src/preload/index.d.ts rename to packages/stage-tamagotchi/src/preload/index.d.ts diff --git a/packages/tamagotchi/src/preload/index.ts b/packages/stage-tamagotchi/src/preload/index.ts similarity index 100% rename from packages/tamagotchi/src/preload/index.ts rename to packages/stage-tamagotchi/src/preload/index.ts diff --git a/packages/stage-tamagotchi/src/renderer/index.html b/packages/stage-tamagotchi/src/renderer/index.html new file mode 100644 index 0000000..16f4b93 --- /dev/null +++ b/packages/stage-tamagotchi/src/renderer/index.html @@ -0,0 +1,26 @@ + + + + + アイリ + + + + + + + +
+ + + diff --git a/packages/stage/tamagotchi/App.vue b/packages/stage-tamagotchi/src/renderer/src/App.vue similarity index 73% rename from packages/stage/tamagotchi/App.vue rename to packages/stage-tamagotchi/src/renderer/src/App.vue index b9c6843..338963b 100644 --- a/packages/stage/tamagotchi/App.vue +++ b/packages/stage-tamagotchi/src/renderer/src/App.vue @@ -1,7 +1,7 @@ + + diff --git a/packages/stage/src/assets/live2d/models/hiyori_free_zh/avatar.png b/packages/stage-web/src/assets/live2d/models/hiyori_free_zh/avatar.png similarity index 100% rename from packages/stage/src/assets/live2d/models/hiyori_free_zh/avatar.png rename to packages/stage-web/src/assets/live2d/models/hiyori_free_zh/avatar.png diff --git a/packages/stage/src/components/AudioWaveform.vue b/packages/stage-web/src/components/AudioWaveform.vue similarity index 97% rename from packages/stage/src/components/AudioWaveform.vue rename to packages/stage-web/src/components/AudioWaveform.vue index 1a6bd4f..708caa8 100644 --- a/packages/stage/src/components/AudioWaveform.vue +++ b/packages/stage-web/src/components/AudioWaveform.vue @@ -1,8 +1,8 @@ @@ -19,7 +19,7 @@ const dark = useDark()