v3ritas.TECH

w33k in g33k: May 22,2026

· Sean P. McAdam

w33k in g33k Banner

👎🏻 Adulting

🤖 Android

🍎 Apple

🤖 Artificial Intelligence \ Large Language Models

🌎 Current Events

  • Rutger Bregman: 10 Signs of Fascism. America has all of them.
    • First: a mythic past and national rebirth.
    • Second: victimhood and humiliation
    • Third: hierarchy and dehumanization
    • Fourth: contempt for weakness
    • This leads to the fifth family resemblance, which is the cult of action.
    • Sixth: the leader as savior
    • Seventh: the purification of institutions
    • Eight: propaganda and the assault on truth
    • Ninth: the merger of state and corporate power
    • Tenth, final and most crucially: violence and terror

🎥📺 Entertainment

🎮 Games

🏡 Home

🖥️🔐 IT Security

🐧 Linux

  • NERDS.xyz: RakuOS takes a huge step toward becoming a serious Linux distro
    • RakuOS: “Atomic Linux that doesn’t take away your package manager. Immutable base. Install anything. Native gaming. Zero compromises.”
      • Nice banner across the top of the page too: “Our stance on age mandates in general, and more specifically H.R. 8250: RakuOS opposes invasive age-verification and age-attestation mandates. If these laws move forward, we will implement the absolute bare minimum in the most privacy-respecting way possible. Read our full stance, including our response to H.R. 8250.”
  • GitHub: tech4bot / rk3562deb: “rkdebian is a build system that produces a complete, bootable Debian 12 Bookworm image for the Doogee U10 Android tablet, powered by the Rockchip RK3562 SoC.”
    • I forget where i saved this from, but Linux on a tablet caught my eye.
  • Make Use Of: I ditched laggy Linux remote desktop for this browser-based setup
    • Apache Guacamole: “Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH. We call it clientless because no plugins or client software are required. Thanks to HTML5, once Guacamole is installed on a server, all you need to access your desktops is a web browser.”

🎥📺 Media

Self Hosting

  • Make Use Of: 5 things you shouldn’t self-host, even though you technically can
    1. Running your own email is a pain you don’t need
    2. Payments are not a DIY project
    3. Production DNS isn’t forgiving: I agree with this one for business purposes, but if your knowledgable enough & know you’ll have to troubleshoot, running it for yourself locally isn’t that much of a headache. And even that is usually just at the beginning; once it’s running for a while you generally don’t have too many issues & if they do come up, you are now experienced enough to know where to fix the issue.
    4. Streaming at scale is a different beast: Disagree with this one, based on what you want to accomplish. If you 100% want to replace Netflix or another streaming service, i do think that would be extremely difficult. If you want to complement what you have, including things that might not be easily accessible online, it’s definitely worth it. And also for things that you would NOT find online, like a shared Library for your family to view digitized home videos.
    5. Kubernetes is overkill for most homelabs
  • How-To Geek: Proxmox solves Plex’s biggest backup problem, but most people don’t know it
    • Just skimmed the article, but looks like it’s just about a snapshot that would include media files, but I’m not too worried about losing movies, shows, or music that might be in Plex. Home Videos would be different, but those i already have backed up in multiple places anyway.
  • How-To Geek: These 5 open-source apps do everything your paid subscriptions do, but better
    1. Immich: “Self-hosted photo and video management solution. Easily back up, organize, and manage your photos on your own server. Immich helps you browse, search and organize your photos and videos with ease, without sacrificing your privacy.”
    2. audiobookshelf: “Audiobookshelf is an open-source self-hosted media server for your audiobooks and podcasts.”
    3. Wallabag: “wallabag is a read-it-later application: it saves a web page by keeping content only. Elements like navigation or ads are deleted.”
    4. Plex or Jellyfin: After everything with the ridiculous price increase from Plex… definitey going to say Jellyfin over Plex here.
    5. Postiz: “Plan, generate, and schedule posts automatically to 30+ social media networks — then review and edit everything in a visual calendar. Bring your OpenClaw / Hermes / Claude”
  • How-To Geek: 5 Pi Zero 2 W projects that are more useful than they have any right to be
    1. Network-wide malware protection and ad-blocking: Pi-hole
    2. A tiny backup VPN: Wireguard
    3. A self-hosted password manager: Vaultwarden
    4. Your homelab dashboard: Uptime Kuma
    5. A mini music server: Navidrome
  • Make Use Of: 3 self-hosted apps I’m trying out this weekend (and you should too)
    1. Immich: “Self-hosted photo and video management solution. Easily back up, organize, and manage your photos on your own server. Immich helps you browse, search and organize your photos and videos with ease, without sacrificing your privacy.”
    2. Mealie: “Mealie is an intuitive and easy to use recipe management app. It’s designed to make your life easier by being the best recipes management experience on the web and providing you with an easy to use interface to manage your growing collection of recipes.”
    3. Uptime Kuma: “A self-hosted monitoring tool”

