Skill: blammectrappora/manga-panel-generator (version 1.0.0)

--- name: manga-panel-generator description: Generate professional black-and-white manga panels and comic pages with dynamic poses, screentones, and authentic Japanese manga art style. Perfect for manga artists, doujinshi creators, webtoon storyboards, comic writers, and anime fans who want to illustrate scenes, action sequences, or character moments in classic shonen, shojo, or seinen manga aesthetics via the Neta AI image generation API (free trial at neta.art/open). tools: Bash --- # Manga Panel Generator Generate professional black-and-white manga panels and comic pages with dynamic poses, screentones, and authentic Japanese manga art style. Perfect for manga artists, doujinshi creators, webtoon storyboards, comic writers, and anime fans who want to illustrate scenes, action sequences, or character moments in classic shonen, shojo, or seinen manga aesthetics. ## 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 manga panel generator images. ## Quick start ```bash node mangapanelgenerator.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/manga-panel-generator ```

path: README.md
content: # Manga Panel Generator

Generate professional black-and-white manga panels and full comic pages from text descriptions — complete with dynamic poses, screentone shading, expressive action lines, and authentic Japanese manga art style. Ideal for manga artists, doujinshi creators, webtoon storyboarders, comic writers, and anime fans who want to illustrate scenes, action sequences, or character moments in classic shonen, shojo, or seinen aesthetics directly from a written prompt.

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

## Install

With ClawHub:

```bash
npx skills add blammectrappora/manga-panel-generator
```

Or via the ClawHub CLI:

```bash
clawhub install manga-panel-generator
```

## Usage

```bash
node mangapanelgenerator.js "your manga scene description" --token YOUR_TOKEN
```

### Examples

Generate a default manga panel:

```bash
node mangapanelgenerator.js "a young swordsman leaping through the air, sword mid-swing, wind lines swirling" --token YOUR_TOKEN
```

Generate a landscape panel with a reference image:

```bash
node mangapanelgenerator.js "two rivals facing off on a rooftop at sunset" \
  --size landscape \
  --ref 123e4567-e89b-12d3-a456-426614174000 \
  --token YOUR_TOKEN
```

Generate a tall vertical webtoon-style panel:

```bash
node mangapanelgenerator.js "school girl looking out a classroom window, cherry blossoms falling" \
  --size tall \
  --token YOUR_TOKEN
```

## Options

| Flag | Description | Default |
|------|-------------|---------|
| (positional) | Prompt describing the manga panel to generate | Built-in manga panel prompt |
| `--size` | Output size: `portrait` (832×1216), `landscape` (1216×832), `square` (1024×1024), `tall` (704×1408) | `portrait` |
| `--token` | Neta API token (required) | — |
| `--ref` | Reference image UUID for style inheritance | — |

## Output

Returns a direct image URL.

## Token setup

This skill requires a Neta API token. Pass it on the command line with the `--token` flag:

```bash
node mangapanelgenerator.js "your prompt" --token YOUR_TOKEN
```

You can also expand a shell variable into the flag:

```bash
node mangapanelgenerator.js "your prompt" --token "$NETA_TOKEN"
```

Get a free trial token at <https://www.neta.art/open/>.



path: mangapanelgenerator.js
content: #!/usr/bin/env node
// Manga Panel Generator — generate manga panels via Neta AI image generation API.

const DEFAULT_PROMPT = "black and white manga panel, dynamic composition, screentone shading, expressive character with action lines, speech bubble placeholders, dramatic angle, crisp ink linework, Japanese manga art style";

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);
  const positional = [];
  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 positional.push(a);
  }
  if (positional.length > 0) args.prompt = positional.join(" ");
  return args;
}

async function makeImage({ token, prompt, size, ref }) {
  const dims = SIZES[size] || SIZES.portrait;
  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 (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();
    throw new Error(`make_image failed: ${res.status} ${text}`);
  }

  const contentType = res.headers.get("content-type") || "";
  let taskUuid;
  if (contentType.includes("application/json")) {
    const json = await res.json();
    if (typeof json === "string") taskUuid = json;
    else if (json && typeof json === "object") taskUuid = json.task_uuid || json.taskUuid;
  } else {
    const text = (await res.text()).trim();
    try {
      const parsed = JSON.parse(text);
      if (typeof parsed === "string") taskUuid = parsed;
      else if (parsed && typeof parsed === "object") taskUuid = parsed.task_uuid || parsed.taskUuid;
    } catch {
      taskUuid = text.replace(/^"|"$/g, "");
    }
  }

  if (!taskUuid) throw new Error("No task_uuid returned from make_image");
  return taskUuid;
}

async function pollTask(token, taskUuid) {
  const maxAttempts = 90;
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
    await new Promise((r) => setTimeout(r, 2000));

    const res = await fetch(`https://api.talesofai.com/v1/artifact/task/${taskUuid}`, {
      method: "GET",
      headers: {
        "x-token": token,
        "x-platform": "nieta-app/web",
        "content-type": "application/json",
      },
    });

    if (!res.ok) {
      const text = await res.text();
      throw new Error(`poll failed: ${res.status} ${text}`);
    }

    const data = await res.json();
    const status = data.task_status;

    if (status === "PENDING" || status === "MODERATION") continue;

    const url =
      (data.artifacts && data.artifacts[0] && data.artifacts[0].url) ||
      data.result_image_url;
    if (url) return url;
    throw new Error(`Task finished with status ${status} but no image URL: ${JSON.stringify(data)}`);
  }
  throw new Error("Timed out waiting for image generation");
}

async function main() {
  const args = parseArgs(process.argv);
  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 size = args.size || "portrait";

  try {
    const taskUuid = await makeImage({ token: TOKEN, prompt, size, ref: args.ref });
    const url = await pollTask(TOKEN, taskUuid);
    console.log(url);
    process.exit(0);
  } catch (err) {
    console.error(`\n✗ ${err.message}`);
    process.exit(1);
  }
}

main();


path: package.json
content: name: manga-panel-generator
version: 1.0.0
type: module
description: Manga Panel Generator — AI-powered manga panel generator ai
license: MIT

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