Skill: omactiengartelle/y2k-aesthetic-generator (version 1.0.0)

--- name: y2k-aesthetic-generator description: Y2K aesthetic generator for nostalgic early-2000s and 2010s throwback photos — recreate the viral '2026 is the new 2016' trend with flash-photography selfies, Snapchat-era looks, low-res iPhone vibes, butterfly clips, frosted makeup, and dreamy mall-photo nostalgia. Perfect for TikTok, Instagram Reels, profile pics, retro fashion moodboards, Y2K party invites, nostalgia core content, and 2000s/2010s aesthetic edits via the Neta AI image generation API (free trial at neta.art/open). tools: Bash --- # Y2K Aesthetic Generator Y2K aesthetic generator for nostalgic early-2000s and 2010s throwback photos — recreate the viral '2026 is the new 2016' trend with flash-photography selfies, Snapchat-era looks, low-res iPhone vibes, butterfly clips, frosted makeup, and dreamy mall-photo nostalgia. Perfect for TikTok, Instagram Reels, profile pics, retro fashion moodboards, Y2K party invites, nostalgia core content, and 2000s/2010s aesthetic edits. ## 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 y2k aesthetic photo generator images. ## Quick start ```bash node y2kaestheticgenerator.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 omactiengartelle/y2k-aesthetic-generator ```

path: README.md
content: # Y2K Aesthetic Generator

Generate nostalgic early-2000s and 2010s throwback images from text descriptions. Recreate the viral "2026 is the new 2016" trend with flash-photography selfies, Snapchat-era looks, low-res iPhone vibes, butterfly clips, frosted makeup, and dreamy mall-photo nostalgia — all from a prompt. Great for TikTok, Instagram Reels, profile pics, retro fashion moodboards, Y2K party invites, and nostalgia-core content.

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

## Install

```bash
npx skills add omactiengartelle/y2k-aesthetic-generator
```

Or via ClawHub:

```bash
clawhub install y2k-aesthetic-generator
```

## Usage

```bash
node y2kaestheticgenerator.js "Y2K aesthetic portrait, butterfly clips, frosted lip gloss, mall photo booth" --token YOUR_TOKEN
```

With a reference image UUID:

```bash
node y2kaestheticgenerator.js "early 2000s flash selfie, low-rise denim" --token YOUR_TOKEN --ref <picture_uuid>
```

Different size:

```bash
node y2kaestheticgenerator.js "2000s digital camera candid pose" --size landscape --token YOUR_TOKEN
```

## Options

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

### Size dimensions

| Size | Dimensions |
| --- | --- |
| `square` | 1024 × 1024 |
| `portrait` | 832 × 1216 |
| `landscape` | 1216 × 832 |
| `tall` | 704 × 1408 |

## 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
```

## Output

Returns a direct image URL.

## Example

```bash
node y2kaestheticgenerator.js "Y2K aesthetic portrait, early 2000s flash, butterfly clips, frosted lip gloss, chunky sneakers, mall photo booth vibe" --token YOUR_TOKEN
```

Returns a direct image URL.



path: package.json
content: name: y2k-aesthetic-generator
version: 1.0.0
type: module
description: Y2K Aesthetic Generator — AI-powered y2k aesthetic photo generator
license: MIT

path: y2kaestheticgenerator.js
content: #!/usr/bin/env node
// Y2K Aesthetic Generator — Neta AI image generation CLI

const DEFAULT_PROMPT = "Y2K aesthetic portrait, early 2000s digital camera flash photography, slightly overblown highlights, low-res nostalgic quality, vibrant saturated colors, butterfly clips, frosted lip gloss, low-rise denim, chunky sneakers, candid pose, 2000s mall photo booth vibe, soft grain, nostalgic dreamy mood";

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

function parseArgs(argv) {
  const args = { prompt: null, size: "portrait", token: null, ref: null };
  const rest = argv.slice(2);
  for (let i = 0; i < rest.length; i++) {
    const a = rest[i];
    if (a === "--size")       { args.size  = rest[++i]; }
    else if (a === "--token") { args.[REDACTED_SECRET]; }
    else if (a === "--ref")   { args.ref   = rest[++i]; }
    else if (a === "--help" || a === "-h") { args.help = true; }
    else if (!a.startsWith("--") && args.prompt === null) { args.prompt = a; }
  }
  return args;
}

function printHelp() {
  console.log(`Y2K Aesthetic Generator

