This manual sets up Portable Local Studio on a Windows PC. The app runs AI models on your own computer, from a normal folder or a USB drive. At the end, you chat with a local model, make images, transcribe speech and make speech from text. All of it runs in the browser at http://localhost:1420, and all files stay in one folder on a 128 GB drive.
Each step comes from a real installation. Each claim has a tag that tells you how it was checked.
Portable Local Studio is a free, MIT-licensed app. Its browser interface has four workspaces: chat, images, transcription (speech to text) and voice (text to speech). It uses these open-source engines: llama.cpp for chat, stable-diffusion.cpp for images, whisper.cpp for transcription and Kokoro for voice.
Sections 6–9 cover chat. Section 10 covers images, section 11 transcription, section 12 voice, section 13 a voice loop that uses all three, and section 14 more examples. Section 15 shows how all files stay on the drive.
| Item | Requirement | Source |
|---|---|---|
| Windows | 64-bit Windows 10 or Windows 11 on x64. Windows on ARM is not a documented target. | FROM CODE README |
| Internet | Necessary for the first setup and for each model download. After setup, the app folder held 4.1 GB without models. | TESTED |
| RAM | The project gives no minimum. A 0.5B or 1.5B model needs much less than 8 GB. Close large programs before you load a model. | TESTED on 31.7 GB |
| GPU | Not necessary. An NVIDIA GPU gets the CUDA engines automatically. AMD and Intel GPUs use Vulkan. Without a GPU, the app uses the CPU. | NVIDIA TESTED, others FROM CODE |
| Administrator rights | Only if the PC does not have the Microsoft Visual C++ x64 runtime. Setup then asks for permission to install it. | FROM CODE setup.ps1:213-239 |
| Browser | Any modern browser. The interface is a local web page. | TESTED Chrome |
Install on the internal disk first. When chat works there, copy the full folder to the USB drive. A problem is easier to find on the internal disk, because a slow or faulty drive cannot cause it.
| Target | Advice |
|---|---|
| Internal disk | Use a short path without spaces, for example C:\AI\Portable-Local-Studio. |
| USB drive | Use USB 3.0 or faster. The video says 32 GB is the minimum. 128 GB holds the app (4.6 GB) and many models. A USB SSD loads models faster than a flash drive. |
| File system | Use NTFS for a Windows-only drive. Use exFAT to share the drive with a Mac or Linux PC. Do not use FAT32: it cannot hold a file larger than about 4 GB, and many models are larger than that. |
How the test simulated a 128 GB USB drive: The test laptop had no USB drive connected, so we copied the app to C:\AI\usb128. We then ran subst U: C:\AI\usb128 to make that folder appear as drive U:. The app ran only from U:\. This proves that the app works from any drive letter. It does not test USB speed or exFAT. TESTED
github.com/techjarves/Uncensored-AI-Studio, redirects to it. CHECKEDC:\AI\ or E:\.Portable-Local-Studio-main to Portable-Local-Studio if you want. This step is optional.windows.bat, linux.sh, mac.sh, app and scripts.windows.bat from inside the ZIP. Windows shows the ZIP like a folder, but setup cannot write into it. Always extract first.Portable-Local-Studio-main\Portable-Local-Studio-main. Open the folder that holds windows.bat directly.windows.bat force-closes every program that uses port 8080 or port 10086. It does this before setup and again at each launch. Port 8080 is common for other local web and AI tools. Stop those tools yourself before you continue. FROM CODE windows.bat, the two taskkill loopsTo see which program uses a port, run this command in PowerShell:
Get-NetTCPConnection -LocalPort 8080,10086 -State Listen -ErrorAction SilentlyContinue | ForEach-Object { Get-Process -Id $_.OwningProcess }
No output means that both ports are free.
%LOCALAPPDATA%\npm-cache on drive C:. In the test, the first run used that cache and the second run used the drive. TESTEDwindows.bat. A black terminal window opens.http://localhost:1420.| Setup step | What it installs into the app folder | Result on the test laptop |
|---|---|---|
| 1/8 | Portable Node.js v22.12.0 into app\tools\node-win. Checks the Visual C++ x64 runtime. | OK. The runtime was already installed (v14.50). TESTED |
| 2/8 | Image engines (stable-diffusion.cpp): CPU master-782-b290693; CUDA (NVIDIA only) master-782-b290693 plus CUDA runtime DLLs; Vulkan master-685-19bdfe2. | OK, all three. TESTED |
| 3/8 | Chat engines (llama.cpp b11418): CUDA if NVIDIA, HIP if AMD, SYCL if Intel, then always Vulkan and CPU. | OK: CUDA, SYCL, Vulkan, CPU. TESTED |
| 4/8 | whisper.cpp transcription engine (CPU). | OK. TESTED |
| 5/8 | Kokoro text-to-speech runtime (npm packages into app\tts-runtime). | Failed on the first run, then OK after the fix in section 19. TESTED |
| 6/8 | OpenVINO, only for an Intel Core Ultra NPU. | Skipped (no NPU). TESTED |
| 7/8 | Interface packages (npm) into app\frontend. | OK. TESTED |
| 8/8 | Builds the interface into app\dist. | OK. TESTED |
windows.bat sees "Kokoro text-to-speech runtime is missing" and runs setup again at each launch. You cannot chat until all 8 steps pass. FROM CODE windows.bat, the TTS_RUNTIME check[backend] Ready. Waiting for model load request from the webapp.... The browser shows the sidebar with New chat, Images, Transcribe, Voice, Models and Settings. The chat page says No model loaded. Setup does not download chat models, so this state is normal. TESTED
http://localhost:1421. TESTED "localhost" means this computer. It is not a website on the internet.The starter model is small (491,400,064 bytes; the app shows "468.6 MB"). It loads fast and proves that the chat engine works. It is too small to show what local AI can do. Section 9 adds a better model.
https://huggingface.co/Qwen/Qwen2.5-Coder-0.5B-Instruct-GGUF/resolve/main/qwen2.5-coder-0.5b-instruct-q4_k_m.gguf
The model file goes to app\llm-models\. You can also copy a .gguf file into that folder yourself. Text models go in app\llm-models\, and image models go in app\models\. Do not mix them.
Extract exactly three fields: name, date, amount.
Text: Alice paid $37.50 on 2026-10-31.
Do not add any other information.
Expected answer (TESTED, three times):
Alice, 2026-10-31, $37.50
Compare each field with the message. All three must be correct. This test proves that the chat engine works. It does not prove that the model reasons well.
If you see the correct answer, the app works on your PC. For a model that writes better answers, go to sections 8 and 9.
The KV cache is the model's working memory for the conversation. The app can store it at three precisions: Q4_0 (smallest), Q8_0 and F16 (largest). In the test, Q4_0 made the Qwen2.5 1.5B model write nonsense. Q8_0 and F16 gave correct answers.
serve.cjs:1468). The test laptop has 31.7 GB of RAM and a 4 GB RTX 3050, and the app still called it "Potato PC". Do not select the Potato profile for Qwen2.5 models. TESTEDThis model is a general chat model of 1,117,320,736 bytes (the app shows "1.0 GB"). Its answers are better than the 0.5B coder model's answers. It is not in the app's library, so you download it from a link.
https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct-GGUF/resolve/main/qwen2.5-1.5b-instruct-q4_k_m.gguf
serve.cjs:4272-4293). The model gave garbled text. The app also stored the Q4_0 setting and used it again at the next loads. TESTEDThe Images workspace uses stable-diffusion.cpp. DreamShaper 8 is a Stable Diffusion 1.5 model of 2,132,625,894 bytes (the app shows "~2.1 GB"). It makes 512×512 images and fits in 4 GB of VRAM. It downloads from Hugging Face without a login.
app\models\DreamShaper_8_pruned.safetensors.blurry, low quality, text, watermark, deformed
product illustration of a matte black reusable water bottle on a light wooden table, soft studio lighting, clean background, high detail
The app saves each image as a PNG file and a JSON file with the prompt, seed, steps and size in app\outputs\. The test image was 381,033 bytes. To make the same image again, use the same prompt, model, size, steps and seed. TESTED (files)
The Transcribe workspace uses whisper.cpp on the CPU. It changes a recording into text. Whisper Base English is 147,964,211 bytes (the app shows "142 MB").
app\speech-models\ggml-base.en.bin. TESTEDTest file: a 14.4 s voice memo made in the Voice workspace (section 12). The transcription took 9.2 s on the first run, with the engine on 8 CPU threads. An 8.0 s question took 2.0 s. TESTED
| Spoken text | Transcript |
|---|---|
| Voice memo for Monday. Call the print shop about the two hundred flyers, they are due on Thursday. Ask Dana for the budget sheet before noon. The team meeting moves to three p.m. on Wednesday. | Voice memo for Monday. Call the print shop about the 200 flyers they are due on Thursday. Ask Dana for the budget sheet before noon. The team meeting moves to 3P. M. on Wednesday. |
All of the words were correct. Whisper wrote the numbers as digits ("200", "3P. M.") and removed one comma.
The app saves each transcript as a TXT file and a JSON file in app\transcriptions\. TESTED
SpeechTranscriber.jsx:407). Use Spoken language and Translate to English with a multilingual model. NOT TESTEDThe Voice workspace uses Kokoro 82M on the CPU. It reads text aloud and saves a 24 kHz WAV file.
app\tts-models\kokoro-onnx-q8.json. It also downloads the model (92,361,116 bytes) into app\tts-runtime\node_modules\@huggingface\transformers\.cache. The folder app\tts-cache stayed empty. TESTED The 54 voice files come with the runtime in node_modules\kokoro-js\voices. In Node.js, Kokoro reads them from that folder, not from the internet. FROM CODE kokoro-js\dist\kokoro.cjsTest text:
Voice memo for Monday. Call the print shop about the two hundred flyers, they are due on Thursday. Ask Dana for the budget sheet before noon. The team meeting moves to three p.m. on Wednesday.
Result: a 14.4 s clip (690,524 bytes). The first Speak took about 14 s from the click to the saved file. TESTED
| Voices in the app | Accent |
|---|---|
| Heart, Bella, Nicole, Sarah (female); Michael, Fenrir (male) | American English (en-us) |
| Emma (female); George (male) | British English (en-gb) |
The app saves each clip as a WAV file and a JSON file with the text, voice and timing in app\tts-outputs\. TESTED
Write times as "3 PM", not "three p.m.". The app cut "three p.m." into two parts ("three p." and "m. on Wednesday"), because it splits the text at each period. TESTED The microphone button in the Voice box (Dictate) types your speech into the box. NOT TESTED
The app has no automatic voice-assistant mode. The chat page only has shortcut buttons to the other workspaces (TextChat.jsx:917-918). You connect the three workspaces yourself with copy and paste. The chat model, Whisper and Kokoro can run at the same time: Whisper and Kokoro use the CPU, and only the chat model uses the GPU. TESTED
| Hop | Test result |
|---|---|
| 1. Question audio | 8.0 s WAV with the George voice: "What are three simple ways to make a laptop battery last longer? Answer in two short sentences." |
| 2. Transcribe | Exact text in 2.0 s |
| 3. Chat (1.5B, Q8_0) | "Reduce the brightness of your screen and lower background apps. Turn off or hibernate unnecessary devices when not in use." 28 tokens in 913 ms |
| 4. Voice | WAV of 409,004 bytes with the Heart voice. This clip took about 20 s; the two earlier clips took less. The cause was not checked. |
All four hops worked. TESTED The question asked for three ways, and the 1.5B model gave about two. Small models do not always follow counts.
wide blog header, cozy home office desk with a laptop and a cup of coffee at sunrise, warm light, plants, shallow depth of field, digital painting
Result: 768×432 · 20 steps · 29.0 s · 709,066 bytes. The size menu also has 4:3 (640×480) and 9:16 (432×768). TESTED The second row of sizes (1024×1024 to 1216×684) matches SDXL sizes. The test did not use it.
Turn this voice memo transcript into a to-do list with one line per task and its deadline. Transcript:
Result in 999 ms (38 tokens): TESTED
Call print shop about flyers due on Thursday by 4PM.
Request budget sheet from Dana before noon.
Move team meeting to 3PM on Wednesday.
The test made one clip with Heart and one with George, with different texts. Both clips are in app\tts-outputs\, and the voice ID is in each file name (af_heart, bm_george). TESTED
All parts of the studio fit on a 128 GB drive with a large margin. After all tests in this manual, the project folder held 8,096,075,478 bytes (8.10 GB, 7.54 GiB). A 128 GB drive has about 119.2 GiB of usable space, so about 111.7 GiB stays free. TESTED
| Folder (inside the project) | Contents | Bytes after the tests |
|---|---|---|
app\llm-backend | Chat engines | 1,801,611,060 |
app\llm-models | 0.5B and 1.5B chat models | 1,608,720,800 |
app\models | DreamShaper 8 image model | 2,132,625,894 |
app\backend | Image engines | 1,377,717,831 |
app\tts-runtime | Kokoro runtime, with the 92,361,116-byte voice model in node_modules\@huggingface\transformers\.cache | 517,052,337 |
app\tools | Portable Node.js, npm cache | 309,832,151 |
app\frontend, app\dist | Interface | 176,247,501 |
app\speech-models | Whisper Base English | 147,964,211 |
app\speech-backend | whisper.cpp engine | 20,355,072 |
app\outputs | 2 images with JSON | 1,091,391 |
app\tts-outputs | 3 voice clips with JSON | 1,487,248 |
app\transcriptions | 2 transcripts (TXT and JSON) | 4,431 |
With the free space, you can add, for example, an SDXL Lightning model (6.9–7.1 GB) or a 7B chat model (4.7 GB). Count about 0.4–0.7 MB for each image and about 48 KB for each second of speech.
We recorded the time before the tests in this manual (1 Nov 2026, 07:09). After the tests, we listed each file larger than 100 KB that changed after that time. We searched these folders: %USERPROFILE%\.cache, %LOCALAPPDATA%\npm-cache, %APPDATA%\NVIDIA, %LOCALAPPDATA%\NVIDIA, %TEMP% and Downloads. TESTED
%USERPROFILE%\.cache\huggingface) and the npm cache did not change. The CUDA cache (%APPDATA%\NVIDIA\ComputeCache) did not change.%LOCALAPPDATA%\NVIDIA\DXCache.%LOCALAPPDATA%\npm-cache on drive C:.app\outputs, app\tts-outputs and app\transcriptions. The Download, TXT, JSON and Download WAV buttons save a second copy through the browser, normally to C:\Users\<you>\Downloads.app\transcriptions.Two things outside the app can write to drive C: on a new PC. Setup installs the Visual C++ runtime into Windows if it is missing (setup.ps1:213-239). The GPU driver can keep shader caches in %LOCALAPPDATA%\NVIDIA. Neither holds your models, prompts or outputs.
windows.bat.windows.bat. Setup does not run again if all parts are present.A full restart of the test install loaded the model in 1.6 s and gave the same correct answer with no new downloads. TESTED
| Folder (inside the project) | Contents |
|---|---|
app\llm-models | Chat models (.gguf) |
app\models, app\speech-models, app\tts-models | Image models, Whisper models, Kokoro manifests |
app\outputs, app\transcriptions, app\tts-outputs | Your images, transcripts and voice clips |
app\chat-history | Saved chats |
app\llm-backend, app\backend, app\speech-backend, app\tts-runtime | Engines (3.2 GB of the 4.6 GB on the test laptop) |
app\tools, app\dist, app\config | Portable Node.js, the built interface, settings |
A model that works while you are online does not prove that the next offline launch works. Do this test before you travel or depend on the app.
windows.bat. At each launch, it checks for a llama.cpp update. Offline, it shows "[WARN] Could not update the llama.cpp backend (offline?)" and continues (update-llama.ps1:31-32). FROM CODESetup detects the GPU vendor and installs the matching chat engine (setup-llama.ps1:190-236). It always installs the Vulkan and CPU engines too. In Settings → Text generation → Text backend, you can select any installed engine.
| PC | Chat engine | What to expect | Status |
|---|---|---|---|
| NVIDIA GPU | CUDA (cuda-12.4 build) | 4 GB RTX 3050: 0.5B at 139–180 tokens/s, 1.5B at 82–97 tokens/s. | TESTED |
| AMD Radeon | HIP if detected, else Vulkan | Uses the GPU through Vulkan. Speed depends on the card. | FROM CODE |
| Intel Arc or Intel integrated graphics | SYCL and Vulkan | On the test laptop, Vulkan selected the Intel UHD Graphics before the NVIDIA GPU. If you have two GPUs, select the backend yourself. | TESTED (detection only) |
| No GPU | CPU | Slower. On the test CPU (i5-12450H) with no GPU layers, the 1.5B model wrote 10–16 tokens/s. Those runs used the bad Q4_0 cache, so the speed is approximate. | TESTED (speed only) |
A CPU-only PC or a PC with a small GPU also goes into the "Potato" tier. Set the KV cache to Q8_0 as in section 8.
When something fails, read the terminal window first. The line before "server crashed" usually names the cause.
| Symptom | Cause | Fix |
|---|---|---|
Setup stops at [5/8] Kokoro with npm ERR! code ENOENT and a path in AppData\Local\npm-cache TESTED | A damaged entry in the PC's shared npm cache. The app did not cause it. Setup uses that cache, which is outside the app folder. | Open a terminal in the project folder (see below) and run setup with a cache inside the app folder. This also keeps setup files on the drive. |
| Chat answers are garbled TESTED | KV cache Q4_0 (Potato profile, or the fallback after a failed model switch). | Unload. Set KV cache to Q8_0. Load again. Always unload before you change models. |
| "… is already loaded as a Text model. Unload it before loading …" TESTED | You selected a second model while the first one was loaded. | Unload the first model, then select the second one. |
| Another local tool stops when the studio starts FROM CODE | windows.bat force-closes the programs on ports 8080 and 10086. | Stop the other tool first, or run it on a different port. To move the studio's chat port, run set LLM_PORT=10087 before windows.bat in the same terminal. Port 8080 is fixed in the script. |
| The browser opens the wrong page, or no page TESTED | Port 1420 was in use, so the app moved to 1421–1499. | Use the "Web UI:" address in the terminal. |
No browser tab opens, and the terminal shows timeout: invalid time interval '/t' TESTED | A non-Windows timeout.exe (for example C:\Program Files\Git\usr\bin) comes before C:\Windows\System32 in PATH. A normal Windows PATH does not have this problem. | Open the "Web UI:" address yourself. The app runs normally. |
| The terminal opens and closes at once | An error ends the script before you can read it. | Open PowerShell in the project folder. Run .\windows.bat. The error then stays on the screen. |
Exit code 3221225781 (0xC0000135) FROM CODE | A DLL that an engine needs is missing. | NVIDIA: update the NVIDIA driver. AMD/Intel: install the Microsoft Visual C++ Redistributable x64. Restart Windows. Run setup again. Do not download DLLs from random websites. |
Exit code 3221225501 (0xC000001D) FROM CODE | An old engine build uses CPU instructions that your CPU does not have. | Run setup again (repair command below) to get the current builds. |
| Windows SmartScreen or antivirus blocks a file NOT TESTED | The file came from the internet. | Check where the file came from and what it is. Allow only that file. Do not switch off your antivirus. Do not change the PowerShell execution policy for the whole system. The launcher already sets it for its own process. |
| The GPU is not used | Wrong backend, or GPU layers set to 0. | Check Models → Text. The card must say "Running on Auto (CUDA/CPU)" or a Vulkan backend. Set GPU layers to All. On NVIDIA, run nvidia-smi and look for llama-server.exe in the process list. |
| Another device on your network cannot open the studio | By design, the app answers only on 127.0.0.1 (serve.cjs:7707), and it has no login. | Leave this default. If you run set UAIS_HOST=0.0.0.0, any person on that network can use your studio. |
cmd and press Enter. A Command Prompt opens in that folder.set npm_config_cache=%CD%\app\tools\npm-cache
windows.bat
Setup skips the parts that are already done. On the test laptop, this second run took 0.3 minutes and ended with exit code 0. TESTED
Use these PowerShell commands to repair a broken install or to test the app without the browser. Run them in the project folder while you are online.
Stop the app first. Then run:
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\setup\setup.ps1
This is the same setup that windows.bat runs. It keeps your models and chats. TESTED The project also has scripts\reset\reset.ps1, which removes caches. Make a backup of the whole folder before you use it. FROM CODE
Start the app with windows.bat. Then run this in a second PowerShell window. Change 1420 if the terminal shows a different port.
$base = "http://127.0.0.1:1420"
Invoke-RestMethod "$base/api/llm/status" | Select-Object ready, backendMode
Invoke-RestMethod -Method Post "$base/api/llm/stop"
$load = @{ model = "qwen2.5-1.5b-instruct-q4_k_m.gguf"; cacheTypeK = "q8_0"; cacheTypeV = "q8_0" } | ConvertTo-Json
Invoke-RestMethod -Method Post "$base/api/llm/start" -ContentType "application/json" -Body $load | Select-Object ok, ready
$msg = @{ stream = $false; temperature = 0; max_tokens = 60; messages = @(@{ role = "user"; content = "Extract exactly three fields: name, date, amount. Text: Alice paid `$37.50 on 2026-10-31. Do not add any other information." }) } | ConvertTo-Json -Depth 4
(Invoke-RestMethod -Method Post "$base/api/llm/chat" -ContentType "application/json" -Body $msg).choices[0].message.content
Expected output: the three fields Name: Alice, Date: 2026-10-31 and Amount: $37.50. The 1.5B model can add a short heading or a list, so the format can be different. TESTED (these exact commands)
| Measurement | Value |
|---|---|
| First setup (online) | 16.8 min, then failed at Kokoro (npm cache). Second run: 0.3 min, exit 0. |
| Disk use after setup and the 0.5B model | 4.60 GB (4.29 GiB): llm-backend 1.8 GB, backend 1.38 GB, llm-models 0.49 GB, tts-runtime 0.42 GB, tools 0.31 GB, frontend 0.17 GB |
| Disk use with both models | About 5.7 GB of a 128 GB drive (about 119.2 GiB usable) |
| Model downloads | 0.5B: 11.9 s. 1.5B: at 69.7 MB/s. |
| Model load time | 1.6–2.2 s from the internal SSD; 4.3 s once after a launch through windows.bat |
| 0.5B speed (CUDA, KV q8_0) | 138.7–180.5 tokens/s output; 444–2,282 tokens/s prompt reading |
| 1.5B speed (CUDA, KV q8_0 or f16) | 82.4–96.3 tokens/s output |
| 1.5B with KV q4_0 | Garbled output with all of these: CUDA with all layers, CUDA with 0 layers, CPU engine |
| Disk use after all tests | 8,096,075,478 bytes (8.10 GB, 7.54 GiB) for the app, 2 chat models, DreamShaper 8, Whisper Base English, Kokoro Q8 and the test outputs |
| Image (DreamShaper 8, CUDA) | 512×512, 20 steps: 34.3 s. 768×432, 20 steps: 29.0 s. About 1 s per step. 2,035 MB VRAM. |
| Transcription (Whisper Base English, CPU, 8 threads) | 14.4 s memo in 9.2 s (first run); 8.0 s question in 2.0 s. All words correct. |
| Voice (Kokoro 82M Q8, CPU) | 14.4 s clip about 14 s after the first click |
| Extraction test | Pass with the 0.5B model (q8_0) and with the 1.5B model (q8_0 and f16) |
The 0.5B model also wrote that a USB drive works "without physically inserting it into the computer". That is wrong. Small models make factual mistakes, so check their answers.
subst. A USB 3.0 flash drive at 100–200 MB/s needs about 2.5–5 s just to read the 491 MB model, and about 5.6–11 s for the 1.12 GB model. After the model loads, answer speed should stay the same, because the model then runs from RAM or VRAM./api/llm/download-model), which the button also uses. The card then showed "Downloaded".U:\. The test tool could upload only from its work folder, so we copied the two test WAV files there and deleted them after the test. A normal user selects the file on the drive.| Part | Version or location |
|---|---|
| llama.cpp (chat) | b11418 (scripts\config\llm-backends.json) |
| stable-diffusion.cpp (images) | CPU and CUDA master-782-b290693; Vulkan master-685-19bdfe2 (setup.ps1:345,503) |
| Node.js | v22.12.0 portable (setup.ps1:276) |
| Port kills | windows.bat: taskkill on :8080 and :%LLM_PORT% (default 10086), at setup and at launch |
| Frontend port fallback | windows.bat :resolve_frontend_port, 1421–1499 |
| NVIDIA detection | setup.ps1:324-336, setup-llama.ps1:190-207 |
| Visual C++ runtime install (admin prompt) | setup.ps1:213-239 |
| Potato tier with KV q4_0 | serve.cjs:1463-1476 |
| "Safe" fallback load profile (CPU, flash attention off, q4_0) | serve.cjs:4272-4293 (buildLlmLoadProfiles) |
| Local-only binding | serve.cjs:7707 (interface), serve.cjs:4565 (llama-server) |
| Workspace routes (#/images, #/transcribe, #/voice) | App.jsx:15-22 |
| Image model library | ModelManager.jsx:119-188 |
| Whisper and Kokoro catalogs, voices | serve.cjs:171-215 |
Kokoro voices read from the local voices folder in Node.js | tts-runtime\node_modules\kokoro-js\dist\kokoro.cjs |
Kokoro cache setting (in the test, the model went to tts-runtime\node_modules\@huggingface\transformers\.cache, and app\tts-cache stayed empty) | tts-kokoro-worker.mjs:83-84, serve.cjs:2511 |
| English-only Whisper message | SpeechTranscriber.jsx:407 |
| Offline launch with update check | update-llama.ps1:31-32 |