tigris-image-optimization — Claude Code skill: resize and CDN
A skill for images stored in Tigris: it builds variants at upload time, serves them from a public bucket and points you to the right framework guide.
npx skills add tigrisdata/skills --skill tigris-image-optimization -a claude-codeWhat tigris-image-optimization does
The skill lays out three ways to handle images and says when each one fits. Process on upload for sizes you already know: avatar, thumbnail, cover. Process on request when variations are many. Client-side resize to keep the full file off your server. It recommends starting with the first, storing every variant as its own object such as avatars/user-123-thumb.jpg.
Six framework guides sit inside, one file each: ./resources/nextjs.md, remix.md, express.md, rails.md, django.md, laravel.md. Next.js gets next/image config and Sharp processing, Express gets Sharp middleware with Multer, Rails gets Active Storage variants, Django gets django-imagekit and Pillow, Laravel gets Intervention Image. Nothing extra to install — the skill reads the file that matches the stack you ask about.
Delivery runs through Tigris public buckets, so there is no separate CDN to wire up. The rules are blunt: images users see need access: "public", otherwise the CDN stays off. They also require an explicit contentType and push WebP or AVIF. This is where people slip — if you serve thumbnails but store only originals, the skill calls that out as a mistake. Content-hashed names like hero-abc123.jpg can take a long cache, mutable paths need a shorter TTL or ETags.
What it helps with
- cut thumbnails and covers at upload time
- serve responsive images across screen widths
- move a project to WebP or AVIF without manual work
- attach a CDN to images without a separate service
- set up Active Storage variants or django-imagekit
Example prompts for the agent
- Add upload-time image processing with Tigris: 100x100 and 400x400 thumbnails
- Show me how to wire next/image with Sharp for images in Tigris
- Build an Express middleware that resizes with Sharp and Multer
How to install tigris-image-optimization
1Skills CLI (Vercel)
npx skills add tigrisdata/skills --skill tigris-image-optimization -a claude-code2Manually: put the files in place
~/.claude/skills/tigris-image-optimization/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/tigris-image-optimization/
1Skills CLI (Vercel)
npx skills add tigrisdata/skills --skill tigris-image-optimization -a codex2Manually: put the files in place
.agents/skills/tigris-image-optimization/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add tigrisdata/skills --skill tigris-image-optimization -a cursor2Manually: put the files in place
.cursor/skills/tigris-image-optimization/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install tigrisdata/skills tigris-image-optimization2Manually: put the files in place
.github/skills/tigris-image-optimization/SKILL.md1Skills CLI (Vercel)
npx skills add tigrisdata/skills --skill tigris-image-optimization -a gemini-cli2Platform CLI
gemini skills install https://github.com/tigrisdata/skills --path skills/tigris-image-optimizationManually: put the files in place
.devin/skills/tigris-image-optimization/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add tigrisdata/skills --skill tigris-image-optimization -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about tigris-image-optimization
How do I install tigris-image-optimization in Claude?
Run npx skills add tigrisdata/skills --skill tigris-image-optimization -a claude-code. The skill file lands at ~/.claude/skills/tigris-image-optimization/SKILL.md.
What does tigris-image-optimization do?
It helps you resize, crop and optimize images stored in Tigris: thumbnail generation on upload, responsive delivery, cache headers. Next.js, Remix, Express, Rails, Django and Laravel each get their own guide.
Do I need a separate CDN?
No. Tigris public buckets serve files from the nearest global edge on their own, but only when the object carries access: "public".
Source text
SKILL.md · MIT
---
name: tigris-image-optimization
description: Use when resizing images, generating thumbnails, serving responsive images, or optimizing image delivery with Tigris — covers Next.js, Remix, Rails, Django, Laravel, Express
---
# Tigris Image Optimization
Resize, crop, and optimize images stored in Tigris. Generate thumbnails on upload, serve responsive images, and leverage Tigris's global CDN for fast delivery.
## Strategy Overview
| Approach | When to Use | Pros | Cons |
|----------|------------|------|------|
| Process on upload | Thumbnails, fixed sizes | Fast serving, predictable | Storage cost per variant |
| Process on request | Many size variations | Flexible, less storage | Latency on first request |
| Client-side resize | Before upload | Saves bandwidth, fast upload | Less control over quality |
**Recommended:** Process on upload for known sizes (avatar, thumbnail, cover). Use public buckets for CDN delivery — Tigris serves public files from the nearest global edge automatically.
---
## Upload-Time Processing (General Pattern)
Generate variants when a file is uploaded, store each variant as a separate object:
```
avatars/user-123.jpg # original
avatars/user-123-thumb.jpg # 100x100
avatars/user-123-medium.jpg # 400x400
avatars/user-123-large.jpg # 800x800
```
Use `access: "public"` for images that need fast, CDN-backed delivery.
---
## Framework Guides
Read the resource file for your framework:
- **Next.js** — Read `./resources/nextjs.md` for next/image config and Sharp processing
- **Remix** — Read `./resources/remix.md` for Sharp in action functions and responsive srcset
- **Express** — Read `./resources/express.md` for Sharp middleware with Multer
- **Rails** — Read `./resources/rails.md` for Active Storage variants
- **Django** — Read `./resources/django.md` for django-imagekit and Pillow processing
- **Laravel** — Read `./resources/laravel.md` for Intervention Image
---
## CDN Delivery
Tigris public buckets serve files from the nearest global edge — no separate CDN setup needed.
**Cache headers for images:**
```typescript
await put("images/hero.jpg", buffer, {
access: "public",
contentType: "image/jpeg",
});
```
For immutable content-hashed filenames (e.g., `hero-abc123.jpg`), use long cache times. For mutable paths, use shorter TTLs or ETags.
---
## Critical Rules
**Always:** Use `access: "public"` for images served to users (enables CDN) | Generate thumbnails at upload time for known sizes | Use WebP/AVIF for smaller file sizes | Set explicit `contentType`
**Never:** Process images on every request without caching | Store only originals if you always serve thumbnails | Resize in the browser after downloading full-size images
---
## Related Skills
- **tigris-file-uploads** — Full upload patterns per framework
- **tigris-egress-optimizer** — Reduce bandwidth costs from image serving
## Official Documentation
- Tigris SDK: https://www.tigrisdata.com/docs/sdks/tigris/
- Sharp: https://sharp.pixelplumbing.com/
© tigrisdata · MIT · tigrisdata/skills