Self-Hosting n8n, MinIO, KokoroTTS and NCA Toolkit โ Step by Step
The complete self-hosting stack: n8n for workflows, MinIO for storage, KokoroTTS for voice, and NCA Toolkit to tie it together.
Lesson Notes
What You'll Build
A complete locally-hosted AI automation stack running entirely on your own machine โ no cloud subscriptions, no monthly API bills for the core infrastructure. By the end, you'll have:
- n8n โ Visual workflow automation
- MinIO โ S3-compatible local file storage
- KokoroTTS โ Free text-to-speech (alternative to ElevenLabs)
- NCA Toolkit โ API-driven video and media processing
- Ollama โ Run large language models locally
- Open Web UI โ ChatGPT-style interface for your local models
Prerequisites
- Docker Desktop installed (free plan โ download from docker.com)
- A machine with at least 16GB RAM (32GB recommended if running large models)
- Plenty of disk space โ models alone can be 4โ16GB each
Step 1 โ Install n8n
Open Docker Desktop โ click the Terminal icon at the bottom. Run the Docker install command (available in the video description and linked Google Sheet):
docker run -d --name n8n
-p 5678:5678
-v /YOUR/LOCAL/PATH:/home/node/.n8n
n8nio/n8n
Replace /YOUR/LOCAL/PATH with a real folder on your machine โ this is where n8n persists your workflows. The -d flag runs it in the background. Once running, visit localhost:5678.
The -v mount is critical โ without it, your workflows are lost when the container restarts.
Step 2 โ Install MinIO
MinIO is your local S3 bucket โ it stores files (images, audio, video) that n8n and NCA Toolkit need to share between steps.
docker run -d --name minio
-p 9000:9000 -p 9001:9001
-v /YOUR/LOCAL/PATH:/data
-e "MINIO_ROOT_USER=admin"
-e "MINIO_ROOT_PASSWORD=yoursecurepassword"
minio/minio server /data --console-address ":9001"
Change the username and password to something strong. Visit localhost:9001 to access the MinIO console. Log in with the credentials you set.
Create Your Buckets
- Click Create a Bucket โ name it
nca-toolkit(all lowercase) โ Create - Create a second bucket named
raw-videos
Create Access Keys
- Left sidebar โ Access Keys โ Create Access Key
- Give it a name (e.g.
n8n) โ Create - Copy both the Access Key and Secret Key immediately โ you won't see the Secret Key again. Paste both into a secure note.
Step 3 โ Install KokoroTTS
KokoroTTS is a free, locally-hosted text-to-speech engine. It supports multiple voices and languages โ a genuine alternative to paying ElevenLabs per character.
docker run -d --name kokoro
-p 8880:8880
ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.2
Visit the web interface (check the container's port in Docker Desktop). You can paste text and hear the available voices before using it in automation.
In n8n, reach KokoroTTS via http://host.docker.internal:8880 โ the same Docker networking trick used for ComfyUI.
Step 4 โ Install NCA Toolkit
NCA Toolkit is an API server for media operations: add captions to videos, concatenate clips, extract audio duration, overlay text โ all via simple HTTP calls from n8n. It uses FFmpeg under the hood so you don't have to install FFmpeg separately for these operations.
docker run -d --name nca-toolkit
-p 8080:8080
-e "S3_ENDPOINT_URL=http://host.docker.internal:9000"
-e "S3_ACCESS_KEY=YOUR_MINIO_ACCESS_KEY"
-e "S3_SECRET_KEY=YOUR_MINIO_SECRET_KEY"
-e "API_KEY=YOUR_CHOSEN_API_KEY"
stephengpope/no-code-architects-toolkit:latest
Replace YOUR_MINIO_ACCESS_KEY and YOUR_MINIO_SECRET_KEY with the keys you copied in Step 2. Set YOUR_CHOSEN_API_KEY to any string you want โ this is what you'll use in n8n's X-API-Key header when calling NCA Toolkit.
NCA Toolkit has no browser interface โ it's API only. Check the GitHub docs (linked in description) for all available endpoints.
Step 5 โ Install Ollama + Open Web UI
Run local LLMs without paying OpenAI per token.
- Download Ollama from ollama.com and install it like any desktop app.
- Install Open Web UI in Docker:
docker run -d --name open-webui
-p 3000:3000
-v /YOUR/LOCAL/PATH:/app/backend/data
--add-host=host.docker.internal:host-gateway
ghcr.io/open-webui/open-webui:main
Visit localhost:3000. Create a local account (email/password โ this stays on your machine). Select a model from the dropdown (Llama 3.1 is a good starting point) and start chatting.
Step 6 โ Install FFmpeg Inside n8n (Bonus)
Some n8n operations need FFmpeg available inside the n8n container itself. Get your n8n container ID from Docker Desktop, then run:
docker exec -it -u root [CONTAINER_ID] apk add --update ffmpeg yt-dlp
This also installs yt-dlp for downloading YouTube audio/video directly within your n8n workflows.
Connecting Everything in n8n
All services are reachable from n8n using host.docker.internal:
- MinIO:
http://host.docker.internal:9000(S3 endpoint in n8n S3 credential) - KokoroTTS:
http://host.docker.internal:8880 - NCA Toolkit:
http://host.docker.internal:8080(withX-API-Keyheader) - ComfyUI:
http://host.docker.internal:8188
In n8n's S3 credential, set the endpoint to http://host.docker.internal:9000, enter your MinIO access/secret keys, and enable Force Path Style.
Your Stack Is Live
You now have a complete AI automation infrastructure running locally. Build n8n workflows that generate images with ComfyUI, create voiceovers with KokoroTTS, process video with NCA Toolkit, store files in MinIO, and chat with local models through Open Web UI โ all for the cost of electricity.
After installing all containers, run <code>docker exec -it -u root [n8n-container-id] apk add --update ffmpeg</code> to install ffmpeg directly inside your n8n container. This enables n8n's Execute Command node to run ffmpeg operations without needing NCA Toolkit for simple tasks.
Tools mentioned in this lesson: