Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
cbec0d9
Retarget the Windows app to .NET 10
claude Sep 29, 2026
c45e83e
docs: note package assemblies that switch to net10 builds
claude Sep 29, 2026
868c4f5
Add portable transcription core and wire it into the Windows app
claude Sep 29, 2026
f398bee
Stage 3 spikes: Avalonia shell, miniaudio capture, NeMo-Speech.cpp fi…
claude Sep 29, 2026
6f8c9e0
docs: add local steps to finish the Nemotron spike
claude Sep 29, 2026
9dc4e61
Add file and live transcription pipeline to Core
claude Sep 29, 2026
9df6091
Add Whisper ONNX provider, ffmpeg decoder and workspace service
claude Sep 29, 2026
46f96d8
Add Avalonia transcription workspace
claude Sep 29, 2026
7d84fd5
Add Core pipeline tests, desktop build workflow and stage 4-5 notes
claude Sep 29, 2026
36128f5
Add stage 7 parity plan and port transcript replacements to Core
claude Sep 29, 2026
9aa465a
Show speakers in the workspace and let them be renamed live
claude Sep 29, 2026
f2ab435
Add system-audio capture with combined mic and speaker lease
claude Sep 29, 2026
dbad65e
Live sessions: system audio and meeting sources, stereo meeting audio
claude Sep 29, 2026
dee4aa1
Merge main-thread session changes; map picker to TranscriptSourceType…
claude Sep 29, 2026
faa0dfa
Record Nemotron spike results from a Windows CPU run and add protocol…
CakeRepository Sep 29, 2026
7f18d60
Add Nemotron worker, provider and speaker registration for file import
claude Sep 29, 2026
5dd9635
Keep the recording WAV valid while recording, repair killed ones, log…
claude Sep 29, 2026
e043b03
Add speaker timeline lanes to the workspace
claude Sep 29, 2026
d96c08a
Add per-channel auto gain for recognition of quiet system audio
claude Sep 29, 2026
0d99ef5
Follow live: auto-scroll transcript, sideways timeline, Jump to live
claude Sep 29, 2026
773711a
Merge project-thread-gmksub (Nemotron file transcription, speaker tim…
claude Sep 29, 2026
5cb513d
Stream live audio to the Nemotron worker with speaker labels
claude Sep 29, 2026
d6feafc
Merge project-thread-gmksub (live Nemotron streaming with speaker lab…
claude Sep 29, 2026
6e01fc4
Flag synthetic silence on audio frames and carry it to streaming prov…
claude Sep 29, 2026
94da7a8
Live sessions: never block capture on slow recognition
claude Sep 29, 2026
9d181ca
Merge project-thread-gmksub (capture no longer blocks on recognition)
claude Sep 29, 2026
fae3318
Whisper threads, safe delete of active sessions, UI action guard
claude Sep 29, 2026
2270721
Nemotron streaming: skip long zero runs, restart a wedged connection
claude Sep 29, 2026
6c60420
Merge project-thread-gmksub (Nemotron silence skipping, Whisper threa…
claude Sep 29, 2026
b163d9e
Merge speakers (mapping only), store failure reasons and session notes
claude Sep 29, 2026
41783f4
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 29, 2026
dd3e6df
Fix race that could drop Nemotron finals, make realtime tests determi…
claude Sep 29, 2026
7fa78cb
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 29, 2026
f89aa15
Nemotron: choose CPU or CUDA worker, report the real backend, fall ba…
claude Sep 29, 2026
70663d8
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 29, 2026
0197fd1
Nemotron worker: confirm diarizer from the startup line, test with re…
claude Sep 29, 2026
7050776
Live meetings: language default, turn rows, run record, persistent ba…
claude Sep 29, 2026
22c9d7d
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 29, 2026
51413e4
Meetings: separate microphone and system-audio streams; validate lang…
claude Sep 29, 2026
28aa335
Merge project-thread-gmksub (two-stream meetings); feed per-channel s…
claude Sep 29, 2026
412f7f7
Store the speaker of each word
claude Sep 29, 2026
c1bcfe2
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 29, 2026
c93eebd
Fix ObjectDisposedException when a realtime session closes or restarts
claude Sep 29, 2026
9f07e98
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 29, 2026
a0be044
Add CUDA spike results, diarization UI reference and Meeting v1 accep…
CakeRepository Sep 29, 2026
978360d
Meeting view: fix duplicated rows, hide microphone echoes, fold fragm…
claude Sep 29, 2026
4bdbc0d
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 29, 2026
f6c5168
Fix mic/system skew: place devices by open time, tolerate late delive…
claude Sep 29, 2026
4a70154
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 29, 2026
640b686
Dictation loop in Core: controller, speech activity, delivery with fo…
claude Sep 29, 2026
2ba9a05
Loosen scheduler slack in open-order test
claude Sep 29, 2026
107c4f0
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 29, 2026
53e01cd
Merge pull request #4 from flowdevs-io/claude/system-audio-capture-ul…
CakeRepository Sep 29, 2026
5ac1a24
Dictation: hotkeys, SharpHook typing, Windows foreground guard, setti…
claude Sep 29, 2026
708f3c6
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 29, 2026
ed71993
Dictation in the Avalonia app: host, tray, overlay, settings window, …
claude Sep 29, 2026
5e7d06a
Smooth diarizer speaker wobble so one sentence is not split across sp…
claude Sep 29, 2026
b2e6dcc
Justin's local edits: wake-word variants, voice-command phrase varian…
CakeRepository Sep 29, 2026
f8a845d
Redraw the meeting speaker timeline from the whole-file diarizer so o…
claude Sep 29, 2026
bee4bf6
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 29, 2026
70334b1
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 29, 2026
3c8f014
Pin speaker smoothing against the run seen in a real meeting
claude Sep 29, 2026
191610c
Diarizer pass: use the real CLI flags (--model, --device, json output…
claude Sep 29, 2026
74d714d
Dictation: voice commands, wake word listener, particle overlay visua…
claude Sep 29, 2026
514b2fe
Dictation: Ollama rewrite (loopback by default), commit carries origi…
claude Sep 29, 2026
6958656
Dictation history: SQLite store, WPF import, history window
claude Sep 29, 2026
4bff229
Dictation audio cues (synthesized, played through the OS)
claude Sep 29, 2026
e6c59a5
Dictation: WPF tray icon port, --background, first-run check; status doc
claude Sep 29, 2026
7b841f8
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 29, 2026
f54740b
Dictation: download Whisper models in the new app (settings and first…
claude Sep 29, 2026
677b95e
Dictation: launch at login per OS (current user, tray only)
claude Sep 29, 2026
a8b0bb6
Dictation: stats and milestones (shares stats.json with the WPF app)
claude Sep 29, 2026
0252ad9
Dictation: Parakeet and Moonshine models (download, discovery, provid…
claude Sep 29, 2026
9835992
Echo removal per word: drop the speakers' words from a microphone lin…
claude Sep 30, 2026
efff17c
Echo words are marked hidden, not deleted, so a wrong call can be undone
claude Sep 30, 2026
6b63543
Replay unanswered audio after a worker stall, warm the worker up, and…
claude Sep 30, 2026
cc71c0a
Log the worker's and diarizer's own status lines to a rotated, size-c…
claude Sep 30, 2026
a356cc7
Worker log: exact prefix allowlist, scrub the CTC debug variable, and…
claude Sep 30, 2026
f9c2ffd
Save the after-Stop diarizer notes, end the worker when the window cl…
claude Sep 30, 2026
89f9d60
Two-pass meetings: fast live draft, then a Nemotron final pass with w…
claude Sep 30, 2026
6d4a99c
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 30, 2026
0bc9f99
Merge PR #5: dictation in the new desktop app
CakeRepository Sep 30, 2026
f037362
Watchdog no longer treats a busy finalize as a stall, offline diariza…
claude Sep 30, 2026
0f8e83d
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 30, 2026
cc31382
Two-pass meetings: Parakeet is the live draft model when installed, W…
claude Sep 30, 2026
984d65a
Meetings: record-only option, transcribe after Stop; explain zero sys…
claude Sep 30, 2026
0a3b396
Final pass: report per-channel levels and windows, say how little spe…
claude Sep 30, 2026
2187050
Fix a race where a very quick Stop cleared the capture lease before t…
claude Sep 30, 2026
f9941e0
ONNX speech models on CUDA (auto/cpu/cuda), tray Exit and --quit with…
claude Sep 30, 2026
5617678
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 30, 2026
29c94aa
Finish a meeting's after-Stop pass on the next launch when exit skipp…
claude Sep 30, 2026
2dafc54
Merge PR #7: ONNX speech models on CUDA, tray Exit and --quit
CakeRepository Sep 30, 2026
5d67899
Final pass: transcribe the system channel turn by turn so words keep …
claude Sep 30, 2026
6655981
Final pass: long windows first, label each word by the diarizer, redo…
claude Sep 30, 2026
cbde440
Silence a nullable warning in the final pass
claude Sep 30, 2026
e736439
Recording: a capture fault can no longer end the loop unseen; Stop al…
claude Sep 30, 2026
87bed8b
Exit always leaves a recording Canceled or Completed with its WAV kept
claude Sep 30, 2026
305cc41
Log capture faults (type, shortened message and stack, never text) to…
claude Sep 30, 2026
37a274b
Merge remote-tracking branch 'origin/claude/project-thread-gmksub' in…
claude Sep 30, 2026
38f135a
Exit leaves a cut-off record-only meeting Interrupted so the next lau…
claude Sep 30, 2026
ccae6c5
Merge pull request #8 from flowdevs-io/claude/exit-finalize-recording
CakeRepository Sep 30, 2026
591c61d
Final pass: one row per speaker turn, in start order
CakeRepository Sep 30, 2026
e76caa8
Merge pull request #9 from flowdevs-io/claude/transcript-speaker-clum…
CakeRepository Sep 30, 2026
e4e9924
Dictation: record from the default microphone when the saved one is gone
CakeRepository Sep 30, 2026
7641ab6
Dictation overlay and settings window: stay put, stay on screen
CakeRepository Sep 30, 2026
062091a
Merge pull request #10 from flowdevs-io/claude/dictation-windows-mic
CakeRepository Sep 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: "8.0.x"
global-json-file: global.json
- name: Compute version metadata
id: version
shell: pwsh
Expand Down
34 changes: 34 additions & 0 deletions .github/workflows/desktop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Desktop (transcription workspace)

# Builds the cross-platform Avalonia shell for Windows x64 so it can be downloaded and tried.
# This workflow never signs, releases, or publishes anything; it only uploads a workflow artifact.
on:
push:
branches: [claude/project-thread-gmksub]
paths: ["src/**", "tests/PrimeDictate.Core.Tests/**", ".github/workflows/desktop.yml", "global.json"]
workflow_dispatch:

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
desktop-win-x64:
runs-on: windows-latest
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
global-json-file: global.json
- name: Test Core
run: dotnet test tests/PrimeDictate.Core.Tests -c Release
- name: Publish desktop shell
run: dotnet publish src/PrimeDictate.Desktop -c Release -r win-x64 --self-contained -o artifacts/desktop-win-x64
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: primedictate-desktop-win-x64
path: artifacts/desktop-win-x64
if-no-files-found: error
5 changes: 5 additions & 0 deletions App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,11 @@ protected override void OnStartup(StartupEventArgs e)
{
this.QueueAutomaticUpdateCheck();
this.SyncWakeWordListener();
if (e.Args.Any(arg => string.Equals(arg, "--show", StringComparison.OrdinalIgnoreCase) ||
string.Equals(arg, "--workspace", StringComparison.OrdinalIgnoreCase)))
{
this.ShowWorkspaceWindow();
}
}
}

Expand Down
142 changes: 119 additions & 23 deletions AppIconProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Drawing.Drawing2D;
using System.IO;
using System.Runtime.InteropServices;

namespace PrimeDictate;

internal enum TrayVisualState
Expand Down Expand Up @@ -41,33 +42,128 @@ public static Icon LoadWindowIcon()
return SystemIcons.Application;
}

/// <summary>
/// Renders a mathematical smoke & chroma voice-wire icon procedurally using harmonic curves,
/// chromatic aberration offsets, and atmospheric gradient washes.
/// </summary>
public static Icon CreateTrayIcon(TrayVisualState state)
{
var color = state switch
{
TrayVisualState.Ready => Color.FromArgb(34, 122, 255),
// Bright yellow so wake-on is obvious in the Windows tray (orange was too easy to miss).
TrayVisualState.AlwaysListening => Color.FromArgb(255, 214, 10),
TrayVisualState.Recording => Color.FromArgb(220, 53, 69),
TrayVisualState.Processing => Color.FromArgb(32, 164, 112),
TrayVisualState.Error => Color.FromArgb(245, 158, 11),
_ => Color.FromArgb(34, 122, 255)
};

// 32px reads clearly on Win11 / high-DPI trays; Windows scales down as needed.
const int size = 32;
const int size = 64; // High DPI base resolution for crisp anti-aliasing
using var bitmap = new Bitmap(size, size);
using (var graphics = Graphics.FromImage(bitmap))
using (var g = Graphics.FromImage(bitmap))
{
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.Clear(Color.Transparent);

using var fillBrush = new SolidBrush(color);
using var borderPen = new Pen(Color.FromArgb(40, 40, 40), 2f);
using var centerBrush = new SolidBrush(Color.White);
graphics.FillEllipse(fillBrush, 2, 2, size - 4, size - 4);
graphics.DrawEllipse(borderPen, 2, 2, size - 4, size - 4);
graphics.FillEllipse(centerBrush, 12, 12, 8, 8);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.Clear(Color.Transparent);

// Palette base definition
var (primaryColor, chromaColor, glowColor) = state switch
{
TrayVisualState.Ready => (
Color.FromArgb(0, 210, 255), // Cosmic Cyan
Color.FromArgb(120, 80, 255), // Deep Violet
Color.FromArgb(0, 150, 255)
),
TrayVisualState.AlwaysListening => (
Color.FromArgb(255, 200, 0), // Solar Gold
Color.FromArgb(255, 90, 0), // Plasma Amber
Color.FromArgb(255, 170, 0)
),
TrayVisualState.Recording => (
Color.FromArgb(255, 0, 90), // Pulse Crimson
Color.FromArgb(180, 0, 255), // Neon Violet
Color.FromArgb(255, 40, 120)
),
TrayVisualState.Processing => (
Color.FromArgb(0, 255, 160), // Quantum Emerald
Color.FromArgb(0, 180, 255), // Cyber Blue
Color.FromArgb(0, 230, 190)
),
TrayVisualState.Error => (
Color.FromArgb(255, 120, 0), // Supernova Orange
Color.FromArgb(255, 0, 120), // Magenta Drift
Color.FromArgb(255, 80, 0)
),
_ => (
Color.FromArgb(0, 210, 255),
Color.FromArgb(120, 80, 255),
Color.FromArgb(0, 150, 255)
)
};

var cx = size / 2f;
var cy = size / 2f;

// 1. Outer Ethereal Smoke Nebula Wash
using (var path = new GraphicsPath())
{
path.AddEllipse(2, 2, size - 4, size - 4);
using var pbr = new PathGradientBrush(path)
{
CenterPoint = new PointF(cx, cy),
CenterColor = Color.FromArgb(70, glowColor.R, glowColor.G, glowColor.B),
SurroundColors = new[] { Color.FromArgb(0, primaryColor.R, primaryColor.G, primaryColor.B) }
};
g.FillPath(pbr, path);
}

// 2. Harmonic Chroma Lissajous Orbits (Voice Wire Math)
// Parametric curves: r(theta) = R0 + A * sin(k * theta)
int pointCount = 120;
float r0 = size * 0.32f;
float waveAmplitude = size * 0.05f;

// Layer A: Secondary Chroma Shift (Violet/Plasma)
PointF[] chromaPoints = new PointF[pointCount];
for (int i = 0; i < pointCount; i++)
{
float t = (float)(i * 2.0 * Math.PI / pointCount);
float r = r0 + waveAmplitude * (float)Math.Sin(5 * t + 1.2);
chromaPoints[i] = new PointF(
cx + (r + 1.5f) * (float)Math.Cos(t + 0.15),
cy + (r + 1.5f) * (float)Math.Sin(t + 0.15)
);
}
using (var penChroma = new Pen(Color.FromArgb(160, chromaColor.R, chromaColor.G, chromaColor.B), 2.2f))
{
g.DrawClosedCurve(penChroma, chromaPoints);
}

// Layer B: Primary Neon Voice Line
PointF[] primaryPoints = new PointF[pointCount];
for (int i = 0; i < pointCount; i++)
{
float t = (float)(i * 2.0 * Math.PI / pointCount);
float r = r0 + waveAmplitude * (float)Math.Sin(4 * t);
primaryPoints[i] = new PointF(
cx + r * (float)Math.Cos(t),
cy + r * (float)Math.Sin(t)
);
}
using (var penPrimary = new Pen(Color.FromArgb(230, primaryColor.R, primaryColor.G, primaryColor.B), 2.5f))
{
g.DrawClosedCurve(penPrimary, primaryPoints);
}

// 3. Central Radiant Wire Singularity Core
float coreRadius = size * 0.14f;
using (var corePath = new GraphicsPath())
{
corePath.AddEllipse(cx - coreRadius, cy - coreRadius, coreRadius * 2, coreRadius * 2);
using var coreBrush = new PathGradientBrush(corePath)
{
CenterPoint = new PointF(cx, cy),
CenterColor = Color.FromArgb(255, 255, 255, 255),
SurroundColors = new[] { Color.FromArgb(180, primaryColor.R, primaryColor.G, primaryColor.B) }
};
g.FillPath(coreBrush, corePath);
}

// High-light core border
using (var corePen = new Pen(Color.FromArgb(240, 255, 255, 255), 1.2f))
{
g.DrawEllipse(corePen, cx - coreRadius, cy - coreRadius, coreRadius * 2, coreRadius * 2);
}
}

var handle = bitmap.GetHicon();
Expand Down
8 changes: 7 additions & 1 deletion PrimeDictate.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<OnnxRuntimeVersion>1.24.4</OnnxRuntimeVersion>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<TargetFramework>net10.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>
Expand All @@ -18,6 +18,8 @@
<Copyright>Copyright © FlowDevs.io</Copyright>
<RepositoryType>git</RepositoryType>
<ApplicationIcon>installer\wix\assets\PrimeDictate.ico</ApplicationIcon>
<!-- The app project sits at the repo root; keep other projects' sources out of its globs. -->
<DefaultItemExcludes>$(DefaultItemExcludes);src\**;tests\**</DefaultItemExcludes>
</PropertyGroup>

<ItemGroup>
Expand All @@ -33,6 +35,10 @@
<PackageReference Include="Whisper.net.Runtime.Vulkan" Version="1.9.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="src\PrimeDictate.Core\PrimeDictate.Core.csproj" />
</ItemGroup>

<ItemGroup Condition="Exists('$(NuGetPackageRoot)microsoft.ml.onnxruntime.qnn\$(OnnxRuntimeVersion)\runtimes\win-arm64\native')">
<QnnArm64NativeFiles Include="$(NuGetPackageRoot)microsoft.ml.onnxruntime.qnn\$(OnnxRuntimeVersion)\runtimes\win-arm64\native\*.*" />
</ItemGroup>
Expand Down
79 changes: 79 additions & 0 deletions PrimeDictate.sln
Original file line number Diff line number Diff line change
@@ -1,23 +1,102 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrimeDictate", "PrimeDictate.csproj", "{6044D142-08F7-4FF1-CE4A-9D712AF04711}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrimeDictate.Core", "src\PrimeDictate.Core\PrimeDictate.Core.csproj", "{4FB02F11-2FF8-413B-A890-1E2FAE755C92}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{0AB3BF05-4346-4AA6-1389-037BE0695223}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrimeDictate.Core.Tests", "tests\PrimeDictate.Core.Tests\PrimeDictate.Core.Tests.csproj", "{C0F52246-2A96-4B15-BEC6-B141EC8C61E8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrimeDictate.Platforms", "src\PrimeDictate.Platforms\PrimeDictate.Platforms.csproj", "{44B68D74-1796-4299-93A5-2B4922DFBA21}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrimeDictate.Desktop", "src\PrimeDictate.Desktop\PrimeDictate.Desktop.csproj", "{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6044D142-08F7-4FF1-CE4A-9D712AF04711}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6044D142-08F7-4FF1-CE4A-9D712AF04711}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6044D142-08F7-4FF1-CE4A-9D712AF04711}.Debug|x64.ActiveCfg = Debug|Any CPU
{6044D142-08F7-4FF1-CE4A-9D712AF04711}.Debug|x64.Build.0 = Debug|Any CPU
{6044D142-08F7-4FF1-CE4A-9D712AF04711}.Debug|x86.ActiveCfg = Debug|Any CPU
{6044D142-08F7-4FF1-CE4A-9D712AF04711}.Debug|x86.Build.0 = Debug|Any CPU
{6044D142-08F7-4FF1-CE4A-9D712AF04711}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6044D142-08F7-4FF1-CE4A-9D712AF04711}.Release|Any CPU.Build.0 = Release|Any CPU
{6044D142-08F7-4FF1-CE4A-9D712AF04711}.Release|x64.ActiveCfg = Release|Any CPU
{6044D142-08F7-4FF1-CE4A-9D712AF04711}.Release|x64.Build.0 = Release|Any CPU
{6044D142-08F7-4FF1-CE4A-9D712AF04711}.Release|x86.ActiveCfg = Release|Any CPU
{6044D142-08F7-4FF1-CE4A-9D712AF04711}.Release|x86.Build.0 = Release|Any CPU
{4FB02F11-2FF8-413B-A890-1E2FAE755C92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4FB02F11-2FF8-413B-A890-1E2FAE755C92}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4FB02F11-2FF8-413B-A890-1E2FAE755C92}.Debug|x64.ActiveCfg = Debug|Any CPU
{4FB02F11-2FF8-413B-A890-1E2FAE755C92}.Debug|x64.Build.0 = Debug|Any CPU
{4FB02F11-2FF8-413B-A890-1E2FAE755C92}.Debug|x86.ActiveCfg = Debug|Any CPU
{4FB02F11-2FF8-413B-A890-1E2FAE755C92}.Debug|x86.Build.0 = Debug|Any CPU
{4FB02F11-2FF8-413B-A890-1E2FAE755C92}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4FB02F11-2FF8-413B-A890-1E2FAE755C92}.Release|Any CPU.Build.0 = Release|Any CPU
{4FB02F11-2FF8-413B-A890-1E2FAE755C92}.Release|x64.ActiveCfg = Release|Any CPU
{4FB02F11-2FF8-413B-A890-1E2FAE755C92}.Release|x64.Build.0 = Release|Any CPU
{4FB02F11-2FF8-413B-A890-1E2FAE755C92}.Release|x86.ActiveCfg = Release|Any CPU
{4FB02F11-2FF8-413B-A890-1E2FAE755C92}.Release|x86.Build.0 = Release|Any CPU
{C0F52246-2A96-4B15-BEC6-B141EC8C61E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C0F52246-2A96-4B15-BEC6-B141EC8C61E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C0F52246-2A96-4B15-BEC6-B141EC8C61E8}.Debug|x64.ActiveCfg = Debug|Any CPU
{C0F52246-2A96-4B15-BEC6-B141EC8C61E8}.Debug|x64.Build.0 = Debug|Any CPU
{C0F52246-2A96-4B15-BEC6-B141EC8C61E8}.Debug|x86.ActiveCfg = Debug|Any CPU
{C0F52246-2A96-4B15-BEC6-B141EC8C61E8}.Debug|x86.Build.0 = Debug|Any CPU
{C0F52246-2A96-4B15-BEC6-B141EC8C61E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C0F52246-2A96-4B15-BEC6-B141EC8C61E8}.Release|Any CPU.Build.0 = Release|Any CPU
{C0F52246-2A96-4B15-BEC6-B141EC8C61E8}.Release|x64.ActiveCfg = Release|Any CPU
{C0F52246-2A96-4B15-BEC6-B141EC8C61E8}.Release|x64.Build.0 = Release|Any CPU
{C0F52246-2A96-4B15-BEC6-B141EC8C61E8}.Release|x86.ActiveCfg = Release|Any CPU
{C0F52246-2A96-4B15-BEC6-B141EC8C61E8}.Release|x86.Build.0 = Release|Any CPU
{44B68D74-1796-4299-93A5-2B4922DFBA21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{44B68D74-1796-4299-93A5-2B4922DFBA21}.Debug|Any CPU.Build.0 = Debug|Any CPU
{44B68D74-1796-4299-93A5-2B4922DFBA21}.Debug|x64.ActiveCfg = Debug|Any CPU
{44B68D74-1796-4299-93A5-2B4922DFBA21}.Debug|x64.Build.0 = Debug|Any CPU
{44B68D74-1796-4299-93A5-2B4922DFBA21}.Debug|x86.ActiveCfg = Debug|Any CPU
{44B68D74-1796-4299-93A5-2B4922DFBA21}.Debug|x86.Build.0 = Debug|Any CPU
{44B68D74-1796-4299-93A5-2B4922DFBA21}.Release|Any CPU.ActiveCfg = Release|Any CPU
{44B68D74-1796-4299-93A5-2B4922DFBA21}.Release|Any CPU.Build.0 = Release|Any CPU
{44B68D74-1796-4299-93A5-2B4922DFBA21}.Release|x64.ActiveCfg = Release|Any CPU
{44B68D74-1796-4299-93A5-2B4922DFBA21}.Release|x64.Build.0 = Release|Any CPU
{44B68D74-1796-4299-93A5-2B4922DFBA21}.Release|x86.ActiveCfg = Release|Any CPU
{44B68D74-1796-4299-93A5-2B4922DFBA21}.Release|x86.Build.0 = Release|Any CPU
{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D}.Debug|x64.ActiveCfg = Debug|Any CPU
{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D}.Debug|x64.Build.0 = Debug|Any CPU
{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D}.Debug|x86.ActiveCfg = Debug|Any CPU
{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D}.Debug|x86.Build.0 = Debug|Any CPU
{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D}.Release|Any CPU.Build.0 = Release|Any CPU
{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D}.Release|x64.ActiveCfg = Release|Any CPU
{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D}.Release|x64.Build.0 = Release|Any CPU
{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D}.Release|x86.ActiveCfg = Release|Any CPU
{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{4FB02F11-2FF8-413B-A890-1E2FAE755C92} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{C0F52246-2A96-4B15-BEC6-B141EC8C61E8} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{44B68D74-1796-4299-93A5-2B4922DFBA21} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{6A9FC1A1-AAC7-46BB-A75E-F78968F4F78D} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9A418AF3-E9F2-40D5-91CA-B3E5B169DADD}
EndGlobalSection
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ Pro tips:
## Requirements

- Windows is the primary supported platform.
- [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) is required to build from source.
- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) is required to build from source (pinned in `global.json`).
- Local transcription uses local model files only.
- sherpa-onnx backends require extracted ONNX model folders and tokens.
- Whisper.net uses GGML `.bin` files and optional hardware-specific sidecars.
Expand Down
Loading
Loading