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

--- name: texture-art-generator description: Generate stunning satisfying texture art and hyperrealistic material images — glass, crystal, liquid, jelly, wax, soap, and iridescent surfaces captured in breathtaking macro detail. Perfect for ASMR content creators, product design backgrounds, Instagram aesthetics, TikTok visual content, and short-form video thumbnails. Also known as material art generator, surface texture art, and macro texture photography via the Neta AI image generation API (free trial at neta.art/open). tools: Bash --- # Texture Art Generator Generate stunning satisfying texture art and hyperrealistic material images — glass, crystal, liquid, jelly, wax, soap, and iridescent surfaces captured in breathtaking macro detail. Perfect for ASMR content creators, product design backgrounds, Instagram aesthetics, TikTok visual content, and short-form video thumbnails. Also known as material art generator, surface texture art, and macro texture photography. ## 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 satisfying texture art generator images. ## Quick start ```bash node textureartgenerator.js "your description here" --token YOUR_TOKEN ``` ## Options - `--size` — `portrait`, `landscape`, `square`, `tall` (default: `square`) - `--ref` — reference image UUID for style inheritance ## Install ```bash npx skills add blammectrappora/texture-art-generator ```

path: README.md
content: # Texture Art Generator

Generate stunning satisfying texture art and hyperrealistic material images from text descriptions — glass, crystal, liquid jelly, melted wax, soap bubbles, and iridescent surfaces captured in breathtaking macro detail. Perfect for ASMR content creators, product design backgrounds, Instagram aesthetics, TikTok visual content, and short-form video thumbnails.

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

## Install

```bash
npx skills add blammectrappora/texture-art-generator
```

```bash
clawhub install texture-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

```bash
node textureartgenerator.js "prompt describing the texture" --token YOUR_TOKEN [--size SIZE] [--ref UUID]
```

If no prompt is supplied, a built-in default prompt is used:

> hyperrealistic macro photograph of a satisfying texture surface — glass crystal, iridescent liquid jelly, melted wax, soap bubble, or shimmering material — studio lighting, ultra-detailed microscopic surface detail, ASMR aesthetic, clean minimalist background, sharp focus

## Options

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

### Size dimensions

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

## Examples

**Default satisfying texture (square):**
```bash
node textureartgenerator.js --token "$NETA_TOKEN"
```

**Iridescent soap bubble macro:**
```bash
node textureartgenerator.js "extreme closeup of a soap bubble surface, rainbow iridescent film, bokeh background, ultra-sharp" --token "$NETA_TOKEN"
```

**Melted wax texture, portrait:**
```bash
node textureartgenerator.js "melted candle wax pooling, warm amber tones, macro photography, glossy surface reflections" --token "$NETA_TOKEN" --size portrait
```

**Crystal glass refraction:**
```bash
node textureartgenerator.js "cracked crystal glass surface, light refractions, prismatic spectrum, studio light" --token "$NETA_TOKEN" --size landscape
```

**With style reference:**
```bash
node textureartgenerator.js "liquid mercury ripple surface" --token "$NETA_TOKEN" --ref xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```

## Output

Returns a direct image URL printed to stdout. Progress messages are written to stderr so you can pipe the URL directly:

```bash
URL=$(node textureartgenerator.js "jelly cube macro" --token "$NETA_TOKEN")
echo "Image ready: $URL"
```

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


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

path: textureartgenerator.js
content: #!/usr/bin/env node
// Texture Art Generator — generates satisfying texture art via Neta AI API

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

// Parse CLI arguments
let prompt = null;
let size = 'square';
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 = 'hyperrealistic macro photograph of a satisfying texture surface — glass crystal, iridescent liquid jelly, melted wax, soap bubble, or shimmering material — studio lighting, ultra-detailed microscopic surface detail, ASMR aesthetic, clean minimalist background, sharp focus';
}

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.square;

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

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 };
}

async function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function main() {
  // Submit job
  const submitRes = await fetch('https://api.talesofai.com/v3/make_image', {
    method: 'POST',
    headers: HEADERS,
    body: JSON.stringify(body),
  });

  if (!submitRes.ok) {
    const text = await submitRes.text();
    console.error(`✗ Failed to submit job (${submitRes.status}): ${text}`);
    process.exit(1);
  }

  const submitData = await submitRes.json();
  const taskUuid = typeof submitData === 'string' ? submitData : submitData.task_uuid;

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

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

  // Poll for result
  const MAX_ATTEMPTS = 90;
  for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
    await sleep(2000);

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

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

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

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

    // Done
    process.stderr.write('\n');

    const url =
      pollData.artifacts?.[0]?.url ??
      pollData.result_image_url;

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

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

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

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


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