waeaves
Hi! I'm Emma Weaver. I make stuff! I talk about stuff I have made here :) Welcome!
2026/03/05
Lassi
I struggle a lot with yogurt’s texture. But, blended with salt and water, it is suddenly very easy to eat lots of.
2026/03/02
Fishcam
I recently set up a livestream of my girlfriend’s fish tank on a little rpi 2W with a cheap usb webcam! I kept it super simple.

First, set up a rpi headless like usual. Then, install motion via sudo apt-get install motion. I like to add the option --no-install-recommends too, just to keep the clutter to a minimum. Next you’ll want to update the motion service’s configuration that got generated at /etc/motion/motion.conf to match your use case. I changed the following variables:
| variable | value | purpose/reason |
|---|---|---|
| framerate | 60 | so that the stream shows motion fluidly |
| text_left | ’’ | to remove the text at the bottom |
| text_right | ’’ | ”” |
| movie_output | off | to prevent motion from saving recorded video files |
| webcontrol_port | ??? | I recommend setting a random port for this, mostly out of superstition |
| stream_port | ??? | same here, although this one will be public anyway* |
| webcontrol_localhost | on | hide admin panel |
| stream_localhost | off | allow remote access to the stream! which is the whole point of all of this |
| stream_maxrate | 100 | allow the full-fps video to be streamed. this one is not included in the default config file! But without it you’ll be stuck with a ~1fps stream. |
Once the config is set up, you then want to enable the service using sudo systemctl enable motion and start it using sudo systemctl start motion. Once you’ve done this, the service should be running. Congrats! (maybe)
You can verify that it’s working by running curl localhost:<stream port> on the rpi, which should output html if everything’s working. You can also use a device on the same network to access http://<the rpi's local IP>:<stream port>, which will display the stream. Note that this may not work on a wifi network that restricts communication between connected devices.
From there, it’s just a matter of dealing with the networking side of things to expose the stream to the larger internet. But that’s outside of the scope of this post!
2026/02/22
Jellyfin Part 2
I made a TON of progress since writing Jellyfin Part 1. For one, I went ahead and paid for the static IP. With it, I’m able to define port forwarding rules using my router! And it just works, no funny business.
Next, I set up my server. I chose to go with Debian, and for this system I tried to keep the system as simple as possible. I didn’t install anything more than the bare operating system, and even disabled recommended installs in apt to keep it minimal. I learned a lot getting the system working under these constraints!

For this system, I decided to run everything using Docker Compose. That way I can conveniently document and encapsulate my services, check their configuration into git, and spin things up and down easily without polluting the larger system. Networking is also extra convenient with them!
I ended up setting up Jellyfin, of course, but also a Wireguard server so I can VPN back into my local network to reconfigure my router remotely. I also used Caddy to reverse proxy all the services to the domain that all of this is exposed on, which took some experimentation for the different methods of defining base paths in each of the different services… But it wasn’t bad at all.
Finally, I set up Deluge, connected to a VPN via Gluetun for torrenting. Set up that way, the Deluge container is only ever able to access the internet through Gluetun, so kill-switch behavior is built in. If gluetun or the VPN ever stop working, Deluge will simply not have a way to access the internet. It works well, although I might switch to a different torrent client eventually (just because deluge has been a little buggy for me, although it might be operator error haha).
Before this, I had never torrented before!! I had internalized myths about how dangerous and scary it is, but especially when you’re only dealing in media, it’s really pretty safe. and also easy! I totally could have been doing it the whole time, without this whole project… But I’m glad I learned this way. I’m very anxious of a person so it feels really good to have it all set up in such a safe way. Torrenting is a wonderful, beautiful thing! Peer-to-peer filesharing is so cool!!
2026/02/11
Jellyfin Part 1
I was recently made aware of this cool thing called Jellyfin! The idea is, it’s a streaming platform designed around each user/family/etc hosting their own media server, which is super awesome!

It’s even available to be installed on linux machines directly from the package manager. Great!
Networking though?
I wanted to expose my instance to the larger internet, so I could let friends use it too!
It started out well and I was able to set up Dynamic DNS on one of my domains easily (because no static IPs for me). This made it possible to ping the machine using its public domain!
But… no other services I tried to talk to would reach the machine. I dug around a while trying to figure out what was happening, slowly exhausting the possible causes:
But I finally found my answer while searching online. Apparently my ISP uses CGNAT, and offers no way to set port forwarding rules at that level. So what I was trying to do was impossible, at least “the simple way”.
2026/02/02
What Pokemon Are You

Website that tells you What Pokemon You Are based on your height and weight! I actually made this a long time ago, but only published it now.
2026/01/24
Steamed White Rice
For Nanner 🌻
2026/01/17
Cookie Fragile

Based on Vlambeer’s Super Crate Box, but with more emphasis on the various ways you might hurt yourself with all the bombs and fire going on 😅
2026/01/07
Cajun Red Beans
Roux are a magical way to achieve really savory, hearty results ^_^
2025/12/01
Deux and Nada

Assymetric 2p blockpusher with a story! It was fun to mess with including some cutscenes and writing.
Powered by
Jekyll