
A C++ desktop GUI app that runs local LLMs through a bundled llama.cpp
server. Features:
llama-server.exe (llama.cpp's
engine only executes .gguf files — that's the one format this app
supports, on purpose, so there's no half-working "download but can't run"
path);.gguf models directly from Hugging Face, including
private/gated models using your own access token;/v1/chat/completions endpoint with --jinja and
--reasoning-format auto, so models that support reasoning (DeepSeek-R1,
QwQ, Qwen3-thinking, etc.) show their reasoning in a separate live panel,
cleanly split from the final answer;whisper-server.exe (whisper.cpp) process, text-to-speech through the
Windows SAPI engine, and a dedicated conversation loop with:
Shift+G,
polled via GetAsyncKeyState, working even minimized) is held;ggerganov/whisper.cpp Hugging Face repository, with file sizes shown;.part file, plus
dead-connection (low-speed) detection;llama-server/whisper-server instance
has stdout/stderr redirected to logs\<name>-<port>.log, and crashed
server processes are detected and reported instead of hanging on
"loading";| Tool | Purpose |
|---|---|
| CMake >= 3.15 | Build system |
| Visual Studio 2022 (Desktop C++ workload) | MSVC compiler |
| vcpkg | C++ dependency manager |
| Ninja | Build tool used by vcpkg (install manually if vcpkg can't auto-download it) |
llama-server.exe from llama.cpp releases | Inference engine |
whisper-server.exe from whisper.cpp releases (optional) | Speech-to-text engine for the voice features |
git clone https://github.com/microsoft/vcpkg.git C:\vcpkg
cd C:\vcpkg
bootstrap-vcpkg.bat
setx VCPKG_ROOT C:\vcpkg
Close and reopen your terminal so VCPKG_ROOT is picked up.
If setup_dependencies.bat fails trying to auto-download Ninja (SSL/proxy
errors are common in restricted networks), install it manually:
winget install Ninja-build.Ninja
then reopen the terminal and try again.
From the project root:
setup_dependencies.bat
Installs via vcpkg: curl, glfw3, imgui (glfw+opengl3 bindings) and
nlohmann-json. First run can take a while since it builds these from
source.
llama-<build>-bin-win-avx2-x64.zip-avx-x64.zip-cuda-cu12.x-x64.zip (any cu12.x/cu13.x works if your
driver supports it — check with nvidia-smi; drivers are backward
compatible with older CUDA builds)-hip-x64.zipllama-server.exe into bin\ in this project.cudart-llama-bin-win-cuXX-x64.zip) into bin\ — without them the
server won't start.build.bat
Output: build\Release\DuckFaceLLM.exe.
To test locally before packaging the installer, copy bin\llama-server.exe
(and any DLLs) into build\Release\bin\.
config.json
next to the executable and reused automatically every time you open the
app.
bartowski/Meta-Llama-3.1-8B-Instruct-GGUF)
and click Fetch .gguf files.Q4_K_M is a solid size/quality tradeoff) and click
Download. Progress bar included; cancel anytime.DFFastLLM only lists and downloads
.gguffiles, because that's the only format its inference engine (llama.cpp) can actually run. If a repo has no GGUF version, look for a community re-upload (users likebartowskiorunslothpublish GGUF conversions of most popular models).
Go to the Parameters tab. If the model rambles, contradicts itself, or drifts off-topic:
0.3–0.6.1.1–1.3.0.85–0.9.These are saved automatically and applied to every generation. The app also
sends requests through llama-server's chat-template-aware endpoint
(--jinja), which by itself fixes a lot of rambling caused by prompts not
matching the model's expected format.
DFFastLLM sends the entire conversation history to the model on every message, so follow-up questions actually build on what was said before, instead of the model starting fresh each time.
conversations\ folder as you go —
no manual "save" step needed.Drag the thin handles between the Prompt, Thinking and Output panels to resize them to your liking. All generated text (reasoning and answers) is shown in read-only fields you can click-and-drag to select and copy with Ctrl+C, like normal text — nothing is a static, uncopyable label.
Whenever a response contains a fenced code block (```like this```),
DFFastLLM renders it in its own dark panel, separate from the surrounding
prose, with a one-click Copy button for just that snippet. Each message
also has a Copy all button next to it to grab the entire response at
once.
Beyond chatting, DFFastLLM can act as an autonomous coding agent that creates and edits files by itself inside a folder you choose.
.. or an
absolute path) is blocked automatically.The agent's own conversation (its reasoning, if Thinking Mode is on, and every action it took) is saved separately from your regular Chat conversations and shown live in the activity log.
Honest limitations:
rust, cargo, .rs, tokio. Matching is case-insensitive and substring-based.custom vs built-in) and in the manual override dropdown
in the Chat tab.You can add as many as you want, and delete any template — including the built-in ones — from the same list (with a confirmation step). If you delete a built-in by mistake, click Restore deleted built-in templates at the top of the tab to bring all of them back at once. When more than one template's keywords match a prompt, the one with the most matching keywords wins.
A fully local voice conversation mode: you talk, the model answers out loud, and no text is shown unless you ask for the transcript.
whisper-server.exe (from the whisper.cpp releases) in bin\.Shift+G supported). The hotkey is polled
system-wide, so it keeps working with the window minimized or hidden
in the tray. Nothing is recorded while the key isn't held.Answers are sanitized before synthesis (code blocks and markdown are stripped) and the voice system prompt asks for short, natural, speakable replies. The conversation is kept in memory only; a transcript view is available on demand.
--reasoning-format auto. Regular models (Llama, Mistral, Gemma, etc.) simply won't populate
that panel — there's nothing to show..safetensors weights. This app does not offer a "download full
repository" option for that reason — it would just leave you with files
the app can't run. If you want to convert a model yourself, use llama.cpp's
convert_hf_to_gguf.py script separately, then place the resulting
.gguf in the models\ folder.hf_token_enc in config.json; only the same Windows account on the
same machine can decrypt it. Old plain-text configs are migrated
automatically on the next save.whisper-server.exe process (whisper.cpp) on 127.0.0.1, synthesis uses
the Windows SAPI voices installed on the system, and audio capture uses
the waveIn API at 16 kHz mono PCM. Nothing is sent to any cloud service.LlamaServerManager.cpp passes -ngl 999 to push as many
layers as possible onto the GPU. Ignored automatically on CPU-only builds.27 commits
C++
99.1%