🗣️ Social Networking

❔ Miscellaneous

from PIL import Image  # Import the Image module from the Pillow library

img = Image.open("photo.jpg")  # Load photo.jpg from disk into an Image object (original is untouched in memory)

# --- RESIZE ---
resized = img.resize((800, 600))  # Create a new Image object scaled to 800x600px (non-destructive, img is unchanged)
resized.save("resized.jpg")  # Write the resized image to disk as resized.jpg

# --- CROP ---
cropped = img.crop((100, 100, 500, 400))  # Cut a rectangle from img: starts at (100,100), ends at (500,400) → gives a 400x300px image
cropped.save("cropped.jpg")  # Write the cropped image to disk as cropped.jpg

# --- ROTATE ---
rotated = img.rotate(45)  # Create a new Image rotated 45° counter-clockwise; corners are clipped and filled black (canvas size unchanged)
rotated.save("rotated.jpg")  # Write the rotated image to disk as rotated.jpg
02. Using Python to draw text and shapes on an image
from PIL import Image, ImageDraw, ImageFont  # Also import ImageFont to load a proper font

img = Image.open("photo.jpg")
draw = ImageDraw.Draw(img)  # Draw object bound directly to img — modifications are in-place

# Draw a red rectangle
draw.rectangle([50, 50, 300, 150], outline="red", width=3)  # Rectangle from (50,50) to (300,150), red border, 3px thick

# Load a proper font (change path/size to suit your needs)
font = ImageFont.truetype("arial.ttf", size=32)  # Load a TTF font at 32px — use any .ttf file available on your system

# Add white text at position (60, 60)
draw.text((60, 60), "Hello, World!", fill="white", font=font)  # Write text using the loaded font

img.save("annotated.jpg")
03. Using Python to manipulate pixels directly
from PIL import Image  # Import Pillow's Image module for loading and saving images
import numpy as np  # Import NumPy — allows treating the image as a grid of numbers for direct pixel math

img = Image.open("photo.jpg")  # Load photo.jpg from disk into an Image object

pixels = np.array(img)  # Convert the Image object into a NumPy array — each pixel becomes a number (0–255) representing its brightness/color value

# --- INVERT ---
inverted = 255 - pixels  # Subtract every pixel value from 255 — this flips the colors (0 becomes 255, 255 becomes 0, etc.)

result = Image.fromarray(inverted.astype(np.uint8))  # Convert the NumPy array back into a Pillow Image object — astype(np.uint8) ensures values stay in the valid 0–255 range
result.save("inverted.jpg")  # Write the inverted image to disk
04. Using Python to apply filters and color adjustments
from PIL import Image, ImageFilter, ImageEnhance  # Import Image for loading, ImageFilter for blur/sharpen effects, ImageEnhance for brightness/contrast adjustments

img = Image.open("photo.jpg")  # Load photo.jpg from disk into an Image object (original stays unchanged throughout)

# --- GRAYSCALE ---
gray = img.convert("L")  # Convert img to grayscale — "L" is Pillow's mode for 8-bit black & white; returns a new Image object
gray.save("grayscale.jpg")  # Write the grayscale image to disk

# --- BLUR ---
blurred = img.filter(ImageFilter.BLUR)  # Apply a simple box blur to img — returns a new Image object, img is unchanged
blurred.save("blurred.jpg")  # Write the blurred image to disk

# --- SHARPEN ---
sharpened = img.filter(ImageFilter.SHARPEN)  # Apply a sharpening filter to img — enhances edges; returns a new Image object
sharpened.save("sharpened.jpg")  # Write the sharpened image to disk

# --- BRIGHTNESS ---
enhancer = ImageEnhance.Brightness(img)  # Create a Brightness enhancer object bound to img — similar to ImageDraw, but read-only (non-destructive)
bright = enhancer.enhance(1.5)  # Apply 1.5x brightness (1.0 = original, <1.0 = darker, >1.0 = brighter) — returns a new Image object
bright.save("brighter.jpg")  # Write the brightened image to disk
05. Using Python to remove the background from an image
from rembg import remove  # Import the remove function from rembg — a third-party library that uses an AI model (U2Net) to detect and remove image backgrounds
from PIL import Image  # Import Pillow's Image module for loading and saving images

input_image = Image.open("photo.jpg")  # Load photo.jpg from disk into an Image object

output_image = remove(input_image)  # Pass the image through the AI model — detects the foreground subject, removes the background, returns a new Image object with a transparent background
output_image.save("no_background.png")  # Save as PNG — must use PNG (not JPG) because JPG doesn't support transparency; the transparent areas would be lost
06. Using Python to composite two images together
from PIL import Image

