Skip to content
Back to skills

Angora Media

ASecurity

Process images from `inbox/` into the media system — read each image visually to generate alt text under 125 characters, extract dimensions, assign a nanoid filename, move the file to `public/media/`, and insert a row into the `media` table. Trigger whenever the user wants to process, pipeline, ingest, or register images from inbox (jpg, png, webp, avif, gif, svg). Phrases like 'process the photos in inbox', 'pipeline the hero images', 'generate alt text for the screenshots in inbox', 'get th...

  • 6 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added May 28, 2026
designgobashnodegit

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned May 28, 2026

npx -y skills add Aysnc-Labs/angora --skill angora-media --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Angora Media?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Angora Media
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aysnc-labs-angora-media/badge)](https://www.skillsdirectory.com/skills/aysnc-labs-angora-media)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: angora-media
description: Process images from `inbox/` into the media system — read each image visually to generate alt text under 125 characters, extract dimensions, assign a nanoid filename, move the file to `public/media/`, and insert a row into the `media` table. Trigger whenever the user wants to process, pipeline, ingest, or register images from inbox (jpg, png, webp, avif, gif, svg). Phrases like 'process the photos in inbox', 'pipeline the hero images', 'generate alt text for the screenshots in inbox', 'get the product photos into the media table', 'handle the avatars in inbox' all trigger this. Do NOT use for importing CSV/JSON data (→ angora-import).
---

# Media

Process images from the `inbox/` directory into the media system.

## Before you start

1. **Check inbox contents** — list `inbox/` directory. If empty (only `.gitkeep`), report "Inbox is empty. Drop images into `inbox/` and run this again."
2. **Check current media table** — run:
```bash
node -e "
  import db from './src/data/db.ts';
  import { media } from './src/data/schema/tables/media.ts';
  const rows = db.select().from(media).all();
  console.table(rows);
"
```

## Pipeline (for each image)

### 1. Visual analysis

Read the image file with the Read tool (Claude vision). Write alt text:
- Describe what's in the image, under 125 characters
- Don't start with "Image of" or "Photo of"
- Use `alt=""` for purely decorative images (backgrounds, dividers)

### 2. Read dimensions

```bash
node -e "
  import { imageSize } from 'image-size';
  const result = imageSize('inbox/<filename>');
  console.log(JSON.stringify(result));
"
```

Skip for SVGs (scalable — dimensions not meaningful).

### 3. Generate unique filename

```bash
node -e "
  import { nanoid } from 'nanoid';
  console.log(nanoid(8));
"
```

Preserve the original extension. Result: `V1StGXR8.jpg`

### 4. Move file

```bash
mv inbox/<original> public/media/<nanoid>.<ext>
```

### 5. Insert into media table

```bash
node -e "
  import db from './src/data/db.ts';
  import { media } from './src/data/schema/tables/media.ts';
  db.insert(media).values({
    path: 'media/<nanoid>.<ext>',
    alt: '<alt text>',
    type: 'image',
    width: <width>,
    height: <height>,
    sourceName: '<original filename>',
  }).run();
  console.log('Inserted.');
"
```

### 6. Summary table

After processing all images, show a summary:

| Original | New path | Dimensions | Alt text |
|----------|----------|------------|----------|
| hero-bg.jpg | media/V1StGXR8.jpg | 1920x1080 | Dark gradient background with subtle grid pattern |

## Rules

- **Supported types:** jpg, jpeg, png, gif, webp, avif, svg
- **SVGs:** skip dimension reading (scalable), set type to `svg`
- **Never delete inbox files without explicit permission** — ask after processing
- **Skip non-image files** — report them: "Found non-image files: [list]. These can be processed with the import skill (`/angora-import`)."
- Process images one at a time to ensure accuracy of alt text

Files in this skill

  • SKILL.md3 KB
  • evals/trigger-eval.json1.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.