Series of posts about my homelab

81 posts latest post 2026-10-06
Publishing rhythm
Oct 2026 | 1 posts

Stable Diffusion Notes

ChatGPT Prompt: # Stable Diffusion is an AI art generation model similar to DALLE-2. Here are some prompts for generating art with Stable Diffusion. Example: A ghostly apparition drifting through a haunted mansion’s grand ballroom, illuminated by flickering candlelight. Eerie, ethereal, moody lighting. portait of a homer simpson archer shooting arrow at forest monster, front game card, drark, marvel comics, dark, smooth pirate, deep focus, fantasy, matte, sharp focus red dead redemption 2, cinematic view, epic sky, detailed, low angle, high detail, warm lighting, volumetric, godrays, vivid, beautiful a fantasy style portrait painting of rachel lane / alison brie hybrid in the style of francois boucher oil painting, rpg portrait athena, greek goddess, claudia black, bronze greek armor, owl crown, d & d, fantasy, portrait, headshot, sharp focus closeup portrait shot of a large strong female biomechanic woman in a scenic scifi environment, elegant, smooth, sharp focus, warframe ultra real…

ffmpeg -i input.mp4 -map 0 -c:v libx264 -vf format=yuv420p -c:a copy output.mp4

ssh-copy-id -i my.key.pub <hostname probably from tailscale> this makes sure I can run ansible from my desktop against VMs on my server easily if they have tailscale for the hostname - otherwise use the IP

Systemd timer for syncoid

I have a bash script called which boils down to a barebones - I want to run this script hourly but as my user (notice the no-privilege-elevation flag) First - create a systemd unit file at Then we save the unit file, enable the service, and then start it Note this will run that script… so be ready for syncoid to do its thing Now for the timer… We create Hit it with a and you’re in business!

AJAX wasn’t cutting it, traditional crontab in containers doesn’t make much sense to me, webcron is recommended but I don’t want to register with anything outside my LAN… Turns out you can just spin up an identical container with a different entrypoint to /cron.sh that does what you need!

Note that this is a task in an Ansible playbook - but the docker-compose is straight forward

So the only thing you need to make sure of is that all the configuration options - data volumes, user permissions, etc. are identical between the containers running the cron job and the one actually hosting NextCloud. This ensures that the container running cron has proper access to the database and filesystem - or at least the same access as NextCloud proper.

- name: Nextcloud Cron Docker Container
  docker_container:
    name: nextcloud-cron
    image: "{{ nextcloud_image }}"
    pull: true
    links:
      - nextcloud-mysql:mysql
    entrypoint: /cron.sh
    volumes:
      - "{{ nextcloud_data_directory }}/nextcloud:/var/www/html:rw"
    env:
      MYSQL_HOST: "mysql"
      MYSQL_DATABASE: "nextcloud"
      MYSQL_USER: "{{ nextcloud_sql_user }}"
      MYSQL_PASSWORD: "{{ nextcloud_sql_password }}"
      NEXTCLOUD_TRUSTED_DOMAINS: "{{ nextcloud_hostname }}.{{ ansible_nas_domain }}"
      PUID: "{{ nextcloud_user_id }}"
      PGID: "{{ nextcloud_group_id }}"
      TZ: "{{ ansible_nas_timezone }}"
    restart_policy: unless-stopped
    memory: "{{ nextcloud_memory }}"

I learned you can embed gifs and stuch in things other than GH personal pages!

So here I’ll keep ones I like and might use later

via GIPHY

Bought some DDR4-3600 speed RAM but only seeing 2666? Load up the BIOS, find DRAM config or something similar, and make sure to load the XMP profile to get that advertised RAM speed!

Babyblue v2

Ryzen 5700x + 32 GB 3200 CL16 RAM

PassMark Rating

Venus

Ryzen 3200G + 16GB 3600 CL16 RAM

PassMark Rating

Hogwarts

Dual Xeon X5650 @2.67GHz | 90 GB 1883 DDR3 ECC RAM

PassMark Rating

Server 2 ... Change the name

Ryzen 5700G + 128GB 3200 CL18 RAM

PassMark Rating

Server 2 with XMP enabled and undervolted from 1.35 to 1.2

Ryzen 5700G + 128GB 3200 CL18 RAM

Undervolted to 1.2V (from 1.35) XMP enabled

PassMark Rating

Assuming you have a pool called tank…

And assuming you have an encrypted dataset (See Jim Saltar’s short intro)

  1. Create a group for permissions - in my case I have one called home
  2. Then if there’s anything in /tank/encrypted his it with chgrp -R home /tank/encrypted to give the home group ownership
  3. Next we need to make sure that the members of home can do the writing… so chmod 775 -R /tank/encrypted will do the trick
  4. Finally we want to make sure that all data created inside our dataset has the same set of permissions with chmod g+s /tank/encrypted and chmod g+w /tank/encrypted