diff options
| author | yum <yum.food.vr@gmail.com> | 2025-07-23 19:05:15 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2025-07-23 19:05:15 -0700 |
| commit | 9bf33a4cad8196bfe7253c841ab5c35ffdbc0173 (patch) | |
| tree | 227bb536e3d8d5dd5ae63730999966cd154dd871 /ui | |
| parent | 790c91d7ad515c3c0a22ca1341316265b8f0d779 (diff) | |
add segment metadata logging feature
Segment metadata can now be logged to a json as the app runs. The goal
is to identify the params that heavily correlate with hallucinations.
Also:
* use 7zip for compression in build, speeding things up
* log dll download progress every few seconds
* shrink package
Diffstat (limited to 'ui')
| -rw-r--r-- | ui/.gitignore | 2 | ||||
| -rw-r--r-- | ui/config-schema.js | 1 | ||||
| -rw-r--r-- | ui/index.html | 6 | ||||
| -rw-r--r-- | ui/index.js | 28 | ||||
| -rw-r--r-- | ui/package.json | 35 |
5 files changed, 56 insertions, 16 deletions
diff --git a/ui/.gitignore b/ui/.gitignore index 2109e19..c1dbe3c 100644 --- a/ui/.gitignore +++ b/ui/.gitignore @@ -1,3 +1,5 @@ build node_modules package-lock.json +output.css +dist diff --git a/ui/config-schema.js b/ui/config-schema.js index bf91fce..fb90f3f 100644 --- a/ui/config-schema.js +++ b/ui/config-schema.js @@ -29,6 +29,7 @@ const CONFIG_SCHEMA = { enable_debug_mode: { type: 'boolean', default: 0 }, enable_previews: { type: 'boolean', default: 1 }, save_audio: { type: 'boolean', default: 0 }, + enable_segment_logging: { type: 'boolean', default: 0 }, use_cpu: { type: 'boolean', default: 0 }, enable_lowercase_filter: { type: 'boolean', default: 0 }, enable_uppercase_filter: { type: 'boolean', default: 0 }, diff --git a/ui/index.html b/ui/index.html index 19c41ce..29d4a78 100644 --- a/ui/index.html +++ b/ui/index.html @@ -4,7 +4,7 @@ <meta charset="UTF-8"> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'"> <title>TaSTT</title> - <link rel="stylesheet" href="build/output.css"> + <link rel="stylesheet" href="output.css"> </head> <body class="bg-gray-100"> <div class="container-fluid px-6 py-6 h-screen flex flex-col"> @@ -214,6 +214,10 @@ <input type="checkbox" id="save_audio" class="mr-2"> <span class="checkbox-text">Save Audio Segments</span> </label> + <label for="enable_segment_logging" class="checkbox-label"> + <input type="checkbox" id="enable_segment_logging" class="mr-2"> + <span class="checkbox-text">Log Segment Metadata (Debug)</span> + </label> </div> </section> diff --git a/ui/index.js b/ui/index.js index 5a5d0a6..afaaf7f 100644 --- a/ui/index.js +++ b/ui/index.js @@ -6,7 +6,12 @@ const { spawn } = require('child_process'); const https = require('https'); const { CONFIG_SCHEMA, getDefaultConfig } = require('./config-schema.js'); -const APP_ROOT = path.join(__dirname, '..'); +// Detect if we're running in development or production +const isDev = !app.isPackaged; +const APP_ROOT = isDev + ? path.join(__dirname, '..') // Development: go up from ui/ to project root + : process.resourcesPath; // Production: use Electron's resource path + const CONFIG_PATH = path.join(APP_ROOT, 'config.yaml'); let mainWindow; @@ -50,13 +55,32 @@ function createPythonEnvironment() { return env; } -// Helper function to download a file from URL +// Helper function to download a file from URL with progress function downloadFile(url, outputPath) { return new Promise((resolve, reject) => { const file = require('fs').createWriteStream(outputPath); + const fileName = path.basename(outputPath); const request = https.get(url, (response) => { if (response.statusCode === 200) { + const totalSize = parseInt(response.headers['content-length'], 10); + let downloadedSize = 0; + let lastProgressTime = Date.now(); + + response.on('data', (chunk) => { + downloadedSize += chunk.length; + + // Log progress every 5 seconds + const now = Date.now(); + if (totalSize && (now - lastProgressTime >= 5000)) { + const progress = Math.round((downloadedSize / totalSize) * 100); + const mb = (downloadedSize / 1024 / 1024).toFixed(1); + const totalMb = (totalSize / 1024 / 1024).toFixed(1); + sendPythonOutput(`Downloading ${fileName}: ${mb}/${totalMb} MB (${progress}%)`, 'info'); + lastProgressTime = now; + } + }); + response.pipe(file); file.on('finish', () => { diff --git a/ui/package.json b/ui/package.json index 3a58298..4742cd7 100644 --- a/ui/package.json +++ b/ui/package.json @@ -6,14 +6,16 @@ "homepage": "./", "scripts": { "start": "npm run build:css && electron .", - "build:css": "tailwindcss -i ./src/components.css -o ./build/output.css", - "watch:css": "tailwindcss -i ./src/components.css -o ./build/output.css --watch", + "build:css": "tailwindcss -i ./src/components.css -o ./output.css", + "watch:css": "tailwindcss -i ./src/components.css -o ./output.css --watch", "dev": "concurrently \"npm run watch:css\" \"electron .\"", "test": "echo \"Error: no test specified\" && exit 1", - "dist": "npm run build:css && electron-builder", - "dist:win": "npm run build:css && electron-builder --win", - "dist:portable": "npm run build:css && electron-builder --win portable", - "dist:zip": "npm run build:css && electron-builder --win zip" + "clean:meta": "node -e \"const fs=require('fs');const path=require('path');function deleteMeta(dir){fs.readdirSync(dir).forEach(f=>{const p=path.join(dir,f);if(f.endsWith('.meta'))fs.unlinkSync(p);else if(fs.statSync(p).isDirectory()&&!f.startsWith('.'))deleteMeta(p);})}deleteMeta('./node_modules')\"", + "prebuild": "node build_scripts/setup-empty-venv.js", + "dist": "npm run prebuild && npm run clean:meta && npm run build:css && electron-builder", + "dist:win": "npm run prebuild && npm run clean:meta && npm run build:css && electron-builder --win", + "dist:portable": "npm run prebuild && npm run clean:meta && npm run build:css && electron-builder --win portable", + "dist:zip": "npm run prebuild && npm run clean:meta && npm run build:css && electron-builder --win zip" }, "build": { "appId": "com.yum_food.tastt", @@ -47,11 +49,6 @@ "to": "config.yaml" }, { - "from": "../dll", - "to": "dll", - "filter": ["**/*"] - }, - { "from": "../Images", "to": "Images", "filter": ["**/*"] @@ -60,10 +57,20 @@ "from": "../bin", "to": "bin", "filter": ["**/*"] + }, + { + "from": "../venv_clean", + "to": "venv", + "filter": ["**/*"] + }, + { + "from": "../dll_empty", + "to": "dll", + "filter": ["**/*"] } ], "win": { - "icon": "../Images/logo.png", + "icon": "../Images/favicon.ico", "target": [ { "target": "portable", @@ -81,7 +88,9 @@ "nsis": { "oneClick": false, "allowToChangeInstallationDirectory": true - } + }, + "compression": "maximum", + "artifactName": "${productName}-${version}-${arch}.${ext}" }, "keywords": [], "author": "yum_food", |
