chore: rename Stirling-Image to ashim across entire codebase

Complete rebrand from Stirling-Image to ashim following the project
move to https://github.com/ashim-hq/ashim.

Changes across 117 files:
- Package scope: @stirling-image/* → @ashim/*
- GitHub URLs: stirling-image/stirling-image → ashim-hq/ashim
- Docker Hub: stirlingimage/stirling-image → ashimhq/ashim
- GitHub Pages: stirling-image.github.io → ashim-hq.github.io
- All branding text: "Stirling Image" → "ashim"
- Docker service/volumes/user: stirling → ashim
- Database: stirling.db → ashim.db
- localStorage keys: stirling-token → ashim-token
- Environment variables: STIRLING_GPU → ASHIM_GPU
- Python cache dirs: .cache/stirling-image → .cache/ashim
- SVG filter IDs, test prefixes, and all other references
This commit is contained in:
Siddharth Kumar Sah
2026-04-14 20:55:42 +08:00
parent da4411330f
commit 85b1cfc10a
117 changed files with 710 additions and 713 deletions
+10 -10
View File
@@ -2,23 +2,23 @@ import { defineConfig } from "vitepress";
import llmstxt from "vitepress-plugin-llms";
export default defineConfig({
title: "Stirling Image",
description: "Documentation for Stirling Image, a self-hosted image processing suite.",
base: "/stirling-image/",
title: "ashim",
description: "Documentation for ashim, a self-hosted image processing suite.",
base: "/ashim/",
srcDir: ".",
outDir: "./.vitepress/dist",
ignoreDeadLinks: [/localhost/],
head: [
["meta", { name: "theme-color", content: "#3b82f6" }],
["link", { rel: "icon", type: "image/svg+xml", href: "/stirling-image/favicon.svg" }],
["link", { rel: "llms-txt", href: "/stirling-image/llms.txt" }],
["link", { rel: "icon", type: "image/svg+xml", href: "/ashim/favicon.svg" }],
["link", { rel: "llms-txt", href: "/ashim/llms.txt" }],
],
vite: {
plugins: [
llmstxt({
domain: "https://stirling-image.github.io",
domain: "https://ashim-hq.github.io",
customLLMsTxtTemplate: `# {title}
{description}
@@ -41,7 +41,7 @@ export default defineConfig({
## Source
- [GitHub](https://github.com/stirling-image/stirling-image)
- [GitHub](https://github.com/ashim-hq/ashim)
- License: AGPLv3 (commercial license also available)
`,
customTemplateVariables: {
@@ -93,13 +93,13 @@ export default defineConfig({
footer: {
message:
'Released under the <a href="https://github.com/stirling-image/stirling-image/blob/main/LICENSE">AGPLv3 License</a>.',
'Released under the <a href="https://github.com/ashim-hq/ashim/blob/main/LICENSE">AGPLv3 License</a>.',
copyright:
'AI-friendly docs available at <a href="/stirling-image/llms.txt">/llms.txt</a> · <a href="/stirling-image/llms-full.txt">/llms-full.txt</a>',
'AI-friendly docs available at <a href="/ashim/llms.txt">/llms.txt</a> · <a href="/ashim/llms-full.txt">/llms-full.txt</a>',
},
editLink: {
pattern: "https://github.com/stirling-image/stirling-image/edit/main/apps/docs/:path",
pattern: "https://github.com/ashim-hq/ashim/edit/main/apps/docs/:path",
text: "Edit this page on GitHub",
},
},
+2 -2
View File
@@ -2,11 +2,11 @@
import { onMounted, ref } from "vue";
const stars = ref<string | null>(null);
const repo = "https://github.com/stirling-image/stirling-image";
const repo = "https://github.com/ashim-hq/ashim";
onMounted(async () => {
try {
const res = await fetch("https://api.github.com/repos/stirling-image/stirling-image");
const res = await fetch("https://api.github.com/repos/ashim-hq/ashim");
if (!res.ok) return;
const data = await res.json();
const count = data.stargazers_count;
+1 -1
View File
@@ -1,6 +1,6 @@
# AI engine
The `@stirling-image/ai` package wraps Python ML models in TypeScript functions. A persistent Python dispatcher process pre-imports heavy ML libraries at startup and keeps them warm in memory, eliminating the cold-start latency that would otherwise occur on every request. If the dispatcher is unavailable, the bridge falls back to spawning a fresh subprocess per call.
The `@ashim/ai` package wraps Python ML models in TypeScript functions. A persistent Python dispatcher process pre-imports heavy ML libraries at startup and keeps them warm in memory, eliminating the cold-start latency that would otherwise occur on every request. If the dispatcher is unavailable, the bridge falls back to spawning a fresh subprocess per call.
All model weights are bundled in the Docker image during the build. No downloads happen at runtime.
+1 -1
View File
@@ -1,6 +1,6 @@
# Image engine
The `@stirling-image/image-engine` package handles all non-AI image operations. It wraps [Sharp](https://sharp.pixelplumbing.com/) and runs entirely in-process with no external dependencies.
The `@ashim/image-engine` package handles all non-AI image operations. It wraps [Sharp](https://sharp.pixelplumbing.com/) and runs entirely in-process with no external dependencies.
## Operations
+1 -1
View File
@@ -3,7 +3,7 @@
The API server runs on port 1349 by default and serves all endpoints under `/api`.
::: tip Full API Reference
Your Stirling Image instance includes a complete interactive API reference at `/api/docs` (e.g. `http://your-host:1349/api/docs`) with all 80+ endpoints, request/response schemas, and examples.
Your ashim instance includes a complete interactive API reference at `/api/docs` (e.g. `http://your-host:1349/api/docs`) with all 80+ endpoints, request/response schemas, and examples.
:::
::: info LLM-friendly docs
+5 -5
View File
@@ -1,11 +1,11 @@
# Architecture
Stirling Image is a monorepo managed with pnpm workspaces and Turborepo. Everything ships as a single Docker container.
ashim is a monorepo managed with pnpm workspaces and Turborepo. Everything ships as a single Docker container.
## Project structure
```
Stirling-Image/
ashim/
├── apps/
│ ├── api/ # Fastify backend
│ ├── web/ # React + Vite frontend
@@ -19,13 +19,13 @@ Stirling-Image/
## Packages
### `@stirling-image/image-engine`
### `@ashim/image-engine`
The core image processing library built on [Sharp](https://sharp.pixelplumbing.com/). It handles all non-AI operations: resize, crop, rotate, flip, convert, compress, strip metadata, and color adjustments (brightness, contrast, saturation, grayscale, sepia, invert, color channels).
This package has no network dependencies and runs entirely in-process.
### `@stirling-image/ai`
### `@ashim/ai`
A bridge layer that calls Python scripts for ML operations. On first use, the bridge starts a persistent Python dispatcher process that pre-imports heavy libraries (rembg, OpenCV, NumPy) and keeps them warm in memory. Subsequent AI calls skip the import overhead entirely. If the dispatcher is unavailable, the bridge falls back to spawning a fresh Python subprocess per request.
@@ -38,7 +38,7 @@ Supported operations:
Python scripts live in `packages/ai/python/`. The Docker image pre-downloads all model weights during the build so the container works offline.
### `@stirling-image/shared`
### `@ashim/shared`
Shared TypeScript types, constants (like `APP_VERSION` and tool definitions), and i18n translation strings used by both the frontend and backend.
+7 -7
View File
@@ -1,6 +1,6 @@
# Configuration
All configuration is done through environment variables. Every variable has a sensible default, so Stirling Image works out of the box without setting any of them.
All configuration is done through environment variables. Every variable has a sensible default, so ashim works out of the box without setting any of them.
## Environment variables
@@ -24,7 +24,7 @@ All configuration is done through environment variables. Every variable has a se
| Variable | Default | Description |
|---|---|---|
| `STORAGE_MODE` | `local` | `local` or `s3`. Only local storage is currently implemented. |
| `DB_PATH` | `./data/stirling.db` | Path to the SQLite database file. |
| `DB_PATH` | `./data/ashim.db` | Path to the SQLite database file. |
| `WORKSPACE_PATH` | `./tmp/workspace` | Directory for temporary files during processing. Cleaned up automatically. |
| `FILES_STORAGE_PATH` | `./data/files` | Directory for persistent user files (uploaded images, saved results). |
@@ -48,7 +48,7 @@ All configuration is done through environment variables. Every variable has a se
| Variable | Default | Description |
|---|---|---|
| `APP_NAME` | `Stirling Image` | Display name shown in the UI. |
| `APP_NAME` | `ashim` | Display name shown in the UI. |
| `DEFAULT_THEME` | `light` | Default theme for new sessions. `light` or `dark`. |
| `DEFAULT_LOCALE` | `en` | Default interface language. |
@@ -56,13 +56,13 @@ All configuration is done through environment variables. Every variable has a se
```yaml
services:
stirling-image:
image: stirlingimage/stirling-image:latest
ashim:
image: ashimhq/ashim:latest
ports:
- "1349:1349"
volumes:
- stirling-data:/data
- stirling-workspace:/tmp/workspace
- ashim-data:/data
- ashim-workspace:/tmp/workspace
environment:
- AUTH_ENABLED=true
- DEFAULT_USERNAME=admin
+3 -3
View File
@@ -1,8 +1,8 @@
# Database
Stirling Image uses SQLite with [Drizzle ORM](https://orm.drizzle.team/) for data persistence. The schema is defined in `apps/api/src/db/schema.ts`.
ashim uses SQLite with [Drizzle ORM](https://orm.drizzle.team/) for data persistence. The schema is defined in `apps/api/src/db/schema.ts`.
The database file lives at the path set by `DB_PATH` (defaults to `./data/stirling.db`). In Docker, mount the `/data` volume to persist it across container restarts.
The database file lives at the path set by `DB_PATH` (defaults to `./data/ashim.db`). In Docker, mount the `/data` volume to persist it across container restarts.
## Tables
@@ -90,7 +90,7 @@ Key-value store for server-wide settings that admins can change from the UI.
Drizzle handles schema migrations. The config is in `apps/api/drizzle.config.ts`. During development, run:
```bash
pnpm --filter @stirling-image/api drizzle-kit push
pnpm --filter @ashim/api drizzle-kit push
```
In production, the schema is applied automatically on startup.
+11 -11
View File
@@ -1,6 +1,6 @@
# Deployment
Stirling Image ships as a single Docker container. The image supports **linux/amd64** (with NVIDIA CUDA) and **linux/arm64** (CPU), so it runs natively on Intel/AMD servers, Apple Silicon Macs, and ARM devices like the Raspberry Pi 4/5.
ashim ships as a single Docker container. The image supports **linux/amd64** (with NVIDIA CUDA) and **linux/arm64** (CPU), so it runs natively on Intel/AMD servers, Apple Silicon Macs, and ARM devices like the Raspberry Pi 4/5.
See [Docker Image](./docker-tags) for GPU setup, Docker Compose examples, and version pinning.
@@ -8,14 +8,14 @@ See [Docker Image](./docker-tags) for GPU setup, Docker Compose examples, and ve
```yaml
services:
stirling-image:
image: stirlingimage/stirling-image:latest
container_name: stirling-image
ashim:
image: ashimhq/ashim:latest
container_name: ashim
ports:
- "1349:1349"
volumes:
- stirling-data:/data
- stirling-workspace:/tmp/workspace
- ashim-data:/data
- ashim-workspace:/tmp/workspace
environment:
- AUTH_ENABLED=true
- DEFAULT_USERNAME=admin
@@ -23,8 +23,8 @@ services:
restart: unless-stopped
volumes:
stirling-data:
stirling-workspace:
ashim-data:
ashim-workspace:
```
```bash
@@ -81,12 +81,12 @@ The `/data` volume is the important one. Without it, you lose all user accounts
The container includes a health check that hits `GET /api/v1/health`. Docker uses this to report container status:
```bash
docker inspect --format='{{.State.Health.Status}}' stirling-image
docker inspect --format='{{.State.Health.Status}}' ashim
```
## Reverse proxy
If you're running Stirling Image behind nginx or Caddy, point it at port 1349. Example nginx config:
If you're running ashim behind nginx or Caddy, point it at port 1349. Example nginx config:
```nginx
server {
@@ -113,7 +113,7 @@ Set `client_max_body_size` to match your `MAX_UPLOAD_SIZE_MB` value.
The GitHub repository has three workflows:
- **ci.yml** -- Runs automatically on every push and PR. Lints, typechecks, tests, builds, and validates the Docker image (without pushing).
- **release.yml** -- Triggered manually via `workflow_dispatch`. Runs semantic-release to create a version tag and GitHub release, then builds a multi-arch Docker image (amd64 + arm64) and pushes to Docker Hub (`stirlingimage/stirling-image`) and GitHub Container Registry (`ghcr.io/stirling-image/stirling-image`).
- **release.yml** -- Triggered manually via `workflow_dispatch`. Runs semantic-release to create a version tag and GitHub release, then builds a multi-arch Docker image (amd64 + arm64) and pushes to Docker Hub (`ashimhq/ashim`) and GitHub Container Registry (`ghcr.io/ashim-hq/ashim`).
- **deploy-docs.yml** -- Builds this documentation site and deploys it to GitHub Pages on push to `main`.
To create a release, go to **Actions > Release > Run workflow** in the GitHub UI, or run:
+6 -6
View File
@@ -1,6 +1,6 @@
# Developer guide
How to set up a local development environment and contribute code to Stirling Image.
How to set up a local development environment and contribute code to ashim.
## Prerequisites
@@ -14,8 +14,8 @@ Python 3.10+ is only needed if you are working on the AI/ML sidecar (background
## Setup
```bash
git clone https://github.com/stirling-image/stirling-image.git
cd stirling-image
git clone https://github.com/ashim-hq/ashim.git
cd ashim
pnpm install
pnpm dev
```
@@ -72,7 +72,7 @@ pnpm test:coverage # tests with coverage report
## Database
SQLite via Drizzle ORM. The database file lives at `./data/stirling.db` by default.
SQLite via Drizzle ORM. The database file lives at `./data/ashim.db` by default.
```bash
cd apps/api
@@ -195,13 +195,13 @@ Add a `data-testid` attribute to your action button (as shown above) so e2e test
Build the full production image locally:
```bash
docker build -f docker/Dockerfile -t stirling-image:latest .
docker build -f docker/Dockerfile -t ashim:latest .
```
Use BuildKit cache mounts for faster rebuilds:
```bash
DOCKER_BUILDKIT=1 docker build -f docker/Dockerfile -t stirling-image:latest .
DOCKER_BUILDKIT=1 docker build -f docker/Dockerfile -t ashim:latest .
```
## Environment variables
+15 -15
View File
@@ -1,11 +1,11 @@
# Docker Image
Stirling Image ships as a single Docker image that works on all platforms.
ashim ships as a single Docker image that works on all platforms.
## Quick start
```bash
docker run -d -p 1349:1349 -v stirling-data:/data stirlingimage/stirling-image:latest
docker run -d -p 1349:1349 -v ashim-data:/data ashimhq/ashim:latest
```
The app is available at `http://localhost:1349`.
@@ -15,7 +15,7 @@ The app is available at `http://localhost:1349`.
The image includes CUDA support on amd64. If you have an NVIDIA GPU with the [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) installed, add `--gpus all`:
```bash
docker run -d --gpus all -p 1349:1349 -v stirling-data:/data stirlingimage/stirling-image:latest
docker run -d --gpus all -p 1349:1349 -v ashim-data:/data ashimhq/ashim:latest
```
The image auto-detects your GPU at runtime. Without `--gpus all`, it runs on CPU. Same image either way.
@@ -56,13 +56,13 @@ GET /api/v1/admin/health
```yaml
services:
stirling-image:
image: stirlingimage/stirling-image:latest
ashim:
image: ashimhq/ashim:latest
ports:
- "1349:1349"
volumes:
- stirling-data:/data
- stirling-workspace:/tmp/workspace
- ashim-data:/data
- ashim-workspace:/tmp/workspace
restart: unless-stopped
logging:
driver: json-file
@@ -71,21 +71,21 @@ services:
max-file: "3"
volumes:
stirling-data:
stirling-workspace:
ashim-data:
ashim-workspace:
```
For GPU acceleration via Docker Compose, add the deploy section:
```yaml
services:
stirling-image:
image: stirlingimage/stirling-image:latest
ashim:
image: ashimhq/ashim:latest
ports:
- "1349:1349"
volumes:
- stirling-data:/data
- stirling-workspace:/tmp/workspace
- ashim-data:/data
- ashim-workspace:/tmp/workspace
deploy:
resources:
reservations:
@@ -96,8 +96,8 @@ services:
restart: unless-stopped
volumes:
stirling-data:
stirling-workspace:
ashim-data:
ashim-workspace:
```
## Version pinning
+15 -15
View File
@@ -2,14 +2,14 @@
## Run with Docker
The fastest way to get Stirling Image running:
The fastest way to get ashim running:
```bash
docker run -d \
--name stirling-image \
--name ashim \
-p 1349:1349 \
-v stirling-data:/data \
stirlingimage/stirling-image:latest
-v ashim-data:/data \
ashimhq/ashim:latest
```
Open `http://localhost:1349` in your browser. Log in with `admin` / `admin`.
@@ -18,7 +18,7 @@ Open `http://localhost:1349` in your browser. Log in with `admin` / `admin`.
Have an NVIDIA GPU? Add `--gpus all` to accelerate background removal (2.7x), upscaling (3x), and OCR (1.5x):
```bash
docker run -d --gpus all -p 1349:1349 -v stirling-data:/data stirlingimage/stirling-image:latest
docker run -d --gpus all -p 1349:1349 -v ashim-data:/data ashimhq/ashim:latest
```
Requires [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html). Falls back to CPU if no GPU is found. See [Docker Tags](./docker-tags) for details and benchmarks.
@@ -30,14 +30,14 @@ Create a `docker-compose.yml`:
```yaml
services:
stirling-image:
image: stirlingimage/stirling-image:latest
container_name: stirling-image
ashim:
image: ashimhq/ashim:latest
container_name: ashim
ports:
- "1349:1349"
volumes:
- stirling-data:/data
- stirling-workspace:/tmp/workspace
- ashim-data:/data
- ashim-workspace:/tmp/workspace
environment:
- AUTH_ENABLED=true
- DEFAULT_USERNAME=admin
@@ -45,8 +45,8 @@ services:
restart: unless-stopped
volumes:
stirling-data:
stirling-workspace:
ashim-data:
ashim-workspace:
```
```bash
@@ -60,8 +60,8 @@ See [Configuration](./configuration) for the full list of environment variables.
Requirements: Node.js 22+, pnpm 9+, Python 3.10+
```bash
git clone https://github.com/stirling-image/stirling-image.git
cd stirling-image
git clone https://github.com/ashim-hq/ashim.git
cd ashim
pnpm install
```
@@ -86,4 +86,4 @@ Some things to try first:
- Batch process a folder of images through any tool
- Save results to the Files page for later
Every tool is also available through the [REST API](../api/rest), so you can script workflows or plug Stirling Image into other systems.
Every tool is also available through the [REST API](../api/rest), so you can script workflows or plug ashim into other systems.
+1 -1
View File
@@ -1,6 +1,6 @@
# Translation guide
Stirling Image ships with English by default. The i18n system is designed so adding a new language is straightforward. This page walks you through the process.
ashim ships with English by default. The i18n system is designed so adding a new language is straightforward. This page walks you through the process.
## How translations work
+1 -1
View File
@@ -2,7 +2,7 @@
layout: home
hero:
name: "Stirling Image"
name: "ashim"
text: "Self-hosted image processing"
tagline: Resize, compress, convert, remove backgrounds, and more. All on your own server, no data leaves your machine.
actions:
+1 -1
View File
@@ -1,5 +1,5 @@
{
"name": "@stirling-image/docs",
"name": "@ashim/docs",
"version": "1.14.0",
"private": true,
"scripts": {