A C++ desktop GUI app that runs local LLMs through a bundled llama.cpp
server. Features:
llama-server.exe (llama.cpp's
engine only executes .gguf files — that's the one format this app
supports, on purpose, so there's no half-working "download but can't run"
path);.gguf models directly from Hugging Face, including
private/gated models using your own access token;/v1/chat/completions endpoint with --jinja and
--reasoning-format auto, so models that support reasoning (DeepSeek-R1,
QwQ, Qwen3-thinking, etc.) show their reasoning in a separate live panel,
cleanly split from the final answer;whisper-server.exe (whisper.cpp) process, text-to-speech through the
Windows SAPI engine, and a dedicated conversation loop with:
Shift+G,
polled via GetAsyncKeyState, working even minimized) is held;ggerganov/whisper.cpp Hugging Face repository, with file sizes shown;.part file, plus
dead-connection (low-speed) detection;llama-server/whisper-server instance
has stdout/stderr redirected to logs\<name>-<port>.log, and crashed
server processes are detected and reported instead of hanging on
"loading";| Tool | Purpose |
|---|---|
| CMake >= 3.15 | Build system |
| Visual Studio 2022 (Desktop C++ workload) | MSVC compiler |
| vcpkg | C++ dependency manager |
| Ninja | Build tool used by vcpkg (install manually if vcpkg can't auto-download it) |
llama-server.exe from llama.cpp releases | Inference engine |
whisper-server.exe from whisper.cpp releases (optional) | Speech-to-text engine for the voice features |
git clone https://github.com/microsoft/vcpkg.git C:\vcpkg
cd C:\vcpkg
bootstrap-vcpkg.bat
setx VCPKG_ROOT C:\vcpkg
Close and reopen your terminal so VCPKG_ROOT is picked up.
If setup_dependencies.bat fails trying to auto-download Ninja (SSL/proxy
errors are common in restricted networks), install it manually:
winget install Ninja-build.Ninja
then reopen the terminal and try again.
From the project root:
setup_dependencies.bat
Installs via vcpkg: curl, glfw3, imgui (glfw+opengl3 bindings) and
nlohmann-json. First run can take a while since it builds these from
source.
llama-<build>-bin-win-avx2-x64.zip-avx-x64.zip-cuda-cu12.x-x64.zip (any cu12.x/cu13.x works if your
driver supports it — check with nvidia-smi; drivers are backward
compatible with older CUDA builds)-hip-x64.zipllama-server.exe into bin\ in this project.cudart-llama-bin-win-cuXX-x64.zip) into bin\ — without them the
server won't start.build.bat
Output: build\Release\DuckFaceLLM.exe.
To test locally before packaging the installer, copy bin\llama-server.exe
(and any DLLs) into build\Release\bin\.
config.json
next to the executable and reused automatically every time you open the
app.
bartowski/Meta-Llama-3.1-8B-Instruct-GGUF)
and click Fetch .gguf files.Q4_K_M is a solid size/quality tradeoff) and click
Download. Progress bar included; cancel anytime.DFFastLLM only lists and downloads
.gguffiles, because that's the only format its inference engine (llama.cpp) can actually run. If a repo has no GGUF version, look for a community re-upload (users likebartowskiorunslothpublish GGUF conversions of most popular models).
Go to the Parameters tab. If the model rambles, contradicts itself, or drifts off-topic:
0.3–0.6.1.1–1.3.0.85–0.9.These are saved automatically and applied to every generation. The app also
sends requests through llama-server's chat-template-aware endpoint
(--jinja), which by itself fixes a lot of rambling caused by prompts not
matching the model's expected format.
DFFastLLM sends the entire conversation history to the model on every message, so follow-up questions actually build on what was said before, instead of the model starting fresh each time.
conversations\ folder as you go —
no manual "save" step needed.Drag the thin handles between the Prompt, Thinking and Output panels to resize them to your liking. All generated text (reasoning and answers) is shown in read-only fields you can click-and-drag to select and copy with Ctrl+C, like normal text — nothing is a static, uncopyable label.
Whenever a response contains a fenced code block (```like this```),
DFFastLLM renders it in its own dark panel, separate from the surrounding
prose, with a one-click Copy button for just that snippet. Each message
also has a Copy all button next to it to grab the entire response at
once.
Beyond chatting, DFFastLLM can act as an autonomous coding agent that creates and edits files by itself inside a folder you choose.
.. or an
absolute path) is blocked automatically.The agent's own conversation (its reasoning, if Thinking Mode is on, and every action it took) is saved separately from your regular Chat conversations and shown live in the activity log.
Honest limitations:
rust, cargo, .rs, tokio. Matching is case-insensitive and substring-based.custom vs built-in) and in the manual override dropdown
in the Chat tab.You can add as many as you want, and delete any template — including the built-in ones — from the same list (with a confirmation step). If you delete a built-in by mistake, click Restore deleted built-in templates at the top of the tab to bring all of them back at once. When more than one template's keywords match a prompt, the one with the most matching keywords wins.
A fully local voice conversation mode: you talk, the model answers out loud, and no text is shown unless you ask for the transcript.
whisper-server.exe (from the whisper.cpp releases) in bin\.Shift+G supported). The hotkey is polled
system-wide, so it keeps working with the window minimized or hidden
in the tray. Nothing is recorded while the key isn't held.Answers are sanitized before synthesis (code blocks and markdown are stripped) and the voice system prompt asks for short, natural, speakable replies. The conversation is kept in memory only; a transcript view is available on demand.
--reasoning-format auto. Regular models (Llama, Mistral, Gemma, etc.) simply won't populate
that panel — there's nothing to show..safetensors weights. This app does not offer a "download full
repository" option for that reason — it would just leave you with files
the app can't run. If you want to convert a model yourself, use llama.cpp's
convert_hf_to_gguf.py script separately, then place the resulting
.gguf in the models\ folder.hf_token_enc in config.json; only the same Windows account on the
same machine can decrypt it. Old plain-text configs are migrated
automatically on the next save.whisper-server.exe process (whisper.cpp) on 127.0.0.1, synthesis uses
the Windows SAPI voices installed on the system, and audio capture uses
the waveIn API at 16 kHz mono PCM. Nothing is sent to any cloud service.LlamaServerManager.cpp passes -ngl 999 to push as many
layers as possible onto the GPU. Ignored automatically on CPU-only builds.27 commits
C++
99.1%