Skill: blammectrappora/steampunk-art-generator (version 1.0.0)

--- name: steampunk-art-generator description: AI steampunk art generator — create Victorian steampunk portraits, cyberpunk Victorian characters, brass-and-gears illustrations, cosplay reference art, and industrial fantasy scenes. Perfect for steampunk fans, cosplayers, worldbuilders, and retro-futuristic art lovers via the Neta AI image generation API (free trial at neta.art/open). tools: Bash --- # Steampunk Art Generator AI steampunk art generator — create Victorian steampunk portraits, cyberpunk Victorian characters, brass-and-gears illustrations, cosplay reference art, and industrial fantasy scenes. Perfect for steampunk fans, cosplayers, worldbuilders, and retro-futuristic art lovers. ## Token Requires a Neta API token (free trial at <https://www.neta.art/open/>). Pass it via the `--token` flag. ```bash node <script> "your prompt" --token YOUR_TOKEN ``` ## When to use Use when someone asks to generate or create steampunk art generator images. ## Quick start ```bash node steampunkartgenerator.js "your description here" --token YOUR_TOKEN ``` ## Options - `--size` — `portrait`, `landscape`, `square`, `tall` (default: `portrait`) - `--ref` — reference image UUID for style inheritance ## Install ```bash npx skills add blammectrappora/steampunk-art-generator ```

path: README.md
content: # Steampunk Art Generator

Generate stunning steampunk artwork from text descriptions — Victorian portraits with brass gears, clockwork machinery, ornate goggles, leather-and-copper aesthetics, and industrial fantasy scenes. Describe your vision and receive a high-quality AI-generated image in seconds.

Powered by the Neta AI image generation API (api.talesofai.com) — the same service as neta.art/open.

---

## Install

**Via npx skills:**
```bash
npx skills add blammectrappora/steampunk-art-generator
```

**Via ClawHub:**
```bash
clawhub install steampunk-art-generator
```

---

## Token Setup