Usage:
  node y2kaestheticgenerator.js "<prompt>" [options]

Options:
  --size <portrait|landscape|square|tall>   Output size (default: portrait)
  --token <TOKEN>                           Neta API token (required)
  --ref <picture_uuid>                      Reference image UUID for style inheritance
  --help, -h                                Show this help

Get a free token at: https://www.neta.art/open/
`);
}

async function createTask({ token, prompt, width, height, ref }) {
  const body = {
    storyId: "DO_NOT_USE",
    jobType: "universal",
    rawPrompt: [{ type: "freetext", value: prompt, weight: 1 }],
    width,
    height,
    meta: { entrance: "PICTURE,VERSE" },
    context_model_series: "8_image_edit",
  };
  if (ref) {
    body.inherit_params = { collection_uuid: ref, picture_uuid: ref };
  }

  const res = await fetch("https://api.talesofai.com/v3/make_image", {
    method: "POST",
    headers: {
      "x-token": token,
      "x-platform": "nieta-app/web",
      "content-type": "application/json",
    },
    body: JSON.stringify(body),
  });

  if (!res.ok) {
    const text = await res.text().catch(() => "");
    throw new Error(`make_image failed: ${res.status} ${res.statusText} ${text}`);
  }

  const ct = res.headers.get("content-type") || "";
  if (ct.includes("application/json")) {
    const data = await res.json();
    if (typeof data === "string") return data;
    if (data && data.task_uuid) return data.task_uuid;
    throw new Error(`Unexpected response: ${JSON.stringify(data)}`);
  }
  const text = (await res.text()).trim().replace(/^"|"$/g, "");
  if (!text) throw new Error("Empty task_uuid response");
  return text;
}

async function pollTask({ token, taskUuid }) {
  const url = `https://api.talesofai.com/v1/artifact/task/${taskUuid}`;
  for (let attempt = 0; attempt < 90; attempt++) {
    await new Promise(r => setTimeout(r, 2000));
    const res = await fetch(url, {
      headers: {
        "x-token": token,
        "x-platform": "nieta-app/web",
        "content-type": "application/json",
      },
    });
    if (!res.ok) continue;
    const data = await res.json();
    const status = data.task_status;
    if (status === "PENDING" || status === "MODERATION") continue;
    const artifactUrl =
      (data.artifacts && data.artifacts[0] && data.artifacts[0].url) ||
      data.result_image_url;
    if (artifactUrl) return artifactUrl;
    throw new Error(`Task ended without image. Status: ${status}. Response: ${JSON.stringify(data)}`);
  }
  throw new Error("Timed out waiting for image (180s)");
}

async function main() {
  const args = parseArgs(process.argv);
  if (args.help) { printHelp(); process.exit(0); }

  const tokenFlag = args.token;
  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);
  }

  const PROMPT = args.prompt || DEFAULT_PROMPT;
  const sizeKey = (args.size || "portrait").toLowerCase();
  const dims = SIZES[sizeKey];
  if (!dims) {
    console.error(`✗ Invalid --size: ${args.size}. Use one of: ${Object.keys(SIZES).join(", ")}`);
    process.exit(1);
  }

  try {
    const taskUuid = await createTask({
      token: TOKEN,
      prompt: PROMPT,
      width: dims.width,
      height: dims.height,
      ref: args.ref,
    });
    const imageUrl = await pollTask({ token: TOKEN, taskUuid });
    console.log(imageUrl);
    process.exit(0);
  } catch (err) {
    console.error(`✗ ${err.message || err}`);
    process.exit(1);
  }
}

main();


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