summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2025-07-23 19:05:15 -0700
committeryum <yum.food.vr@gmail.com>2025-07-23 19:05:15 -0700
commit9bf33a4cad8196bfe7253c841ab5c35ffdbc0173 (patch)
tree227bb536e3d8d5dd5ae63730999966cd154dd871 /ui
parent790c91d7ad515c3c0a22ca1341316265b8f0d779 (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/.gitignore2
-rw-r--r--ui/config-schema.js1
-rw-r--r--ui/index.html6
-rw-r--r--ui/index.js28
-rw-r--r--ui/package.json35
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",