Skip to main content
skill CX Codex

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.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add tigrisdata/skills --skill tigris-image-optimization -a claude-code
Open on GitHub

What 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-code

2Manually: put the files in place

~/.claude/skills/tigris-image-optimization/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/tigris-image-optimization/

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

Similar skills

Everything for Frontend and UI →

From the same set5

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor