Pixel Li

Notes from a home lab in China: local AI on a Mac mini, small automations, and the tinkering in between.

Tech notes: making a ten-year-old Flask site static and moving it to free Cloudflare hosting

Turning a Python 2 site static in one day: export method, line-by-line verification, Workers static asset deployment, moving S3 to R2, domain migration, and real-world access tests from mainland China

This is a complete record for myself: the next time I change this site, or move another old site the same way, read this first. The site was built for a lab many years ago; below I just call it “this site” and leave out its name and domain. The one doing the work was Claude Code on a Mac mini;...

Mac mini Home Server: Set Up a Workbench in One Sentence, Open Source

Domain + Tailscale + Caddy + real-time dashboard; open-source homelab-desk lets AI set it up in one sentence

A home server sounds very geeky, like a toy that only programmers have. But in the era of large models, it’s actually something for every household. Because the code work of deployment, management and maintenance is exactly one of the things today’s large models are best at. I turned the pitfa...

Technical notes: Local fine-tuning of Qwen3-TTS voices on a Mac mini

From video material to a usable voice on a web page: data preparation, four fixes to the training script, evaluation methods, a low-memory approach, and lessons learned

This is a complete record for my own reference: next time I train a new voice, or pick this up again in a new conversation, read this first. All the code is in qwen3-tts-console (the web page is in the root directory, the training pipeline is in finetune/). In this post the two people being tr...

How Much Mac mini Memory? M6 and M5 Pro Buying Guide

16GB to 64GB, M6 vs M5 Pro, Mac Studio: a buying guide by use case

What’s the key to choosing a Mac mini? The CPU already crushes everything in its class, and you can add storage yourself later; but the memory is soldered to the motherboard, and how much memory you get is closely tied to what you use it for as a server. Buy too little and the models you want to...

Mac mini Runs a 27B Model at Up to 35 token/s

M5 Pro 64GB tested with Qwen3.8-27B: setup, speed, power draw and buying advice

After using cloud AI for a while, one thing has kept distracting me: quota. There’s a cap every 5 hours, and another every week. Halfway through a task, it says I’m out of quota and I just have to wait. Pretty annoying. It also gets stuck when the network is bad. And there are some questions I’d ...

Running AI Video on a Mac mini: Memory Use and Generation Time

M5 Pro 64GB tested with MiniMax-H3: memory peaks, generation time and disk usage

If you’re planning to buy a Mac mini to run local AI, choosing how much memory to get is probably the hardest part. With video models in particular, the download alone is over a hundred GB, so it’s easy to think the machine needs a hundred GB of memory as well. I ran a round of MiniMax-H3 tests ...

Logic Pro Smart Tempo: Matching Non-Standard Recorded Material

Logic Pro Smart Tempo: Matching Non-Standard Recorded Material

In Logic Pro, to make the software’s grid and beats follow exactly a song you recorded with a non-standard tempo (free tempo / recorded without a metronome), the core idea is to let the software adapt to your audio (let the grid follow the audio) rather than forcing your audio straight. The quic...

When AI Mistakes a Bird Outside the Window for a Sloth: Tuning a Raspberry Pi Birding Camera

Using a long-neglected Google AIY Vision Kit to build a local birding camera that snaps photos of birds by itself

I live on the 4th floor, and birds often come and perch outside the window. Sometimes they stay just a few seconds, sometimes they hop back and forth along the railing. I’ve loved watching animal documentaries since I was a kid, and now my kid has inherited that gene too. We both want to know whe...

Building a "Sleepy" Timer for the AC: Home Assistant + HomeKit Field Notes

Starting from "the mini-program can schedule, why can't Home?" — smashing through Apple Home's hidden limits, ending with a "fan"

Summer’s here. When I sleep with the AC on at night, there are two things I dread most: one is running it all night, waking up with my nose stinging from the cold and the meter spinning merrily; the other is wanting to set a timer to turn it off, but this AC of mine has no timer-off function of i...

Making the Loctek E2 Standing Desk Smart: ESP32 + ESPHome + Home Assistant

From the RJ45 hand controller interface to Apple Home: a record of smartifying an ordinary standing desk

I recently connected the Loctek E2 standing desk at home to Home Assistant, and then exposed it to Apple Home. The end result: tap “sit” or “stand” in the Home app, and the desk automatically moves to the sitting or standing memory height. At first this looked like a simple little task: find two...

Ukulele Mixing in Logic Pro: From Thin to Record-Ready

Ukulele Mixing in Logic Pro: From Thin to Record-Ready

Ukulele Mixing in Logic Pro: From “Thin and Dry” to “Record-Ready” Sound Because the ukulele has a small resonating body, recordings often sound thin and dry. How do you dial in a tone that’s both full and solid, yet bright and clear? This article breaks down two approaches: one uses Logic Pro’...

SUNO and Logic Pro Assisted Arrangement: Platform Approval and Mixing SOP

SUNO and Logic Pro Assisted Arrangement: Platform Approval and Mixing SOP