background = Image.open("photo.jpg").convert("RGBA")  # Convert to RGBA to support transparency
overlay = Image.open("logo.png").convert("RGBA")  # Convert to RGBA — logos often have transparent areas

# Resize overlay to desired size before pasting
overlay = overlay.resize((200, 100))  # Scale the logo to 200x100px — adjust to suit your needs

# Paste the overlay at position (50, 50)
background.paste(overlay, (50, 50), mask=overlay)  # mask=overlay uses the overlay's alpha channel to blend edges cleanly — without this, transparent areas paste as black

background.save("composited.png")  # Save as PNG to preserve transparency
07. Using Python to animate a single image into a GIF
from PIL import Image

img = Image.open("photo.jpg").convert("RGBA")  # Load image and convert to RGBA — needed for consistent pixel handling across frames

frames = []  # Empty list to store each frame of the animation

for i in range(20):  # Loop 20 times — each iteration generates one frame of the zoom effect
    scale = 1 + i * 0.02  # Calculate scale factor for this frame — starts at 1.0 (100%), increases by 2% each frame up to 1.38 (138%)
    new_width = int(img.width * scale)  # Calculate new width based on scale factor
    new_height = int(img.height * scale)  # Calculate new height based on scale factor
    resized = img.resize((new_width, new_height))  # Resize the image to the new dimensions — makes it slightly larger each frame

    # --- CROP BACK TO ORIGINAL SIZE FROM CENTER ---
    left = (resized.width - img.width) // 2  # Calculate how many pixels to trim from the left to center the crop
    top = (resized.height - img.height) // 2  # Calculate how many pixels to trim from the top to center the crop
    frame = resized.crop((left, top, left + img.width, top + img.height))  # Crop the resized image back to the original dimensions from the center — this creates the zoom-in illusion
    frames.append(frame)  # Add the cropped frame to the frames list

# --- SAVE AS GIF ---
frames[0].save(
    "zoom.gif",           # Output filename
    save_all=True,        # Tell Pillow to save all frames, not just the first one
    append_images=frames[1:],  # Attach frames 2–20 after the first frame
    duration=50,          # Each frame displays for 50 milliseconds — lower = faster animation
    loop=0                # 0 = loop forever; set to 1 for play-once, 2 for twice, etc.
)

selh.st: Self-Host Weekly (22 May 2026) , by Ethan Sholly.

  • GitHub: bookorbit / bookorbit: “BookOrbit: Your Reading Space”
    • Web Site: BookOrbit: “A self-hosted library and reading platform for ebooks, audiobooks, and comics. Automate metadata at scale, sync with Kobo, track reading analytics, and support multiple users.”
  • Invidious (nadeko.net): Pi: Open-Source AI Agent Terminal Set-Up
  • GitHub: ether / etherpad: “Etherpad: A modern really-real-time collaborative document editor.”
    • v3.0.0
    • Web Site: Etherpad Documentation: “EtherpadNext generation collaborative document editing. Make your documents come alive”
    • I don’t remember if I’ve tried Etherpad before, but maybe I skipped looking into it since it is more “collaborative” & it’s not something i need to use.
  • GitHub: Timmoth / RackPeek: “CLI tool to discover, manage, and document your IT infrastructure and home lab.”
    • Web Site: rackpeek
    • I know i’ve seen \ saved this before, but haven’t had a chance to look more into it.
  • Codeberg: danb / rss: “A simple twitter-feed-style RSS aggregator written in PHP, Laravel, Inertia.js, Tailwind and Vue.js”
    • Within the last week or two, i had just setup FreshRSS so i probably won’t be moving to anything else any time soon, but wanted to look at this RSS reader.
  • GitHub: snapotter-hq / SnapOtter: “🦦The open-source image toolkit that makes paid tools nervous. Every image tool you need. Your images stay yours.”
    • Web Site: SnapOtter: “A free, open-source image toolkit with 50+ tools that runs entirely on your network.”
    • I might have saved this last week too, but didn’t get to look at it yet.
  • GitHub: ellite / Wallos: “Wallos: Open-source, self-hostable personal subscription tracker. Visualize your recurring expenses, manage your budget, and save money.”
    • Web Site: Wallos: “Wallos: Open-Source Personal Subscription Tracker. Self-hostable web application designed to empower you in managing your finances with ease. Wallos simplifies the process of tracking expenses and helps you gain better control over your finances.”
    • I was running this previously, but i don’t remember if it broke & i never brought it back up (would have been an issue on my side, not the app) or forgot about it. At the moment i’ve been trying out Oikos) which isn’t the same thing, but maybe I will spin Wallos back up & use them together.