~ / cmdr2

projects: freebird, easy diffusion

hacks: carbon editor, torchruntime, findstarlink

  # filter by: [ posts | worklogs ]
  • #tensorRT
  • #torch
  • #easydiffusion
  • #ggml
  • #cuda
  • #vulkan

// Cross-posted from Easy Diffusion’s blog. Experimented with TensorRT-RTX (a new library offered by NVIDIA). The first step was a tiny toy model, just to get the build and test setup working. The reference model in PyTorch: import torch import torch.nn as nn class TinyCNN(nn.Module): def __init__(self): super().__init__() self.conv = nn.Conv2d(3, 8, 3, stride=1, padding=1) self.relu = nn.ReLU() self.pool = nn.AdaptiveAvgPool2d((1, 1)) self.fc = nn.Linear(8, 4) # 4-class toy output def forward(self, x): x = self.relu(self.conv(x)) x = self.pool(x).flatten(1) return self.fc(x)I ran this on a NVIDIA 4060 8 GB (Laptop) for 10K iterations, on Windows and WSL-with-Ubuntu, with float32 data.

  • #blog-agent

Finished setting up multi-project outputs in blog-agent. I can now write posts and worklogs using my long-standing setup (plain text files in my Dropbox folder, rolled-over monthly), and blog-agent will publish them on their respective project blogs based on the tags. Posts tagged with #freebird will get posted on Freebird’s blog. And posts tagged with #easydiffusion or #sdkit will get posted on Easy Diffusion’s blog. Everything will also get cross-posted on my personal blog.

  • #github
  • #s3
  • #lambda

Edit: This script has been replaced by https://github.com/cmdr2/github-actions-wizard Wrote a simple utility script for quickly setting up deployments to S3 or Lambda via a GitHub Action. Gist: https://gist.github.com/cmdr2/7261109b0e214942f1c7864024a6daa1 It’ll create the required IAM Role and Policy automatically, and generate a workflow yaml inside your git repository. Run github-deploy-setup inside your git repository.

  • #blog-agent

Migrated cmdr2.org to GitHub Pages (with Hugo). This replaces my custom static-site generator. Added a #worklog tag filter on my blog, so that I can start posting worklogs without worrying about spamming the main feed. Updated blog-agent to work with multiple publish destinations and projects, e.g. publishing Easy Diffusion-related posts to ED’s github repo etc.

  • #carbon
  • #programming
  • #ide
  • #editor

I often write code on the go (for e.g. on bus rides), mainly prototyping ideas as single-page HTML/CSS/JS. I’ve used code editor apps as well as developer keyboards on mobile phones, but none of them really clicked for me. So I built something for myself: a simple browser-based code editor, optimized specifically for mobile devices. It lives at https://me.cmdr2.org/carbon (GitHub repo), runs entirely in the browser, and stores your work locally.

  • #freebird

// Cross-posted from Freebird’s blog. Updates from June 2025 Note: Freebird is free for students! If you’re a student at a school or college, please feel free to email or message me for a free copy! June 2025 marked a restart of the Freebird project, after a few months of maintenance-only fixes. Reliability My focus in June was on improving Freebird’s reliability. A number of long-standing critical bugs have been fixed, broken features have been repaired, and missing documentation has been updated. Basically, anything that crashed Freebird (or was urgently broken) was considered as an immediate priority.

  • #easydiffusion
  • #blog

// Cross-posted from Easy Diffusion’s blog. Development update for Easy Diffusion - It’s chugging along in starts and stops. Broadly, there are three tracks: Maintenance: The past few months have seen increased support for AMD, Intel and integrated GPUs. This includes AMD on Windows. Added support for the new AMD 9060/9070 cards last week, and the new NVIDIA 50xx cards in March. Flux to the main branch / release v3.5 to stable: Right now, Flux / v3.5 still requires you to enable ED beta first. And then install Forge. Last week I got Flux working in our main engine (with decent rendering speed). It still needs more work to support all the different models formats for Flux. Using Forge was a temporary arrangement, until Flux worked in our main engine.

  • #vr
  • #dom
  • #webxr

Experimented with an idea for extending HTML/CSS/JS to define 3D scenes, treating a 3D scene as just a depth extension of the DOM model. This explores a syntax for defining a 3D scene in a web browser (especially for VR), without WebXR boilerplate and handling XR controller inputs as first-class browser events. I’ll explore a polyfill to support this on existing WebXR-compliant browsers. My previous attempt at this idea (back in 2014) didn’t go so well. At that point, I hadn’t built any VR experiences, and the syntax I came up with wasn’t very practical or productive (at creating anything beyond toy-sized scenes). I’m curious to see if I can do better this time, as most of my work since then has been about building VR experiences.

  • #ggml

Spent the last few days refactoring ggml-cpu.c in ggml. The ggml-cpu.c file is currently a monolith with around 15,000 lines of code, and needs to be refactored into separate files and de-duplicated using C++ function templates. The first part of that refactoring was pushed earlier today - https://github.com/ggml-org/ggml/pull/1144 I also worked on the next two PRs - one that splits SIMD Mapping definitions and vectorized functions into separate files, and another that moves all the operator functions (except mul_mat) into a separate C++ file. I tested the combined effect of these two PRs, and it successfully passed the runners on ggml-ci. These two PRs will shrink ggml-cpu.c to around 5k lines (down from 15k lines right now).

  • #easydiffusion

// Cross-posted from Easy Diffusion’s blog. Upgraded the default version of Easy Diffusion to Python 3.9. Newer versions of torch don’t support Python 3.8, so this became urgent after the release of NVIDIA’s 50xx series GPUs. I choose 3.9 as a temporary fix (instead of a newer Python version), since it had the least amount of package conflicts. The future direction of Easy Diffusion’s backend is unclear right now - there are a bunch of possible paths. So I didn’t want to spend too much time on this. I also wanted to minimize the risk to existing users.