Tutorial 1
Take Jellyfin media files to go
You already run Jellyfin (or Immich / Audiobookshelf) against a media folder. Mount that same folder into the Krazy To-Go Box as a companion container. Jellyfin keeps its own port; the box gets a second port with a plain file listing you can open in a browser.
Same To-Go Box image on Docker, Podman, and Kubernetes — you choose the container program. Only the way the folder is attached changes. This walk mounts the same media folder into Jellyfin and the To-Go Box so you can list and download files on a second port.
You will need: a media folder (or a sample data/ with a JPG), a container program (Docker, Podman, or Kubernetes), and a free host port (often 8080). Jellyfin is optional — the companion box works alone.
Idea: one folder on disk, two containers. Jellyfin uses it for playback. The To-Go Box uses it for a simple listing + downloads on another port.
1. Pick a picture you own and copy it into the media folder (or a data/ folder you will mount).
mkdir -p data
cp ~/Pictures/lake.jpg data/lake.jpg
Windows PowerShell: New-Item -ItemType Directory -Force data; Copy-Item $env:USERPROFILE\Pictures\lake.jpg data\lake.jpg
2. Start the official To-Go Box. Map host port 8080 (or another free port) to the box’s 8080. Mount the folder at /data.
docker pull ghcr.io/crimsonflower420/krazytogo:latest
docker run -d --name krazy \
-p 8080:8080 \
-v "$PWD/data:/data" \
-e KRAZY_ROOT=/data \
-e KRAZY_BROWSE=true \
ghcr.io/crimsonflower420/krazytogo:latest
If Jellyfin already mounts e.g. /srv/media, use that path instead of $PWD/data — same idea: one host folder, two containers.
3. Open the listing, then the file.
# listing
http://127.0.0.1:8080/
# direct file
http://127.0.0.1:8080/lake.jpg
curl -fsSI http://127.0.0.1:8080/lake.jpg
You should see a plain list of names (and folders). Click lake.jpg — or open the direct URL — to get the file.
$ curl -fsSI http://127.0.0.1:8080/lake.jpg HTTP/1.1 200 OK Content-Type: image/jpeg …
A 200 with Content-Type: image/jpeg means the mount worked. A 404 usually means the file is not in the mounted folder, or the name does not match.
Success looks like: a plain list of names at http://127.0.0.1:8080/, then the photograph at /lake.jpg on the To-Go Box port (matching the listing/success visuals above). Jellyfin, if running, still uses its own port on the same folder. No upload button — the volume is the share.
Common snag: connection refused or the wrong page usually means the host port mapping is off — try -p 18080:8080 and open http://127.0.0.1:18080/ if 8080 is already busy.
Smoke check without a container: krazytogo -root ./data -addr :8080 with lake.jpg in ./data.
Same steps as Docker. Two differences: the binary name is podman, and add :Z on the volume if the host uses SELinux (Fedora, RHEL, and many servers).
podman pull ghcr.io/crimsonflower420/krazytogo:latest
podman run -d --name krazy \
-p 8080:8080 \
-v "$PWD/data:/data:Z" \
-e KRAZY_ROOT=/data \
-e KRAZY_BROWSE=true \
ghcr.io/crimsonflower420/krazytogo:latest
Rootless Podman may need a high host port: -p 18080:8080, then open http://127.0.0.1:18080/lake.jpg.
Then browse http://127.0.0.1:8080/ (or your mapped port) the same way as Docker.
The official Deployment mounts cluster storage at /data. Put the file on that volume with a short-lived helper (the official box has no shell to copy into).
kubectl apply -k deploy/kubernetes/
kubectl -n krazytogo apply -f examples/packages/copy-jpg-pod.yaml
apiVersion: v1
kind: Pod
metadata: { name: copy-jpg, namespace: krazytogo }
spec:
containers:
- name: copy-jpg
image: alpine:3.20
command: ["sleep", "600"]
volumeMounts: [{ name: data, mountPath: /data }]
volumes:
- name: data
persistentVolumeClaim: { claimName: krazytogo-data }
kubectl -n krazytogo cp ./lake.jpg copy-jpg:/data/lake.jpg
kubectl -n krazytogo port-forward svc/krazytogo 8080:8080
# browser → http://127.0.0.1:8080/lake.jpg
kubectl -n krazytogo delete pod copy-jpg
Do not try to open a shell inside the krazytogo container — there is none. The mounted volume is the share.