Disclaimer: The following is for music production hobbyists’ reference only. It summarizes my personal experience: assuming I already have original lyrics and composition and sing the vocals myself, I use SUNO and Logic Pro for arrangement assistance and adjust my mixing workflow so I don’t lo...

Building an Always-Online AI Assistant: A Complete Guide to Deploying the PicoClaw Feishu Bot on Raspberry Pi

In this tutorial, we’ll use a Raspberry Pi as a local server, deploy the PicoClaw gateway, and seamlessly connect Feishu to powerful cloud LLMs (such as Volcengine) to build a dedicated, enterprise-grade AI assistant that responds to your commands anytime, anywhere. 1. Hardware Preparation ...

Become Siri: A Raspberry Pi Physical Walkie-Talkie Evolution Guide

Become Siri: A Raspberry Pi Physical Walkie-Talkie Evolution Guide

1. Architecture: Single Source of Truth To build a voice assistant on a severely resource-constrained Raspberry Pi, this design abandons the traditional continuously-listening daemon model and instead adopts a geeky “event-driven + direct CLI calls” architecture. One brain, many endpoints: A...

Reviving and Configuring Google Voice Kit V1 Basic Hardware

Reviving and Configuring Google Voice Kit V1 Basic Hardware

Supported environment: Hardware: Raspberry Pi + Google Voice Kit V1 (Voice HAT expansion board) OS: Raspberry Pi OS (based on Debian Bookworm or newer, kernel 6.x+) 1. Enable the low-level hardware driver The device tree config file on modern Raspberry Pi systems has moved to the /boot/f...

10 Core Tips for Boosting Efficiency in Claude Code

10 Core Tips for Boosting Efficiency in Claude Code

10 Core Tips for Improving Efficiency in Claude Code Claude Code is a powerful CLI tool released by Anthropic. After using it extensively, I’ve summarized the following 10 core tips that can significantly speed up your work. 1. Switch between run modes easily Press shift + tab to quickly switch...

My a6400 HLG Grading Workflow for FCPX

Sony’s straight-out-of-camera colors aren’t pleasing enough, and when grading, you need to handle things differently depending on the mode you chose when shooting. Most online examples use sLog2 or sLog3 for grading; the dynamic range is higher, but there may also be more work to do in post. Mayb...

24/7 Livestreaming with a Raspberry Pi

Recently I wanted to loop the videos from my “10-minute piano practice series” on a live streaming platform, and at first I planned to do it with a cloud server. But the Raspberry Pi that had been gathering dust at home said: “Just leave this to me, and it won’t cost you a cent!” And that’s how t...

For Audiobook Lovers: Convert Ebooks to MP3 with Python

Prerequisites An ebook in .txt format Internet access edge-tts installed $ pip install edge-tts Python 3 installed Basic usage $ edge-tts --text "Hello, world!" --write-media hello.mp3 --write-subtitles hello.vtt For more usage, see Edge-tts Usage. Using Python to split the ebook i...

Quickly Create a Countdown in After Effects

Editing Notes

Reference: After Effects Tutorial - Creating a Countdown Timer Using Expressions Core code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 slider = thisComp.layer("Slider Control").effect("Slider Control")("Slider"); sec = Math.floor(slider%60); min = Math.floor(slider/60); function zero(x) { if (...

Batch merging videos with ffmpeg without rendering

Editing notes

Merging 2 videos (requires rendering) Reference: FFmpeg split video and merge back Suppose 1.mp4 needs all its segments, 2.mp4 needs the segment after 3 seconds, and both audio tracks are kept. Then the following code works. But this method requires re-rendering. [0:v] refers to the vid...

Quickly Create a Metaball Effect in AE

How it works Apply a blur effect to the shape layers so their edges spread outward and partially overlap when the shapes get close; Use a choke effect to determine which edges to keep. When 2 shapes are close, the blurred parts overlap, so those parts are counted as needing to be kept; ...

Exporting Azure Speech on macOS with OBS and Blackhole

Investment Notes

The old Azure demo has been shut down, and the new link has been updated. You can only generate 500 characters at a time. How it works Record the screen with OBS, play back the recognized speech with Azure in Chrome, capture the system audio with Blackhole and pass it on to OBS, then export...

The Purpose of the value Variable in AE Expressions

AE Study Notes

The default value of value In After Effects expressions, value can be used as a default value. If both keyframes and an expression are present, you can add value to the expression, so that an if statement can output either the expression’s result or the keyframe result depending on the case, giv...

Fast Image Hosting Uploads with Amazon S3

When I’m writing in Markdown, I often find myself wanting to add images. But where does the image URL come from? I have to upload it to an online image host first. But every time I want to add an image, I have to open the image hosting site, upload it, then come back — by then I’ve already forgot...

How to Download Blob-Encrypted Videos

Preparation ffmpeg command-line tool Chrome browser Steps On the page with the video you want to download, press F12 to open the developer tools. In Network, find the Request URL ending in m3u8 and copy it; Using a terminal, go into the folder where you want to download the video, a...