This skill requires a Neta API token (free trial available at <https://www.neta.art/open/>).

Pass it via the `--token` flag:

```bash
node <script> "your prompt" --token YOUR_TOKEN
```

## Usage Examples

**Default steampunk portrait:**
```bash
node steampunkartgenerator.js "steampunk inventor with clockwork arm" --token "$NETA_TOKEN"
```

**Landscape scene:**
```bash
node steampunkartgenerator.js "steampunk city skyline with airships and factory smokestacks" --token "$NETA_TOKEN" --size landscape
```

**Tall portrait format:**
```bash
node steampunkartgenerator.js "Victorian lady with ornate brass goggles and corset, steampunk fashion" --token "$NETA_TOKEN" --size tall
```

**Square format:**
```bash
node steampunkartgenerator.js "steampunk clockwork cat, mechanical gears, copper and bronze" --token "$NETA_TOKEN" --size square
```

**With style reference:**
```bash
node steampunkartgenerator.js "steampunk knight in full brass armor" --token "$NETA_TOKEN" --ref <picture_uuid>
```

**Output:** Returns a direct image URL.

---

## Options

| Flag | Values | Default | Description |
|------|--------|---------|-------------|
| `--token` | string | *(required)* | Your Neta API token |
| `--size` | `portrait`, `landscape`, `square`, `tall` | `portrait` | Output image dimensions |
| `--ref` | UUID string | *(none)* | Reference image UUID for style inheritance |

### Size dimensions

| Size | Width | Height |
|------|-------|--------|
| `portrait` | 832 | 1216 |
| `landscape` | 1216 | 832 |
| `square` | 1024 | 1024 |
| `tall` | 704 | 1408 |

---

## Prompt Tips

- Be descriptive: include materials (brass, copper, leather), lighting (gaslight, candlelight), and mood (dramatic, mysterious)
- Mention specific steampunk elements: clockwork gears, steam engines, airships, top hats, goggles, mechanical limbs
- Add era details: Victorian, Edwardian, industrial revolution
- Include artistic style cues: cinematic, illustration, oil painting, concept art

**Example prompts:**
- `"steampunk explorer, pith helmet with brass compass, leather coat covered in pockets and gadgets, dramatic lighting"`
- `"steampunk laboratory interior, bubbling alchemical apparatus, copper pipes and gauges, warm amber gaslight"`
- `"Victorian steampunk duchess, elaborate clockwork jewelry, silk and gears, aristocratic setting"`



path: package.json
content: name: steampunk-art-generator
version: 1.0.0
type: module
description: Steampunk Art Generator — AI-powered steampunk art generator ai
license: MIT

path: steampunkartgenerator.js
content: #!/usr/bin/env node
// Steampunk Art Generator — powered by Neta AI (api.talesofai.com)

const args = process.argv.slice(2);

// Parse CLI arguments
let prompt = null;
let size = 'portrait';
let tokenFlag = null;
let refUuid = null;

for (let i = 0; i < args.length; i++) {
  if (args[i] === '--token' && args[i + 1]) {
    tokenFlag = args[++i];
  } else if (args[i] === '--size' && args[i + 1]) {
    size = args[++i];
  } else if (args[i] === '--ref' && args[i + 1]) {
    refUuid = args[++i];
  } else if (!args[i].startsWith('--') && prompt === null) {
    prompt = args[i];
  }
}

const [REDACTED_SECRET];

if (!TOKEN) {
  console.error('\n✗ Token required. Pass via: --token YOUR_TOKEN');
  console.error('  Get yours at: https://www.neta.art/open/');
  process.exit(1);
}

if (!prompt) {
  prompt = 'steampunk portrait, Victorian era brass gears and clockwork machinery, leather and copper aesthetic, ornate goggles, steam-powered devices, industrial fantasy, dramatic gaslight lighting, detailed mechanical embellishments, rich warm tones';
}

const SIZES = {
  square:    { width: 1024, height: 1024 },
  portrait:  { width: 832,  height: 1216 },
  landscape: { width: 1216, height: 832  },
  tall:      { width: 704,  height: 1408 },
};

const dims = SIZES[size] ?? SIZES.portrait;

const HEADERS = {
  'x-token': TOKEN,
  'x-platform': 'nieta-app/web',
  'content-type': 'application/json',
};

async function makeImage() {
  const body = {
    storyId: 'DO_NOT_USE',
    jobType: 'universal',
    rawPrompt: [{ type: 'freetext', value: prompt, weight: 1 }],
    width: dims.width,
    height: dims.height,
    meta: { entrance: 'PICTURE,VERSE' },
    context_model_series: '8_image_edit',
  };

  if (refUuid) {
    body.inherit_params = {
      collection_uuid: refUuid,
      picture_uuid: refUuid,
    };
  }

  const res = await fetch('https://api.talesofai.com/v3/make_image', {
    method: 'POST',
    headers: HEADERS,
    body: JSON.stringify(body),
  });

  if (!res.ok) {
    const text = await res.text();
    console.error(`✗ Image request failed (${res.status}): ${text}`);
    process.exit(1);
  }

  const data = await res.json();
  const taskUuid = typeof data === 'string' ? data : data.task_uuid;

  if (!taskUuid) {
    console.error('✗ No task_uuid in response:', JSON.stringify(data));
    process.exit(1);
  }

  console.error(`Generating image (task: ${taskUuid})...`);

  // Poll for result
  const MAX_ATTEMPTS = 90;
  const POLL_INTERVAL_MS = 2000;

  for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
    await new Promise(r => setTimeout(r, POLL_INTERVAL_MS));

    const pollRes = await fetch(`https://api.talesofai.com/v1/artifact/task/${taskUuid}`, {
      headers: HEADERS,
    });

    if (!pollRes.ok) {
      console.error(`✗ Poll failed (${pollRes.status})`);
      process.exit(1);
    }

    const result = await pollRes.json();
    const status = result.task_status;

    if (status === 'PENDING' || status === 'MODERATION') {
      process.stderr.write('.');
      continue;
    }

    // Done
    process.stderr.write('\n');
    const url =
      result.artifacts?.[0]?.url ??
      result.result_image_url;

    if (!url) {
      console.error('✗ No image URL in result:', JSON.stringify(result));
      process.exit(1);
    }

    console.log(url);
    process.exit(0);
  }

  console.error('\n✗ Timed out waiting for image generation.');
  process.exit(1);
}

makeImage().catch(err => {
  console.error('✗ Unexpected error:', err.message);
  process.exit(1);
});


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)