mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-10-03 09:05:17 -07:00
@@ -53,6 +53,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Audio export failing when Tauri save dialog returns object instead of string path
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- **Makefile** - Comprehensive development workflow automation with commands for setup, development, building, testing, and code quality checks
|
- **Makefile** - Comprehensive development workflow automation with commands for setup, development, building, testing, and code quality checks
|
||||||
- Includes Python version detection and compatibility warnings
|
- Includes Python version detection and compatibility warnings
|
||||||
|
|||||||
@@ -59,7 +59,7 @@
|
|||||||
|
|
||||||
## What is Voicebox?
|
## What is Voicebox?
|
||||||
|
|
||||||
Voicebox is a **local-first voice cloning studio** with DAW-like features for professional voice synthesis. Think of it as the **Ollama for voice** — download models, clone voices, and generate speech entirely on your machine.
|
Voicebox is a **local-first voice cloning studio** with DAW-like features for professional voice synthesis. Think of it as a **local, free and open-source alternative to ElevenLabs** — download models, clone voices, and generate speech entirely on your machine.
|
||||||
|
|
||||||
Unlike cloud services that lock your voice data behind subscriptions, Voicebox gives you:
|
Unlike cloud services that lock your voice data behind subscriptions, Voicebox gives you:
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ description: "Welcome to Voicebox - the open-source voice synthesis studio"
|
|||||||
|
|
||||||
## What is Voicebox?
|
## What is Voicebox?
|
||||||
|
|
||||||
Voicebox is a **local-first voice cloning studio** with DAW-like features for professional voice synthesis. Think of it as the **Ollama for voice** — download models, clone voices, and generate speech entirely on your machine.
|
Voicebox is a **local-first voice cloning studio** with DAW-like features for professional voice synthesis. Think of it as a **local, free and open-source alternative to ElevenLabs** — download models, clone voices, and generate speech entirely on your machine.
|
||||||
|
|
||||||
<Frame>
|
<Frame>
|
||||||
<img src="/images/app-screenshot-1.webp" alt="Voicebox App Screenshot" />
|
<img src="/images/app-screenshot-1.webp" alt="Voicebox App Screenshot" />
|
||||||
|
|||||||
@@ -239,8 +239,9 @@ export default function Home() {
|
|||||||
<div className="space-y-6 text-lg text-foreground/80 text-center">
|
<div className="space-y-6 text-lg text-foreground/80 text-center">
|
||||||
<p>
|
<p>
|
||||||
Voicebox is a <strong>local-first voice cloning studio</strong> with DAW-like features
|
Voicebox is a <strong>local-first voice cloning studio</strong> with DAW-like features
|
||||||
for professional voice synthesis. Think of it as the <strong>Ollama for voice</strong>{' '}
|
for professional voice synthesis. Think of it as a{' '}
|
||||||
— download models, clone voices, and generate speech entirely on your machine.
|
<strong>local, free and open-source alternative to ElevenLabs</strong> — download
|
||||||
|
models, clone voices, and generate speech entirely on your machine.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Unlike cloud services that lock your voice data behind subscriptions, Voicebox gives
|
Unlike cloud services that lock your voice data behind subscriptions, Voicebox gives
|
||||||
|
|||||||
@@ -10,9 +10,20 @@ export const tauriFilesystem: PlatformFilesystem = {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (filePath) {
|
if (filePath) {
|
||||||
const { writeBinaryFile } = await import('@tauri-apps/plugin-fs');
|
let resolvedPath = '';
|
||||||
|
if (typeof filePath === 'string') {
|
||||||
|
resolvedPath = filePath;
|
||||||
|
} else if (filePath && typeof filePath === 'object' && 'path' in filePath) {
|
||||||
|
resolvedPath = (filePath as { path: string }).path;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!resolvedPath) {
|
||||||
|
throw new Error('Failed to resolve save path');
|
||||||
|
}
|
||||||
|
|
||||||
|
const { writeFile } = await import('@tauri-apps/plugin-fs');
|
||||||
const arrayBuffer = await blob.arrayBuffer();
|
const arrayBuffer = await blob.arrayBuffer();
|
||||||
await writeBinaryFile(filePath, new Uint8Array(arrayBuffer));
|
await writeFile(resolvedPath, new Uint8Array(arrayBuffer));
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to use Tauri dialog, falling back to browser download:', error);
|
console.error('Failed to use Tauri dialog, falling back to browser download:', error);
|
||||||
|
|||||||
Reference in New Issue
Block a user