diff --git a/.gitignore b/.gitignore index 7cd5d55..9277c4b 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,11 @@ out/ # Generated contact sheets (preview.py, $PREVIEW_OUT defaults to preview/) preview/ +# Early PixelLab experiment outputs (the library build itself lives in pixellab_src/, parts_pl*/) +pixellab_out/ +# Cross-process API job lock (pixellab_api.py) +pixellab_src/.api.lock + # Scratch reports size_changes.txt diff --git a/README.md b/README.md index 6344c6d..8b2a0ef 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,13 @@ # sprite_gen -Procedural 96x96 creature sprites for businesses. You give it a business name and logo. It picks a type, builds a creature from parts and recolors it with the logo's brand colors. +Procedural creature sprites for businesses. You give it a business name and logo. It picks a type, builds a creature from parts and recolors it with the logo's brand colors. + +There are two part libraries: + +| Library | Size | Art | Registry | +|---|---|---|---| +| `pixellab` (default) | 64x64 | Generated with [PixelLab](https://pixellab.ai), see [PixelLab library](#pixellab-library) | `sprite_parts_pl.py` + `pixellab_library/*.json` | +| `classic` | 96x96 | Hand-written text grids | `sprite_parts.py` | ## Setup @@ -27,9 +34,12 @@ python generate_sprite.py "Rosas Landscaping" --type grass --colors "#2E7D32,#FB # A different creature for the same business python generate_sprite.py "Rosas Landscaping" logos/rosas.png --type grass --reroll 1 + +# Both libraries side by side +python generate_sprite.py "Rosas Landscaping" logos/rosas.png --type grass --compare ``` -Each run writes `sprites/.png` (96x96), `sprites/@4x.png` and `sprites/.json` (type, parts, colors). With `--reroll N`, the file names end in `-rN`. +Each run writes `sprites/.png`, `sprites/@4x.png` and `sprites/.json` (library, type, parts, colors). With `--reroll N`, the file names end in `-rN`. With `--compare`, each library writes `-.*` and `-compare.png` shows them next to each other at the same height. Both use the same type and colors. | Option | Meaning | |---|---| @@ -37,6 +47,8 @@ Each run writes `sprites/.png` (96x96), `sprites/@4x.png` and `sprit | `--desc TEXT` | Description sent to the classifier (default: the name) | | `--colors "#main,#accent"` | Manual colors; overrides the logo | | `--reroll N` | Alternate creature; the name alone always gives the same sprite | +| `--library NAME` | `pixellab` (default) or `classic` | +| `--compare` | Render with both libraries and write a comparison sheet | | `--out DIR` | Output folder (default `sprites`) | | `--scale N` | Size of the upscaled copy (default 4, `1` disables it) | @@ -50,17 +62,40 @@ Use a CSV with the columns `name,logo,type,description`. Only `name` is required OPENROUTER_API_KEY= python generate_sprite.py --batch businesses.csv --out sprites ``` -## Editing the art +Add `--compare` to get both libraries for every row. -The parts are text grids in `parts_src//.txt`, compiled to `parts//.png`. Weights, compatibility and deny lists live in `sprite_parts.py`. See `AI_PIXEL_ART_GUIDE.md` for the palette and anchor rules. +## PixelLab library + +Each base creature has a spec in `pixellab_library/.json`: the prompt and seed for its base image, plus one edit prompt per part ("add a pair of gold horns ..."). `pixellab_library.py` generates the base with PixelLab's pixen model and makes each part as an edit of that exact image. The part is the pixel difference between the edit and the base, so it lines up with the base and gets its attach point automatically. The full spec schema and conventions are in the docstring at the top of `pixellab_library.py`. + +Art is drawn in a stand-in palette (teal body, crimson details, gold elemental bits) that maps to the recolorable palette keys. Elemental features can use a fixed-color ramp instead (`fire`, `bluefire`, `ice`, `electric`, `ghostfire`): they keep their own colors whatever the brand, and they only appear on their types. When the generator picks parts, it skips any part that would push the sprite past 64x64, so every part can be offered to every body. + +Needs `PIXELLAB_API_KEY` in the environment or in `.env`. ```bash -python build_parts.py # compile all grids (or pass part names) -python validate_parts.py --sample 3000 # check colors, anchors, canvas fit on random composites -python preview.py bases # contact sheets in preview/ -python preview.py part back plant_bulb # one part on every base it fits -python preview.py zoom body=base_fox tail=tail_leaf -python generate_sprite.py --sprite-list SPRITES.md # regenerate the part list and weight report +python pixellab_library.py generate pl_fox --base-only # base image only: review it first +python pixellab_library.py generate pl_fox # every missing edit (raw images in pixellab_src/pl_fox/) +python pixellab_library.py extract pl_fox # grids in parts_pl_src/, PNGs in parts_pl/, diffs in preview/pixellab/diff/ +python pixellab_library.py preview pl_fox # the body with each of its parts +python pixellab_library.py preview --cross # every part on every body, one sheet per slot +python pixellab_library.py preview --random 60 # real random picks +python pixellab_library.py cost # spend so far (pixellab_src/ledger.jsonl) and balance +python validate_parts.py --library pixellab --sample 3000 +``` + +To change a part, edit its spec (new `seed` or wording), then run `generate --parts --force` and `extract `. Regenerating a base deletes that body's old edits. + +## Classic library + +The parts are text grids in `parts_src//.txt`, compiled to `parts//.png`. Weights, compatibility and deny lists live in `sprite_parts.py`. See `AI_PIXEL_ART_GUIDE.md` for the palette and anchor rules. The PixelLab library's grids in `parts_pl_src/` use the same format, plus the fixed-ramp characters listed in `build_parts.py`. + +```bash +python build_parts.py # compile all grids (or pass part names) +python validate_parts.py --library classic --sample 3000 # check colors, anchors, canvas fit on random composites +python preview.py --library classic bases # contact sheets in preview/ +python preview.py --library classic part back plant_bulb # one part on every base it fits +python preview.py --library classic zoom body=base_fox tail=tail_leaf +python generate_sprite.py --library classic --sprite-list SPRITES.md # regenerate the part list and weight report ``` Do not run `--make-placeholders --overwrite`, because it replaces the real art with test placeholders. diff --git a/build_parts.py b/build_parts.py index 494e9c4..7cd2bb9 100755 --- a/build_parts.py +++ b/build_parts.py @@ -12,6 +12,9 @@ Legend a accent_light b accent_base c accent_dark x type_light y type_base z type_dark w white p pupil + fixed-color ramps (light base dark, never recolored, see generate_sprite.FIXED): + f g h fire l m n bluefire i j k ice + s t u electric q r v ghostfire P pivot T tail B back A aura ^ head_top Layout sources (parts_src//.layout) assemble stamps onto a fixed canvas, @@ -34,7 +37,7 @@ from pathlib import Path from PIL import Image -from generate_sprite import KEYS, MARKERS, PUPIL, EYE_WHITE +from generate_sprite import EYE_WHITE, FIXED, KEYS, MARKERS, PUPIL # PARTS_SRC / PARTS_DIR let experiments build into a separate library (e.g. proto/). SRC = Path(os.environ.get("PARTS_SRC", "parts_src")) @@ -49,6 +52,10 @@ LEGEND = { "P": MARKERS["pivot"], "T": MARKERS["tail"], "B": MARKERS["back"], "A": MARKERS["aura"], "^": MARKERS["head_top"], } +# Fixed-color ramp characters, light/base/dark in order +FIXED_CHARS = {"fire": "fgh", "bluefire": "lmn", "ice": "ijk", "electric": "stu", "ghostfire": "qrv"} +for _ramp, _chars in FIXED_CHARS.items(): + LEGEND.update(zip(_chars, FIXED[_ramp])) class SourceError(Exception): diff --git a/generate_sprite.py b/generate_sprite.py index e52c8a2..bfa3d9a 100644 --- a/generate_sprite.py +++ b/generate_sprite.py @@ -6,6 +6,9 @@ Pipeline: Jev picks a type -> seeded RNG picks a base creature and its variation (weighted by type) -> parts snap together via anchor pixels -> markings painted on -> palette keys swapped for colors pulled from the business logo. +Two part libraries share this pipeline (see LIBRARIES): "pixellab" (64x64, art generated with +PixelLab, sprite_parts_pl.py) and "classic" (96x96, hand-written grids, sprite_parts.py). + Logo colors: transparent pixels, anti-aliased edges and a solid white/black/gray background (the colour filling the image border) are ignored; hued brand colours win over white, black or gray text. A logo that is only white/black (or only its background) still uses that. @@ -14,8 +17,9 @@ Usage python generate_sprite.py "Rosas Landscaping" logos/rosas.png # Jev picks the type python generate_sprite.py "Rosas Landscaping" logos/rosas.png --type grass python generate_sprite.py "Rosas Landscaping" --type grass --colors "#2E7D32,#FBC02D" + python generate_sprite.py "Rosas Landscaping" logos/rosas.png --compare # both libraries side by side python generate_sprite.py --batch businesses.csv # columns: name,logo,type,description - python generate_sprite.py --make-placeholders # test art for every part + python generate_sprite.py --library classic --make-placeholders # test art for every part python generate_sprite.py --sprite-list SPRITES.md # art checklist + weight report Requires: pip install pillow numpy requests @@ -24,6 +28,7 @@ import argparse import colorsys import csv import hashlib +import importlib import json import random import re @@ -34,10 +39,20 @@ from pathlib import Path import numpy as np from PIL import Image, ImageDraw -import sprite_parts as cfg +from sprite_parts import TYPE_COLORS, TYPES + +# Part libraries: registry module per library. Each defines NAME, CANVAS (final sprite size), +# GROUND_MARGIN (empty rows under the feet), PARTS_DIR, and the picking tables (BODY, SLOTS, +# PLAN_WEIGHTS, MARKINGS, MOTIFS, ...) documented in sprite_parts.py. +LIBRARIES = {"pixellab": "sprite_parts_pl", "classic": "sprite_parts"} +DEFAULT_LIBRARY = "pixellab" + + +def load_library(name): + if name not in LIBRARIES: + sys.exit(f"Unknown library '{name}'. Options: {', '.join(LIBRARIES)}") + return importlib.import_module(LIBRARIES[name]) -CANVAS = 96 # final sprite size (square) -GROUND_MARGIN = 4 # empty rows under the feet # Palette keys: draw every part using ONLY these exact colors (plus pass-through colors # like eye white). They get swapped for logo-derived colors at render time. @@ -50,6 +65,18 @@ KEYS = { PUPIL = (20, 20, 20) # near-black that is NOT recolored EYE_WHITE = (255, 255, 255) +# Fixed-color ramps (light, base, dark) for elemental features that keep their own colors +# whatever the brand: fire stays yellow/orange/red, ice stays icy. Like eye white they are +# never recolored; parts that use them are type-locked in the library registry. +FIXED = { + "fire": ((255, 230, 107), (255, 159, 46), (226, 70, 43)), + "bluefire": ((214, 246, 255), (92, 200, 255), (47, 107, 232)), + "ice": ((242, 252, 255), (168, 230, 247), (90, 169, 214)), + "electric": ((255, 246, 168), (255, 217, 59), (224, 162, 26)), + "ghostfire": ((240, 210, 255), (185, 123, 240), (116, 69, 184)), +} +FIXED_COLORS = {c for ramp in FIXED.values() for c in ramp} + # Anchor marker pixels. Place one pixel of the color where a child part attaches. # They are read, then replaced with the surrounding color. MARKERS = { @@ -90,9 +117,9 @@ def part_weight(p, ptype): return p["types"].get(ptype, p["other"]) -def candidates(slot, plan, ptype, tags, excluded, denied=()): +def candidates(lib, slot, plan, ptype, tags, excluded, denied=()): out = [] - for p in cfg.SLOTS[slot]: + for p in lib.SLOTS[slot]: if plan not in p["plans"] or p["name"] in denied: continue if p["requires"] and not set(p["requires"]) & tags: @@ -103,30 +130,37 @@ def candidates(slot, plan, ptype, tags, excluded, denied=()): return out -def motif_factor(p, motifs): +def motif_factor(lib, p, motifs): """Keep one creature's features on a theme: same motif boosted, clashing motifs damped.""" - m = cfg.MOTIFS.get(p["name"]) + m = lib.MOTIFS.get(p["name"]) if m is None or not motifs: return 1.0 if m in motifs: - return cfg.MOTIF_SAME - if all(frozenset((m, o)) in cfg.MOTIF_PAIRS for o in motifs): + return lib.MOTIF_SAME + if all(frozenset((m, o)) in lib.MOTIF_PAIRS for o in motifs): return 1.0 - return cfg.MOTIF_CLASH + return lib.MOTIF_CLASH -def pick_parts(ptype, rng): - plan = weighted_pick(rng, cfg.PLAN_WEIGHTS[ptype].items()) +def pick_parts(lib, ptype, rng): + """Seeded pick of body plan, body, feature parts and markings. A library may define + fits(body, picks) to drop candidates that would push the composite past its canvas.""" + plan = weighted_pick(rng, lib.PLAN_WEIGHTS[ptype].items()) chosen, tags, excluded, denied, motifs = {}, {f"plan:{plan}"}, set(), set(), set() features = 0 + fits = getattr(lib, "fits", None) for slot in PICK_ORDER: - if slot in cfg.DISABLED_SLOTS: + if slot in lib.DISABLED_SLOTS: continue - cands = candidates(slot, plan, ptype, tags, excluded, denied) - if slot in cfg.FEATURE_SLOTS: - if features >= cfg.MAX_FEATURES: + cands = candidates(lib, slot, plan, ptype, tags, excluded, denied) + if slot in lib.FEATURE_SLOTS: + if features >= lib.MAX_FEATURES: cands = [(p, w) for p, w in cands if p["name"] == "none"] - cands = [(p, w * motif_factor(p, motifs)) for p, w in cands] + cands = [(p, w * motif_factor(lib, p, motifs)) for p, w in cands] + if fits: + picked = {s: q for s, q in chosen.items() if s != "body"} + cands = [(p, w) for p, w in cands + if p["name"] == "none" or fits(chosen["body"], {**picked, slot: p})] p = weighted_pick(rng, cands) if p is None: continue @@ -134,11 +168,11 @@ def pick_parts(ptype, rng): tags |= set(p["tags"]) excluded |= set(p["excludes"]) denied |= set(p.get("deny", ())) - if p["name"] != "none" and slot in cfg.FEATURE_SLOTS: + if p["name"] != "none" and slot in lib.FEATURE_SLOTS: features += 1 - if cfg.MOTIFS.get(p["name"]): - motifs.add(cfg.MOTIFS[p["name"]]) - markings = weighted_pick(rng, [(m, w.get(ptype, w.get("_other", 0))) for m, w in cfg.MARKINGS.items()]) + if lib.MOTIFS.get(p["name"]): + motifs.add(lib.MOTIFS[p["name"]]) + markings = weighted_pick(rng, [(m, w.get(ptype, w.get("_other", 0))) for m, w in lib.MARKINGS.items()]) return plan, chosen, markings, tags @@ -281,13 +315,13 @@ def compose(parts_dir, chosen, markings, rng): return canvas.crop(canvas.getbbox()) -def place_on_canvas(sprite): +def place_on_canvas(sprite, lib): w, h = sprite.size - size = max(CANVAS, w + 2, h + GROUND_MARGIN + 1) - if size > CANVAS: + size = max(lib.CANVAS, w + 2, h + lib.GROUND_MARGIN + 1) + if size > lib.CANVAS: warn(f"sprite is {w}x{h}, canvas expanded to {size}px") out = Image.new("RGBA", (size, size), (0, 0, 0, 0)) - out.alpha_composite(sprite, ((size - w) // 2, size - GROUND_MARGIN - h)) + out.alpha_composite(sprite, ((size - w) // 2, size - lib.GROUND_MARGIN - h)) return out @@ -445,7 +479,7 @@ def extract_logo_colors(path, n=6): def pick_main_accent(colors, ptype): - type_rgb = hex_to_rgb(cfg.TYPE_COLORS[ptype]) + type_rgb = hex_to_rgb(TYPE_COLORS[ptype]) if not colors: main = type_rgb accent = rotate_hue(type_rgb, 0.5) @@ -469,7 +503,7 @@ def pick_main_accent(colors, ptype): def build_palette(main, accent, ptype): - type_rgb = hex_to_rgb(cfg.TYPE_COLORS[ptype]) + type_rgb = hex_to_rgb(TYPE_COLORS[ptype]) # Elemental parts (leaves, flames, sparks) must read against the body: if the type colour # is close to the main colour, push its lightness away from the main colour. if color_dist(type_rgb, main) < 150: @@ -499,17 +533,23 @@ def classify(description): return ans["choice"].lower(), ans.get("probabilities") -def generate(name, parts_dir, out_dir, ptype=None, description=None, logo=None, colors=None, - reroll=0, scale=4): +def resolve_type(name, ptype=None, description=None): + """(type, probabilities). Jev classifies when no type is given.""" probs = None if not ptype: ptype, probs = classify(description or name) ptype = ptype.lower() - if ptype not in cfg.PLAN_WEIGHTS: - sys.exit(f"Unknown type '{ptype}'. Options: {', '.join(cfg.TYPES)}") + if ptype not in TYPES: + sys.exit(f"Unknown type '{ptype}'. Options: {', '.join(TYPES)}") + return ptype, probs + +def generate(lib, name, out_dir, ptype, probs=None, logo=None, colors=None, reroll=0, scale=4, + parts_dir=None, suffix=""): + """Render one sprite with library `lib`; writes .png/.json (+ upscaled copy). + Returns (info, sprite).""" rng = make_rng(name, reroll) - plan, chosen, markings, tags = pick_parts(ptype, rng) + plan, chosen, markings, tags = pick_parts(lib, ptype, rng) if colors: logo_colors = [(hex_to_rgb(c), 1.0) for c in colors] @@ -522,26 +562,53 @@ def generate(name, parts_dir, out_dir, ptype=None, description=None, logo=None, main, accent = pick_main_accent(logo_colors, ptype) palette = build_palette(main, accent, ptype) - sprite = recolor(place_on_canvas(compose(parts_dir, chosen, markings, rng)), palette) + sprite = recolor(place_on_canvas(compose(parts_dir or lib.PARTS_DIR, chosen, markings, rng), lib), palette) out_dir = Path(out_dir) out_dir.mkdir(parents=True, exist_ok=True) - slug = slugify(name) + (f"-r{reroll}" if reroll else "") + slug = slugify(name) + (f"-r{reroll}" if reroll else "") + suffix sprite.save(out_dir / f"{slug}.png") if scale > 1: sprite.resize((sprite.width * scale, sprite.height * scale), Image.NEAREST).save(out_dir / f"{slug}@{scale}x.png") info = { - "name": name, "type": ptype, "type_probabilities": probs, "plan": plan, + "name": name, "library": lib.NAME, "type": ptype, "type_probabilities": probs, "plan": plan, "parts": {s: p["name"] for s, p in chosen.items()}, "markings": markings, "attributes": attributes_from(tags), "colors": {"main": rgb_to_hex(main), "accent": rgb_to_hex(accent), - "type": cfg.TYPE_COLORS[ptype], "outline": rgb_to_hex(palette["outline"])}, + "type": TYPE_COLORS[ptype], "outline": rgb_to_hex(palette["outline"])}, } (out_dir / f"{slug}.json").write_text(json.dumps(info, indent=2)) - print(f"{name}: {ptype.upper()} {plan} | {', '.join(info['attributes']) or 'no attributes'} | " + print(f"{name} [{lib.NAME}]: {ptype.upper()} {plan} | {', '.join(info['attributes']) or 'no attributes'} | " f"main {info['colors']['main']} accent {info['colors']['accent']} -> {out_dir / slug}.png") - return info + return info, sprite + + +COMPARE_SIZE = 384 # each sprite is scaled by a whole factor to this height in the comparison + + +def write_compare(path, title, rendered): + """Side-by-side sheet. rendered: [(info, sprite)], one per library.""" + pad, label = 16, 28 + cells = [] + for info, spr in rendered: + k = max(1, COMPARE_SIZE // spr.height) + big = spr.resize((spr.width * k, spr.height * k), Image.NEAREST) + cells.append((f"{info['library']} ({spr.width}x{spr.height}): {info['plan']}, " + f"{', '.join(n for s, n in info['parts'].items() if s != 'body' and n != 'none') or 'no extras'}", + big)) + w = sum(c.width for _, c in cells) + pad * (len(cells) + 1) + h = max(c.height for _, c in cells) + pad * 2 + label * 2 + sheet = Image.new("RGBA", (w, h), (232, 232, 226, 255)) + d = ImageDraw.Draw(sheet) + d.text((pad, pad // 2), title, fill=(30, 30, 30, 255)) + x = pad + for text, big in cells: + d.text((x, pad // 2 + label), text, fill=(60, 60, 60, 255)) + sheet.alpha_composite(big, (x, pad + label * 2)) + x += big.width + pad + sheet.save(path) + print(f"comparison -> {path}") # ============================================================ placeholders @@ -603,9 +670,9 @@ def draw_placeholder(slot, p): return img -def make_placeholders(parts_dir, overwrite=False): +def make_placeholders(lib, parts_dir, overwrite=False): made = 0 - for slot, parts in cfg.SLOTS.items(): + for slot, parts in lib.SLOTS.items(): (Path(parts_dir) / slot).mkdir(parents=True, exist_ok=True) for p in parts: if p["name"] == "none": @@ -620,10 +687,10 @@ def make_placeholders(parts_dir, overwrite=False): # ============================================================ sprite list + weight report -def simulate(ptype, n=3000): +def simulate(lib, ptype, n=3000): plans, slots, marks = Counter(), {s: Counter() for s in PICK_ORDER}, Counter() for i in range(n): - plan, chosen, m, _ = pick_parts(ptype, random.Random(i)) + plan, chosen, m, _ = pick_parts(lib, ptype, random.Random(i)) plans[plan] += 1 marks[m] += 1 for s in PICK_ORDER: @@ -635,20 +702,23 @@ def pct(counter, n, top=None): return ", ".join(f"{k} {v / n:.0%}" for k, v in counter.most_common(top) if v / n >= 0.01) -def write_sprite_list(path): - L = ["# Sprite checklist", ""] - total = sum(1 for parts in cfg.SLOTS.values() for p in parts if p["name"] != "none") - L += [f"**{total} sprites** across {len(cfg.SLOTS)} slots. Save each as `parts//.png`.", "", +def write_sprite_list(lib, path): + L = [f"# Sprite checklist ({lib.NAME} library)", ""] + total = sum(1 for parts in lib.SLOTS.values() for p in parts if p["name"] != "none") + L += [f"**{total} sprites** across {len(lib.SLOTS)} slots. Save each as `{lib.PARTS_DIR}//.png`.", "", "## Art rules", "", - f"- Final canvas is {CANVAS}x{CANVAS}. Sizes below are suggested part canvases; crop tight with transparency.", + f"- Final canvas is {lib.CANVAS}x{lib.CANVAS}. Sizes below are suggested part canvases; crop tight with transparency.", "- Characters face left in a 3/4 view, light from the top-left. 1px outline, no anti-aliasing, no semi-transparent pixels.", - "- Draw only with the palette keys below. Any other color (eye white, pupils) is left as-is.", ""] + "- Draw only with the palette keys below. Any other color (eye white, pupils, fixed ramps) is left as-is.", ""] L += ["| Key | Hex | Use |", "|---|---|---|"] uses = {"main": "body / most fur and skin", "accent": "horns, wings, beaks, crests, shells", "type": "elemental bits: flames, leaves, sparks, ice, water"} for k, v in KEYS.items(): L.append(f"| {k} | {rgb_to_hex(v)} | {'outline (recolored)' if k == 'outline' else uses[k.split('_')[0]]} |") - L += [f"| pupil | {rgb_to_hex(PUPIL)} | not recolored |", f"| eye white | {rgb_to_hex(EYE_WHITE)} | not recolored |", ""] + L += [f"| pupil | {rgb_to_hex(PUPIL)} | not recolored |", f"| eye white | {rgb_to_hex(EYE_WHITE)} | not recolored |"] + for name, shades in FIXED.items(): + L.append(f"| {name} (light, base, dark) | {', '.join(rgb_to_hex(c) for c in shades)} | fixed color, not recolored |") + L.append("") L += ["### Anchor marker pixels", "", "One pixel each. `pivot` is where the part attaches to its parent; the others are where children attach.", "", "| Marker | Hex | Needed in |", "|---|---|---|", @@ -663,18 +733,18 @@ def write_sprite_list(path): L += [f"## {slot} ({len(parts)})", "", "| Done | File | Size | Palette | Plans | Description | Most likely for |", "|---|---|---|---|---|---|---|"] for p in parts: - top = sorted(cfg.TYPES, key=lambda t: -part_weight(p, t))[:3] + top = sorted(TYPES, key=lambda t: -part_weight(p, t))[:3] top = ", ".join(t for t in top if part_weight(p, t) > 0) - plans = "all" if p["plans"] == cfg.ALL else ", ".join(p["plans"]) + plans = "all" if set(p["plans"]) == set(lib.ALL) else ", ".join(p["plans"]) w, h = size_for(slot, p) L.append(f"| [ ] | `{slot}/{p['name']}.png` | {w}x{h} | {p['palette']} | {plans} | {p['desc']} | {top} |") L.append("") L += ["## Simulated pick rates per type", "", "From 3,000 random seeds per type. Use this to spot parts that never show up or show up too much.", ""] - for t in cfg.TYPES: + for t in TYPES: n = 3000 - plans, slots, marks = simulate(t, n) + plans, slots, marks = simulate(lib, t, n) L += [f"### {t.capitalize()}", "", f"- **Body plan:** {pct(plans, n)}"] for s in PICK_ORDER: L.append(f"- **{s}:** {pct(slots[s], n, 8)}") @@ -685,6 +755,18 @@ def write_sprite_list(path): # ============================================================ CLI +def run_one(a, name, ptype=None, description=None, logo=None, colors=None, reroll=0): + """Render `name` with --library, or with every library plus a comparison sheet (--compare).""" + ptype, probs = resolve_type(name, ptype, description) + if not a.compare: + generate(load_library(a.library), name, a.out, ptype, probs, logo, colors, reroll, a.scale, a.parts) + return + rendered = [generate(load_library(n), name, a.out, ptype, probs, logo, colors, reroll, a.scale, suffix=f"-{n}") + for n in LIBRARIES] + slug = slugify(name) + (f"-r{reroll}" if reroll else "") + write_compare(Path(a.out) / f"{slug}-compare.png", f"{name} | type: {ptype}", rendered) + + def main(): ap = argparse.ArgumentParser(description="Generate Pokémon-style business sprites") ap.add_argument("name", nargs="?", help="Business name (also the random seed)") @@ -694,7 +776,11 @@ def main(): ap.add_argument("--logo", help="Logo image to pull colors from") ap.add_argument("--colors", help='Manual colors, e.g. "#2E7D32,#FBC02D" (main first)') ap.add_argument("--reroll", type=int, default=0, help="Alternate creature for the same business") - ap.add_argument("--parts", default="parts", help="Parts folder") + ap.add_argument("--library", choices=list(LIBRARIES), default=DEFAULT_LIBRARY, + help=f"Part library (default {DEFAULT_LIBRARY})") + ap.add_argument("--compare", action="store_true", + help="Render with every library: -.png plus -compare.png side by side") + ap.add_argument("--parts", help="Parts folder (default: the library's own)") ap.add_argument("--out", default="sprites", help="Output folder") ap.add_argument("--scale", type=int, default=4, help="Also save an upscaled copy (1 to disable)") ap.add_argument("--batch", help="CSV with columns name,logo,type,description (only name required)") @@ -702,25 +788,27 @@ def main(): ap.add_argument("--overwrite", action="store_true", help="With --make-placeholders, replace existing files") ap.add_argument("--sprite-list", metavar="PATH", help="Write the art checklist and weight report") a = ap.parse_args() + if a.compare and a.parts: + ap.error("--parts picks one library's folder; it can't be combined with --compare") + lib = load_library(a.library) if a.make_placeholders: - make_placeholders(a.parts, a.overwrite) + make_placeholders(lib, a.parts or lib.PARTS_DIR, a.overwrite) if a.sprite_list: - write_sprite_list(a.sprite_list) + write_sprite_list(lib, a.sprite_list) colors = a.colors.split(",") if a.colors else None if a.batch: with open(a.batch, newline="", encoding="utf-8") as f: for row in csv.DictReader(f): if not (row.get("name") or "").strip(): continue - generate(row["name"].strip(), a.parts, a.out, ptype=(row.get("type") or "").strip() or None, - description=(row.get("description") or "").strip() or None, - logo=(row.get("logo") or "").strip() or None, scale=a.scale) + run_one(a, row["name"].strip(), (row.get("type") or "").strip() or None, + (row.get("description") or "").strip() or None, (row.get("logo") or "").strip() or None) elif a.name: logo = a.logo or a.logo_file if logo and not Path(logo).exists(): sys.exit(f"Logo not found: {logo}") - generate(a.name, a.parts, a.out, a.type, a.desc, logo, colors, a.reroll, a.scale) + run_one(a, a.name, a.type, a.desc, logo, colors, a.reroll) elif not (a.make_placeholders or a.sprite_list): ap.print_help() diff --git a/parts_pl/back/pl_barnacles.png b/parts_pl/back/pl_barnacles.png new file mode 100644 index 0000000..fa7e038 Binary files /dev/null and b/parts_pl/back/pl_barnacles.png differ diff --git a/parts_pl/back/pl_beetle_rock_spikes.png b/parts_pl/back/pl_beetle_rock_spikes.png new file mode 100644 index 0000000..344409e Binary files /dev/null and b/parts_pl/back/pl_beetle_rock_spikes.png differ diff --git a/parts_pl/back/pl_brawler_shell.png b/parts_pl/back/pl_brawler_shell.png new file mode 100644 index 0000000..9617b17 Binary files /dev/null and b/parts_pl/back/pl_brawler_shell.png differ diff --git a/parts_pl/back/pl_bubbles_toxic.png b/parts_pl/back/pl_bubbles_toxic.png new file mode 100644 index 0000000..a5e66e8 Binary files /dev/null and b/parts_pl/back/pl_bubbles_toxic.png differ diff --git a/parts_pl/back/pl_cape_frost.png b/parts_pl/back/pl_cape_frost.png new file mode 100644 index 0000000..0769199 Binary files /dev/null and b/parts_pl/back/pl_cape_frost.png differ diff --git a/parts_pl/back/pl_cape_short.png b/parts_pl/back/pl_cape_short.png new file mode 100644 index 0000000..b79ab1e Binary files /dev/null and b/parts_pl/back/pl_cape_short.png differ diff --git a/parts_pl/back/pl_cloud_puffs.png b/parts_pl/back/pl_cloud_puffs.png new file mode 100644 index 0000000..ef2b72a Binary files /dev/null and b/parts_pl/back/pl_cloud_puffs.png differ diff --git a/parts_pl/back/pl_coils_electric.png b/parts_pl/back/pl_coils_electric.png new file mode 100644 index 0000000..7c3f45b Binary files /dev/null and b/parts_pl/back/pl_coils_electric.png differ diff --git a/parts_pl/back/pl_coral_back.png b/parts_pl/back/pl_coral_back.png new file mode 100644 index 0000000..11b6384 Binary files /dev/null and b/parts_pl/back/pl_coral_back.png differ diff --git a/parts_pl/back/pl_crystal_cluster.png b/parts_pl/back/pl_crystal_cluster.png new file mode 100644 index 0000000..754c7de Binary files /dev/null and b/parts_pl/back/pl_crystal_cluster.png differ diff --git a/parts_pl/back/pl_dino_crystals_back.png b/parts_pl/back/pl_dino_crystals_back.png new file mode 100644 index 0000000..8299d55 Binary files /dev/null and b/parts_pl/back/pl_dino_crystals_back.png differ diff --git a/parts_pl/back/pl_drake_crystals.png b/parts_pl/back/pl_drake_crystals.png new file mode 100644 index 0000000..f1c77dd Binary files /dev/null and b/parts_pl/back/pl_drake_crystals.png differ diff --git a/parts_pl/back/pl_fin_dorsal.png b/parts_pl/back/pl_fin_dorsal.png new file mode 100644 index 0000000..005bd59 Binary files /dev/null and b/parts_pl/back/pl_fin_dorsal.png differ diff --git a/parts_pl/back/pl_flower_back.png b/parts_pl/back/pl_flower_back.png new file mode 100644 index 0000000..3a34647 Binary files /dev/null and b/parts_pl/back/pl_flower_back.png differ diff --git a/parts_pl/back/pl_icicles_back.png b/parts_pl/back/pl_icicles_back.png new file mode 100644 index 0000000..ff7de99 Binary files /dev/null and b/parts_pl/back/pl_icicles_back.png differ diff --git a/parts_pl/back/pl_leaf_cape.png b/parts_pl/back/pl_leaf_cape.png new file mode 100644 index 0000000..e68adb9 Binary files /dev/null and b/parts_pl/back/pl_leaf_cape.png differ diff --git a/parts_pl/back/pl_mane_bristle.png b/parts_pl/back/pl_mane_bristle.png new file mode 100644 index 0000000..de647de Binary files /dev/null and b/parts_pl/back/pl_mane_bristle.png differ diff --git a/parts_pl/back/pl_mane_fire.png b/parts_pl/back/pl_mane_fire.png new file mode 100644 index 0000000..9dbbb54 Binary files /dev/null and b/parts_pl/back/pl_mane_fire.png differ diff --git a/parts_pl/back/pl_mane_flame.png b/parts_pl/back/pl_mane_flame.png new file mode 100644 index 0000000..00a1073 Binary files /dev/null and b/parts_pl/back/pl_mane_flame.png differ diff --git a/parts_pl/back/pl_mushrooms_back.png b/parts_pl/back/pl_mushrooms_back.png new file mode 100644 index 0000000..68bf708 Binary files /dev/null and b/parts_pl/back/pl_mushrooms_back.png differ diff --git a/parts_pl/back/pl_pearl_orb.png b/parts_pl/back/pl_pearl_orb.png new file mode 100644 index 0000000..c89652c Binary files /dev/null and b/parts_pl/back/pl_pearl_orb.png differ diff --git a/parts_pl/back/pl_plates_rock.png b/parts_pl/back/pl_plates_rock.png new file mode 100644 index 0000000..d10ac52 Binary files /dev/null and b/parts_pl/back/pl_plates_rock.png differ diff --git a/parts_pl/back/pl_rocks_dirt.png b/parts_pl/back/pl_rocks_dirt.png new file mode 100644 index 0000000..c109eed Binary files /dev/null and b/parts_pl/back/pl_rocks_dirt.png differ diff --git a/parts_pl/back/pl_saddle_rock.png b/parts_pl/back/pl_saddle_rock.png new file mode 100644 index 0000000..f3f70e8 Binary files /dev/null and b/parts_pl/back/pl_saddle_rock.png differ diff --git a/parts_pl/back/pl_sail_fin.png b/parts_pl/back/pl_sail_fin.png new file mode 100644 index 0000000..56816c8 Binary files /dev/null and b/parts_pl/back/pl_sail_fin.png differ diff --git a/parts_pl/back/pl_scarf_long.png b/parts_pl/back/pl_scarf_long.png new file mode 100644 index 0000000..b0ce4eb Binary files /dev/null and b/parts_pl/back/pl_scarf_long.png differ diff --git a/parts_pl/back/pl_seal_shell.png b/parts_pl/back/pl_seal_shell.png new file mode 100644 index 0000000..b106936 Binary files /dev/null and b/parts_pl/back/pl_seal_shell.png differ diff --git a/parts_pl/back/pl_shell_spiral.png b/parts_pl/back/pl_shell_spiral.png new file mode 100644 index 0000000..f7b68fa Binary files /dev/null and b/parts_pl/back/pl_shell_spiral.png differ diff --git a/parts_pl/back/pl_shroud_ghostfire.png b/parts_pl/back/pl_shroud_ghostfire.png new file mode 100644 index 0000000..4aae08d Binary files /dev/null and b/parts_pl/back/pl_shroud_ghostfire.png differ diff --git a/parts_pl/back/pl_slime_spikes_poison.png b/parts_pl/back/pl_slime_spikes_poison.png new file mode 100644 index 0000000..f93a331 Binary files /dev/null and b/parts_pl/back/pl_slime_spikes_poison.png differ diff --git a/parts_pl/back/pl_spikes_back.png b/parts_pl/back/pl_spikes_back.png new file mode 100644 index 0000000..ce5a225 Binary files /dev/null and b/parts_pl/back/pl_spikes_back.png differ diff --git a/parts_pl/back/pl_spikes_frill.png b/parts_pl/back/pl_spikes_frill.png new file mode 100644 index 0000000..ac57f30 Binary files /dev/null and b/parts_pl/back/pl_spikes_frill.png differ diff --git a/parts_pl/back/pl_spines_toxic.png b/parts_pl/back/pl_spines_toxic.png new file mode 100644 index 0000000..2851efe Binary files /dev/null and b/parts_pl/back/pl_spines_toxic.png differ diff --git a/parts_pl/back/pl_wings_bat.png b/parts_pl/back/pl_wings_bat.png new file mode 100644 index 0000000..e528440 Binary files /dev/null and b/parts_pl/back/pl_wings_bat.png differ diff --git a/parts_pl/back/pl_wings_bug.png b/parts_pl/back/pl_wings_bug.png new file mode 100644 index 0000000..593e314 Binary files /dev/null and b/parts_pl/back/pl_wings_bug.png differ diff --git a/parts_pl/back/pl_wings_dragon.png b/parts_pl/back/pl_wings_dragon.png new file mode 100644 index 0000000..1d35bc1 Binary files /dev/null and b/parts_pl/back/pl_wings_dragon.png differ diff --git a/parts_pl/back/pl_wings_elytra.png b/parts_pl/back/pl_wings_elytra.png new file mode 100644 index 0000000..1412f4c Binary files /dev/null and b/parts_pl/back/pl_wings_elytra.png differ diff --git a/parts_pl/back/pl_wings_feather.png b/parts_pl/back/pl_wings_feather.png new file mode 100644 index 0000000..02c231c Binary files /dev/null and b/parts_pl/back/pl_wings_feather.png differ diff --git a/parts_pl/back/pl_wings_gold.png b/parts_pl/back/pl_wings_gold.png new file mode 100644 index 0000000..d839861 Binary files /dev/null and b/parts_pl/back/pl_wings_gold.png differ diff --git a/parts_pl/back/pl_wings_storm.png b/parts_pl/back/pl_wings_storm.png new file mode 100644 index 0000000..11938f8 Binary files /dev/null and b/parts_pl/back/pl_wings_storm.png differ diff --git a/parts_pl/back/pl_wings_tiny.png b/parts_pl/back/pl_wings_tiny.png new file mode 100644 index 0000000..1b6acfc Binary files /dev/null and b/parts_pl/back/pl_wings_tiny.png differ diff --git a/parts_pl/back/pl_wisp_orbs_bluefire.png b/parts_pl/back/pl_wisp_orbs_bluefire.png new file mode 100644 index 0000000..38d69e8 Binary files /dev/null and b/parts_pl/back/pl_wisp_orbs_bluefire.png differ diff --git a/parts_pl/body/pl_axolotl.png b/parts_pl/body/pl_axolotl.png new file mode 100644 index 0000000..bcb5c75 Binary files /dev/null and b/parts_pl/body/pl_axolotl.png differ diff --git a/parts_pl/body/pl_bee.png b/parts_pl/body/pl_bee.png new file mode 100644 index 0000000..c7b61b4 Binary files /dev/null and b/parts_pl/body/pl_bee.png differ diff --git a/parts_pl/body/pl_beetle.png b/parts_pl/body/pl_beetle.png new file mode 100644 index 0000000..7fa7fa7 Binary files /dev/null and b/parts_pl/body/pl_beetle.png differ diff --git a/parts_pl/body/pl_boar.png b/parts_pl/body/pl_boar.png new file mode 100644 index 0000000..900a460 Binary files /dev/null and b/parts_pl/body/pl_boar.png differ diff --git a/parts_pl/body/pl_brawler.png b/parts_pl/body/pl_brawler.png new file mode 100644 index 0000000..5ce233f Binary files /dev/null and b/parts_pl/body/pl_brawler.png differ diff --git a/parts_pl/body/pl_bunny.png b/parts_pl/body/pl_bunny.png new file mode 100644 index 0000000..0aa9bac Binary files /dev/null and b/parts_pl/body/pl_bunny.png differ diff --git a/parts_pl/body/pl_chick.png b/parts_pl/body/pl_chick.png new file mode 100644 index 0000000..0ec8bf6 Binary files /dev/null and b/parts_pl/body/pl_chick.png differ diff --git a/parts_pl/body/pl_crab.png b/parts_pl/body/pl_crab.png new file mode 100644 index 0000000..a5ecb1a Binary files /dev/null and b/parts_pl/body/pl_crab.png differ diff --git a/parts_pl/body/pl_cub.png b/parts_pl/body/pl_cub.png new file mode 100644 index 0000000..3a1f91f Binary files /dev/null and b/parts_pl/body/pl_cub.png differ diff --git a/parts_pl/body/pl_dino.png b/parts_pl/body/pl_dino.png new file mode 100644 index 0000000..f85cb33 Binary files /dev/null and b/parts_pl/body/pl_dino.png differ diff --git a/parts_pl/body/pl_drake.png b/parts_pl/body/pl_drake.png new file mode 100644 index 0000000..d0a0089 Binary files /dev/null and b/parts_pl/body/pl_drake.png differ diff --git a/parts_pl/body/pl_duck.png b/parts_pl/body/pl_duck.png new file mode 100644 index 0000000..7c9418f Binary files /dev/null and b/parts_pl/body/pl_duck.png differ diff --git a/parts_pl/body/pl_eel.png b/parts_pl/body/pl_eel.png new file mode 100644 index 0000000..4791073 Binary files /dev/null and b/parts_pl/body/pl_eel.png differ diff --git a/parts_pl/body/pl_fawn.png b/parts_pl/body/pl_fawn.png new file mode 100644 index 0000000..e2a76b5 Binary files /dev/null and b/parts_pl/body/pl_fawn.png differ diff --git a/parts_pl/body/pl_fox.png b/parts_pl/body/pl_fox.png new file mode 100644 index 0000000..e6471c2 Binary files /dev/null and b/parts_pl/body/pl_fox.png differ diff --git a/parts_pl/body/pl_grub.png b/parts_pl/body/pl_grub.png new file mode 100644 index 0000000..19c9e5b Binary files /dev/null and b/parts_pl/body/pl_grub.png differ diff --git a/parts_pl/body/pl_guppy.png b/parts_pl/body/pl_guppy.png new file mode 100644 index 0000000..58da5ca Binary files /dev/null and b/parts_pl/body/pl_guppy.png differ diff --git a/parts_pl/body/pl_hawk.png b/parts_pl/body/pl_hawk.png new file mode 100644 index 0000000..c0babca Binary files /dev/null and b/parts_pl/body/pl_hawk.png differ diff --git a/parts_pl/body/pl_imp.png b/parts_pl/body/pl_imp.png new file mode 100644 index 0000000..08f813f Binary files /dev/null and b/parts_pl/body/pl_imp.png differ diff --git a/parts_pl/body/pl_lizard.png b/parts_pl/body/pl_lizard.png new file mode 100644 index 0000000..f43286a Binary files /dev/null and b/parts_pl/body/pl_lizard.png differ diff --git a/parts_pl/body/pl_mochi.png b/parts_pl/body/pl_mochi.png new file mode 100644 index 0000000..c6a2779 Binary files /dev/null and b/parts_pl/body/pl_mochi.png differ diff --git a/parts_pl/body/pl_monk.png b/parts_pl/body/pl_monk.png new file mode 100644 index 0000000..d3b51a0 Binary files /dev/null and b/parts_pl/body/pl_monk.png differ diff --git a/parts_pl/body/pl_owl.png b/parts_pl/body/pl_owl.png new file mode 100644 index 0000000..598adcc Binary files /dev/null and b/parts_pl/body/pl_owl.png differ diff --git a/parts_pl/body/pl_pebble.png b/parts_pl/body/pl_pebble.png new file mode 100644 index 0000000..222e52d Binary files /dev/null and b/parts_pl/body/pl_pebble.png differ diff --git a/parts_pl/body/pl_seal.png b/parts_pl/body/pl_seal.png new file mode 100644 index 0000000..3db662b Binary files /dev/null and b/parts_pl/body/pl_seal.png differ diff --git a/parts_pl/body/pl_slime.png b/parts_pl/body/pl_slime.png new file mode 100644 index 0000000..1d1ed46 Binary files /dev/null and b/parts_pl/body/pl_slime.png differ diff --git a/parts_pl/body/pl_snake.png b/parts_pl/body/pl_snake.png new file mode 100644 index 0000000..53fa9d6 Binary files /dev/null and b/parts_pl/body/pl_snake.png differ diff --git a/parts_pl/body/pl_sprite.png b/parts_pl/body/pl_sprite.png new file mode 100644 index 0000000..1e630a5 Binary files /dev/null and b/parts_pl/body/pl_sprite.png differ diff --git a/parts_pl/body/pl_wisp.png b/parts_pl/body/pl_wisp.png new file mode 100644 index 0000000..785fe7d Binary files /dev/null and b/parts_pl/body/pl_wisp.png differ diff --git a/parts_pl/body/pl_worm.png b/parts_pl/body/pl_worm.png new file mode 100644 index 0000000..43972ca Binary files /dev/null and b/parts_pl/body/pl_worm.png differ diff --git a/parts_pl/body/pl_wyrm.png b/parts_pl/body/pl_wyrm.png new file mode 100644 index 0000000..e98f27d Binary files /dev/null and b/parts_pl/body/pl_wyrm.png differ diff --git a/parts_pl/head_top/pl_antennae.png b/parts_pl/head_top/pl_antennae.png new file mode 100644 index 0000000..0d6fb69 Binary files /dev/null and b/parts_pl/head_top/pl_antennae.png differ diff --git a/parts_pl/head_top/pl_antennae_spark.png b/parts_pl/head_top/pl_antennae_spark.png new file mode 100644 index 0000000..4b4a428 Binary files /dev/null and b/parts_pl/head_top/pl_antennae_spark.png differ diff --git a/parts_pl/head_top/pl_antlers_leafy.png b/parts_pl/head_top/pl_antlers_leafy.png new file mode 100644 index 0000000..1bad842 Binary files /dev/null and b/parts_pl/head_top/pl_antlers_leafy.png differ diff --git a/parts_pl/head_top/pl_axolotl_sprout.png b/parts_pl/head_top/pl_axolotl_sprout.png new file mode 100644 index 0000000..d965fc3 Binary files /dev/null and b/parts_pl/head_top/pl_axolotl_sprout.png differ diff --git a/parts_pl/head_top/pl_bunny_flower_crown.png b/parts_pl/head_top/pl_bunny_flower_crown.png new file mode 100644 index 0000000..2ff99ab Binary files /dev/null and b/parts_pl/head_top/pl_bunny_flower_crown.png differ diff --git a/parts_pl/head_top/pl_coral_crown.png b/parts_pl/head_top/pl_coral_crown.png new file mode 100644 index 0000000..b6adeab Binary files /dev/null and b/parts_pl/head_top/pl_coral_crown.png differ diff --git a/parts_pl/head_top/pl_crest_electric.png b/parts_pl/head_top/pl_crest_electric.png new file mode 100644 index 0000000..867c948 Binary files /dev/null and b/parts_pl/head_top/pl_crest_electric.png differ diff --git a/parts_pl/head_top/pl_crest_feather.png b/parts_pl/head_top/pl_crest_feather.png new file mode 100644 index 0000000..2c19f6d Binary files /dev/null and b/parts_pl/head_top/pl_crest_feather.png differ diff --git a/parts_pl/head_top/pl_crest_flame.png b/parts_pl/head_top/pl_crest_flame.png new file mode 100644 index 0000000..097c33e Binary files /dev/null and b/parts_pl/head_top/pl_crest_flame.png differ diff --git a/parts_pl/head_top/pl_crown_bluefire.png b/parts_pl/head_top/pl_crown_bluefire.png new file mode 100644 index 0000000..a6fe21e Binary files /dev/null and b/parts_pl/head_top/pl_crown_bluefire.png differ diff --git a/parts_pl/head_top/pl_crown_ice.png b/parts_pl/head_top/pl_crown_ice.png new file mode 100644 index 0000000..3b86e9a Binary files /dev/null and b/parts_pl/head_top/pl_crown_ice.png differ diff --git a/parts_pl/head_top/pl_crystals_head.png b/parts_pl/head_top/pl_crystals_head.png new file mode 100644 index 0000000..776043a Binary files /dev/null and b/parts_pl/head_top/pl_crystals_head.png differ diff --git a/parts_pl/head_top/pl_ears_bolt.png b/parts_pl/head_top/pl_ears_bolt.png new file mode 100644 index 0000000..70f345d Binary files /dev/null and b/parts_pl/head_top/pl_ears_bolt.png differ diff --git a/parts_pl/head_top/pl_ears_flame.png b/parts_pl/head_top/pl_ears_flame.png new file mode 100644 index 0000000..89379af Binary files /dev/null and b/parts_pl/head_top/pl_ears_flame.png differ diff --git a/parts_pl/head_top/pl_ears_long.png b/parts_pl/head_top/pl_ears_long.png new file mode 100644 index 0000000..5675b04 Binary files /dev/null and b/parts_pl/head_top/pl_ears_long.png differ diff --git a/parts_pl/head_top/pl_fins_head.png b/parts_pl/head_top/pl_fins_head.png new file mode 100644 index 0000000..c60a47c Binary files /dev/null and b/parts_pl/head_top/pl_fins_head.png differ diff --git a/parts_pl/head_top/pl_flower_bud.png b/parts_pl/head_top/pl_flower_bud.png new file mode 100644 index 0000000..66833d7 Binary files /dev/null and b/parts_pl/head_top/pl_flower_bud.png differ diff --git a/parts_pl/head_top/pl_gills_frill.png b/parts_pl/head_top/pl_gills_frill.png new file mode 100644 index 0000000..b281ced Binary files /dev/null and b/parts_pl/head_top/pl_gills_frill.png differ diff --git a/parts_pl/head_top/pl_grub_flower.png b/parts_pl/head_top/pl_grub_flower.png new file mode 100644 index 0000000..8e29055 Binary files /dev/null and b/parts_pl/head_top/pl_grub_flower.png differ diff --git a/parts_pl/head_top/pl_guppy_pearl_crown.png b/parts_pl/head_top/pl_guppy_pearl_crown.png new file mode 100644 index 0000000..82edd60 Binary files /dev/null and b/parts_pl/head_top/pl_guppy_pearl_crown.png differ diff --git a/parts_pl/head_top/pl_hawk_headband.png b/parts_pl/head_top/pl_hawk_headband.png new file mode 100644 index 0000000..0132088 Binary files /dev/null and b/parts_pl/head_top/pl_hawk_headband.png differ diff --git a/parts_pl/head_top/pl_headband.png b/parts_pl/head_top/pl_headband.png new file mode 100644 index 0000000..4eb1dad Binary files /dev/null and b/parts_pl/head_top/pl_headband.png differ diff --git a/parts_pl/head_top/pl_hood_cobra.png b/parts_pl/head_top/pl_hood_cobra.png new file mode 100644 index 0000000..2466424 Binary files /dev/null and b/parts_pl/head_top/pl_hood_cobra.png differ diff --git a/parts_pl/head_top/pl_horn_beetle.png b/parts_pl/head_top/pl_horn_beetle.png new file mode 100644 index 0000000..05bb5dd Binary files /dev/null and b/parts_pl/head_top/pl_horn_beetle.png differ diff --git a/parts_pl/head_top/pl_horn_ice.png b/parts_pl/head_top/pl_horn_ice.png new file mode 100644 index 0000000..0c022a4 Binary files /dev/null and b/parts_pl/head_top/pl_horn_ice.png differ diff --git a/parts_pl/head_top/pl_horn_single.png b/parts_pl/head_top/pl_horn_single.png new file mode 100644 index 0000000..e973c48 Binary files /dev/null and b/parts_pl/head_top/pl_horn_single.png differ diff --git a/parts_pl/head_top/pl_horns_antler_dragon.png b/parts_pl/head_top/pl_horns_antler_dragon.png new file mode 100644 index 0000000..2b8cf55 Binary files /dev/null and b/parts_pl/head_top/pl_horns_antler_dragon.png differ diff --git a/parts_pl/head_top/pl_horns_dragon.png b/parts_pl/head_top/pl_horns_dragon.png new file mode 100644 index 0000000..83a99d5 Binary files /dev/null and b/parts_pl/head_top/pl_horns_dragon.png differ diff --git a/parts_pl/head_top/pl_horns_ember.png b/parts_pl/head_top/pl_horns_ember.png new file mode 100644 index 0000000..51fcaa3 Binary files /dev/null and b/parts_pl/head_top/pl_horns_ember.png differ diff --git a/parts_pl/head_top/pl_horns_ram.png b/parts_pl/head_top/pl_horns_ram.png new file mode 100644 index 0000000..06514c5 Binary files /dev/null and b/parts_pl/head_top/pl_horns_ram.png differ diff --git a/parts_pl/head_top/pl_imp_halo.png b/parts_pl/head_top/pl_imp_halo.png new file mode 100644 index 0000000..3d1022f Binary files /dev/null and b/parts_pl/head_top/pl_imp_halo.png differ diff --git a/parts_pl/head_top/pl_mushroom_cap.png b/parts_pl/head_top/pl_mushroom_cap.png new file mode 100644 index 0000000..7e4e015 Binary files /dev/null and b/parts_pl/head_top/pl_mushroom_cap.png differ diff --git a/parts_pl/head_top/pl_owl_halo.png b/parts_pl/head_top/pl_owl_halo.png new file mode 100644 index 0000000..7714aca Binary files /dev/null and b/parts_pl/head_top/pl_owl_halo.png differ diff --git a/parts_pl/head_top/pl_plume_feather.png b/parts_pl/head_top/pl_plume_feather.png new file mode 100644 index 0000000..43115e6 Binary files /dev/null and b/parts_pl/head_top/pl_plume_feather.png differ diff --git a/parts_pl/head_top/pl_snowcap.png b/parts_pl/head_top/pl_snowcap.png new file mode 100644 index 0000000..0a9b67b Binary files /dev/null and b/parts_pl/head_top/pl_snowcap.png differ diff --git a/parts_pl/head_top/pl_sprout_leaf.png b/parts_pl/head_top/pl_sprout_leaf.png new file mode 100644 index 0000000..661188d Binary files /dev/null and b/parts_pl/head_top/pl_sprout_leaf.png differ diff --git a/parts_pl/head_top/pl_topknot.png b/parts_pl/head_top/pl_topknot.png new file mode 100644 index 0000000..3f0873e Binary files /dev/null and b/parts_pl/head_top/pl_topknot.png differ diff --git a/parts_pl/head_top/pl_tuft_fluffy.png b/parts_pl/head_top/pl_tuft_fluffy.png new file mode 100644 index 0000000..e9c5985 Binary files /dev/null and b/parts_pl/head_top/pl_tuft_fluffy.png differ diff --git a/parts_pl/head_top/pl_wisp_ghostfire.png b/parts_pl/head_top/pl_wisp_ghostfire.png new file mode 100644 index 0000000..7ae565e Binary files /dev/null and b/parts_pl/head_top/pl_wisp_ghostfire.png differ diff --git a/parts_pl/tail/pl_chick_tail_icicle.png b/parts_pl/tail/pl_chick_tail_icicle.png new file mode 100644 index 0000000..7d96524 Binary files /dev/null and b/parts_pl/tail/pl_chick_tail_icicle.png differ diff --git a/parts_pl/tail/pl_cub_tail_rockclub.png b/parts_pl/tail/pl_cub_tail_rockclub.png new file mode 100644 index 0000000..0c73378 Binary files /dev/null and b/parts_pl/tail/pl_cub_tail_rockclub.png differ diff --git a/parts_pl/tail/pl_tail_bluefire.png b/parts_pl/tail/pl_tail_bluefire.png new file mode 100644 index 0000000..4515b39 Binary files /dev/null and b/parts_pl/tail/pl_tail_bluefire.png differ diff --git a/parts_pl/tail/pl_tail_bluefire_eel.png b/parts_pl/tail/pl_tail_bluefire_eel.png new file mode 100644 index 0000000..3498743 Binary files /dev/null and b/parts_pl/tail/pl_tail_bluefire_eel.png differ diff --git a/parts_pl/tail/pl_tail_bluefire_wisp.png b/parts_pl/tail/pl_tail_bluefire_wisp.png new file mode 100644 index 0000000..340817e Binary files /dev/null and b/parts_pl/tail/pl_tail_bluefire_wisp.png differ diff --git a/parts_pl/tail/pl_tail_club.png b/parts_pl/tail/pl_tail_club.png new file mode 100644 index 0000000..d81c973 Binary files /dev/null and b/parts_pl/tail/pl_tail_club.png differ diff --git a/parts_pl/tail/pl_tail_curl_pig.png b/parts_pl/tail/pl_tail_curl_pig.png new file mode 100644 index 0000000..7a858a5 Binary files /dev/null and b/parts_pl/tail/pl_tail_curl_pig.png differ diff --git a/parts_pl/tail/pl_tail_curly.png b/parts_pl/tail/pl_tail_curly.png new file mode 100644 index 0000000..dee5f52 Binary files /dev/null and b/parts_pl/tail/pl_tail_curly.png differ diff --git a/parts_pl/tail/pl_tail_dragon_fin.png b/parts_pl/tail/pl_tail_dragon_fin.png new file mode 100644 index 0000000..92a2088 Binary files /dev/null and b/parts_pl/tail/pl_tail_dragon_fin.png differ diff --git a/parts_pl/tail/pl_tail_feather_fan.png b/parts_pl/tail/pl_tail_feather_fan.png new file mode 100644 index 0000000..4f85e29 Binary files /dev/null and b/parts_pl/tail/pl_tail_feather_fan.png differ diff --git a/parts_pl/tail/pl_tail_fish.png b/parts_pl/tail/pl_tail_fish.png new file mode 100644 index 0000000..dfe923c Binary files /dev/null and b/parts_pl/tail/pl_tail_fish.png differ diff --git a/parts_pl/tail/pl_tail_flame.png b/parts_pl/tail/pl_tail_flame.png new file mode 100644 index 0000000..55bf795 Binary files /dev/null and b/parts_pl/tail/pl_tail_flame.png differ diff --git a/parts_pl/tail/pl_tail_fluffy.png b/parts_pl/tail/pl_tail_fluffy.png new file mode 100644 index 0000000..d4deb75 Binary files /dev/null and b/parts_pl/tail/pl_tail_fluffy.png differ diff --git a/parts_pl/tail/pl_tail_ghostfire.png b/parts_pl/tail/pl_tail_ghostfire.png new file mode 100644 index 0000000..8f14faa Binary files /dev/null and b/parts_pl/tail/pl_tail_ghostfire.png differ diff --git a/parts_pl/tail/pl_tail_ice_shard.png b/parts_pl/tail/pl_tail_ice_shard.png new file mode 100644 index 0000000..8e1dca3 Binary files /dev/null and b/parts_pl/tail/pl_tail_ice_shard.png differ diff --git a/parts_pl/tail/pl_tail_leaf.png b/parts_pl/tail/pl_tail_leaf.png new file mode 100644 index 0000000..025a1c2 Binary files /dev/null and b/parts_pl/tail/pl_tail_leaf.png differ diff --git a/parts_pl/tail/pl_tail_lightning.png b/parts_pl/tail/pl_tail_lightning.png new file mode 100644 index 0000000..89a5daf Binary files /dev/null and b/parts_pl/tail/pl_tail_lightning.png differ diff --git a/parts_pl/tail/pl_tail_lightning_lizard.png b/parts_pl/tail/pl_tail_lightning_lizard.png new file mode 100644 index 0000000..93378d3 Binary files /dev/null and b/parts_pl/tail/pl_tail_lightning_lizard.png differ diff --git a/parts_pl/tail/pl_tail_puff.png b/parts_pl/tail/pl_tail_puff.png new file mode 100644 index 0000000..7cc035a Binary files /dev/null and b/parts_pl/tail/pl_tail_puff.png differ diff --git a/parts_pl/tail/pl_tail_rattle.png b/parts_pl/tail/pl_tail_rattle.png new file mode 100644 index 0000000..3012024 Binary files /dev/null and b/parts_pl/tail/pl_tail_rattle.png differ diff --git a/parts_pl/tail/pl_tail_scorpion.png b/parts_pl/tail/pl_tail_scorpion.png new file mode 100644 index 0000000..bc33786 Binary files /dev/null and b/parts_pl/tail/pl_tail_scorpion.png differ diff --git a/parts_pl/tail/pl_tail_spade.png b/parts_pl/tail/pl_tail_spade.png new file mode 100644 index 0000000..dbaee65 Binary files /dev/null and b/parts_pl/tail/pl_tail_spade.png differ diff --git a/parts_pl/tail/pl_tail_splash.png b/parts_pl/tail/pl_tail_splash.png new file mode 100644 index 0000000..d1aba80 Binary files /dev/null and b/parts_pl/tail/pl_tail_splash.png differ diff --git a/parts_pl/tail/pl_tail_stinger.png b/parts_pl/tail/pl_tail_stinger.png new file mode 100644 index 0000000..5559b5b Binary files /dev/null and b/parts_pl/tail/pl_tail_stinger.png differ diff --git a/parts_pl/tail/pl_tail_storm.png b/parts_pl/tail/pl_tail_storm.png new file mode 100644 index 0000000..72b0633 Binary files /dev/null and b/parts_pl/tail/pl_tail_storm.png differ diff --git a/parts_pl/tail/pl_tail_streamers.png b/parts_pl/tail/pl_tail_streamers.png new file mode 100644 index 0000000..a34d598 Binary files /dev/null and b/parts_pl/tail/pl_tail_streamers.png differ diff --git a/parts_pl/tail/pl_tail_tuft.png b/parts_pl/tail/pl_tail_tuft.png new file mode 100644 index 0000000..ed842c7 Binary files /dev/null and b/parts_pl/tail/pl_tail_tuft.png differ diff --git a/parts_pl/tail/pl_tail_vine.png b/parts_pl/tail/pl_tail_vine.png new file mode 100644 index 0000000..4518428 Binary files /dev/null and b/parts_pl/tail/pl_tail_vine.png differ diff --git a/parts_pl/tail/pl_tail_wisp_ghostfire.png b/parts_pl/tail/pl_tail_wisp_ghostfire.png new file mode 100644 index 0000000..c6ee086 Binary files /dev/null and b/parts_pl/tail/pl_tail_wisp_ghostfire.png differ diff --git a/parts_pl/tail/pl_tail_wrapped.png b/parts_pl/tail/pl_tail_wrapped.png new file mode 100644 index 0000000..1079b5f Binary files /dev/null and b/parts_pl/tail/pl_tail_wrapped.png differ diff --git a/parts_pl_src/back/pl_barnacles.txt b/parts_pl_src/back/pl_barnacles.txt new file mode 100644 index 0000000..14cd176 --- /dev/null +++ b/parts_pl_src/back/pl_barnacles.txt @@ -0,0 +1,18 @@ +# pl_barnacles: pixellab_src/pl_crab/pl_barnacles.png minus base.png +# pivot at (30, 31) +.......ooo........ +......o111o....... +......o113o....... +.....oo3333oo..... +....o11333311o.oo. +...o111313311ooxxo +...o313311323ozxzo +.ooo33311113333zo. +oxxz33311113xz3o.. +ozxy32333333333o.. +.o333zx311113311o. +..o3zxy311113311o. +.oo33yy33113333o.. +ozxoooo333332ooo.. +oyzo...P3331o..... +.oo.....o..o...... diff --git a/parts_pl_src/back/pl_beetle_rock_spikes.txt b/parts_pl_src/back/pl_beetle_rock_spikes.txt new file mode 100644 index 0000000..e652c8a --- /dev/null +++ b/parts_pl_src/back/pl_beetle_rock_spikes.txt @@ -0,0 +1,31 @@ +# pl_beetle_rock_spikes: pixellab_src/pl_beetle/pl_beetle_rock_spikes.png minus base.png +# pivot at (31, 25) +...................oooooo................... +..................oxxxxxxo.................. +..................oxxxxxxxo................. +.................oyxxxxxxxo................. +.................oyyxxxxxyxo................ +.................oyyxxxxxyxo................ +................oyyyxxxxxyxo................ +................oyyyxxxxzyyo................ +................oyyyxxxxzyyo................ +................oyyyxxxxzyyyo............... +...............oyyyyyyxxzyyyo............... +...oooo........oyyyzyyyyzyyyo............... +..oxxxoo.......oyyyzyyyyzyyyo.........ooo... +.oxxxxxyo......oyyyzyyyyzyyyo.......ooxxxo.. +oxxxxxyyyo....ozzyyzyyyyyzyzzo....ooyyxxxxo. +oxxxxxyyyyo...ozzzzyyyyyyzzzzo...ooyyyxxxxo. +oxxxxxyyyyyo..ozzzzyyzzzyzzzzo..ooyyyyxxxxxo +oyxxxxzyyyyyo.ozzzzzzzzzyzzzzo.ooyyyyyxxxxyo +oyyxxxxzyyyzzoozzzzzzzzzzzzzzo.oyyyyyxyyyzyo +oyyzxyyyzyyzzoozzoooooooooozzoozyyyyzyyyyzzo +oyyyzyyyyzyzzoooo..........oooozzyyzyyyyyzo. +.oyyyyyyyzzzzo.......P........ozzyzyyyyyzzo. +.oyyyzyyyzzoo..................oozyyyyyzzo.. +..oyyyzyzzo......................oyyyyzzzo.. +..oyyyzzzo........................ozyzzzo... +...ozzzzo..........................ozzzzo... +...oozzo............................ozzo.... +....ozo..............................ozo.... +....ooo..............................oo..... diff --git a/parts_pl_src/back/pl_brawler_shell.txt b/parts_pl_src/back/pl_brawler_shell.txt new file mode 100644 index 0000000..0a4b728 --- /dev/null +++ b/parts_pl_src/back/pl_brawler_shell.txt @@ -0,0 +1,37 @@ +# pl_brawler_shell: pixellab_src/pl_brawler/pl_brawler_shell.png minus base.png +# pivot at (31, 36) +................oooooooo............... +.............ooobaaaaaacoo............. +..........ooocbaaaaaaaabbcooo.......... +........ooccccabbbbbbbbbbccccoo........ +.......oaabcccbbbbbbbbbbcccbbabo....... +......oaabbccccbbbbbbbbcccbbbaabo...... +.....oaabbbcccccccccccccccbbbbaabo..... +....oabbbbccccccccccccccccbbbbbaaao.... +...obbbooooccbbbbbboooobcccbbbbbbao.... +...obbo....ooooooo.....obccbbbbbbaco... +..occo..................obbccbbbbaco... +..occo...................obbcbbbbccco.. +..occo...................obbbccccccco.. +.obbco...................ocbbbccccccco. +ocbbco.....................cbbcccbbbao. +oabbco.....................cbbccbbbbbbo +oabbo.......................bbccbbbbbao +oabbo........................cccbbbbbao +oabbo.......................o.ccbbbbbao +obbbco........................ccbbbbbao +obbbcoo........P.............occcbbbbbo +ocbbcco......................occcbbbbbo +.occccco......................obccbbbco +.ooooccco.....................obcccccco +.....oco.......................occccco. +.....oo........................occbcco. +...............................occccco. +................................occco.. +................................occco.. +...............................occco... +...............................occco... +..............................occco.... +............................ooccoo..... +............................occo....... +............................oooo....... diff --git a/parts_pl_src/back/pl_bubbles_toxic.txt b/parts_pl_src/back/pl_bubbles_toxic.txt new file mode 100644 index 0000000..8f1b51d --- /dev/null +++ b/parts_pl_src/back/pl_bubbles_toxic.txt @@ -0,0 +1,36 @@ +# pl_bubbles_toxic: pixellab_src/pl_slime/pl_bubbles_toxic.png minus base.png +# pivot at (44, 33) +....................................oooo.... +...................................ozzzzo... +..................................ozxxxxzo.. +....ooooo........................ozxxxxxxzo. +...ozzzzzo......................ozxxxxxxxxzo +..ozxxxxxzo.....................ozxxxxxxxxzo +.ozxxxxxxxzo....................ozxxxxxxxyzo +ozxxxxxxxxyzo...................ozyxxxxxyyzo +ozxxxxxxxxyzo....................ozyyyyyyzo. +ozyxxxxxxyyzo.....................ozyyyyzo.. +ozyyxxxxyyyzo..................oo..ozzzzo... +.ozyyyyyyyzo..................ozzo..oooo.... +..ozyyyyyzo.ooo..............ozxxzo......... +...ozzzzzo.ozzzo............ozxxxxzo........ +....ooooo.ozxxxzo...........ozxxxxzo........ +.........ozxxxxxzo..........ozyxxyzo..ooo... +.........ozxxxxyzo...........ozyyzo..ozzzo.. +....ooo..ozyxxyyzo............ozzo..ozxxxzo. +...ozzzo..ozyyyzo..............oo..ozxxxxxzo +..ozxxxzo..ozzzo...............oo..ozxxxxxzo +.ozxxxxxzo..ooo...............ozzo.ozxxxxyzo +.ozxxxxyzo...oo..............ozxxzo.ozyyyzo. +..ozyxxyo...ozzo.............ozxxzo..ozzzo.. +...ozzzzo..ozxxzo............ozyyzo...ooo... +....oooo...ozxxzo.............ozzo.oo....... +...........ozyyzo..............oo.ozzo...... +........ooo.ozzo.................ozxxzo..... +.......ozzzo.oo.................ozxxxxzo.... +......ozxxxzo...................ozyxxyzo.... +.....ozxxxxyzo...................ozyyzo..... +.....ozyxxxyzo....................ozzo...... +......ozyyyzo.....................oPo....... +.......ozzzo................................ +........ooo................................. diff --git a/parts_pl_src/back/pl_cape_frost.txt b/parts_pl_src/back/pl_cape_frost.txt new file mode 100644 index 0000000..817ccd9 --- /dev/null +++ b/parts_pl_src/back/pl_cape_frost.txt @@ -0,0 +1,19 @@ +# pl_cape_frost: pixellab_src/pl_sprite/pl_cape_frost.png minus base.png +# pivot at (31, 50) +.........ooooo.....................ooooo........ +.........oiii.....................jiiiio........ +.........ojjii..................iiiijjo......... +..........ojjii..k.........k..iiiijjjo.......... +...........ojjiiii.........iiiiijjjjo........... +...........ooiiiiiiiko...oiiiiiiiijjo........... +.........ooiiiijjjijjo...oiijjiiiiijjo.......... +........oiiiiijjoiijo..P..oijooiiiiiiioo........ +.......oiiiijjoooijo.......ojo.ojiiiiiiio....... +.....ooiiiijjo..ooo.........oo..ojiiijiiio...... +....ooiiijjjokoooko.........oo..ooiiijjiiio..... +...ooiiijjookkkkkko.........okookkoiiijjiiio.... +..oiiijjjjjjkkkjkko.........okkkkkkoiiikkjiio... +.oiijjjjjjjkkkjjkkko........okkkkkjkkiiikjjjio.. +oiijjjooojkoojjkokko.........ojkookjojiikkjjjio. +oijjoo..ooo..ooo.oo..........ooo..ooookiiooojjjo +oooo..................................oooo..oooo diff --git a/parts_pl_src/back/pl_cape_short.txt b/parts_pl_src/back/pl_cape_short.txt new file mode 100644 index 0000000..7cbd0aa --- /dev/null +++ b/parts_pl_src/back/pl_cape_short.txt @@ -0,0 +1,20 @@ +# pl_cape_short: pixellab_src/pl_monk/pl_cape_short.png minus base.png +# pivot at (33, 44) +......................o........ +...................ooozo....... +...............ooooyyxxyo...... +...............oyyxxoooxxo..... +...............oPooo..ozxo..... +.......................ozxo.... +...oo..................ozzxo... +..oxo..................ozzxxo.. +..oyo..................ozzzxo.. +.oxzzo................ozzzzzxo. +.oxzzzoo.............ozzyzzzxo. +oxzzzyzo.............ozzyyzzzxo +oxzzyyo..............oozzyyzzxo +oxzzyyoo..............oozyyzzxo +oyzooyzo..............oozyoozxo +oyo..oo...............ozoo..oyo +oyo...................oo....oyo +.o...........................o. diff --git a/parts_pl_src/back/pl_cloud_puffs.txt b/parts_pl_src/back/pl_cloud_puffs.txt new file mode 100644 index 0000000..fc640d5 --- /dev/null +++ b/parts_pl_src/back/pl_cloud_puffs.txt @@ -0,0 +1,43 @@ +# pl_cloud_puffs: pixellab_src/pl_duck/pl_cloud_puffs.png minus base.png +# pivot at (34, 34) +........oooo............ +......oo2111oo.......... +.......2111111o......... +.......21111111o........ +.......21111111o........ +.......211111111o....... +.......121111112o....... +.......112111112o....... +.......111211122o....... +.......111211222oo...... +.......11121122211oo.... +.......1122222211111o... +......o1112222111111o... +.......o2222221111111o.. +........o222221111111o.. +........o2222211111111o. +.........o222221111111o. +.........o211122111111o. +.........o211112111112o. +.........o211111211122o. +.........o21111122222o.. +.........o21111122222o.. +.........o2211112222o... +.........o22222221111o.. +.........o222222111111o. +........o2222221111111o. +.......o211112211111111o +P.....o2111111211111112o +.......1111111221111122o +.......1111111122111222o +.......111111111222222o. +.......111111111222222o. +.......111111112222222o. +.......11.111112322222o. +.......22211112232222o.. +.........22..22222222o.. +.........22..2232222o... +........22222.o22222o... +..........2222o2222o.... +........o222oo2222o..... +.........ooooooooo...... diff --git a/parts_pl_src/back/pl_coils_electric.txt b/parts_pl_src/back/pl_coils_electric.txt new file mode 100644 index 0000000..b6bad32 --- /dev/null +++ b/parts_pl_src/back/pl_coils_electric.txt @@ -0,0 +1,37 @@ +# pl_coils_electric: pixellab_src/pl_imp/pl_coils_electric.png minus base.png +# pivot at (30, 32) +.............oo..........ooo........... +...........ootto........ottuo.......... +..........otutuo........oottto......... +..........otutuuo......ouututo......... +...........ooutuo......outtuo.......... +............ouutuoo..oouttuo........... +.............ottuu....uttuo..........o. +.............outt......ttuo.........oto +.............o..........uuo.........oto +....................................oto +.o.................................oto. +oto................................oto. +.oto..............................oto.. +.ottooo..........................otto.. +..ootsto...........P............otso... +....oosso......................otsso... +......oto.......................osso... +......otoo......................ossto.. +.....otstso....................otsso... +.....otoosto.o...............ootsoo.... +......o..osooto............ootsso...... +.........otsstso..........otsssto...... +..........otsssto..........otstso...... +.........otstsso............oootso..... +........ootoooo................ostoo... +.......otso.....................oosto.. +.......oso......................otsto.. +......otso......................otso... +.......ooto......................oso... +........oto.......................oto.. +.......oto........................oto.. +.......oto.........................o... +......oto.............................. +......oto.............................. +.......o............................... diff --git a/parts_pl_src/back/pl_coral_back.txt b/parts_pl_src/back/pl_coral_back.txt new file mode 100644 index 0000000..897626e --- /dev/null +++ b/parts_pl_src/back/pl_coral_back.txt @@ -0,0 +1,17 @@ +# pl_coral_back: pixellab_src/pl_axolotl/pl_coral_back.png minus base.png +# pivot at (38, 33) +......oo...... +.....oaco..... +.oo..obao..o.. +oacoo.oao.oao. +oacoaoocooaao. +ocboaooaaaao.. +.ocao.oaaco... +.ocao.oaco.ooo +.occooabo.oaao +..ocoaabo.oaco +...obacoooacoo +....occccabo.. +....Pccccco... +.....ocooo.... +.....oo....... diff --git a/parts_pl_src/back/pl_crystal_cluster.txt b/parts_pl_src/back/pl_crystal_cluster.txt new file mode 100644 index 0000000..e711343 --- /dev/null +++ b/parts_pl_src/back/pl_crystal_cluster.txt @@ -0,0 +1,29 @@ +# pl_crystal_cluster: pixellab_src/pl_pebble/pl_crystal_cluster.png minus base.png +# pivot at (31, 30) +..oooo............................................ +.oyxxxoo....................................oooo.. +.oyxxxxxo.................................ooxxxyo. +.ozxxxxxxo...............................oxxxxxyo. +.ozxxxxxxo...............................oxxxxxyo. +.ozxxyzxxyo..oo.........................oxxxxxxyo. +.ozxxyyzxxo..oyo....................oo..oxxyzxxzo. +..ozzyyyyxyoozyxo..................oxzooxxxyyyzzo. +..oozzyyzxxoozyxo.................oxxzooxxzyyzzoo. +...ozzyyyzxyozyxo.................oxxzoyxzyyzzzo.. +....ozzyyyxxozyyo.................oxyzoyyzyzzzo... +....oozzyyzxzzooo.................ooyzzyzyyzzoo... +.....ozzzyzyooo....................oooyyzyzzzo.... +ooooooozzyyoo........................ooyzyzzo.oooo +oyxxxyoozzoo..........................oozzzzooxxxo +oyxxxxyozoo............................oozzoxxxxxo +ozxxzyxyzo..............................ozzxxxyxzo +.oyzyyyxoo..............P...............ooyxyyyzzo +.oozzyyyo................................oyyyzzzo. +...oozzyo................................ooyzzoo.. +....oozo..................................ozzo.... +...ooooo..................................ozoooo.. +..oxxyo...................................ooxxxxo. +..ozxyo....................................oyyyzo. +..ozzzo....................................ozzzzo. +...oozo....................................ozzoo.. +.....oo....................................ooo.... diff --git a/parts_pl_src/back/pl_dino_crystals_back.txt b/parts_pl_src/back/pl_dino_crystals_back.txt new file mode 100644 index 0000000..ab9d0f1 --- /dev/null +++ b/parts_pl_src/back/pl_dino_crystals_back.txt @@ -0,0 +1,25 @@ +# pl_dino_crystals_back: pixellab_src/pl_dino/pl_dino_crystals_back.png minus base.png +# pivot at (38, 30) +.......o....... +......ozo...... +..o..ozxzo..... +.ozoozxxzo..... +.oyzoxxxzo..... +ozxzzxyzzo..... +ozxzzxyzzoooo.. +ozxzxyyzzozzzo. +.oyzxyyzzyxxzo. +.oooxyzzxxyyzo. +....oozxyyyzo.. +......oyyyzoo.. +.......oyzzzzo. +........oyxxxzo +........oyyyyzo +.........oyyzo. +.........ozzo.. +....P....o.oo.. +.........oxyzo. +.........oxxyzo +.........ozyxzo +.........oozzo. +...........oo.. diff --git a/parts_pl_src/back/pl_drake_crystals.txt b/parts_pl_src/back/pl_drake_crystals.txt new file mode 100644 index 0000000..5ed23c4 --- /dev/null +++ b/parts_pl_src/back/pl_drake_crystals.txt @@ -0,0 +1,42 @@ +# pl_drake_crystals: pixellab_src/pl_drake/pl_drake_crystals.png minus base.png +# pivot at (26, 42) +................oo......... +...............ooxo........ +..............oxxxo........ +.............oxxxxo........ +............oxxxxyo........ +.ooo.......oxxxxxyyo....... +.oxyoo.....oxxxxxyyo....... +.oxxzzo....oxxzzzyyo....... +ooxxxxzo..ozxxzzzzzo....... +oxxxxzzo..ozxxzzzzzo....... +oxxxzzzo..oxxzzzzzo........ +.ozxxzzzoooxxzzzzzo........ +.ozxxooooooxzzzzzo......... +..oxo..ooozyzzzzzo......... +..oo...ozozzzzzzo.......... +.......ooooozzzzo.......... +...........oozzoo.......... +.............oo............ +........................... +........................... +........................... +........................... +........................... +........................... +........................... +........................... +......................oooo. +....................ooxxxo. +...................oxxxxxo. +................oo.oxxxxxo. +..............ooxoozxxxxxo. +..............oxxozxxzzzxo. +..............ozxozxxzzzzo. +..............ozzoxxzzzzo.. +.......P......ozoxxzzzzo... +..............ozzxzzzzooooo +..............ozooozzozxxxo +..............oo..ozoxxxxzo +..................ozxzzzzo. +..................ooooooo.. diff --git a/parts_pl_src/back/pl_fin_dorsal.txt b/parts_pl_src/back/pl_fin_dorsal.txt new file mode 100644 index 0000000..29562fb --- /dev/null +++ b/parts_pl_src/back/pl_fin_dorsal.txt @@ -0,0 +1,16 @@ +# pl_fin_dorsal: pixellab_src/pl_guppy/pl_fin_dorsal.png minus base.png +# pivot at (32, 33) +.......oooo. +......obaco. +.....obabco. +....obabcco. +...obabbco.. +..obabbcco.. +.obabbbcco.. +.obabbcco... +obabbbcco... +obabbbcco... +obbbbbccco.. +obbbbbbccco. +obboPoooocco +.........ooo diff --git a/parts_pl_src/back/pl_flower_back.txt b/parts_pl_src/back/pl_flower_back.txt new file mode 100644 index 0000000..17ff17a --- /dev/null +++ b/parts_pl_src/back/pl_flower_back.txt @@ -0,0 +1,41 @@ +# pl_flower_back: pixellab_src/pl_mochi/pl_flower_back.png minus base.png +# pivot at (31, 31) +...................oooo...oooo.................... +..................occccooocccco................... +.................ocbbbbcccbbbbco.................. +................ocbbbbbbcbbbbbbco................. +................ocbbbbbbcbbbbbbbco................ +...............ocbbbbbbbcbbbbbbbco................ +...............ocbbbbbbbcbbbbbbbcco...ooooo....... +...............ocbbbbbbbcbbbbbbbbco.oocccccoo..... +.......oooooo..ocbbbbbbbcbbbbbbbbcooccbbbbbbco.... +.....oocccccco.ocbbbbbbbcbbbbbbbbcoobbbbbbbbbco... +....occbbbbbbcoocbbbbbbbccbbbbbbbcobbbbbbbbbbco... +...obbbbbbbbbbccocbbbbbbccbbbbbbccbbbbbbbbbbbco... +..ocbbbbbbbbbbbcccbbbccbcccccbbbccbbbbbbbbbbbbo... +..ocbbbbbbbbbbbbcccbbccccccccbbbccbbbbbbbbbbbbco.. +..ocbbbbbbbbbbbbbccbbccccccccbbccbbcbbbbbbbbbbbco. +..occbbbbbbbbbbbbbcccccccccccbbccbccbbbbcccbbbbbco +.ocbbccccbbbbbccbbbccczzzzzzzcccccccbbccccbbbbbbco +.ocbbbbbcccbbbbccbbccyyyyyyyyzccccccccbbbbbbbbbbco +ocbbbbbbbbcccbbccccczyyyyyyxxyzccccccbbbbbbbbbbbco +ocbbbbbbbbbbbcccccczyyyyyyyxyxyzcccccbbbbbbbbbbbco +ocbbbbbbbbbbbccccczzyyyyyyyyyxyycccccbbbbbbbbbbco. +ocbbbbbbbbbbbbcccczzyyyyyyyyyyxyzccccbbbbbbbbbbco. +ocbbbbbbbbbbbbcccczzyyyyyyyyyyyyzccbbbbbbbbbbbco.. +.ocbbbbbbbbbbbbccczzyyyyoooyyyyyzccbbbbbbbbbcco... +..ocbbbbbbbbbbbccczzooo....oooyyzcccccooccccoo.... +...occcbbbbccccccczo..........oyccccccccoooo...... +....occcccccccoooooo..........oooooobbbbbccoo..... +.....oooobbbbo......................obbbbbbcco.... +.....occbbbbo...........P............obbbbbbco.... +....ocbbbboo..........................oobbbbbco... +...ocbbbbo..............................obbbbcoo.. +...ocbbbo................................obbbbco.. +..ocbbbo..................................obbbcco. +..ocbbo....................................obbbco. +..ocbbo....................................obbbco. +...obbo....................................obbco.. +...ocbo....................................obbco.. +...oco......................................oco... +....oo......................................oo.... diff --git a/parts_pl_src/back/pl_icicles_back.txt b/parts_pl_src/back/pl_icicles_back.txt new file mode 100644 index 0000000..d638f2a --- /dev/null +++ b/parts_pl_src/back/pl_icicles_back.txt @@ -0,0 +1,22 @@ +# pl_icicles_back: pixellab_src/pl_seal/pl_icicles_back.png minus base.png +# pivot at (39, 39) +..ooo....... +.oiiio...... +.oijjo...... +.oiko....... +ojiko.ooo... +okikooiiio.. +.oikooiiio.. +.oikoiijo... +.oikjijkooo. +.oikiikooiio +.oiiijkjiiio +.Pkjikjiijko +.okkkiikkko. +okkkkikkooo. +okkkkkiiiiio +okkkkkkkkkjo +okkkkkkkooo. +okkkkkkiioo. +.oooookkkio. +......oooo.. diff --git a/parts_pl_src/back/pl_leaf_cape.txt b/parts_pl_src/back/pl_leaf_cape.txt new file mode 100644 index 0000000..ab32a1d --- /dev/null +++ b/parts_pl_src/back/pl_leaf_cape.txt @@ -0,0 +1,31 @@ +# pl_leaf_cape: pixellab_src/pl_fawn/pl_leaf_cape.png minus base.png +# pivot at (34, 44) +...........ooo.................... +...........ozxo.ooooo............. +...........ozxxozzxxoooo.......... +..........ozzxzzzzzzxxxoo......... +..........ozxxzyxxxzzzxxxoo....... +..........oxxzzyyxxxzzzxxxxo...... +....ooo..oxxzzyxzzxxxxzzxxxxo..... +....ozoy.ozzyxxzxxzzzxxzzzzoo..... +....ozyo.ooxyyxxzzxxzzxzyyyoo..... +...oyzyo..ozxyxxxzxxxzzxzyyyo..... +...oyzyo...oxyxzxzzxxzyyzzxxxo.... +...oyxooo..oxyxoxxzzxxzyxzzxxo.... +...oyxozo..ooPxooxyzzxxzxxzxxxo... +....oozzo...ooxooxxyzxxzxxzzyyzo.. +....oozzo....oozoxxyzzzyzxxzyxxo.. +....ozzzo.....ozzoxyxzzxxzxxzxxo.. +....ozzzo.....ozzoxyxzzxxzxxzzxzo. +...oyzzzo.....ozzoxxxxzxxzzxxzxxo. +...oyzzzo.....ozzooxxxzxxzzxxxzxxo +..oxzzzzo.....ozzoooxxzxxozxxxzxxo +.oxxzzzzo.....oooo.oxxzzxozzxxxzxo +.oxzzzozo..........oxxxzxxooxxxzxo +.oyzzzooo...........oxxzxxo.oxxzxo +oozzoo...............oxzzxo..oxzxo +ozzoo................oxxzxo...ozxo +.oo...................oxzxo....oxo +.......................ozxo.....oo +........................ozo....... +.........................o........ diff --git a/parts_pl_src/back/pl_mane_bristle.txt b/parts_pl_src/back/pl_mane_bristle.txt new file mode 100644 index 0000000..8b388b5 --- /dev/null +++ b/parts_pl_src/back/pl_mane_bristle.txt @@ -0,0 +1,26 @@ +# pl_mane_bristle: pixellab_src/pl_boar/pl_mane_bristle.png minus base.png +# pivot at (27, 21) +.............oo.......... +............ooo.......... +............oao.......... +.......o...oaao...oo..... +......oao..oaao..oco..... +......oao..oaao..oao..... +......oao.oaaao.oaao...oo +.....oaao.oaaao.oaao..oco +.....oaao.oaaacocaao.oaco +..o..oaacocaaacocacooaaco +..o..oaaaocaaacoaacooaao. +.oao.oaaaccaaacoaacocaco. +.oacocaaaccaaaccaacoaaco. +.oabocaaaccaaaacaaccaaco. +.oaaocaaaacaaaacaaccoooo. +.oaacccaaacaaaacccoo..... +.oaaaccaaacaccccoo....... +ocaaaccaaaccccoo......... +ocaaaacaPccooo........... +ocaaaacccooo............. +ocaaaccco................ +ocaacooo................. +occcoo................... +.ooo..................... diff --git a/parts_pl_src/back/pl_mane_fire.txt b/parts_pl_src/back/pl_mane_fire.txt new file mode 100644 index 0000000..9576f92 --- /dev/null +++ b/parts_pl_src/back/pl_mane_fire.txt @@ -0,0 +1,47 @@ +# pl_mane_fire: pixellab_src/pl_brawler/pl_mane_fire.png minus base.png +# pivot at (31, 36) +...................o................ +..................oho............... +..................ohho.............. +..................ohhho............. +..................ohghho............ +..................ohggho............ +..................ohgghho........... +..........o....o..ohgggho..o........ +.........oho..ohoohggggho.oho....... +.........ohhoohhohgggggho.ohho...... +.........ohhoohghhggggghooohho...... +.........oghohhggggfggghohggho...... +........ohghhhgggfffgghoohggho...... +.......ohgghhhgggfffgghoohggho...... +.....oohggfhgggggfffgghhhgggho..o... +....ohohgghhgggfffffggggggggho.oho.. +...ohhohgghgggffffffggggggggho.oho.. +...ohghhghhgggfffffffggggfggho.ohho. +...ohghgghggfffffffgfggfffggghohgho. +...ohgggfhggffffffggfgffffggghhhgho. +...ohgfoohggffffgghoooofffggghhggho. +..oohgo..hhggfgggh.....offffgggggho. +.ohoho....hggfgh........offfgggghho. +.ohoho......ggh..........offffggho.. +.ohhho......hh...........offffgho... +ohhhgo...................ooffggho... +ohgggo.....................ofghho.o. +ohgggo.....................hgghhooho +ohggo.......................gfghohho +.ohgo......................hffghhhho +.ohgo....................o.hffggggho +ohhgfo..................o.ggfffggho. +ohggfo.........P.....ohhhggfffgggho. +ohggffo..............hggggffggghhho. +.ohgggfo............hhgggffgghhhoo.. +.ooooggfo.........ggoooogggg2.oo.... +.....ohgff........go....ohhh........ +.....oohgfggfffgggo......oooo....... +.......ohgggfffgggo................. +.......ohghggfgghgo................. +.......o.hhggfgh.ho................. +.........o.hggh..ho................. +...........hggh..................... +............hh...................... +.............h...................... diff --git a/parts_pl_src/back/pl_mane_flame.txt b/parts_pl_src/back/pl_mane_flame.txt new file mode 100644 index 0000000..9f09ef4 --- /dev/null +++ b/parts_pl_src/back/pl_mane_flame.txt @@ -0,0 +1,38 @@ +# pl_mane_flame: pixellab_src/pl_drake/pl_mane_flame.png minus base.png +# pivot at (26, 42) +.......o....o.............. +.....ooho..oho............. +....ohhgo..ohho............ +...ohgggooohggo............ +..ohgfhoohhgghoooo......... +.ohgffhohggfgoohgho........ +ohgfffghggffhohggo......... +ohgfffffffffghgggo......... +ogffffhhhhgffffgoo......... +ogffghh...hggfoo........... +.hggh.......ho............. +.hh...............o........ +.................oho....... +................ofghoo..... +................oooghho.... +...................oggo.... +..................oogho.... +.................oggho..... +..............oooggho...... +..............ogfggoo...... +..............ogfggoho..... +..............oofgghgo..... +...............offgggo..... +...........oooofffgho...... +..........ohggffghho....... +...........hgffggooooo..... +...........hgffggoohhgo.... +......P....ohgfgghhggho.... +.............hffgggggo.oo.. +.............hgffffgo.ohho. +.............hhgggfhoohggo. +............o...ggffghggoo. +.................hhffffgogo +..................oggffghgo +....................gffffho +.....................hhhho. diff --git a/parts_pl_src/back/pl_mushrooms_back.txt b/parts_pl_src/back/pl_mushrooms_back.txt new file mode 100644 index 0000000..4110ab9 --- /dev/null +++ b/parts_pl_src/back/pl_mushrooms_back.txt @@ -0,0 +1,16 @@ +# pl_mushrooms_back: pixellab_src/pl_grub/pl_mushrooms_back.png minus base.png +# pivot at (32, 22) +........ooo......... +.......owabo........ +.......oaaaao....... +......ocaaawbo...... +....ooobwaaacooo.... +...owaboccccooawo... +...oaawcozzooaaao... +.oocwaacoxxobwaacoo. +owaocccoooooooccoaao +oaaaozzo....ozzoaawo +.ocooxo.....oxxocbbo +..ozoxo...P.oyxozoo. +..ooooo.....ooooxo.. +................oo.. diff --git a/parts_pl_src/back/pl_pearl_orb.txt b/parts_pl_src/back/pl_pearl_orb.txt new file mode 100644 index 0000000..cebd1dc --- /dev/null +++ b/parts_pl_src/back/pl_pearl_orb.txt @@ -0,0 +1,18 @@ +# pl_pearl_orb: pixellab_src/pl_wyrm/pl_pearl_orb.png minus base.png +# pivot at (34, 30) +..oooo... +.oyyyyo.. +oyywyyzo. +oywyyyyzo +oyyyyyzzo +ozyyyzzzo +.ozzzzzo. +..oozzo.. +....oo... +......... +......... +......... +......... +......... +......... +...P..... diff --git a/parts_pl_src/back/pl_plates_rock.txt b/parts_pl_src/back/pl_plates_rock.txt new file mode 100644 index 0000000..cbc4bee --- /dev/null +++ b/parts_pl_src/back/pl_plates_rock.txt @@ -0,0 +1,34 @@ +# pl_plates_rock: pixellab_src/pl_cub/pl_plates_rock.png minus base.png +# pivot at (38, 28) +..........ooo................. +.........oxxyo................ +........oxxxyyo............... +.ooo....oxxyyyo.....ooo....... +oxxyo...oxxyyzo....oxxxo...... +oxxyyo.oxxxyyxzo..oxxxzo...... +oxxxzzooxxxyzxzo.oxxxzzo...... +oxooxzooxoozzzzooxxxzzzo...... +.o.ozzooxo.ozzzooooooooo...... +....ooooo..ozzzo.............. +............ooo............... +.............................. +.............................. +.............................. +...............P.............. +.............................. +.......................oooooo. +.....................oozzxxxxo +.....................ozzxxxxyo +.....................oozzxxzzo +.......................ozzzzzo +.......................oozzoo. +........................ozo... +........................oo.... +....................oooo...... +..................ooozxxo..... +..................ozzzxxxo.... +...................ozyyxxo.... +....................ozyyxxo... +.....................oyyyxo... +.....................oooyxo... +.......................ooo.... diff --git a/parts_pl_src/back/pl_rocks_dirt.txt b/parts_pl_src/back/pl_rocks_dirt.txt new file mode 100644 index 0000000..19ccb75 --- /dev/null +++ b/parts_pl_src/back/pl_rocks_dirt.txt @@ -0,0 +1,31 @@ +# pl_rocks_dirt: pixellab_src/pl_worm/pl_rocks_dirt.png minus base.png +# pivot at (40, 35) +....ooooooo.......... +...oyyyxxxyoo........ +.ooyxyyyyyxxyo....... +ozzzxyyyyyyyyyo...... +ooozzzyyzyyyyxyo..... +...oozzzyyyyzxxyo.... +.....oozzyyyzzyyyo... +.......ozzyyyyyyxyo.. +........ozzyyyyyxyo.. +.........ozyyyzyyyyo. +..........ozzyyyyyxyo +..........oozzyyyyyyo +...........ozzyyzxyyo +............ozyyzzyyo +............ozzyyyyzo +.............ozyyyyzo +...........P.ozyyzzzo +.............ozzzzzo. +.............ozzzzzo. +.............ozzzoo.. +.............ozzoyxo. +.............ooozyxyo +.............ozzyyxyo +............ozzyyyyyo +............oozzyyzzo +.............ozzzzzoo +.............ozzzzzo. +.............ozoooo.. +.............oo...... diff --git a/parts_pl_src/back/pl_saddle_rock.txt b/parts_pl_src/back/pl_saddle_rock.txt new file mode 100644 index 0000000..4988f7c --- /dev/null +++ b/parts_pl_src/back/pl_saddle_rock.txt @@ -0,0 +1,20 @@ +# pl_saddle_rock: pixellab_src/pl_boar/pl_saddle_rock.png minus base.png +# pivot at (27, 21) +..........oooooooo....... +.........oxxyyyyyyo...... +........oyxxxxyyyyyo..... +.......oyyxyyyyxyyyyo.... +.......oyyyyyyyyzyyyo.... +.......oyyyyyyyyzyzyo.... +.......oyyyyyyyzzyzzo.... +....oooozzyyyzzzzzzzo.... +...oxxyyczzzzzzccccccoo.. +..oxxyyyycczzccxyyyxxyyo. +.oyyyyyyzzbccxxyyyyxyyyyo +ozyyzzooooocyyyyyyyzyyyyo +ozzooo.....cyyyyyyyzzzzzo +ooo........ooyyyyyzzooooo +.............zzyzzoo..... +................oo....... +......................... +........P................ diff --git a/parts_pl_src/back/pl_sail_fin.txt b/parts_pl_src/back/pl_sail_fin.txt new file mode 100644 index 0000000..d891cd3 --- /dev/null +++ b/parts_pl_src/back/pl_sail_fin.txt @@ -0,0 +1,34 @@ +# pl_sail_fin: pixellab_src/pl_eel/pl_sail_fin.png minus base.png +# pivot at (39, 26) +.......oo....... +......oao....... +.....obao....... +....oabbo....... +....oabbo....... +...oacbbbo...... +..oabcbbbo...... +.obabcbbbo...... +.obcbcbbcbo..... +.obcbcbccbo..... +obcbbcccbbbo.... +ooooooocbcbo.... +.......oocco.... +.........ocbo... +..........oco... +...........obo.. +...........oco.. +............oo.. +..........P.oco. +............oco. +.............oco +.............oco +.............oco +.............oco +.............oco +.............oco +.............oco +............oco. +............oco. +............oco. +...........oco.. +...........oo... diff --git a/parts_pl_src/back/pl_scarf_long.txt b/parts_pl_src/back/pl_scarf_long.txt new file mode 100644 index 0000000..8347221 --- /dev/null +++ b/parts_pl_src/back/pl_scarf_long.txt @@ -0,0 +1,23 @@ +# pl_scarf_long: pixellab_src/pl_monk/pl_scarf_long.png minus base.png +# pivot at (33, 44) +..............................oooo...... +............................ooaaaao..... +................oooo.......oaaaaaaaoo... +oo........oooooccocco.....oaaaaaaaaaaoo. +ocooooooooaccccccoocco...oaaaaaccccccco. +oaacccaaaaccaaooooocccooocaaaaboooccccco +ooaaacccbcPaco...ococcbacccaaboo..occcco +..ocaaaccccoo....ocoocccaaaaoo.....oocco +..oooooooooo.....oco.oocccoo.........oo. +.................oco...ooo.............. +.................occo................... +................occcco.................. +.................occco.................. +..................occco................. +..................occaco................ +..................occcaco............... +...................occacco.............. +...................occcaaaoo............ +....................occcbaaaoooo........ +.....................oocccccccooo....... +.......................oooooooo......... diff --git a/parts_pl_src/back/pl_seal_shell.txt b/parts_pl_src/back/pl_seal_shell.txt new file mode 100644 index 0000000..683d968 --- /dev/null +++ b/parts_pl_src/back/pl_seal_shell.txt @@ -0,0 +1,14 @@ +# pl_seal_shell: pixellab_src/pl_seal/pl_seal_shell.png minus base.png +# pivot at (39, 39) +....P.... +......... +......... +...ooo... +..zzzzo.. +.zyxyyzo. +zyxzzyyzo +zyzyyzyzo +zyzzyzyzo +.zyzzyzo. +..zyyzo.. +...zz.o.. diff --git a/parts_pl_src/back/pl_shell_spiral.txt b/parts_pl_src/back/pl_shell_spiral.txt new file mode 100644 index 0000000..f4ac0f3 --- /dev/null +++ b/parts_pl_src/back/pl_shell_spiral.txt @@ -0,0 +1,31 @@ +# pl_shell_spiral: pixellab_src/pl_crab/pl_shell_spiral.png minus base.png +# pivot at (30, 31) +............oooooooooo.............. +.........oooyyyyyyyyyyoooo.......... +........oyyyyyyyyyyyyyyzzzoo........ +......ooyyyxxxxxxyyyyyyzyyzzo....... +.....oyyxxxxxxxxxyyyyyzyyyyzzo...... +....oyyxxxxxzyyyyyyyyyzyyyyzzzo..... +...ooyyxxxyyzyyyyyyyyzzyyyyyzzzo.... +...oyzyxxxyyzyyyyyyyyzyyyyyyyzzzo... +..oyyyzyyyyyzzyyyyyyzzyyyyyyyyzzo... +..oyxxyzyyyyyzyyyyyzzyyyyyyyyyyzzo.. +.oyyxxyyzyyooooooozzyyyyyyyyyyyzzo.. +.oyxxxyyyzoyyxxyyzozyyyyyyyyyyyzzzo. +ozyxxyyyyoyxxyyyyyzozyyyyyyyyyyyzzo. +oyzzzyyyoyxyyyyyyyyzoyyyyyyyyyyzzzo. +oyyyyzzoyxyyzoooyyyyzoyyyyyyzzzzzzzo +oyyyyyyoyxyyoyyzoyyyzozzzzzzzzzyzzzo +oyyyyyyoyyyyoyyyoyyyzozzzzzzyyyyzzzo +oyyyyyyoyyyyoozyoyyyzoyyyyyyyyyyzzzo +oyyyyzzzoyyyyyyzoyyyzoyyyyyyyyyzzzzo +oyyyyyyyozyyyyzozyyzzoyyyyyyyyyzzzzo +ozyyyyyyzozzzzozyyyzzozyyyyyyyzzzzo. +.ozyyyyyyzoooozyyyzzozyzzzzzzzzzzoo. +.ozoooooyyyyyyyyyzzzozyyyzzzzzzzo... +.oo.....oyyyyyyyzzzozzyyyyyyyyyzo... +........oyyyyyooozzozzzooozzzzozo... +........ozzzzo...Pozzyo...ozzo.oo... +........oozzo.....ozzo.....ozo...... +..........ozo.....oozo.....ozo...... +..........ooo.......oo.....o.o...... diff --git a/parts_pl_src/back/pl_shroud_ghostfire.txt b/parts_pl_src/back/pl_shroud_ghostfire.txt new file mode 100644 index 0000000..2ebc207 --- /dev/null +++ b/parts_pl_src/back/pl_shroud_ghostfire.txt @@ -0,0 +1,52 @@ +# pl_shroud_ghostfire: pixellab_src/pl_owl/pl_shroud_ghostfire.png minus base.png +# pivot at (31, 34) +...................o........................ +..................ovoo...................... +...................ovvoo.................... +...................ovvvvo................... +....................ovvvvo.................. +.....................ovrvo.................. +.....................ovrvvo................. +.....................ovrrvo................. +................o....ovrrvo................. +...............ovo..ovrrrvo...oo............ +...............ovo.ovvrrrvo..ovvo........... +..............ovvoovvvrrrvo.ovvo............ +.............ovrvoovvrqrvo.ovvvo............ +............ovvrvoovvqqrvo.ovvvo............ +...........ovvvqvoovrqqrvo.ovvvo............ +...........ovvrqvvvvrqqrvo.ovvvvo........... +...........ovvrqrrrrrqqrrvoovqvvvo.......... +...........oovrqqrrrrqqqrrvvvqqooo.......... +.............oorqqqqqqqqqrrrqqo............. +...............oqqqqqqqqqqqrqo.............. +...............oqqqqqqqqqqqqo............... +................ooqqqqqqqqqqo............... +.................oovvvvvvooo................ +...................o......................o. +.........................................ovo +.........................................ovo +.o.......................................ovo +ovoo................................o...ovo. +.ovvo...ooo......................ooovo.ovvo. +..ovvo.ovro......................oqrvo.ovvo. +..ovvvoovro......................oqqvoovvvo. +..ovvvoovo.......................oqqvoovvvo. +..ovvvoovo...........P...........oqqvoovvvo. +..ovrvoovo.......................oqqvoovqvvo +.ovrrvoovo.......................oqqqvvrqvvo +.ovrrvovro.......................oqqqrrrqvvo +ovvqrrvrqo.......................oqqqqqqqvvo +ovvqrrrrqqo......................oqqqqqqqvvo +ovvqqrrrqqo......................oqqqqqqvvvo +ovvqqqqqqqo......................oqqqqqvvvvo +ovvvqqqqqqo......................oqqqqqvvvo. +ovvvrqqqqo........................oqqqrvvvo. +ovvvrqqqqo........................oqqqrvvo.. +.ovvrrqqov........................oqqqrvo... +..ovrrqqo..........................oqqvvo... +...ovrqqo..........................oqrvo.... +...ovvqo...........................oqvo..... +....ovvo...........................ovvo..... +.....oov...........................ovo...... +......o............................oo....... diff --git a/parts_pl_src/back/pl_slime_spikes_poison.txt b/parts_pl_src/back/pl_slime_spikes_poison.txt new file mode 100644 index 0000000..350154b --- /dev/null +++ b/parts_pl_src/back/pl_slime_spikes_poison.txt @@ -0,0 +1,39 @@ +# pl_slime_spikes_poison: pixellab_src/pl_slime/pl_slime_spikes_poison.png minus base.png +# pivot at (44, 33) +.........................oo......................... +.........................ozo........................ +.........................oyo........................ +.........................oyo........................ +........................oyyo........................ +........................oyyo........................ +............oo..........oyyo........................ +............oo..........oxyo..........oo............ +............oyo.........oxyo.........oyo............ +............oyzo........oxyo........ozyo............ +............ozyo........oxyzo.......oyzo............ +.............oyyo.......oxyzo......oyyo............. +.............oyyo......oyxyzo......oxyo............. +.............oyxyo.....oyxyzo.....oyxo.............. +.............oyxyzo....oyxyzo....ozxyo.............. +..............oyxyo....oyxzzo....oxxyo.............. +..............oyxyyo...oyxzzo...oyxyo...........o... +..ooo..........oxxyo...oyyzzzo..oxyyo.........oozo.. +..ozyo.........oxxyzo..ozyzzzo.oyxyzo........oyxzo.. +...oyyoo........oxyzzo.ozyzzzo.oxxyo.......ooyxzo... +....oxxyoo......ozyzzo.ozooozoozxzzo......oyxyzo.... +.....oyxyyo.....ozyyzzooo...oooyyzzo....ooyxyzo..... +......oxxyzoo....oyyzzoo.....ozyzzo....ozxxyzo...... +.......oyxyyzo...ozyyzzo.....ozyzzo...oyxxyyo....... +........oyxyyzo..ozyyzo......ozzzzo.ooyxyzzo........ +.........oyxyzzoo.ozyo........ozzo.oyxxyyzo......... +..........oyxxzzzoozzo........ozoooyyyzzzo.......... +...........ozxyzzzozo..........oozzyyzzzo........... +...........oozyyzzzoo..........ozzyyzzzo............ +............oozyyzzo............oyyzzzo............. +..ooo.........ozyyo..............ozzooP........oooo. +oozyyooooooooooozo................oo...ooooooooyyyzo +.oozyxyyyxxzzzzzo......................ozxxxxyxxyoo. +..ooozzyyyyxyyzo.......................oxyyyyyyoo... +.....oooozzzzyo.......................ozzzzzooo..... +.........oozzzo......................ozzzzoo........ +...........ooo.......................ooooo.......... diff --git a/parts_pl_src/back/pl_spikes_back.txt b/parts_pl_src/back/pl_spikes_back.txt new file mode 100644 index 0000000..0e471be --- /dev/null +++ b/parts_pl_src/back/pl_spikes_back.txt @@ -0,0 +1,34 @@ +# pl_spikes_back: pixellab_src/pl_dino/pl_spikes_back.png minus base.png +# pivot at (38, 30) +.....oo.............. +....obo.............. +...obbo.............. +...obbco...ooo....... +..obbcco..obbo....... +..obbcco.obbco....... +.obbccccobbcco....... +oobcccccobccco....... +obbcc......ccoooooo.. +obc..........ocbbbo.. +..............occco.. +...............oco... +...............oco... +................o.... +................ooo.. +...........P....ocbo. +................occbo +................occo. +................oco.. +................oo... +................oo... +...............ocbo.. +...............ocbo.. +..............occcbo. +.............oooooo.. +...........oocco..... +...........occco..... +............occbo.... +.............occco... +..............occo... +..............oco.... +..............o.o.... diff --git a/parts_pl_src/back/pl_spikes_frill.txt b/parts_pl_src/back/pl_spikes_frill.txt new file mode 100644 index 0000000..4253e63 --- /dev/null +++ b/parts_pl_src/back/pl_spikes_frill.txt @@ -0,0 +1,30 @@ +# pl_spikes_frill: pixellab_src/pl_snake/pl_spikes_frill.png minus base.png +# pivot at (35, 27) +......o............. +.....oo............. +....oco.......oo.... +...oaco......oco.... +...oaco.....obco.... +..oabo....ooabo..... +..oaco...ocaaco..... +.obbco..obabco...... +.obcco.obabco....... +ocbccoocbbcco....... +occccocbbcco........ +oooococbccco.....ooo +...ooocccco...ooocoo +.....oocco.oooaabco. +......oocoocbbbcoo.. +.......ooccbccco.... +......P.occccco..... +........occcoo...... +........oocoo....... +.........ooooooooo.. +.........occcbbbco.. +.........occcccooo.. +.........occcoo..... +.........oooo....... +.........ooo........ +.........ocbo....... +.........occo....... +.........ooo........ diff --git a/parts_pl_src/back/pl_spines_toxic.txt b/parts_pl_src/back/pl_spines_toxic.txt new file mode 100644 index 0000000..30fbc42 --- /dev/null +++ b/parts_pl_src/back/pl_spines_toxic.txt @@ -0,0 +1,24 @@ +# pl_spines_toxic: pixellab_src/pl_lizard/pl_spines_toxic.png minus base.png +# pivot at (32, 32) +...........oo........... +..........oyzo.......... +..oo......oyxo.......o.. +.oyyo.....ozxyo.....oyo. +.oyxo....ozyyyo.....oyyo +.oyxo....ozyyyo.....oyxo +ozyyyo...ozzyyo....oyyy. +ozyyyo....ozzzo....oyyy. +ozzyyo.....ooo.....ozyz. +.ozzzo.....oco......ozzo +..ooo......obo......ooo. +...oco.....oao.....oco.. +...occo...ocaco...ocao.. +...ocao...ocaco...oaco.. +...ocaao..occco..oaao... +...occaco.occco..oaco... +....occco.ooooo.ocaco... +....ocoo.......occcco... +....oo..........ooco.... +..................oo.... +........................ +.............P.......... diff --git a/parts_pl_src/back/pl_wings_bat.txt b/parts_pl_src/back/pl_wings_bat.txt new file mode 100644 index 0000000..25b44bc --- /dev/null +++ b/parts_pl_src/back/pl_wings_bat.txt @@ -0,0 +1,15 @@ +# pl_wings_bat: pixellab_src/pl_wisp/pl_wings_bat.png minus base.png +# pivot at (30, 40) +.......oooo..........................oooo....... +.....ooabbo..........................obbboo..... +....oaboobo..........................oboocbo.... +...oacocobo..........................obobocbo... +..oaccboobo..........................oboobccbo.. +.oacbbbooobo........................oaooobbbcbo. +.occbbbobocbooo....................obcobobbbcco. +oaobbboobbcocco...................ooocbbcobbbobo +ocoobbocbbccco....................occcbbcobbooco +oo..obocbbbcco........P...........occbbbcobo..oo +.....oocbooco.....................oocoobcoo..... +......oco..o........................o..oco...... +......oo................................oo...... diff --git a/parts_pl_src/back/pl_wings_bug.txt b/parts_pl_src/back/pl_wings_bug.txt new file mode 100644 index 0000000..8996688 --- /dev/null +++ b/parts_pl_src/back/pl_wings_bug.txt @@ -0,0 +1,21 @@ +# pl_wings_bug: pixellab_src/pl_bee/pl_wings_bug.png minus base.png +# pivot at (31, 35) +..ooo........................................ooo.. +.ozzzoo....................................oozzzo. +ozxxxxzoo................................oozxxxxzo +oxxxzyxyzoo.............................ozyxyzxxxo +oxxxxzxxzzzo..........................oozzxxzxxxxo +ozxxxxzzzxyzo........................ozyxzzzxxxxzo +.oyxyxxxzyxxzo......................ozxxyzxxxyyyo. +.ozyxxxxxzyxxzo....................ozxxyzxxxxxxzo. +..ozxxxxzzzzyo......................oxzzzzxxxxzo.. +...ozyxyxxxzo.......................oyyxxxyxzzo... +....oozyxxxxo........................oyxxxzzoo.... +....oooozzzo.........................ozzzzzooo.... +...ozzxxxxo.............P.............oyxxxxzzo... +..ozxxxzzo.............................ozzxxxxzo.. +..oxyyzxxo.............................oxxzyzzxzo. +.ozzxzxxo...............................oxxyyxzzo. +..oozxxzo...............................oxxxzzoo.. +....oozo.................................ozooo.... +......oo.................................ooo...... diff --git a/parts_pl_src/back/pl_wings_dragon.txt b/parts_pl_src/back/pl_wings_dragon.txt new file mode 100644 index 0000000..07ae954 --- /dev/null +++ b/parts_pl_src/back/pl_wings_dragon.txt @@ -0,0 +1,15 @@ +# pl_wings_dragon: pixellab_src/pl_drake/pl_wings_dragon.png minus base.png +# pivot at (26, 42) +...........................ooooooo........ +...........................o12212oo....... +...........................o2233331oo..... +...........................o232ccc311o.... +...........................o2c32bbc331o... +...oo.....................o22cc2bbbbc31o.. +..o23ooooo...............o223bb32bbaa331o. +.o23bc2c2o............ooo2233bab2cbaaac3o. +.o3bbc2bb2o....P.......2233bbaab2cbaaaac2o +o2caab2bbbo...........o23cbbaaaac2baooob2o +o2aaab2aao............o3ccbboooob2bo...ooo +obooob2ooo............oo..oo....o3o......o +oo...oo..........................o........ diff --git a/parts_pl_src/back/pl_wings_elytra.txt b/parts_pl_src/back/pl_wings_elytra.txt new file mode 100644 index 0000000..bf35ed4 --- /dev/null +++ b/parts_pl_src/back/pl_wings_elytra.txt @@ -0,0 +1,23 @@ +# pl_wings_elytra: pixellab_src/pl_beetle/pl_wings_elytra.png minus base.png +# pivot at (31, 25) +..........ooooo............................ooooo.......... +.........occaaaooo......................oooaaacco......... +........occaaaaaaaoo..................ooaaaaaaacco........ +........occaaaaaaaaao................oaaaaaaaaacco........ +........occaaaaaaaaaao..............oaaaaaaaaaacco........ +........occcbaaaaaaaaao............oaaaaaaaaaaccco........ +........occcbbaaaaaaaaao..........oaaaaaaaaabbccco........ +.........occbbbaaaaaaaabo........obaaaaaaaabbbcco......... +.........occbbbbaaaaaaabbo......obbaaaaaaabbbbcco......... +...ooooo..occbbbbaaaaaabbo......obbaaaaaabbbbcco..ooooo... +.ooyyyyyooocccbbbbbaaabbbco....ocbbbbaaabbbbcccoooyyyyyoo. +oayyyyyyyyaocccbbbbbabbbbco....occbbbabbbbbcccoayyyyyyyyao +oyyyyzzyzzzzocccbbbbbbbbccco..occccbbbbbbbcccozzzzzyxyyyyo +oyyyyyyyyyzzzoocccbbbcccccco..occccccbbbccccozzzzyyyyyyyyo +.ooyyyyzzzzyyaaoocccccccoooo..ooooccccccccoozzyyzzzzyyyxo. +...oyyyyyyyxyyaaaoccccoo..........ooccccooaazyyyyyyyyyoo.. +....oooyyyyyxxxxaaoooo......P.......ooooaaaxxxyyyyyooo.... +......oyyxxxxxaaaao....................oazzzxxxxxyyo...... +.......ooyxxyyxxzo......................ozxxxyyyyoo....... +.........oyyyyy2o........................o2xyyyxo......... +..........oooooo..........................oooooo.......... diff --git a/parts_pl_src/back/pl_wings_feather.txt b/parts_pl_src/back/pl_wings_feather.txt new file mode 100644 index 0000000..cc1599d --- /dev/null +++ b/parts_pl_src/back/pl_wings_feather.txt @@ -0,0 +1,45 @@ +# pl_wings_feather: pixellab_src/pl_fox/pl_wings_feather.png minus base.png +# pivot at (32, 32) +............ooo...........................ooo.. +............oyo...........................oyo.. +............oyzo.........................oxyo.. +............oyzo.........................oxyo.. +............oxzo........................oxxyo.. +............oxzzo.......................oxxyo.. +...........oyxzzoo.....................oxxxyo.. +...........oyxzzozo...................oxxxyo... +...........oyxzzzzo..................oxxxyyoooo +...........oxxzzxzo..................oxxxyzoyyo +..........oyxyzzxzo.................oxxxyyzoxyo +..........oyxyzyxzo................oxxxyyzoxxyo +..........oyxzzxxzo...............oyxxyyyzxxxyo +.........ooxyzyxyzooo............oxyxyyyzxxxyyo +.........oxyyzyxyzzyo...........ozyyyyyzxxxxyo. +.........oxyzyyyyzxyo..........oyxyyyzzyxxxyyo. +........oxyyzyyyzzxyo.........oxxxzyyzyxxxyyo.. +.......oyxyyzyyyzxyo........ooxxyyzyzyyxyyyzooo +.......oxxyyzyyyyxyo.......oxxxyyyyzyyyyyyzoyzo +.......oxxyyyzzyyyyooo....oxxxyyyzzyyyyyyzzyxzo +o......oxxyyyyzyyyzzzo...oxxxyyyzzzzyyyzzyxxyzo +oc......oxxyyyzyyzzyzo.oooxxyyzzyxxzyyyyxxxyyo. +.oc......oxyyyyzzzyyzoo12oxxyyzyyxxzyyyxxyyyo.. +.occ......oxyyyyzyyzo3123ooxyyzyyzzzyyyyyzzo... +.occc.....oxxyyyzyzoo122o3oxyyyzzzzyyyyzzzozo.. +..occb....oxooooozzo122oc3ozyyyyyxzzzzzzxxxzo.. +..oacb....o......oo122occ.ozxyyyyyzzyxxxxyyoo.. +..o.cc............o1..oca3ozxyyyzzyyyxyyyyoo... +...o.c.............2.occa3ozxyyzzyzyyyyzooo.... +......o...........P..oca.3ozxyyyxzzzzzzzxxo.... +....................occa.3oxxyzyxzzzzxxxxzo.... +....................oca.33oxyyzzzzyyxxyyzo..... +.....................3.a.oyxyyxxzyyyyzzoo...... +.....................3..3oxyyyxxzzzzzooo....... +.......................3oyxyzyzzzxxxxzzo....... +........................oyyzyzzzyyyzzzo........ +.......................oyyzzyzzzzzzooo......... +.......................oyzzzzzyyxxyo........... +......................ozzzzzyzzzzzo............ +......................ozzzyzyyzooo............. +.....................ozzzzyyooo................ +....................ozzzzzzzo.................. +....................ooooooooo.................. diff --git a/parts_pl_src/back/pl_wings_gold.txt b/parts_pl_src/back/pl_wings_gold.txt new file mode 100644 index 0000000..5845947 --- /dev/null +++ b/parts_pl_src/back/pl_wings_gold.txt @@ -0,0 +1,24 @@ +# pl_wings_gold: pixellab_src/pl_chick/pl_wings_gold.png minus base.png +# pivot at (33, 28) +.oo...................................... +oyo...................................ooo +oyxo.................................oxyo +oyyxo...............................oxyyo +ozyxo...............................oxyyo +ozyyxo.............................oxyyzo +.ozyyxo...........................oxyyzo. +oooyyxxo.........................oxxyzoo. +oyzzyzxxo.......................oxyyyzoyo +ozyyzzzxxo....................ooxyyyzzyyo +.ozyzyzzyo...................ozxyyyyzyyzo +..oyzyyzyzo.................oxxzzyzzyyzo. +..oozzyzzzo................oxxzzyzyyyzo.. +..ozyzzzoo.................oxyzyyzyyooo.. +...ozzoo..................ozxzyzzzzzzyo.. +....oo....................ozyzyyyzyyyzo.. +.................P........ozyzzzzzyyzo... +.........................ozzzzyyzzooo.... +..........................ozzyyzyyzo..... +..........................oooozzyyo...... +..............................ozzo....... +..............................ooo........ diff --git a/parts_pl_src/back/pl_wings_storm.txt b/parts_pl_src/back/pl_wings_storm.txt new file mode 100644 index 0000000..cd62c86 --- /dev/null +++ b/parts_pl_src/back/pl_wings_storm.txt @@ -0,0 +1,19 @@ +# pl_wings_storm: pixellab_src/pl_hawk/pl_wings_storm.png minus base.png +# pivot at (30, 34) +ooooooo............................................ooooooo +.osttttoooo....................................oooottttuo. +..ouutttttuoo................................ooutttttuoo.. +...oosttttttuo.............................oouttttttuo.... +.....osttttttuoo.........................ooutttttttso..... +......oottttttto.........................ottttttttoo...... +.......oouttttto.........................ottttttsoo....... +........osttttso..........................otttttuo........ +.......outtttoo............................osttttuo....... +......outtttuooo.........................oooutttttuo...... +.....outtttttuuuo......................oouuutttttttuo..... +.....otttttttttsuoooo...............ooouustttttttttto..... +....oooosssttttttuuso..............osusutttttttsssoooo.... +........ooooosttttoo................ooutttttsooooo........ +...........oosttto.........P.........ootttttso............ +...........osssso.....................oosssssuo........... +...........ooooo.......................oooooooo........... diff --git a/parts_pl_src/back/pl_wings_tiny.txt b/parts_pl_src/back/pl_wings_tiny.txt new file mode 100644 index 0000000..9897290 --- /dev/null +++ b/parts_pl_src/back/pl_wings_tiny.txt @@ -0,0 +1,24 @@ +# pl_wings_tiny: pixellab_src/pl_bunny/pl_wings_tiny.png minus base.png +# pivot at (29, 40) +.o...................................................o. +oyo.................................................oyo +oyyo...............................................oyyo +oyxyo.............................................oyxyo +oyxxyo...........................................oyxxyo +.oyxxyo.........................................oyxxxo. +.oyxxxyo.......................................oyxxxyo. +..oyxxxyoo...................................ooyxxxyo.. +..ozzxxyyzoo..............................oooyxyxxzzo.. +.oyzzzxzyxxo.............................ooyxxyzxzzyyo. +.oyxxyzzzyxo............................oyyxxzzzzyxxyo. +..oyxxxyzzzyo...........................ozxxzzzyyxxyo.. +...oyyxxzxxzo..........................oozxyyxzxxxyo... +....ozzyzzxzzo........................ooyxyyyxzxzzo.... +.....ozzzzzyxzo......................oyyxyyxzzzzzo..... +....oyxxxyzzzyyo........P...........ozyxyyyzzyxxxyo.... +.....oyyyyzzzyyzoo.................ozzzyyyzzzyyyyyo.... +......oozzzzzzzzzo..................ozzzzzzzzzzooo..... +........oozxyzzyo....................ozyzzyxzoo........ +.........oyzzzyo......................ozyzzzyo......... +..........oooooo......................ooyyoooo......... +.......................................ooo............. diff --git a/parts_pl_src/back/pl_wisp_orbs_bluefire.txt b/parts_pl_src/back/pl_wisp_orbs_bluefire.txt new file mode 100644 index 0000000..df0b11b --- /dev/null +++ b/parts_pl_src/back/pl_wisp_orbs_bluefire.txt @@ -0,0 +1,17 @@ +# pl_wisp_orbs_bluefire: pixellab_src/pl_wisp/pl_wisp_orbs_bluefire.png minus base.png +# pivot at (30, 40) +....o......................................oo..... +...omo....................................ommo.... +...ommo....................................ommo... +...ommmoo..................................ommmoo. +..oommmomo................................oommmnno +.omomlmomo...............................ommmlmoo. +.omomlmnmno.............................ommmmlmnno +onmmllmmmno.............................ommmllmmno +onmmlllmmno............................ommllllmmno +onmlllllmno............................ommlllllmno +onmlllllmno............................ommlllllmno +.onmllllno..............................onmllllmno +..onmmmno................................onmmmmno. +...onnno...............P..................onnnno.. +....ooo....................................oooo... diff --git a/parts_pl_src/body/pl_axolotl.txt b/parts_pl_src/body/pl_axolotl.txt new file mode 100644 index 0000000..25f2001 --- /dev/null +++ b/parts_pl_src/body/pl_axolotl.txt @@ -0,0 +1,41 @@ +# pl_axolotl: from pixellab_src/pl_axolotl/base.png (pixellab_library.py extract) +# pivot at (34, 60) +# aura at (31, 43) +# head_top at (30, 32) (from part) +# back at (38, 33) (from part) +# tail at (48, 52) +...........ooooooooo...................... +.........oo222222222oo.................... +.......oo2111111122222oo.................. +.....oo21111111111122223o................. +....oo2111111111111222233o................ +....o221111111111112222233o.........oo.... +...o321111111111112^222b333o........33o... +..o332111111111111222222333B.......o22o... +..o322111111111122222223b333o.ooo..o223o.. +.o32122111111121122222333333ob112o.o222o.. +.oo21122111112111223333333b3bb223o..o223o. +.o3o2122222221122ooo333333333bb3o...ob22o. +.o3ooo222222212oooa3332233333oo.....ob223o +o32cwo22222223oowow332112333322o....ob223o +o32wo311111223ocoaw3211122333a33o.oob2223o +o32221111111123baw3322222233bb3ooobb22233o +.oo221o1113112222222o3333233oobbobb222a3o. +.o2oo111111122222oooA23322322obb3o2a2223o. +..o21ooooooooooocco1112223oooo222o222233o. +...o21ocaaaaaaaaoo11122233o3bb2a23o3333o.. +....o21ooaaabboo1112222ooo32222223o3332o.. +.....o2111111111222222oo3332b2a2233o22o... +......ooo22222222222oo3333332223322o2oo... +......o33ooooooooooo3333223o33333211oo.... +.....o3a33o22222222333o21123o33o32112o.... +.....o2233o11222222233o21b23o33o32212o.... +....o3a233o2111111112o311123o22o33222T.... +....o322333o211111122o3111b3o2o33333o..... +...oo3b333ooo22222222o311123ooooooooo..... +..o2233333oo2ooo22222o32b223ooo33333oo.... +..o2o2332ooooo..oooooo322233oo223o22o1o... +...o12o22o..........o232233o..oooo21ooo... +...oooo12..........o12o22o32o.....oo...... +.......oo..........oooo12oo2o............. +.......................Po..o.............. diff --git a/parts_pl_src/body/pl_bee.txt b/parts_pl_src/body/pl_bee.txt new file mode 100644 index 0000000..f29f2cf --- /dev/null +++ b/parts_pl_src/body/pl_bee.txt @@ -0,0 +1,41 @@ +# pl_bee: from pixellab_src/pl_bee/base.png (pixellab_library.py extract) +# pivot at (36, 60) +# aura at (31, 44) +# head_top at (31, 27) (from part) +# back at (31, 35) (from part) +# tail at (49, 45) (from part) +.................oo...oo.................. +...............oo23o^o23oo................ +.............oo32222222233oo.............. +...........oo211111122222233oo............ +..........o32aab111112222aab33oo.......... +.........o32occoa1111122boccoc33o......... +........o32oawaboa11112aoawaco33o......... +........o2bawwwboo11112oawwwboc33o........ +.......o21oawwwboo11112oawwwboo23o........ +......o311oawwbooo11B12oawwbooo233o....... +.....o3211obbboooo11112obbboooo2333o...... +.....o2211oooooooo11122oooooooo2333o...... +....ob2211ooooooco11122ooooooco2333co..... +....obb221ocoooooa11222booooooo233cco..... +...obbba221ooccoo1122222ooccoo2233ccco.... +..oobbbaa22booooaa22222aaoooob233ccccooo.. +.o22cbbaaa222222babooobab2222223bcccco22o. +o2123cbaaaa22222oco222oco222222bbccco3112o +o2113cbaaaaaa222oo22A22oo2222bbbcccco3212o +o3123ccbbaaaaaa222222222222bbbbbcccco3T23o +.o333ocbbaaaaaaaaa22222aabbbbbbcccco3333o. +.oo3ooccbbaaaaaaaaaaaaaabbbbbbbcccc3o33oo. +..ooo33cccbbaaaaaaaaaabbbbbbbbcccc33oooo.. +....oo22cccbbbaaaaaaabbbbbbbcccc3333o..... +.....o3222ccbbbbbbbbbbbbbcbcccc3333o...... +.....oo32222cccbbbbbcbbbccccc33333oo...... +.....ooc332222cccccccccccc333333ccoo...... +.......occ333222232333333333333cco........ +........occooo3333333333333ooocco......... +.........o3333o3333333333co3333o.......... +........o312233oocccccccoo332213o......... +........o211223oocccccccoo332112o......... +........o2222333ooooooooo3322223o......... +........oo333333o.......o333333oo......... +.........ooooooo.........Poooooo.......... diff --git a/parts_pl_src/body/pl_beetle.txt b/parts_pl_src/body/pl_beetle.txt new file mode 100644 index 0000000..db412ab --- /dev/null +++ b/parts_pl_src/body/pl_beetle.txt @@ -0,0 +1,44 @@ +# pl_beetle: from pixellab_src/pl_beetle/base.png (pixellab_library.py extract) +# pivot at (21, 60) +# aura at (31, 42) +# head_top at (31, 29) (from part) +# back at (31, 25) (from part) +# tail at (50, 51) +...............oooooooooo............... +.............oo2222bb2222oo............. +...........oo222222Bb112222oo........... +.........oo2221111baa11112222oo......... +........o322211111aaa1111112223o........ +.......o3222111111aaa11111112223o....... +......o32222111111a^a111111222223o...... +.....o33bbb2211111bab1111112aabc33o..... +....o33baaab222111bbb111122baaabc33o.... +....o33baaab222222bbb222222baaabc33o.... +...o33cbaab2222222bbb2222222baabcc33o... +...o33cbbbb22222ooooooo22222bbbbcc33o... +...o33cccc2222o211111112o2222ccccc33o... +..o333ccozooo2111111111112ooozocc2333o.. +..o33322zyyz211111111111112zyyz222333o.. +..o33322ozz21111111111111112zzo222333o.. +..o33332oz2211111111111111122zo223333o.. +..o333322o2211111111111111122o2233333o.. +..obb3333o3221111111111111223o33333bco.. +..ocb333o3o32211111A11111223o3o333bbco.. +..occc33o32o3221111111112233o3o333ccco.. +..occc33o3woo3222111112223oo13o333ccco.. +...occ33o3woco32222222223ocow3o333cco... +...oc333o3wowo33222222233owow3o3333co... +....o33oo33baoo332222233ooab33oo333o.... +...ooc3oo323bbc322222223cbb323oo33coo... +..oooocoo332333211111112333233ooccoooo.. +..o2ooo32233222111111111222332oooooo2o.. +.o222oooooo332111111111112332oooooo222T. +.o22ooo2o3oo33111o1113o1133ooo332ooo22o. +.ooooo21233oo3311111111133oo333212oo33o. +o1ooo2122333oooo3222223oooo33332112ooo1o +o11oo22bb33oo33ooo333ooo3333o33bb22oo11o +.oooo22cc33ooooo33ooo33oooooo33cc22oooo. +....o32233o..oooooooooooooo..o33222o.... +...o1o3233o.....oooooooo.....o3322o1o... +...o131233o..................o331131o... +....oooooP....................oooooo.... diff --git a/parts_pl_src/body/pl_boar.txt b/parts_pl_src/body/pl_boar.txt new file mode 100644 index 0000000..98db567 --- /dev/null +++ b/parts_pl_src/body/pl_boar.txt @@ -0,0 +1,52 @@ +# pl_boar: from pixellab_src/pl_boar/base.png (pixellab_library.py extract) +# pivot at (29, 60) +# aura at (30, 37) +# head_top at (25, 17) (from part) +# back at (27, 21) (from part) +# tail at (48, 31) (from part) +.................ooooo..................... +....oo........ooo11111oo................... +...o21oo....oo111^111111oo.....oooo........ +...oo111o..o31111111122221o..oo1112o....... +...oo1111oo3111111122222222oo1111o2o....... +...o2o1111o21111122223333oo1111oo32o....... +...o2o111o321111222B3333o11111o3332o....... +...o2o111o3221122333oooo11111o33322o....... +...o23o123o321123o3o21o11112o33322o........ +...o23o211oo3133o3o211o1112o333222o........ +...o23o3111o333o3111111112o3oo2221o........ +...o13o11111ooo21111111133oo332211oo....... +....o2111111111111111111oo33o3221o21o...... +.....o11111111111111111122oo33211o11aoo.... +....o111111111111111111122222111ob111abo... +....o1111111111111111111222oooooab1111ao... +....o111111111111111111222222331ab1111bbT.. +....o11112221111111111oo22222321ab1111bbbo. +....oo212222222211113oao22222221a111111bbo. +....ooo22222222o112oo1ao22232221aab11111bo. +....oboo21111222ooooob1o222232211aab111bbbo +.o..o2o3222211222oaboao21122232111ab111bb2o +o1oo1232211122222oo333A1111223221abb112bb2o +o11o1oaaaaa331222o1o22111112o3222bb2222222o +o11ooaaaaaaab311o11o11111122o3222bb2222222o +o11oaaaaaaaaab31o111o111122o32222b2222222bo +oa1oaaaaaaaaaa31o111ooo2222o32222bb22222bbo +.oaoacoaaacoaab2o111aao222o3222222b22322bbo +..ooabcaaaccaab3oa111aoooo32222222a223222bo +...obacaaabcaab3ooaaao33332111223ba2332222o +....oaaaaaaaaabo33ooo333321111123b333o22bbo +.....obbbbaaabo3oo333332221111123b33o22abbo +......oooooooooo33333332211111123333o22abo. +......o2333oo333333333o211111112o33o3222bo. +......o22333oo3333333o3211111122o3oo3223bo. +.......ob2333oo333333o321111122oooo333333o. +.......obbb3333ooo333obb2aaab22o.o333333o.. +........o3223333o.oooo22bbbb22o..o333333o.. +........o3333333o..oco32222113o..occcco3o.. +.........occco33o..oco3o33223o...obbbbco... +........obbbbccoo.occoccccoo3o..occcabco... +........obcbbccoo.oooobbbbcco...occoabbo... +.......obbcbbbco....obbcabbco...occobbbo... +.......obcobbcco....obbcabbco....oooooo.... +........ooooooo.....obcobbbco.............. +.....................Poooooo............... diff --git a/parts_pl_src/body/pl_brawler.txt b/parts_pl_src/body/pl_brawler.txt new file mode 100644 index 0000000..5fd63b4 --- /dev/null +++ b/parts_pl_src/body/pl_brawler.txt @@ -0,0 +1,43 @@ +# pl_brawler: from pixellab_src/pl_brawler/base.png (pixellab_library.py extract) +# pivot at (29, 60) +# aura at (33, 42) +# head_top at (33, 28) (from part) +# back at (31, 36) (from part) +# tail at (45, 51) (from part) +.........oooo........oooo........... +........o1113ooooooo31111o.......... +.......o111133aaa231111112o......... +.......o31113aaa23111112322o........ +.......oo3133222331^12ooo32o........ +.......o1o33222223112oo11o3oo....... +.......oco3222222333ooo11o33co...... +.......oab312221223oboc11o333oo..... +......o13313113o1113o111o3133co..... +......o11111111111111333211c33co.... +......o121ooooooooo111111a2313oao... +.......o1o211111131oooo222o313oco... +.......o311222222B13111ooo2113co.... +........o2211111113222211111333o.... +.........o2111111111222222332233o... +..ooooo...o31111111122oooo3222a2o... +.o11312o.o3o333222222o1123o2222aco.. +o223o22oo33o33333322o222223oooo23o.. +o2213o3oao332222222Ao222223oabao3o.. +o32133ooao3o11111122o2222c3oacao23o. +o3323o3oao3o11111111o322cccoacao33o. +.o3223ooco3o21233221o32333oocbco3o.. +..o33oocco3o221111123o333ooccbco3o.. +...ooocco3oo1111111111oooocboco3o... +.....ooooo.o1111111111133ooooooo.... +...........o111111111111333oooo..... +..........oo1111111111113333ooo..oo. +.........o2321111111111332233ocTo23o +........o222o21111111133222233o3a3o. +........o2223o3211112332222223o333o. +........oaa233oo3333333222aa23o33o.. +........occ3333ooooooo3322ccc3o3o... +.........o333oooo.....o3333c3ooo.... +..........ooooooo......oo333oo...... +.........o323333o......o33333o...... +........o11o1233o......o323233o..... +.........oo.oooP........o1o1o1o..... diff --git a/parts_pl_src/body/pl_bunny.txt b/parts_pl_src/body/pl_bunny.txt new file mode 100644 index 0000000..b1960b4 --- /dev/null +++ b/parts_pl_src/body/pl_bunny.txt @@ -0,0 +1,48 @@ +# pl_bunny: from pixellab_src/pl_bunny/base.png (pixellab_library.py extract) +# pivot at (31, 60) +# aura at (31, 41) +# head_top at (32, 20) (from part) +# back at (29, 40) (from part) +# tail at (45, 49) (from part) +...............ooooooooooo................ +............ooo222222^2222ooo............. +...........o2221112222222223oo............ +.........oo2211111122222222233o........... +........o3221111111222222222233o.......... +........o22211111122333322222333o......... +.......o2112211112211112322222333o........ +......ooo1112222221112oo232222333o........ +......ooao1122222111ooaoo322223333o....... +......oa1ao22222223oca11o322223oooo....... +......o1aooo22222oooooa1a3222232112o...... +......o1owoo22222oowooc11o2223222222o..... +......oaoooo22222oooooc1c3222222ccc2o..... +......oacoo3aaaa23ooooaao322222cccc3o..... +.....o2occ32aaaa22occcco3222223bbcc3o..... +.....o3c3o222ac22223oo322a2223cccc3o...... +.....ob3c2222o222222222a222223ccc3o....... +......oc222oooooo3o222222a22333oooo....... +......o3222o1occo1o22222222233333o........ +.......o3222o2222o22222222233333o......... +........o3222233222222222333333oo......... +.........o33222222B22223333333o........... +..........oo33333333A33333oooo............ +...........oooo333333333oo3323o........... +..........o3o33ooooooooo3332223o.......... +.........o33o2233333333333332223o......... +.......ooooo322222222222oooo3322o......... +......o212oo32aaaaa2222o21122222o......... +.....o2122o32aaaaaaa22o322112223oo........ +.....o22a3o2caaaaaaaa2oc3c22223o22o....... +.....o32aco3caaaaaaaac2oca3c23oo22T....... +......ob3co3caaaaaaaac22oo3a3o3o32o....... +.......oooo3ccaooaaacc2233ooo33o33o....... +...........o3ccccccccc33333333o33o........ +............o3ccccccc33333333ooooo........ +..ooooo......oo33333333333333ooo...ooooo.. +.o22112oo.....o33oooooooo3333o...oo22123o. +o32211222oooooo3333o....o3333oooo22211223o +o322222222222333333o....o3333322222222223o +o3322322222222233333o..o33332222222232333o +.oo33333333333333333oooo333333333333333oo. +...oooooooooooooooooPoooooooooooooooooo... diff --git a/parts_pl_src/body/pl_chick.txt b/parts_pl_src/body/pl_chick.txt new file mode 100644 index 0000000..b6f9a06 --- /dev/null +++ b/parts_pl_src/body/pl_chick.txt @@ -0,0 +1,46 @@ +# pl_chick: from pixellab_src/pl_chick/base.png (pixellab_library.py extract) +# pivot at (32, 60) +# aura at (31, 39) +# head_top at (29, 26) (from part) +# back at (33, 28) (from part) +# tail at (46, 40) (from part) +................ooo.............. +..............oo23o.............. +.............o3113oo............. +...........ooo212o33o............ +.........oo22222333ooo........... +.......oo21111^1223333oo......... +......o32111111112223333o........ +.....o321111111111B223333o....... +....o321111111111122223333o...... +.ooo33111111111112222223333o..... +.o3o3oo21111112222222233333oooo.. +.o3oocao11111oooo222222333oco12o. +.oo3oawo1111ocacco2222333oco212o. +.oo3oboo2222oawoco222223occo123o. +.oo3oboocc22obooco22223occo122ooo +.oo33cob1zc2oboobo2222obao212o33o +ocabb3owybb33cccc3222ocbco22o333o +ocbbb2obbbc32333bb22ocabc32333oo. +.oaoo32occ322222Abooaabbo33ooo3o. +.ocabo2222222222oobabbboooo3333T. +..ocaboo22222oooaaabboo3333oooo.. +..oocbaaoooooaaabbbbo33333333ooo. +...ooocbaaaaabbcaooo32233333o33o. +...o33oobbaccbooo33322333333o3o.. +....o222oooooo3322222333333o33o.. +....o3222222222222223333333ooo... +.....o33222222222233333333o...... +......o333222223333333333o....... +.......oo33333333333333oo........ +.........oo3333333333oo.......... +...........ooooooooooo........... +............o3o....o3o........... +............o3o....o3o........... +............o3o....o3o........... +............o3o....o3o........... +..........ooo3oo...o3o........... +.........o232333o.oo3o........... +.........o333oooo23233o.......... +..........ooo...o3333oo.......... +.................Pooo............ diff --git a/parts_pl_src/body/pl_crab.txt b/parts_pl_src/body/pl_crab.txt new file mode 100644 index 0000000..d9b567a --- /dev/null +++ b/parts_pl_src/body/pl_crab.txt @@ -0,0 +1,40 @@ +# pl_crab: from pixellab_src/pl_crab/base.png (pixellab_library.py extract) +# pivot at (24, 60) +# aura at (31, 43) +# head_top at (34, 33) (from part) +# back at (30, 31) (from part) +# tail at (51, 52) +...................................ooo... +.....ooooo........................ob12o.. +....o11233o.......................oaa13o. +...o2113cbo.....ooo......ooo....o.oaa12o. +..o2113cbao....o333B....o333o..o2ooaa323o +.o2113ocaaoo..o3www3o..o3www3o.o12obb323o +.o222obaao12o.owwo1wo..^wwo1wo.o123ob223o +o2223obaoo12o.owwoowo..owwoowo.o222o2223o +o2223obbo123o.ow3o2wo..ow3o2wo.o22232233o +o2223ooo2223o.o1www1o..o1www1o.o3223333o. +o32221122233o..o111oooooo111o...o333333o. +o3322222233oo.oooooo2222ooooo....o3333o.. +.o332222333o.o32o33o1111o33o3oo...oooo... +.o33333333oo3312o33o1111o33o333o..o33o... +.oo333333oo332123oo311113oo32233o.ooo.... +.o3oooooo.33221122211111233222233o33o.... +.o3323o..o3322221111A112222222233ooo..... +.o3223o.o3322aa2222222222222aa2333o...... +..oooo3oc3322aa22o322222oo22aa2333co..... +...o333oac33222223ooooooo32222333cbo..... +....oooobac33322223owwwo32222333cbcooo... +.......3obacc33222223332222233ccboo222o.. +.......ooooaacc333333333333cccbbo211222o. +......o2233ooaab3bab33bab3babboo22111222o +.....o333oooooobaaoaaaaoaaaooooo22333222o +.....o23o2223oooooooooooooooo3o223oo2223T +....o23o23333o33o33333333o33o3o23oco3223o +....o3oo23ooo3123o333333o3313oo2ocbo3233o +....o3o323o.o123oooooooooo321oooobbo333o. +....o3o33oo.o23o..........o22o.oobc333o.. +....ooo23o..o33o..........o33o..oooooo... +......o3o...o3o............o3o...o3o..... +......oo....o3o............o3o....oo..... +............oP..............oo........... diff --git a/parts_pl_src/body/pl_cub.txt b/parts_pl_src/body/pl_cub.txt new file mode 100644 index 0000000..1a7abc4 --- /dev/null +++ b/parts_pl_src/body/pl_cub.txt @@ -0,0 +1,46 @@ +# pl_cub: from pixellab_src/pl_cub/base.png (pixellab_library.py extract) +# pivot at (38, 60) +# aura at (31, 40) +# head_top at (31, 28) (from part) +# back at (38, 28) (from part) +# tail at (46, 37) (from part) +...ooooo.....oo.....oo.................. +..oo2223oo..o1o.....o1o.....oooooo...... +..o2222223o.o11ooooo11o...oo322223oo.... +.oo3332223oo211cbbbo112ooo322222333oo... +.o33o3323333111bbba1113333222233oo33o... +.o333o33o32211aaaa1113333222233o3333o... +.o3333oo32211aaaa1112222332233o33333o... +..o333o322211aaa111^222223B33o33333o.... +..o33o3322111aa111222222222oooo3333o.... +...ooo333211aaa1112222222222333333o..... +....o3ooo311aa111223ooo222223333oo...... +....o3owo311a111133oo11o222233ooo....... +...oo3oo3111111133owoo1o22223333oo...... +..o3o3222222222233oooow32223333333o..... +oo11o2211221111223ooo3122333311113oo.... +311o2o22222222122233333333311111111o.... +oo1o1co2222oo212222333333111111111To.... +..oo1ccoooocc2122222o1111111111ooo...... +...o1122222211122223o11111111ooo........ +....o11111111112223A111111oooo.......... +....ooooooooooooooo111oooooccco......... +......o22222222311ooooo33ccc333o........ +.......oooooooooooo33333bbc22233o....... +.....oo33occ333333333333bb322223o....... +....o2223oc3322222222233bb3222223o...... +...o22223o332222222222233b3332223o..ooo. +..o22223o3322222222222223o32222233oo11o. +..o22223o3322222222222223o22222233o111o. +..oooo33o322222222222222o322222233o111oo +oooaaoooo322222222222222oooo222233o3211o +oacob2233o222222222222ooobaooo2333o3311o +ooc3222233o22222222222oaoaaobco33o33331o +.o33bbb223o22222222222oc33c3acoo3o333oo. +..obbbbb233oo222222222o222233333oo33oo.. +..o3bbbb23333oo2222222o22aabb2333ooo.... +...o3bb22333333oooooooo2aaabbb333o...... +....oo22233333oo.......o3bbbbb333o...... +......oooooooo.........o33ccc333o....... +........................oo33333o........ +..........................Poooo......... diff --git a/parts_pl_src/body/pl_dino.txt b/parts_pl_src/body/pl_dino.txt new file mode 100644 index 0000000..4d22521 --- /dev/null +++ b/parts_pl_src/body/pl_dino.txt @@ -0,0 +1,49 @@ +# pl_dino: from pixellab_src/pl_dino/base.png (pixellab_library.py extract) +# pivot at (33, 60) +# aura at (31, 40) +# head_top at (28, 24) (from part) +# back at (38, 30) (from part) +# tail at (45, 48) (from part) +.................oo............... +...............oo12o.............. +..............o2122o..ooo......... +.............o211223o312o......... +..........ooo2122222ooo3o......... +.......ooo1131122212222oo.ooo..... +......o311111^22111111222o22o..... +......o3111111111111111222o2o..... +.....oao21111111112ooo21222o...... +.....owao211111112oaaoo3222o...... +.....owwo21111113oawwwo32222o..... +.....owoo22222223owowwa32222oo.... +...oo222111111222ooowwaB2222o3o... +.oo11111111111122oooww3222cco3o... +o11111111111112222oww3222c22oo.... +o111111111112222222222bb22cco..... +o1o1111113o12222222222222222o..... +o13111111o112222223oo2222223o..... +o2111111111122223oaoaoa3323o3o.... +o211111111112223oawawawo333o3o.... +.o222222222223oaawaowo3333ooo..... +..owooooooaaaoawo33333333o........ +..o2222222owo233A33333ooo3o....... +...oo2222222233333oooo3o333o...... +.....ooooooooooooo333322o3o.....oo +......o3o3333333333333112o...ooo1o +...ooo3o3333333333223o2111oooo212o +..o113o3cccccccc22222o1112o2o2113o +.o2123ocbbbbbbbbbb12o11123o11112o. +.ow2oo3111111111bb1ow2123oo11123o. +..oo.o21111111111112oow3o3o212To.. +.....ocbbbbbbbbbbbb233oo33o2233o.. +.....ocbbbbbbbbbbbb2233333o333o... +.....o31111111111122222333o33o.... +.....oocccc1111cccc2112233ooo..... +.....o3occcccccccc31111233o....... +......c3o22222222231bb133o........ +......o33oo2222222o211233o........ +.......o333ooooooooo333333o....... +.......o232333o....o332233o....... +......owow3333o...o3133133o....... +......oooooooo....owoaw3oo........ +..................Pooooo.......... diff --git a/parts_pl_src/body/pl_drake.txt b/parts_pl_src/body/pl_drake.txt new file mode 100644 index 0000000..fac257d --- /dev/null +++ b/parts_pl_src/body/pl_drake.txt @@ -0,0 +1,47 @@ +# pl_drake: from pixellab_src/pl_drake/base.png (pixellab_library.py extract) +# pivot at (32, 60) +# aura at (28, 41) +# head_top at (25, 24) (from part) +# back at (26, 42) (from part) +# tail at (48, 50) (from part) +............ooo......................... +...........o22o......................... +..........o222o......................... +.........o22ooooooo.....oooo............ +......ooo1111^2223oo..oo112o............ +.....o22211122222222oo1112o............. +.....o222112223oo222311123o............. +.....o22222222222o2311123o.............. +.....oo22222212223231123o............... +....oo2222221122o223222oooo............. +...o22211122122oo2232333cbao............ +.oo2222121222oo13222occcbboo............ +o11111121212ooowc222ccbbbo.............. +o11111111112oyow222223ooo............... +o111111111222222a22222o................. +o11113111222223322212oo................. +o211111122223322222211oo................ +.o222222233322222333o21o................ +..o3333332222233333oooo................. +...o222222233333ooooo................... +....ooooooooo22o333cao.................. +..........o33323A3cco................... +.........o3222B3222ooo.................. +.........o22222222ocao.................. +........o21111222323co.ooo.............. +........o2111122222b3oobao.............. +.......oocccc1222222o233co.............. +.......oocaaacc2312222222ooooo.......... +......o23aaaabb33112232222ocao.......ooo +.....o123ccbbcco11112o222223co.oooooo22o +.....o122cbaabbo11122o2222232oobboccT22o +.....o222occbbo211122o1122232233323222o. +.....o3o.ooccco22122o2211223222222223o.. +.....owoo.3occoo32o3o222222o22222322o... +......oowo33ooowo3owo222222o222322oo.... +.......ooooo33ooowooo222223o222ooo...... +......owo233333o.o..o333333oooo......... +......oowow3333o...o2222223o............ +.......oooooooo...owo22o223o............ +..................oow1ow1oo............. +....................Po.oo............... diff --git a/parts_pl_src/body/pl_duck.txt b/parts_pl_src/body/pl_duck.txt new file mode 100644 index 0000000..81f0b55 --- /dev/null +++ b/parts_pl_src/body/pl_duck.txt @@ -0,0 +1,50 @@ +# pl_duck: from pixellab_src/pl_duck/base.png (pixellab_library.py extract) +# pivot at (35, 60) +# aura at (32, 38) +# head_top at (30, 19) (from part) +# back at (34, 34) (from part) +# tail at (45, 42) (from part) +................ooooooooo............ +..............oo222222222oo.......... +.............o222^222222222o......... +............o222222222222222o........ +...........o22222222222222222o....... +...oooo....o22222222222222222o....... +.oobaaaco..ooo2222232222222223o...... +.oaabbbaaco22o22222oooooo22223o...... +obbccccbaabo12ccc222o1o2222223o...... +obcccccccbaaccabo2223321222223o...... +obbcccccccbaaaabbc22111b222223o...... +.obcccccccbbaaaaabc22222a22233o...... +..obcccooocbaaaaaabccco2222233o...... +...obbbboooobbaaaaaabbco222233o...... +....ooooocoooobbbbbbooco222333o...... +.......occooooooooobcco323333o....... +......occooooooobbccoo333333o........ +......oboooooobbbooo3B33333o......... +......ocaaaaaacoo33333333oo.......... +.......oooooooo33333333oo............ +..............oooooooooo........ooo.. +............oooobbbAbcoooo...ooo323o. +...........oo333333333333oooo32o223o. +.........ooo333333333222222oo322223o. +.........oo223333332232222223oo2223o. +........o3o2222222222o222222223oT233o +........o3o2222222222o222222223o2233o +........oo22222222222o22222223o3o333o +........oo22222222222o3222222223o33o. +.........o222222222222o322233333o33o. +.........o3222222222223o3333333o33o.. +..........o3222222222233ooooooo333o.. +..........o3332222222333333333333o... +...........o33333333333333333333o.... +............o333333333333333333o..... +.............oo3333333333cc33oo...... +...............ooo333333occoo........ +................ocooooooobco......... +..........oooooobcco....obco......... +........ooaaaaccccccoooobbbboo....... +........obabbaaabccobbbbbbbbbco...... +.........oooobabooocabbaaaaaaabo..... +.............ooo...ooocaaabbbaao..... +......................Poooooooo...... diff --git a/parts_pl_src/body/pl_eel.txt b/parts_pl_src/body/pl_eel.txt new file mode 100644 index 0000000..23ffc7e --- /dev/null +++ b/parts_pl_src/body/pl_eel.txt @@ -0,0 +1,48 @@ +# pl_eel: from pixellab_src/pl_eel/base.png (pixellab_library.py extract) +# pivot at (31, 60) +# aura at (32, 39) +# head_top at (31, 20) (from part) +# back at (39, 26) (from part) +# tail at (41, 51) (from part) +........oooooooo........ +.....ooo222^2333oo...... +....o3222222222333o..... +...o321122222222333o.... +..o32111222222aa2333o... +..o221122222222a2233o... +.o3221222222222222333o.. +.o3212222222222222cB3o.. +.o2222222222222222cc3o.. +.o22222222222222223333o. +.o22222222222222223333o. +.o33222223332222233333o. +.owo22222owo3222233333o. +.ooo22222ooa322223c333o. +.ooo22222oo3222233cb33o. +.oa22222222aa2233ozb33o. +..o2222222222233oczb3o.. +..o3o22o2222333oaac33o.. +..o2ooo2323333oaoo333o.. +.o13oooo1ooooaaa3333o... +o22o...o2o3zAzz33333o... +.oo....o32ozzzz3333o.... +........oozzzz33333o.... +.......o31zzzz3333o..... +......o31111z33333o..... +......o2111112333o...... +.....o3a11112233ao...... +.....o311a12223co....... +....o3111112233ao.oooo.. +....o3111112233o..o23o.. +....oa11112223ao.o3133o. +....o111112233oo.o3223o. +....o111a12233o..oa32T3o +....o111112223o...oz323o +....oz111122233o..oz323o +....ooz111122233ooa3233o +.....oa11cz222333332333o +.....oazzzzz32233333333. +......oczzczz333333333o. +.......ooazzzzz333333o.. +.........oooaaaaaa3oo... +...........Pooooooo..... diff --git a/parts_pl_src/body/pl_fawn.txt b/parts_pl_src/body/pl_fawn.txt new file mode 100644 index 0000000..37f0f8c --- /dev/null +++ b/parts_pl_src/body/pl_fawn.txt @@ -0,0 +1,48 @@ +# pl_fawn: from pixellab_src/pl_fawn/base.png (pixellab_library.py extract) +# pivot at (32, 60) +# aura at (33, 39) +# head_top at (28, 26) (from part) +# back at (34, 44) (from part) +# tail at (44, 40) (from part) +.oo................oooo..... +.o2o..............o222o..... +.oo2o...........o313o2o..... +.oo22o.........o21o332o..... +..oo23o.......o21o332o...... +..oo33o......o32o3332o...... +...oo33o....o32o3333o....... +....o33ooo^.o3oo333o........ +.....oo2222o3oo33oo......... +.....o2111233o3oo........... +....o21112223oo............. +...o22122ww233o............. +...ow222wooo23o.........oo.. +...oo222o1wo23o.........o2o. +...o3222o11o23o........o22o. +...o11222oo223o....ooooo33o. +..o2112222223o...oo2c22oooo. +..o112222233o3oooo2c21123o.. +.o1122233ooo32332211b1b12o.. +o2w2233oooca32222b21111123o. +o3o33oo..oca322A2212b22b22o. +.oooo.....oaa2222222222223T. +..........oa1322222233222oo. +..........oca13222333o222o.. +..........oocao2223ooo223o.. +...........oooo3B3oo3o323o.. +...........ooooo2oo33oo33oo. +...........o3o.o2o.o33oo33oo +...........o3o.o2o..o3o.oo3o +...........o3o.o2o..o3o..o3o +...........o3o.o2o..o3o..o3o +...........ooo.o2o..ooo..o3o +...........o3o.o3o..oo...o3o +...........o3o.o3o..ooo..o3o +...........o3o.o3o.oooo..o3o +...........o3o.o3ooboo...o3o +...........o3o.o3ooooo..oboo +..........o33o.o3o......ooo. +..........o23.o33o.......... +.........oboo.o22o.......... +.........oooo.oboo.......... +..............Poo........... diff --git a/parts_pl_src/body/pl_fox.txt b/parts_pl_src/body/pl_fox.txt new file mode 100644 index 0000000..1e19ee8 --- /dev/null +++ b/parts_pl_src/body/pl_fox.txt @@ -0,0 +1,48 @@ +# pl_fox: from pixellab_src/pl_fox/base.png (pixellab_library.py extract) +# pivot at (31, 60) +# aura at (32, 40) +# head_top at (26, 29) (from part) +# back at (32, 32) (from part) +# tail at (46, 32) (from part) +ooo................................... +o12oo.............................oooo +o1223oo.........................oo123o +.o22223o......................oo1123oo +.o222223o...................oo1112oco. +.o2222223o................oo11112occo. +..o2222223o..............o111112occco. +..o22222233o............o111113occcco. +..o222223333o..........o11111occccco.. +...o222233333ooooo....o11112occcccco.. +...o3223333o3^3333oo.o11112occcccbco.. +...ob3333oo211122333o31112occccaaao... +....ob33o21111111233o2112occccbaabo... +....obco11111111112B3222occccbaaaT.... +.....oo11111111111232222occcbaaaao.... +.....o1111a111111122222oboocaaaao..... +.....3111a1a1111122222obo3ocaaao...... +....o21111a11111222223o33occaaao...... +....o2a11a111a1222222222o3ocaao....... +....o22a1111a1222ooo22233oocao.....oo. +....oo222222122ooaao2233occco.....oo.. +....oao2222222o13aaA22333ooo.....o3o.. +....oa3o2222ooo33113223ooo......o1o... +....o12322223a313113233o........o2o... +.....o131122311311323bo........o2bo... +.....o31112222aaa3233o........oa2o.... +....o311122222223bbcoo...ooooo223o.... +...o211122223333oooooboooa132o33o..... +..o11112223oooooooo3333a31a122obo..... +.o2112o23oo...oo3333322221ac222o...... +.o222o3oo.....o333332222222a222o...... +..ooooo.......oc3333223322222223o..... +..............ooc33o223o33322223o..... +.............o3oocco113o33o22223o..... +............o233oooo113occo322333o.... +...........o1233o..o123ooooo333333o... +...........o233bo..o23o.oooooooo33o... +..........o3a3bo..o1a3o.oaco...o3aao.. +.........o123bo..o123booc3co....o323o. +........o3o3bo..o1223o..ooo.....ob3bo. +.........oooo...o2o3bo...........ooo.. +.................oPoo................. diff --git a/parts_pl_src/body/pl_grub.txt b/parts_pl_src/body/pl_grub.txt new file mode 100644 index 0000000..ff1e359 --- /dev/null +++ b/parts_pl_src/body/pl_grub.txt @@ -0,0 +1,48 @@ +# pl_grub: from pixellab_src/pl_grub/base.png (pixellab_library.py extract) +# pivot at (31, 60) +# aura at (31, 42) +# head_top at (33, 23) (from part) +# back at (32, 22) (from part) +# tail at (49, 47) (from part) +..................ooo................... +.................o212o.................. +................o21113o................. +................o222B2o................. +.............oooo3222^oooo.............. +...........o32113oc3c33112oo............ +..........o21111123332111123o........... +.........o3211oo1111111oo1123o.......... +........o3311owwo11111owwo1123o......... +........o3211owco11111ocwo1123o......... +........o32132oo3111113oo2o123o......... +........o32ooo33111111133ooo233o........ +........3323ooooooooooooooo3233o........ +.......o3332ooocccccccccooo233o3o....... +......o333332occbbbbbbbcco233o33o....... +......o3233332oowbaaabwoo2333o233o...... +......ocb2333332ooooooo2333oo2b3bo...... +......o3bb223333333333333oo32bbc3o...... +.....oo3cb32213ooooooooo31222bc3ooo..... +.....o3o3c3322211111111122233c33o3o..... +....o333o3333322222222222333333o333o.... +....o3323oo33333333333333333ooo3233o.... +....oc3b223ooo333333333333oo322bb3bo.... +....o3bb222222oooooAoooooo22222bbc3o.... +...oo3cbb222112222222222211222bbc33oo... +...o3o3cb322222111111111222223cc33o3o... +..o333o3333332222222222222333333oo333o.. +..o3323oo3333333222222233333333oo3233o.. +..o33222oo3333333333333333333oo322b33T.. +..ob32b222ooo3333333333333ooo3222b23bo.. +..o33bbb22222ooooooooooooo222222bbb33o.. +..o3cbbbb22111222222222222112222bbb33o.. +...o3cbb32222221111111111222222bbbc3o... +..oo33c3b32232222222222222223233c333oo.. +.o12o333333333232222222222333333333o31o. +o2233ooo33333333333333333333333oooo3321o +.oooooo12333o3333333333333o33321ooooooo3 +...33o223ooo312333313333312ooo321o333... +....o33oo33o223ooo313ooo321o33oo32o3.... +.....oo3333o23o333o1o333o32o3333oo...... +...........ooo....o3o....ooo............ +...................P.................... diff --git a/parts_pl_src/body/pl_guppy.txt b/parts_pl_src/body/pl_guppy.txt new file mode 100644 index 0000000..cebae0c --- /dev/null +++ b/parts_pl_src/body/pl_guppy.txt @@ -0,0 +1,38 @@ +# pl_guppy: from pixellab_src/pl_guppy/base.png (pixellab_library.py extract) +# pivot at (31, 60) +# aura at (32, 46) +# head_top at (33, 33) (from part) +# back at (32, 33) (from part) +# tail at (47, 47) (from part) +.................ooooo............... +................o22333o.......11..... +.........11....o1233333o.....1111.... +........111....o22333333o....1111.... +.............ooo23oB^ooo3o...1111.... +......1....oo22333333333ooo...11..... +..........o2222222222233333o......... +..11.....o2211121222222233c3o...1.... +.1111...o22111122222222223cc3o....... +.1111..o2211111222222222223333o...... +..11..o22221112222222222223333o...... +......o2222222222222222222233b3o..... +.....o22o222222222222oo222233bco.ooo. +..1..o2o1o2222222222o11o22223bc3o111o +....o2o1oo222222222o1oo1o2223333o132o +....o2o11o222222222o11o1o222b333o322o +....o2o1oo222222222o1o31o222bc3co322o +....o2o13o2oooooo22Ao11o2222cc3co33o. +..ooo22oo2o111123o222oo22222333oooTo. +.o22oaa222o222223o22222aaa2233o222oo. +o123oaa222ooooooooo2222aaa223c33332o. +o222o22222o222223oo2222222233c22222oo +.o33o222221o3333oo1222222223333333o3o +..o2o2221111oooo11111222223333o222o3o +...ooo211111111111111112233bc33ooo3o. +.....o111111111111111111111cc11o33o.. +......o11111111111111111111111o.oo... +.......o111111111111111111111o....... +........o1111111111111111111o........ +.........oo1111111111111111o......... +...........oo11111111111ooo.......... +.............oooooPooooo............. diff --git a/parts_pl_src/body/pl_hawk.txt b/parts_pl_src/body/pl_hawk.txt new file mode 100644 index 0000000..2492497 --- /dev/null +++ b/parts_pl_src/body/pl_hawk.txt @@ -0,0 +1,50 @@ +# pl_hawk: from pixellab_src/pl_hawk/base.png (pixellab_library.py extract) +# pivot at (34, 60) +# aura at (31, 41) +# head_top at (31, 20) (from part) +# back at (30, 34) (from part) +# tail at (47, 40) (from part) +........................oo.............. +..............oooooooooo33o............. +............oo33bb22222223o............. +...........o322aa11^12223ooo............ +..........o3211a11111223332o............ +.........oob111a111a112233oo............ +.........o3a11a111aa11223oo............. +.........oo2a1a11a11oo3233o............. +..........oo333311oo1o3233o............. +..........owb333oocbwo3233o............. +.........ooooox3o1oawo2233o............. +.........oboo1xy3oooo2bb33o............. +.........o32o1xxy322ab333oo............. +..........o2oxyoo22222333o.............. +...........ooyoz32223333oo.............. +...........ooo3333333333ooo............. +.........oo3333333333333223oo........... +........o333333333B33b321122oo.......... +.......o2233bb22222bb33111122oo......... +......o212322aa22aaa3331111112oo........ +.....o21133222aaaa2223o21111113oo....... +.....o1123oo222aa22223o221111113oo...... +....o2111111oooooooo33o3222111333oo..... +..oo222211111111222o333o322222a333oTo... +.o3222a2222222a2222Abo3oo32a222b32222oo. +o3222a222aa222a22223oo33o333b333b22222co +oc22c2223a222o22222bo3333o333c3333c222bo +oooo2223o222o2222boo222223o333oo333ooooo +..o2223oo223o222boo22222223o233oo322oo.. +.o3222oo222o322ooooooo233333oo22oo2223o. +o2322oo222ooooo3333333ooooooooc22oo2232o +oooooooooooo333333333333333o33oooooooooo +...........o3333ooooo333333o33oo........ +...........o33333oo23o33333oo222o....... +............o333ooo233o333o23o222oo..... +.............ozzo.o3b3bozzo223o2222o.... +......ooooooozyzo..occooyyoo3bboo2bco... +.....ozxyzzzyyyzoo..ooozyyzooooo.oooo... +....owacxxycxxyzzzo..ozzzzyzzyxyo....... +...owao11yow1yyozzo.oyxxzyxxxyywwo...... +...o1oo1ayowayooooo.oxw1zyy1woy1wo...... +....o..oooo1ooo.....oowaooyawooo1o...... +..........oo.........o1oo.oo1o..oo...... +......................P.....o........... diff --git a/parts_pl_src/body/pl_imp.txt b/parts_pl_src/body/pl_imp.txt new file mode 100644 index 0000000..e425aae --- /dev/null +++ b/parts_pl_src/body/pl_imp.txt @@ -0,0 +1,44 @@ +# pl_imp: from pixellab_src/pl_imp/base.png (pixellab_library.py extract) +# pivot at (34, 60) +# aura at (31, 42) +# head_top at (32, 26) (from part) +# back at (30, 32) (from part) +# tail at (42, 49) (from part) +........oooo.......... +......o211112o........ +....o2111111122o...... +...o1111111^1122o..... +...11111111111133..... +..o11111111111133o.... +..1111111111112333.... +o.1111111111112333..o. +3o1111111111113333oo3. +o33311111B1233333oo1o. +o333o221113o3333ob32o. +.3o31oo2ooc1o3333333.. +.oo2121113112113332o.. +..o132111122oo2333o... +...o1o1111oo313ooo.... +....o211111123oo...... +.....o322223oo33o..... +......ooooo333112o.... +.....o333333223313o... +....o33311A113oo313... +....o3o31b11133oo32o.. +...o33o2caa1123o.o33o. +...o33ooaaab123o.o33o. +..o33oo2oao3123o..o33o +..o33oo31o11133o..o33o +..o11oo3o333333o.o222o +..1313o23ooo311o.o211T +.o1o2oo13o..o11oo23112 +..23o3o13o..o11oooo12o +..o23oo33o..o33o..o1oo +...oo..o3o...o3o..o3o. +....oo333o...o33o..... +..oo11133oo..o33o..... +.oo131223oo..o111o.... +o31o11333oocco1112o... +oooooooccccco1o11o1o3. +...ccccccccco3o11ooc.. +.............Pcooc.... diff --git a/parts_pl_src/body/pl_lizard.txt b/parts_pl_src/body/pl_lizard.txt new file mode 100644 index 0000000..5a7c518 --- /dev/null +++ b/parts_pl_src/body/pl_lizard.txt @@ -0,0 +1,40 @@ +# pl_lizard: from pixellab_src/pl_lizard/base.png (pixellab_library.py extract) +# pivot at (40, 60) +# aura at (30, 44) +# head_top at (30, 32) (from part) +# back at (32, 32) (from part) +# tail at (44, 47) (from part) +.............oooooo................ +...........oo222222oo.............. +.........oo2222222222oo............ +.....oooo32222222222223oooo........ +....o2111222222222222221112o....... +...o321111222222^2B222111123o...... +...o322111122222222221111223o...... +..o33oo311222222222222113oo33o..... +..o3oo1o2222222222222222oooo3o..... +..o3o11o222122222222122311oo3o..... +..o3o11o222222222222222o11oo3o..... +..o333ooo22222222222223ooo333o..... +.o3333oooo222222222222oooo3333o.... +.o33o3323o222211112222o3233o33o.... +.oc23oa3oo222111111222oo3ao32oao... +.ocb233333222111111222333322boao... +.o31b222222223111312222222oa2o2ao.. +..o213oooo222222A22222oooo113o2ao.. +...o2111ocooooooooooooco1112o223o.. +....o3111ooobbbccccbcoo1112o2233o.. +.....o3211oo3aaaaaa3co1122o333To... +.....ooo32111coooo111123oooo333o... +....o23o3oo2111111112oo33o32o3o.... +....o33o233ooo22223oo3332o32oo..... +....o33b223323ooooo32332ac33o...... +..ooo3o2223o322222223o3222o3oooo... +.oc33coa22ooo3222223ooo22ao3c33coo. +o13oo3o222o..ooooooo..o222o333oo31o +oooooooa2ao...........ob2aoooo31oo. +.oocc32a223oo.......oo322a23coooo.. +.o3133o22o313o.....o313o22o3313o... +.ooooo133ooooo.....ooooo331ooooo... +....o12oo...............oo21oo..... +.....oo...................Po....... diff --git a/parts_pl_src/body/pl_mochi.txt b/parts_pl_src/body/pl_mochi.txt new file mode 100644 index 0000000..5a10958 --- /dev/null +++ b/parts_pl_src/body/pl_mochi.txt @@ -0,0 +1,41 @@ +# pl_mochi: from pixellab_src/pl_mochi/base.png (pixellab_library.py extract) +# pivot at (24, 60) +# aura at (32, 43) +# head_top at (32, 28) (from part) +# back at (31, 31) (from part) +# tail at (52, 46) (from part) +....................ooo................... +................ooo1111ooo................ +...............ow13oc^oo3wo............... +..........oooooo1wwoooow13oooooo.......... +.........ow1113o1b111o11c3o3111wo......... +........ow1333co3c1bBo1bcboc3331wo........ +......ooww11oocc33b31o3bc3bboo3111oo...... +.....owww11o3333cbb33c3bc3bbbco31wwwo..... +....ow1111o1ww3b33333c333b333bbo2111wo.... +...o11311o1ww1211112332221c3333bo1331wo... +..oww1b3o11111ww11w222222w133333bo3b1wwo.. +..ow113o1w11111w1ww2222222w13223bco111wo.. +..o111o311111112ww222222222w22233boo111o.. +..o313o2w111www2w2222222222222223bbo113o.. +.ow133o2wwww2222222222222222222233bo3311o. +.ow13o2222w22233222222222233222233bbo11wo. +o1133o222ww23oooo22222222oooo32233bbo331wo +o1bbco222222ooaoo2222A222ooaoo2233bbocbb1o +o2333o222222o3222222222222223o22233bo3331o +o2333o22222222222222222222222222333bo3331o +o3333o22222aa2222o222222o222aa22333bo3333T +o33bcob222aaaa222oooooooo22aaaa2333bocc33o +o3333ob2222aa22222obaabo2222aa22333bo3333o +.o333o3b22222222222233222222222333bbo333o. +.o333ob332222222222222222222223333bbo333o. +.o3bbbobb332222222222222222233333bbocc33o. +..oooooobb3332222222222222333333bboooooo.. +........obbb3333333222333333333bbo........ +.........obbbb333333333333333bbbo......... +..........oobbbbb333333333bbbcoo.......... +...........ooooobbbbbbbbbbooooo........... +...........o3bcoooooooooooocb3o........... +..........o1133o..........o331wo.......... +..........o233o............o332o.......... +...........ooP..............ooo........... diff --git a/parts_pl_src/body/pl_monk.txt b/parts_pl_src/body/pl_monk.txt new file mode 100644 index 0000000..1a0d58d --- /dev/null +++ b/parts_pl_src/body/pl_monk.txt @@ -0,0 +1,46 @@ +# pl_monk: from pixellab_src/pl_monk/base.png (pixellab_library.py extract) +# pivot at (35, 60) +# aura at (31, 39) +# head_top at (31, 22) (from part) +# back at (33, 44) (from part) +# tail at (39, 52) (from part) +..........oooooo............ +........o2222^2233oo........ +......o2222222222333o....... +.....o222222222222333o...... +....o22111222222222333o..... +...o2211112222222222333o.... +...o22211222222222223333o... +..o322222222222222222333o... +..o2b2222222222222b22333o... +..o2bb22222222222bbb2333oo.. +..o2bbb22222222bbbbb2233oo.. +.oo22cbb222222bbbcc22233ooo. +o2o323cbb2222bbbc322223o222o +o3oooo3cc2222cc33oooo232oo2o +o33o1ooo333333oooo112233333o +o33owoo13yyya31oooww223oo32o +.o3o1333y3oyyy3333122232o23o +..ooa2ayo33oyyya22aa233223o. +...o32ayooooyAya222233oooo.. +....o3bayyyyaaab33333o...... +.....ooaobbbbobb33ooo....... +.......oooooooooooooo....... +......o333oo33o333oo3o...... +.....o233o22o3oB33o23o...... +....o223o2332o3o3o2223o..... +...o22ooo2o23cooooo223o..... +...o22aab2o33baaa22223o..... +...o32bbccocccbcb22333o..... +....o3ccooooooccc3333o...... +.....oooooooooooooooo....... +......ooccobcocccccoo....... +.....o3ooococcooo33ooT...... +.....oo33oboocb33333ooo..... +......ooocboooao3oooooo..... +......333oooooooo333oo...... +......ooo3ooo.ooo33ooo...... +.......ooooo...oooooo....... +......o3223o....o333o....... +......oooooo....o3323o...... +.................Pooo....... diff --git a/parts_pl_src/body/pl_owl.txt b/parts_pl_src/body/pl_owl.txt new file mode 100644 index 0000000..a6e41f4 --- /dev/null +++ b/parts_pl_src/body/pl_owl.txt @@ -0,0 +1,48 @@ +# pl_owl: from pixellab_src/pl_owl/base.png (pixellab_library.py extract) +# pivot at (30, 60) +# aura at (31, 39) +# head_top at (32, 26) (from part) +# back at (31, 34) (from part) +# tail at (44, 52) (from part) +...ooooo..................ooooo... +..o21122oo...............o21112o.. +.o21222122o.............o2122222o. +.o23333212o............o21223332o. +o233oo33222oo..........o2223oo332o +o23o33o33212oo333333ooo2223o33o32o +o2o3333o332222o222b22o2223o3233o2o +o2o3o33oo333222o2^a2o22233o33o3o2o +o33o3o3ooo333322o2c232233oo3o3o33o +.o33o33o33ooo3322o2o223oo3o33o33o. +..o333o33ocbbco3222323obco3o333o.. +...ooo33oca11abo32223oa1aco3ooo... +.....o3oca1oooabo222oaoo1acoo..... +.....o3ob1owoooao222oowoo1boo..... +....o33ob1oooooao111ooooo1boo..... +....o33ob1oooooaB111ooooo1boo..... +....o323ob1oooao12oooaoo1bo3o..... +....o3b23obaaao31b11ooaabo32o..... +....o32b23oooo11oo11o1ooo32bo..... +....o322b2211111oco1o11112b2o..... +.....o222bbb1111Aocoo111bb22o..... +.....o322222111112oo11111222o..... +.....oooo2221111112211111223o..... +.....o333o22221111111112223oo..... +....o32223o333222222222233o33o.... +....o222223o21112222221122o22o.... +...o3222223o22111111111122o22o.... +...o2222223o22211111111222o222o... +...o2222233o22222222222222o322o... +..o22222233o22bb222222bb23o322o... +..o32222333o32a222bb222a233o23o... +.o32322333o333c222bb222c333o32o... +.o33233333o3333c22cc22c3333o33o... +.o3333333o33333332222333333o3T.... +o3333333o33333333333333333o33o.... +o333333o33333333333333333o33o..... +.oooooo33333333333333333oooo...... +..o3333oo33oooo33333333oooo....... +...oooooooocccco33333occcoco...... +.........oacbbcaoooooccaoaoo...... +.........oooaooco....oooooo....... +............oo.P.................. diff --git a/parts_pl_src/body/pl_pebble.txt b/parts_pl_src/body/pl_pebble.txt new file mode 100644 index 0000000..858f937 --- /dev/null +++ b/parts_pl_src/body/pl_pebble.txt @@ -0,0 +1,46 @@ +# pl_pebble: from pixellab_src/pl_pebble/base.png (pixellab_library.py extract) +# pivot at (26, 60) +# aura at (31, 40) +# head_top at (31, 25) (from part) +# back at (31, 30) (from part) +# tail at (48, 49) +..............oooooooooo.............. +...........ooooo111111ooooo........... +..........ooo111111111111ooo.......... +........ooo21111111111111o2ooo........ +......ooo111111111^11111o3111ooo...... +.....ooo111111111111111113o111ooo..... +....oo22o331111111111111131o111ooo.... +...oob2213111111111111113111o111coo... +...obb2211311111111111332o111111cco... +..oobcc21111111111B11111o111111cbcoo.. +.oobbcac1111111111111111o11111cacccoo. +.oocccaab11111111111111111111caacccoo. +.o3occcaac111111111111111111caacbco3o. +oo33occcaacc11111111111111ccaacbco3ooo +oo333occcaaacc1111111111ccaaaccco333oo +o33323oocccaaacc111111ccaaabccoo32333o +o333223oobccaaaaccccccaaaacbcoo322oo3o +o3o3222oooocccaaaaaaaaaabccoooo222333o +oo33222o23oooccccaaaaccccooo32o222333o +o333222o211oooccccAcbcccooo112o223333o +o333322o2wwowooooccccoooowoww2o223333o +oo33322o2wwooo2oooooooo2oooww2o223333o +o3333323o1wooo1o333333o1ooow1o3233333o +o3333322oo1ooo1o222222o1ooo1o32233333o +oo33333223oooo3222222223oooo32233333oo +.oo33333222222222222222222222333333oo. +.oo3333333222222oooooo22222233o3333oo. +..o333o33333222o311113o22233o3o3333o.. +..oo3oo3333333o32222223o33333o3333oT.. +...oooo333333333333333333333ooo33oo... +....oo333333333333333333333o3333oo.... +.....ooo3333333333333333333333ooo..... +......ooo33333333333333333333ooo...... +.......ooooo33333333333333ooooo....... +.......oo33ooo3333333333ooo33oo....... +......oo22333oooooooooooo33322oo...... +......oo2322333oooooooo3332132oo...... +......o3o12o233o......o332o11o3o...... +......ooo333oooo......oooo333ooo...... +........oooooP..........oooooo........ diff --git a/parts_pl_src/body/pl_seal.txt b/parts_pl_src/body/pl_seal.txt new file mode 100644 index 0000000..56374bf --- /dev/null +++ b/parts_pl_src/body/pl_seal.txt @@ -0,0 +1,41 @@ +# pl_seal: from pixellab_src/pl_seal/base.png (pixellab_library.py extract) +# pivot at (34, 60) +# aura at (30, 45) +# head_top at (26, 30) (from part) +# back at (39, 39) (from part) +# tail at (45, 54) (from part) +...........ooooooo.................. +.........oo1111112oo................ +.......oo11111111123oo.............. +......o111111111111333o............. +.....o111111^1111111333o............ +.....o11311113311111333o............ +....o2o211111112oo212333o........... +....oowo1111112o22o22333o........... +....o1oo111111owoowo233bbo.......... +....owao111222oooow223ab3o.......... +...o1o1cacc112oaoaw22ac33o.......... +...o211oooo1111o222222abbo.......... +...o1211oo1111111o222abb3o.......... +.ooo21212111212111ooobb33B.......... +o..o2312oo21111122o23o3bbo.......... +...o222oo2o2222222o23333o........... +..o.oooo222oo2222o2o3333o........... +.o...o3222222oooo222o333o........... +......o3322222223332223co........... +......o233333333A22222c3o........... +......o123333332222222c3co.......... +.....o11112222222222222c3c.......... +.....o111111112222222223c3o......... +.....o1111111111222222233cco........ +....o2111111111122222223333o..oo.... +....o22111111111222222333333oo22o... +....o231111111111322233o333bo222o... +....o232111111112322333o3333o222o... +....o232211111122322333o3333o33Tooo. +...oo33o222222222o22333o3333o322223o +.oo22o3o222222222o2233oooo33o333333o +o3322o33o22222222oo22o2222ooooooooo. +o2233333oo22222223o222222322o....... +.ooooooo..oooooooooo333332232o...... +....................Pooooooooo...... diff --git a/parts_pl_src/body/pl_slime.txt b/parts_pl_src/body/pl_slime.txt new file mode 100644 index 0000000..432da1b --- /dev/null +++ b/parts_pl_src/body/pl_slime.txt @@ -0,0 +1,44 @@ +# pl_slime: from pixellab_src/pl_slime/base.png (pixellab_library.py extract) +# pivot at (31, 60) +# aura at (31, 45) +# head_top at (31, 25) (from part) +# back at (44, 33) (from part) +# tail at (44, 50) +...............ooo.............. +..............o222o............. +.............o2^123o............ +.............o21223o............ +............o221223o............ +...........o22222333o........... +...........o22222333o........... +..........o2212223333o.......... +..........o2112222333o.......... +.........o221222223333o......... +........o22112222223333o..ooB... +.......o2222222222223333oo323o.. +......o3222222222222223333233o.. +.....o3221ooo22222222oo333333o.. +....o3221o11ao322222o3233333o... +....o322o11ooao22222o222333o.... +.ooo322o1111ooao22222222233o.... +o233322o11ooooao2222oooo2333o... +o212322o11ooooao222oo11ooo33o... +o232322o31oooo2o222o22222o333o.. +o1333222oo3122o32222223222c33o.. +o23332b22boooo3222222oo2bbc33o.. +.ooo32bbb222222A222ooo222b233o.. +..o33222222ooooooooocbo222333o.. +..o333222222222233ocbbo222333o.. +..o3333222222222222occo223333o.. +...o3332222222222222oo222333o... +...o333322222222222222223333T... +....o3333123222222222222333o.... +....o3333123222222223223333o.... +.....o33322333333333322333o..... +.....o33333333333333321333o..... +..ooo33333333333333332233333oo.. +.o3222233333333333333333322333o. +o321122222223333222322222222223o +o3333333333321112223o3333333333o +.oooooooooo333333333ooooooooooo. +...........ooooPoooo............ diff --git a/parts_pl_src/body/pl_snake.txt b/parts_pl_src/body/pl_snake.txt new file mode 100644 index 0000000..b026969 --- /dev/null +++ b/parts_pl_src/body/pl_snake.txt @@ -0,0 +1,46 @@ +# pl_snake: from pixellab_src/pl_snake/base.png (pixellab_library.py extract) +# pivot at (31, 60) +# aura at (31, 43) +# head_top at (31, 27) (from part) +# back at (35, 27) (from part) +# tail at (45, 38) (from part) +...........oooooo..................... +.........oobbc22oooo.................. +.......oo1bbb112222ooo................ +.....ooo11b112311o233oo............... +....o3121111231b22o333oo.............. +....obb11112bab3ooo33cco.............. +....obb12113ab3ooo^331Bco............. +....oo23213113oo1o323cbco............. +....o12322322o1o132233ccoo............ +....o1o2113ooo11a2113o3ooo............ +....o311111113o331o33o233o............ +...o1111111111111o233o233o............ +...o1o111o11111oo223o333oo............ +...o2111111113o3333o333cco............ +....o2222113oo333ooc33ccco.....ooooo.. +.....ooooooo333ooccc3cccco....o11122o. +.....o33bo333ooccbb333ocoo...o113oo2o. +......oobooooobbbbbb223oo....o12T..oo. +.......obo..oobbbbbb2233o....o23o..... +.......ooo.oo3b333332233o....o233o.... +...........ob3111111223oooooooo33o.... +..........oo3aaaa1112o3o1111223oo3o... +..........o3111123A1cco1111bbb113oo... +.....oooooo1aaaa111cccoc1cbbbb11113o.. +...oo211bo1aaaaa11cbcco222ccbc111bbco. +..o2111bco1aaaaa312ccoo333oo3111bbbco. +.ocbb122o1a111231113oo33333333111bbcoo +ocbbc13oo1aaaaa111133ocbbcc332111ccc3o +ocbbc11oo1aaaaa111133ocbbcco311111233o +o1111111o1aaaaa111133cooooocbbb111233o +oc1111cbo33222232113cbc3222cbbc11oo33o +occ11cbco21aaaa13111cbbc11ccbc11occo3o +occo23ccoo1aaaaa121cccc11111cc12occoo. +.oc3333o3o31aaaa12331111ccc1113ooco3o. +..o3333333o31a11333332cccccc23333o3o.. +...oocbbbcobbbbbbbb3333occo3333333o... +.....ooooooobbbbbbbbb333oo333333oo.... +...........ooobbbbbbbbcc3333ccoo...... +.............ooobbbbbbbbbbcooo........ +................ooPoooooooo........... diff --git a/parts_pl_src/body/pl_sprite.txt b/parts_pl_src/body/pl_sprite.txt new file mode 100644 index 0000000..b95ad66 --- /dev/null +++ b/parts_pl_src/body/pl_sprite.txt @@ -0,0 +1,39 @@ +# pl_sprite: from pixellab_src/pl_sprite/base.png (pixellab_library.py extract) +# pivot at (28, 60) +# aura at (32, 43) +# head_top at (34, 31) (from part) +# back at (31, 50) (from part) +# tail at (39, 54) (from part) +...........ooooooo......... +........ooo2222233ooo...... +.......o2111111122233o..... +......o211111111^22233o.... +.....o21111111111122233o... +....o2111111111111122233o.. +....o21111111111111222333o. +...o211111111111111222233o. +...o211111111111111222233o. +..o22233111111133322222333o +..o22ooo311111ooooo2222333o +..o2o11oo2111o11ooco222333o +..o2o11co2222o11coco222333o +..o2ocooc2222ocoocbo222333o +..o23ccc12222occc11o22333o. +...o2c11o21123A111o322333o. +...o22oo2111122coo222333o.. +....oaa22oooob222aa2333o... +.....o3222obb222223333o.... +.......o332222223333o...... +...ooo..oooooooooooo.oo.... +..obaao33o3333333333oabo... +.obaaab3o32a2B23o32obaabo.. +o22bbbb3o2a1za223o3obbby3o. +o33obbboo22ay22223obbbb22o. +333.ooo.o2a2a22223oobbo33o. +........o222222223o.oT..... +........o222222223o........ +.........o23ooo223o........ +.........o33o..o33bo....... +........oabbo..obabo....... +........obbo....obbo....... +.........oP......oo........ diff --git a/parts_pl_src/body/pl_wisp.txt b/parts_pl_src/body/pl_wisp.txt new file mode 100644 index 0000000..8f77362 --- /dev/null +++ b/parts_pl_src/body/pl_wisp.txt @@ -0,0 +1,47 @@ +# pl_wisp: from pixellab_src/pl_wisp/base.png (pixellab_library.py extract) +# pivot at (30, 60) +# aura at (31, 42) +# head_top at (32, 21) (from part) +# back at (30, 40) (from part) +# tail at (44, 48) (from part) +..............oooooo.............. +............oo222^23ooo........... +..........oo11112222233o.......... +.........o31111222222233o......... +........o31111222222a2233o........ +........o11112222222a2233o........ +.......o3a22222222222223b3o....... +.......o2a3oo3222223oo33bbo....... +......o322o11o32223o11o33b3o...... +......o32o1111o222o1111o3b3o...... +......o22o111oo222ooo11o333o...... +......o22o11ooo222ooo11o333o...... +......o22o11ooo222ooo11o33co...... +......o223o11o32223o11o33bco...... +......o3a23oo3222223oo323cco...... +......o32a22222ooo22222abcco...... +.......o322222ooooo22233cco....... +.......oo32222obaao233c3ooo....... +.......oboo332222223c33oobo....... +......oboaboo333333ccoobbobo...... +......ooaoaabooBooooobbooboo...... +.....o3ooaoaaabbbbbbboobboooo..... +....o123obaocbaaAabbcbbboo323o.... +...oa23ooobabooooobaabbooo3a23o... +..oa2233o3obaaaaaaabboo3oo3222o... +..o22oooo23oobbbbboooo33oooo223... +..o23o.o3223ooooooo33c3ccoo.o33o.. +..o3oo.o2222333333323c33coo.ooco.. +...oo..o2222322232223c333co..To... +......o32222322222223c333cco...... +.....o321223322222222o3333coo..... +....o3212223311223222o33323coo.... +...o321222333112232222o33323coo... +..o31122233o31122322a2ooc3323coo.. +.o3223222b3o21222332212o3c3323coo. +o3333b22b33o22223332aa2oo3c33333co +ooooo22bbooo122233332aa3o3o33ooooo +....o33oooo322223oo322a23ooooo.... +....oooo..o32223ooooo2223o........ +...........o333oo...oo333o........ +...........ooooP.....ooooo........ diff --git a/parts_pl_src/body/pl_worm.txt b/parts_pl_src/body/pl_worm.txt new file mode 100644 index 0000000..e67a76b --- /dev/null +++ b/parts_pl_src/body/pl_worm.txt @@ -0,0 +1,44 @@ +# pl_worm: from pixellab_src/pl_worm/base.png (pixellab_library.py extract) +# pivot at (28, 60) +# aura at (31, 43) +# head_top at (29, 24) (from part) +# back at (40, 35) (from part) +# tail at (48, 47) (from part) +...........ooooooo.................. +.........oo1111^11oo................ +.......oo11111111112oo.............. +......o211111111111112o............. +.....o21111111111111112o............ +.....o111111111111111112o........... +....o11111111211111211123o.......... +...o211121112111111121113oo......... +..o2111121112111111112123oo......... +..o22213o112o32222122o323oco........ +..oooooo11112ooooooooo313oco........ +..o1o13o11111o113o1o33233obco....... +..oo13o211111o1oo11o3113ocBco....... +..o3oo21111111ooooo32133oacoo....... +..o3ao11owo1112222aaa333oacoo....... +...o3o11ooo111222112333oacc3o....... +....oo3111111122233333oacco3o....... +....oco2222222223333ooacco33o....... +....oboo2222222oooooaacco333o....... +....ooccoooooooccaaaccco333o........ +...o22occccccccaaAaoooo3333oo....... +..o2122occcccbbbboo112o333oco....... +..o11123oooooooooo21112o3occo....... +..o32223o33333333o32222ooccco.oooo.. +.o3oooooo33111111ooooooocaccoo1112T. +o113o12ooo322111o12oo13oaacoo21112o. +o13oo12occooooooo12oo12oacco2o21123o +o2o.o2ocaaaaaaaco2oco12occo3o2o1113o +.oo.o2occaaaaaaao2oao2occo33o22o133o +.....oocccaaaaaaacccoocco333o22o233o +.....o3ooccccacccaacccoo3333o33o233o +.....o333ooocccccccooo33333oo33o333o +.....o332223ooooooo31113333oo33o333o +......o3311111111111113333oco33o33o. +.......o33311111111123333oco33o33o.. +.......oo33333333333o33ooco3oo.ooo.. +........ooo3333ooooo.ooccooo........ +..........ooooP........oo........... diff --git a/parts_pl_src/body/pl_wyrm.txt b/parts_pl_src/body/pl_wyrm.txt new file mode 100644 index 0000000..de7c734 --- /dev/null +++ b/parts_pl_src/body/pl_wyrm.txt @@ -0,0 +1,48 @@ +# pl_wyrm: from pixellab_src/pl_wyrm/base.png (pixellab_library.py extract) +# pivot at (31, 60) +# aura at (30, 40) +# head_top at (27, 20) (from part) +# back at (34, 30) (from part) +# tail at (44, 45) (from part) +.............oooooooo...................... +..........ooo2222^2aaoo.................... +........oo321111222223co................... +.......o321122222222a3aco.................. +......o21122223322222223co................. +......o22222ooo3223222a3ac................. +.....o32223oow322133322233o................ +....o211223ocw1221o23332c3o................ +...o2222222221111o222332c3co............... +...o32232322111oo.o2323323co............... +...oo333aaooooo....o22332c3o............... +...ocooooac........o2223B33o............... +..oco....oco...coo.o222323co............... +..oa......oaacco...o231233co............... +.oao.......oooo...o2112233o................ +.acco.............o111223co................ +oooao............o2111233co.........oooooo. +...oo...........o31312233o.......ooo333333o +...............o3111223co.......o32233oooo. +..............o31111233co......o2232oo..... +.............oo11112233o......o2232o....... +.............o213122A3o.......o223o........ +.......ooo..o31112233o.......o2232o........ +......o222o3o1111oo33o.......o2232o........ +......o3o22o2111o22o23o......o2232o........ +......owo2oo131o2o2223o......o2233o........ +......oowoo1111ooo233o.......o3223To....... +.......oo.o11111owooo.........o22b3o....... +..........o11112oo33o.........o2233o....... +.........o2111122333o.........o21332o...... +.........o2322322233co.......o3213b3o...... +.........o2111122223co.......o21ac33o...... +.........o211112222333oo...oo3122332o...... +..........o211122222c3aaooo322ac3b33o...... +..........o2212232222222aa2aa12c332o....... +..........o33333233222c2a22ac233332o....... +...........o2222223332222b2223b332o........ +............o22222223333333b333223o........ +............oo2222332233333333223o......... +.............oo2232222232222223oo.......... +...............oo32222322222ooo............ +.................ooooPoooooo............... diff --git a/parts_pl_src/head_top/pl_antennae.txt b/parts_pl_src/head_top/pl_antennae.txt new file mode 100644 index 0000000..2395111 --- /dev/null +++ b/parts_pl_src/head_top/pl_antennae.txt @@ -0,0 +1,18 @@ +# pl_antennae: pixellab_src/pl_grub/pl_antennae.png minus base.png +# pivot at (33, 23) +..oooo............oooo.. +.obaabo..........obaabo. +ocbbbbco........ocbbbbco +ocbbbbco........ocbbbbco +ocbbbcco........ocbbbcco +.occcco..........occcco. +..oooo............oooo.. +...o3o............o3o... +...o3o............o2o... +...o1o............o2o... +...o1o............o1o... +...o21o..........o12o... +...o31o..........o1o.... +....o31o........o13o.... +.....o1o.......o13o..... +.....o.......P.o.oo..... diff --git a/parts_pl_src/head_top/pl_antennae_spark.txt b/parts_pl_src/head_top/pl_antennae_spark.txt new file mode 100644 index 0000000..0579ae1 --- /dev/null +++ b/parts_pl_src/head_top/pl_antennae_spark.txt @@ -0,0 +1,25 @@ +# pl_antennae_spark: pixellab_src/pl_bee/pl_antennae_spark.png minus base.png +# pivot at (31, 27) +.o............................. +ouo..........................o. +.ouo........................ouo +.ouo.......................ouo. +..oto.....................oto.. +..osso...................otso.. +..ousuo.................outo... +..oossuo...............oussoo.. +.otosssuo.............ousssouo. +.oussssuo.............ousssso.. +..oussoo...............oussuo.. +..ousso................ousuo... +...ooto................ouuo.... +....o11o..............ot2o..... +.....o1to............o1to...... +......o1o...........o11o....... +......o11o..........o12o....... +.......o1o.........o11o........ +.......o11o........o12o........ +........o1o.......o11o......... +........o33o......o12o......... +........o33o.....o22o.......... +........o..o..P.....o.......... diff --git a/parts_pl_src/head_top/pl_antlers_leafy.txt b/parts_pl_src/head_top/pl_antlers_leafy.txt new file mode 100644 index 0000000..f0dfe25 --- /dev/null +++ b/parts_pl_src/head_top/pl_antlers_leafy.txt @@ -0,0 +1,20 @@ +# pl_antlers_leafy: pixellab_src/pl_fawn/pl_antlers_leafy.png minus base.png +# pivot at (28, 26) +......oo....oo...... +.....ozzo..ozzo..... +.oo.ozxzo..ozxzo.oo. +ozzoozxzo..ozyzoozzo +ozxzozzo....ozzzzxzo +.ozyzxo.....ooxzyzo. +..ozyzzo...ozzzyzo.. +...oxzxo...ozxzyo... +..oxyzzo....ozzxyo.. +.oyxooo......ooxy... +.oyxo.........oxyo.. +.oyxyo.......ooxy... +.ooyxo......ooxy.... +..ooxxo....oxxy..... +...ooxyo.Poxxyo..... +....oyx...yxyo...... +....o.....yyo....... +............o....... diff --git a/parts_pl_src/head_top/pl_axolotl_sprout.txt b/parts_pl_src/head_top/pl_axolotl_sprout.txt new file mode 100644 index 0000000..bb80405 --- /dev/null +++ b/parts_pl_src/head_top/pl_axolotl_sprout.txt @@ -0,0 +1,19 @@ +# pl_axolotl_sprout: pixellab_src/pl_axolotl/pl_axolotl_sprout.png minus base.png +# pivot at (30, 32) +.oooo.....oooo. +ozzzzo...ozzzzo +ozxxxzo.ozxxyzo +ozyzyyzozxyzyzo +.oyyzyyzyyzyyzo +.ozyyzyzyyyyzo. +..ozzzzyzzzzo.. +...ooozyzooo... +.....ozyzo..... +.....ozyzo..... +.....ozyzo..... +......zz....... +............... +............... +............... +............... +...........P... diff --git a/parts_pl_src/head_top/pl_bunny_flower_crown.txt b/parts_pl_src/head_top/pl_bunny_flower_crown.txt new file mode 100644 index 0000000..b899612 --- /dev/null +++ b/parts_pl_src/head_top/pl_bunny_flower_crown.txt @@ -0,0 +1,19 @@ +# pl_bunny_flower_crown: pixellab_src/pl_bunny/pl_bunny_flower_crown.png minus base.png +# pivot at (32, 20) +.......ooo........ +....ooobbbooo..... +...oobbcbbcbbo.... +...oobbbzbbbbo.... +...oobczzzcbbo.... +....ooczzzcoo..... +....oobbccbbo..... +...ooobbobbboo.... +..o23ooo3ooo32o... +..o3323o3o3233o... +...o332323233o.... +....o3332333o..... +...ooooo2oooooo... +.oo1122o2o22211oo. +o113333o3o3333211o +o11ooooooooooo122o +o........P......o. diff --git a/parts_pl_src/head_top/pl_coral_crown.txt b/parts_pl_src/head_top/pl_coral_crown.txt new file mode 100644 index 0000000..8eec917 --- /dev/null +++ b/parts_pl_src/head_top/pl_coral_crown.txt @@ -0,0 +1,19 @@ +# pl_coral_crown: pixellab_src/pl_crab/pl_coral_crown.png minus base.png +# pivot at (34, 33) +....oo.......oo..... +...oaco.....oaco.... +..ooaco...oooacoo... +.oaoacooooaaoacoao.. +.ocaacoaaocaoacoaco. +..ocacoacoocaacoaco. +.oaoccabco.ocacacoo. +obaocaccoo..ocacoaco +ocaocccooao.occooaco +.occooo.oaco.ooooaco +..oo....oaco....ocoo +........oaco.....o.. +........obcP........ +........occo........ +........ocao........ +........ocbo........ +........occo........ diff --git a/parts_pl_src/head_top/pl_crest_electric.txt b/parts_pl_src/head_top/pl_crest_electric.txt new file mode 100644 index 0000000..d46c3a9 --- /dev/null +++ b/parts_pl_src/head_top/pl_crest_electric.txt @@ -0,0 +1,22 @@ +# pl_crest_electric: pixellab_src/pl_eel/pl_crest_electric.png minus base.png +# pivot at (31, 20) +..........oooooo.......... +.........ottttuuo......... +.........oussssuo......... +........otsssssuo......... +........otssssuo.......... +........otssssuo.......... +........otsssuo........... +...o...ousssstoo.....oooo. +..ouo..otsssssuto...outtto +.outo..otsssssssuo.ousssuo +ousto..ottttsssuo.ousssto. +oustoo..oootssuo..oussto.. +otsttto...otssuo.ousssto.. +otsssto...ousuo..oussstto. +otttsto...ossuo..otttsssuo +.ootsto..otsto....ooussuo. +..otsto..otuoo.....ousuo.. +...ouoo....P......ousuo... +....o.............otto.... +...................oo..... diff --git a/parts_pl_src/head_top/pl_crest_feather.txt b/parts_pl_src/head_top/pl_crest_feather.txt new file mode 100644 index 0000000..0507a9b --- /dev/null +++ b/parts_pl_src/head_top/pl_crest_feather.txt @@ -0,0 +1,29 @@ +# pl_crest_feather: pixellab_src/pl_chick/pl_crest_feather.png minus base.png +# pivot at (29, 26) +...........ooo... +..........occo... +........ooabco... +.......obaabco... +......oaaabbco... +.....oaacbbbo.oo. +....oaaacbbco.oco +...obaacbbcco.oco +...oaacbbbcooobco +..oaabcbbccoobcco +..oaabcbbcoccbcco +.obaacbbbcobbcco. +.obabcbbcobbccoo. +.oaacbbcccbcccooo +obaacbbbcbbccooco +oaabcbbbbbccoccco +oaabcbbbbbcccbco. +oaabcbbbbcccbcoo. +oaabcbbbcccbcco.. +obabcbbbcccccco.. +obbbcbbbccccco... +ocbbcbbccccoo.... +.obbcbbccoo...... +.obbcbPoo........ +..obcco.......... +..obco........... +...oo............ diff --git a/parts_pl_src/head_top/pl_crest_flame.txt b/parts_pl_src/head_top/pl_crest_flame.txt new file mode 100644 index 0000000..23f44ae --- /dev/null +++ b/parts_pl_src/head_top/pl_crest_flame.txt @@ -0,0 +1,20 @@ +# pl_crest_flame: pixellab_src/pl_hawk/pl_crest_flame.png minus base.png +# pivot at (31, 20) +........o.......... +.......ohoo........ +.......ohhho....... +.......ohggho..o... +...o....ohgho.oho.. +..oho...ohgghoohho. +...oho.ohggghoohho. +...ohhoohggghoohgho +...oghohggfghooggho +..ohghhgggfghohggho +.ohgghgggffghhgggho +.ohgggggffgggggggho +ohhfgggfffgggfgggho +ohgffgffffffffghho. +ohggfffffgggghhhho. +.ohggfffggh.....o.. +.o.hgggggP......... +....hggg........... diff --git a/parts_pl_src/head_top/pl_crown_bluefire.txt b/parts_pl_src/head_top/pl_crown_bluefire.txt new file mode 100644 index 0000000..76e0c97 --- /dev/null +++ b/parts_pl_src/head_top/pl_crown_bluefire.txt @@ -0,0 +1,17 @@ +# pl_crown_bluefire: pixellab_src/pl_owl/pl_crown_bluefire.png minus base.png +# pivot at (32, 26) +.....oo.... +....onno... +....onmo... +..oonmmoo.. +.ononmmono. +.omommmomo. +onmnm1mnmno +onmmm1mmmno +onml111mmno +onml1111mno +oonn111mnoo +..omnnnn.o. +...o.P3.o.. +......3.... +.....o.o... diff --git a/parts_pl_src/head_top/pl_crown_ice.txt b/parts_pl_src/head_top/pl_crown_ice.txt new file mode 100644 index 0000000..83e816d --- /dev/null +++ b/parts_pl_src/head_top/pl_crown_ice.txt @@ -0,0 +1,24 @@ +# pl_crown_ice: pixellab_src/pl_fox/pl_crown_ice.png minus base.png +# pivot at (26, 29) +..........oo.......... +.........okjo......... +.........oijo......... +........ojiijo........ +.......okiiiiko....... +.......oiiiijko.oo.... +...oo..oiiijjkoojjo... +..ojjo.oiiijjkooijo... +..oiijoikiijjkojijooo. +.oojiikiikijjkkjjjojjo +ojojikkiikijjjkjjkjijo +.jjkikiiijkjjjkkkkiijo +.jiikkiijjkjjjkijkjjko +.jijjkiijjkjjkiijkjjko +..kijkiijjkjkijijkjko. +ii.ijkiijjkjkijjkjjo.. +.ijijkiijjkjkijjkjk... +..jkijiijjkkiijjkk.... +..kijiiiPkiijjjjk..... +..kkjiiikjjjjjjj...... +...kkk..jjjjkkkk...... +..o..kkkkkkkk.o....... diff --git a/parts_pl_src/head_top/pl_crystals_head.txt b/parts_pl_src/head_top/pl_crystals_head.txt new file mode 100644 index 0000000..e83b140 --- /dev/null +++ b/parts_pl_src/head_top/pl_crystals_head.txt @@ -0,0 +1,17 @@ +# pl_crystals_head: pixellab_src/pl_pebble/pl_crystals_head.png minus base.png +# pivot at (31, 25) +.........oo......... +........oyyo........ +.......oyxxzo....... +.......ozxxxyo...... +....ooozxxxxyoo..... +...oyyozyxxxyozo.... +...oyxzzyxxxzzxyo... +.oooyxxxyxxxzxxyooo. +oyyozxxxzxxxzzxyoyyo +oyxxzyxxzxxzzzxyxxyo +oyxxxzxxzxxzxxzxxxyo +.ozxxzzxxzzxxxzxxzo. +.oozyyzxxzzxxyzxzoo. +....zzzzxzzxzzzzo... +........zPzz...o.... diff --git a/parts_pl_src/head_top/pl_ears_bolt.txt b/parts_pl_src/head_top/pl_ears_bolt.txt new file mode 100644 index 0000000..172d8b6 --- /dev/null +++ b/parts_pl_src/head_top/pl_ears_bolt.txt @@ -0,0 +1,26 @@ +# pl_ears_bolt: pixellab_src/pl_imp/pl_ears_bolt.png minus base.png +# pivot at (32, 26) +o...................................oo +oo.................................ooo +ouo...............................oouo +ouuo.............................oouoo +.ouuo...........................oouuo. +.ouuuo.........................oouuoo. +..ouuuo.......................oouuuo.. +..ouuuoo......................ouuuoo.. +..oouuuo.....................ouuuuo... +...ouuuuo...................ouuuuo.... +....ouuuuo.................ouuuuo..... +.....ouuuuo...............ouuuuo...... +......ouuuuo.............ouuuuuo...... +......oouuuuo...........ouuuuuo....... +......ouuuuuo...........ouuuuuuo...... +.....ouuuuuoo...........oouuuuuuo..... +.....ouuuuoo.............oouuuuuo..... +......ouuuo...............ouuuoo...... +.......ouuo...............ouuoo....... +........ouuo.............ouuoo........ +........oouuo...........ouuoo......... +.........oouoo.........oouoo.......... +..........oouo.........ouoo........... +...........o.......P...uoo............ diff --git a/parts_pl_src/head_top/pl_ears_flame.txt b/parts_pl_src/head_top/pl_ears_flame.txt new file mode 100644 index 0000000..33b776f --- /dev/null +++ b/parts_pl_src/head_top/pl_ears_flame.txt @@ -0,0 +1,20 @@ +# pl_ears_flame: pixellab_src/pl_sprite/pl_ears_flame.png minus base.png +# pivot at (34, 31) +....oo..................oo.... +...ogo.................oggo... +..oggo.................oggo... +..oggo.................ogggo.. +..oggo................oggfgoo. +.oggggo...............ogffggho +.oggfgo..............oggffggho +.ogffggo............oggfffggho +.ogfgfggo..........oggf2ffggho +oggf2ffgo.........oggfg2ffggho +ogff23ffgo........ogff32fffgo. +ogf223gfgo.......ogff3322ffgo. +ogf2333fgo.......ogf33322ffgo. +ogg2333o.........ogf.3322fggo. +.ogf33o.........P.gg..32fggo.. +..og3o.................2fgo... +...oo..................ggo.... +.........................o.... diff --git a/parts_pl_src/head_top/pl_ears_long.txt b/parts_pl_src/head_top/pl_ears_long.txt new file mode 100644 index 0000000..844fea2 --- /dev/null +++ b/parts_pl_src/head_top/pl_ears_long.txt @@ -0,0 +1,22 @@ +# pl_ears_long: pixellab_src/pl_bunny/pl_ears_long.png minus base.png +# pivot at (32, 20) +..ooo..............ooo.. +..o22o............o22o.. +.o2222o..........o2222o. +.o2222o..........o2222o. +.o2c223o........o22b22o. +o22bc23o........o23bb22o +o23bc23o.......o22cbb22o +o23bb323o......o23cbb22o +o23bb323o......o23bbb22o +o23bbc23o.....o22cbbb32o +o23bbc233o....o22cbbb32o +o23bbc233o....o22cbbb32o +o23bbc233o....o22cbbb32o +o23bbc233o....o22cbbb22o +.o2bbc233o....o22ccbb2o. +.o23cc333o....o22ccb22o. +.o22cc333o....o22ccc22o. +..o2ccoooo....o22cc22o.. +..oooo......P....cc22o.. +.................cc2o... diff --git a/parts_pl_src/head_top/pl_fins_head.txt b/parts_pl_src/head_top/pl_fins_head.txt new file mode 100644 index 0000000..b2454c6 --- /dev/null +++ b/parts_pl_src/head_top/pl_fins_head.txt @@ -0,0 +1,11 @@ +# pl_fins_head: pixellab_src/pl_guppy/pl_fins_head.png minus base.png +# pivot at (33, 33) +...ooo....... +..oabo....... +.oaabo..oo... +ooabbooobo... +oaabbcocbo... +oabbbcbcboooo +oabbbcbcbccco +oabooPoooccco +.........oooo diff --git a/parts_pl_src/head_top/pl_flower_bud.txt b/parts_pl_src/head_top/pl_flower_bud.txt new file mode 100644 index 0000000..d6e4fa3 --- /dev/null +++ b/parts_pl_src/head_top/pl_flower_bud.txt @@ -0,0 +1,22 @@ +# pl_flower_bud: pixellab_src/pl_worm/pl_flower_bud.png minus base.png +# pivot at (29, 24) +...oo....... +..oabo...... +.oaabbo..... +.oaaabo..... +oaaaaaco.... +oaaaaaco.... +oaaaaaco.... +oacaacco.... +occabcco.... +.occcco..... +.o3333o.ooo. +..o333oo333o +..o333o3113o +..o31331223o +..o3133223o. +..o3133333o. +..o313333o.. +..o313ooo... +..o...o..... +....P....... diff --git a/parts_pl_src/head_top/pl_gills_frill.txt b/parts_pl_src/head_top/pl_gills_frill.txt new file mode 100644 index 0000000..124fdb7 --- /dev/null +++ b/parts_pl_src/head_top/pl_gills_frill.txt @@ -0,0 +1,27 @@ +# pl_gills_frill: pixellab_src/pl_axolotl/pl_gills_frill.png minus base.png +# pivot at (30, 32) +....oo..............................oo. +...oao.............................oao. +...oao.............................oabo +..obao.............................oaao +..obaao...........................oaaao +..ocaao..........................ooaabo +..obaao.....................oo...oaaabo +.oobaao.oo.................oaao..oaabbo +ocobaaaooao...............oaaaoooaabbo. +ocobbaaocao...............oaaaoaaaabco. +ocaccaaobao...............oaaboaaabbooo +ocaacbabbao..............oaaabaaabbcoao +.oaacbbbbbo..............oaaaaaaabbcaao +.ocaacbbcco............ooaabaaabbbaaaco +ooobbccacco............obacaaabbbbaaco. +obocbccccoo...........oobacabccbbaccoo. +obbcbccoo.............obbbaaccbbabooo.. +ocbccoo..............oobbbbcccbbabcco.. +.occoo...............bbbbbbccbbacbbco.. +.occo................bbbbccccccccccoo.. +..oo...............P..b.bcccccccccoo... +.......................cccccbbbcoo..... +.......................c.ccccoooo...... +........................cccoo.......... +..........................3............ diff --git a/parts_pl_src/head_top/pl_grub_flower.txt b/parts_pl_src/head_top/pl_grub_flower.txt new file mode 100644 index 0000000..9a2a088 --- /dev/null +++ b/parts_pl_src/head_top/pl_grub_flower.txt @@ -0,0 +1,22 @@ +# pl_grub_flower: pixellab_src/pl_grub/pl_grub_flower.png minus base.png +# pivot at (33, 23) +......oo...... +.....ozzo..... +..oooyxxyooo.. +.ozzoxxxxzzzo. +ozxxyyxxzyxxzo +ozxxxzzzzxxxzo +ozxxyxxwxyxxzo +.ozzzxxxxzzzo. +ozxxyzxxyzxxzo +ozxxxzzzzxxxzo +ozyxyzxxzyxyzo +.ozzzyxxxzzzo. +..ooozxxzooo.. +.....ozzoyyo.. +.....ozozyzo.. +.....ozoooo... +.............. +.............. +.............. +........P..... diff --git a/parts_pl_src/head_top/pl_guppy_pearl_crown.txt b/parts_pl_src/head_top/pl_guppy_pearl_crown.txt new file mode 100644 index 0000000..8f98657 --- /dev/null +++ b/parts_pl_src/head_top/pl_guppy_pearl_crown.txt @@ -0,0 +1,16 @@ +# pl_guppy_pearl_crown: pixellab_src/pl_guppy/pl_guppy_pearl_crown.png minus base.png +# pivot at (33, 33) +......ooo........ +.....ozyzo....... +.....ozzzo....... +.oo...ozo.....oo. +oyzo..ooo....oyzo +ozzo..ozzo...ozzo +.ooo..ozzo..ozoo. +..ozooyzzo..ozzo. +..ozzoyzzzooyzo.. +...ozyyzzzzzzzo.. +...ozzzzzzzzzzo.. +...ozzzzzzzzzoo.. +...oozzzzzPzzo... +....ooooooooo.... diff --git a/parts_pl_src/head_top/pl_hawk_headband.txt b/parts_pl_src/head_top/pl_hawk_headband.txt new file mode 100644 index 0000000..01e3706 --- /dev/null +++ b/parts_pl_src/head_top/pl_hawk_headband.txt @@ -0,0 +1,18 @@ +# pl_hawk_headband: pixellab_src/pl_hawk/pl_hawk_headband.png minus base.png +# pivot at (31, 20) +.........................oooo... +...ooooooooo..........oooxxxxo.. +..oyxxxxxxPyooo......oyyyyyyyyo. +.oyyyyyyyyyyyyyooooooyyyyyyooo.o +ozzxxxxyyyyyyzzzzzozzyyyyoo..... +ozoooooooooyyyyzzzooooooo....... +oo.........oooozzzozzzyyyoooo... +...............oozooooyyyyyyxo.. +.................oozzoooozyyxxo. +..................ozzyo..ozyyxyo +...................ozyyo..ooooyo +....................oyyyo.....o. +.....................ozyyo...... +......................ozxyo..... +.......................oyyo..... +........................oo...... diff --git a/parts_pl_src/head_top/pl_headband.txt b/parts_pl_src/head_top/pl_headband.txt new file mode 100644 index 0000000..6743054 --- /dev/null +++ b/parts_pl_src/head_top/pl_headband.txt @@ -0,0 +1,24 @@ +# pl_headband: pixellab_src/pl_brawler/pl_headband.png minus base.png +# pivot at (33, 28) +...ooo................................ +.oocaco............................... +occcaaco......................ooo..... +oooccccco....................oaaco.... +...ooccoooo......ooooo......oaaacbooo. +.....oo112ooooooo31111o.....oacaccbco. +..........3aaa2311....2o...oaacaoooo.. +....ooooooooooooooo..3.2o.ocaaoo...... +....occaaa...aaaaaooooooooccco........ +....ocaaaaacccaaPaaacccccocco......... +....oooooooooooooaaaaccccoco.......... +.................oooooocc.oo.......... +......................ooooocoo........ +..........................occcoo...... +..........................booccco..... +...........................o.ocabo.... +..............................ocaaoo.. +...............................occaao. +................................occco. +.................................occo. +.................................occco +..................................ooo. diff --git a/parts_pl_src/head_top/pl_hood_cobra.txt b/parts_pl_src/head_top/pl_hood_cobra.txt new file mode 100644 index 0000000..f47f222 --- /dev/null +++ b/parts_pl_src/head_top/pl_hood_cobra.txt @@ -0,0 +1,31 @@ +# pl_hood_cobra: pixellab_src/pl_snake/pl_hood_cobra.png minus base.png +# pivot at (31, 27) +........ooooo....ooooo........... +.......oaaaacoooobbaaaoo......... +.....ooaaabbbbbbbaaaaaaaoo....... +....ooacaabbbbbaaaacccbbaao...... +....obcoaaabbbaaaooccccccaao..... +...oacccocaaaaaoooccccccccaao.... +..oaaccccooooooccccccccccccaao... +..oabbbcccccccccccccccccccccao... +.oaabbbbcccccccccccccccccbcccao.. +.oabbbbbcooooooccccccccccbbccaao. +.oabbbboo.....oooocccccccbbbcbao. +oaabboo..........oooccccbbbbbbao. +oaaooo.............oocccbbbbbbbao +oao.................ooccbbbbbbbao +oao..................occcbbbabbao +oao.............P.....occbbbabbao +oao...................occbbbbbbao +.oo...................ooccbbbbaao +.......................occbbbbao. +.......................occbbbbao. +.......................occbbbaao. +.......................occbbbao.. +.......................occbbao... +.......................occbaao... +.......................occbbo.... +.......................ocbbo..... +......................oobboo..... +......................ocoo....... +......................oo......... diff --git a/parts_pl_src/head_top/pl_horn_beetle.txt b/parts_pl_src/head_top/pl_horn_beetle.txt new file mode 100644 index 0000000..ec9b649 --- /dev/null +++ b/parts_pl_src/head_top/pl_horn_beetle.txt @@ -0,0 +1,34 @@ +# pl_horn_beetle: pixellab_src/pl_beetle/pl_horn_beetle.png minus base.png +# pivot at (31, 29) +.........oooo +........obaco +.......oaaco. +......oaabo.. +.....oaaboo.. +....oaaabo... +....oaabo.... +...oaaabo.... +...oaabbo.... +..oaaabo..... +..oaaabo..... +..oaaabo..... +.oaaabbo..... +.oaaabbo..... +.oaaabbo..... +.oaaabbo..... +.oaaabbo..... +.oaaabbo..... +.oaaabbo..... +.ocaabbo..... +.ocaabbbo.... +.ocaa..bo.... +.ocaa..bo.... +.occ...bbo... +.occ...bbo... +.occb..bcco.. +.occcP.bcco.. +occc.c.bcco.. +occc...ccco.. +.occ...ccco.. +.occ...cco... +..ooo.ooo.... diff --git a/parts_pl_src/head_top/pl_horn_ice.txt b/parts_pl_src/head_top/pl_horn_ice.txt new file mode 100644 index 0000000..6d8408a --- /dev/null +++ b/parts_pl_src/head_top/pl_horn_ice.txt @@ -0,0 +1,21 @@ +# pl_horn_ice: pixellab_src/pl_seal/pl_horn_ice.png minus base.png +# pivot at (26, 30) +....oo.... +...ojjo... +...oijo... +..oiijo... +..oiijo... +.oiiio.... +.oiiio.... +oiiijo.... +oiiijjo... +oiiijjo... +oiiijjo... +oiiijjjo.. +ojjijjjoo. +.ojj.jjjo. +.ojj.jjokk +.ojjj.okkk +.kojjPkk.. +..kook.... +...kkk.... diff --git a/parts_pl_src/head_top/pl_horn_single.txt b/parts_pl_src/head_top/pl_horn_single.txt new file mode 100644 index 0000000..9d1922a --- /dev/null +++ b/parts_pl_src/head_top/pl_horn_single.txt @@ -0,0 +1,18 @@ +# pl_horn_single: pixellab_src/pl_dino/pl_horn_single.png minus base.png +# pivot at (28, 24) +...oo..... +..oxyo.... +..oxyo.... +.oxxyo.... +.oxxzo.... +.oxxzo.... +oxxxzzo... +oxxxxzo... +oxxxxzzo.. +oxxxyyyo.. +oxxxyyyzo. +oyxxxyyyzo +oyyyyyyyyo +.oyyyPyyo. +..oyyyyo.. +...oooo... diff --git a/parts_pl_src/head_top/pl_horns_antler_dragon.txt b/parts_pl_src/head_top/pl_horns_antler_dragon.txt new file mode 100644 index 0000000..f3adb5a --- /dev/null +++ b/parts_pl_src/head_top/pl_horns_antler_dragon.txt @@ -0,0 +1,16 @@ +# pl_horns_antler_dragon: pixellab_src/pl_wyrm/pl_horns_antler_dragon.png minus base.png +# pivot at (27, 20) +....oo.........oo. +....ozo........oxo +....ozo........oxo +....ozo........oyo +oo.oozo...oo...oyo +oxooyzo...oxo.oyzo +oyozyzo...oxo.oyzo +oyzyzo....oyzoyzo. +oyyzo.....oyyzzzo. +oyzo......oyyzzo.. +oyzo.....oyyzzo... +oyzo....ozyzzo.... +ooo....Pozzzo..... +.........oooo..... diff --git a/parts_pl_src/head_top/pl_horns_dragon.txt b/parts_pl_src/head_top/pl_horns_dragon.txt new file mode 100644 index 0000000..3caeca7 --- /dev/null +++ b/parts_pl_src/head_top/pl_horns_dragon.txt @@ -0,0 +1,12 @@ +# pl_horns_dragon: pixellab_src/pl_drake/pl_horns_dragon.png minus base.png +# pivot at (25, 24) +....ooo......ooo +...ocbo......oco +..obbco....oobco +.obaco....ocabco +obaboo...oaacco. +obaco...obabco.. +occo..P.obbboo.. +.oo.....obbco... +........ooco.... +..........o..... diff --git a/parts_pl_src/head_top/pl_horns_ember.txt b/parts_pl_src/head_top/pl_horns_ember.txt new file mode 100644 index 0000000..070ac71 --- /dev/null +++ b/parts_pl_src/head_top/pl_horns_ember.txt @@ -0,0 +1,21 @@ +# pl_horns_ember: pixellab_src/pl_sprite/pl_horns_ember.png minus base.png +# pivot at (34, 31) +....................o.. +...o...............ogo. +..ogo.............ogo.. +...ogo...........oggo.. +.o.oggo..........ogggo. +ogoghgo.........ooghgo. +oggghgo........ogghhggo +oghhhhgo.......oghfhhgo +oghffhgo.......oghffhgo +.oghfho.........ohffho. +..oooo...........oooo.. +..oo1o............o2o.. +..o11o............o1o.. +.o211o............o12o. +.o212o...........o212o. +.o3112o............13o. +.o331................o. +..o3..........P........ +...o................... diff --git a/parts_pl_src/head_top/pl_horns_ram.txt b/parts_pl_src/head_top/pl_horns_ram.txt new file mode 100644 index 0000000..10d56eb --- /dev/null +++ b/parts_pl_src/head_top/pl_horns_ram.txt @@ -0,0 +1,17 @@ +# pl_horns_ram: pixellab_src/pl_cub/pl_horns_ram.png minus base.png +# pivot at (31, 28) +......ooooooo................ooooooo..... +.....ozxxxxzxo.............ooyyzxxxzoo... +....oyzxxxzxxzo...........ozxxxzxxxzxxo.. +...oyxzyyzxxyzo..........oyzxxyzyyyzxzzo. +...oyyzzzzyzyz...........oyxzyzzzzzzxzxzo +...oxzzoooozz............oyyyzzoooozzyxzo +...oyzzo..3o..............yyzzo....ozzzzo +...oyzo..o.................zzo..ooooozxxo +ooooyzo..............P.........ooxyoozyyo +oxooyzzo.......................oxyo.ozyyo +oxzoooyo.......................oxo..ozyzo +.oyxxzo........................oyyoozxzzo +..oyyyo........................ozyxyxzzo. +...oooo.........................oyyyyoo.. +.................................oooo.... diff --git a/parts_pl_src/head_top/pl_imp_halo.txt b/parts_pl_src/head_top/pl_imp_halo.txt new file mode 100644 index 0000000..c51e4cf --- /dev/null +++ b/parts_pl_src/head_top/pl_imp_halo.txt @@ -0,0 +1,13 @@ +# pl_imp_halo: pixellab_src/pl_imp/pl_imp_halo.png minus base.png +# pivot at (32, 26) +....oooooooo.... +.oooyyyyyyyyoo.. +oxyyoooooooxyyo. +oyoo.......ooyxo +oyyyoooooooxyyo. +.ooyyyyyyyyyoo.. +...ooooooooo.... +................ +................ +................ +........P....... diff --git a/parts_pl_src/head_top/pl_mushroom_cap.txt b/parts_pl_src/head_top/pl_mushroom_cap.txt new file mode 100644 index 0000000..7f98ddc --- /dev/null +++ b/parts_pl_src/head_top/pl_mushroom_cap.txt @@ -0,0 +1,18 @@ +# pl_mushroom_cap: pixellab_src/pl_slime/pl_mushroom_cap.png minus base.png +# pivot at (31, 25) +.....oooooo..... +....ocbbbbcoo... +...obbbxxbbcxo.. +..obbbbxxbbcxxo. +.obxxbbbbbbbcxo. +obxxxxbbbbbbccco +obxxxbbbbbxxbcco +obbbbbbbbxxxxcco +ocbbbbbbbbxxccco +.occcccccccccco. +..oooooooooooo.. +....oxxxxxxo.... +....oxxxxxxo.... +....oxxxxxxo.... +....oxxxxxxo.... +.....ooPoooo.... diff --git a/parts_pl_src/head_top/pl_owl_halo.txt b/parts_pl_src/head_top/pl_owl_halo.txt new file mode 100644 index 0000000..b6e1f3f --- /dev/null +++ b/parts_pl_src/head_top/pl_owl_halo.txt @@ -0,0 +1,17 @@ +# pl_owl_halo: pixellab_src/pl_owl/pl_owl_halo.png minus base.png +# pivot at (32, 26) +.....ooooooooooooooo.... +..ooozzzzzyyyyyzzzyzoo.. +.ozyyzoooooooooooozyyzo. +ozyooo............oooyyo +.ozyyyoooooooooooozzzzo. +..ozzyyyyyyyyyyyyyzzzo.. +...oooozzzzzzzzzzoooo... +.......oooooooooo....... +........................ +........................ +........................ +........................ +........................ +........................ +............P........... diff --git a/parts_pl_src/head_top/pl_plume_feather.txt b/parts_pl_src/head_top/pl_plume_feather.txt new file mode 100644 index 0000000..ad24a86 --- /dev/null +++ b/parts_pl_src/head_top/pl_plume_feather.txt @@ -0,0 +1,20 @@ +# pl_plume_feather: pixellab_src/pl_duck/pl_plume_feather.png minus base.png +# pivot at (30, 19) +.........ooooooo....... +......oooaacaaaaooo.... +.....ocaaaccaaaaaaao... +....oacaacaaaaccccaao.. +...oaaccaaaacccoooccco. +..oaaacaaaaccoo...ooco. +..oaaccaaccoo.......obo +.ocaacaccco..........oo +.ocacaaaao............. +oaccbaacco............. +oaacaacco.............. +ocacaacco.............. +occcacco............... +.occccco............... +.occccoo............... +..occco................ +...ocPo................ +....cc................. diff --git a/parts_pl_src/head_top/pl_snowcap.txt b/parts_pl_src/head_top/pl_snowcap.txt new file mode 100644 index 0000000..b816cd0 --- /dev/null +++ b/parts_pl_src/head_top/pl_snowcap.txt @@ -0,0 +1,18 @@ +# pl_snowcap: pixellab_src/pl_lizard/pl_snowcap.png minus base.png +# pivot at (30, 32) +.........oooooo........ +.......oojjjjjkoo...... +......ojiijjjjkkko..... +.....ojijjjjjjjiiko.... +....ojiijjjjjjjjiko.... +...oojjjjjjjjjjkkkko... +..ojkkjjjjjjjkikkkkko.. +..ojjjkkkjjkikikkkjko.. +..okkjkkkjijjkkkkkkko.. +.oikkkkkkkijkkkkkkkkko. +oiiiiiiij....kkkiiiikko +okiiiiiiiiiikiiiiiiikko +okkkkiiiiiiiiiiiiiikkko +.oookkkkkkiiiiikkkkkkoo +....oooookkPkkkkkoooo.. +.........ooooooook..... diff --git a/parts_pl_src/head_top/pl_sprout_leaf.txt b/parts_pl_src/head_top/pl_sprout_leaf.txt new file mode 100644 index 0000000..6603e7c --- /dev/null +++ b/parts_pl_src/head_top/pl_sprout_leaf.txt @@ -0,0 +1,15 @@ +# pl_sprout_leaf: pixellab_src/pl_mochi/pl_sprout_leaf.png minus base.png +# pivot at (32, 28) +..ooooo.....ooooo.. +.ozzzzzo...ozzzzzo. +ozyyyyyzo.ozyyyyyzo +ozyyzzzzzozyyzzyzzo +ozzyyzzzzozyzyzzzo. +.ozzyyzzzzzzzyzzo.. +..ozzzzzzzzzzzzo... +...ozzzzzzzoooo.... +....oooozyzo....... +.......ozyzo....... +.......ozzzo....... +.......ozPzo....... +.......oooo........ diff --git a/parts_pl_src/head_top/pl_topknot.txt b/parts_pl_src/head_top/pl_topknot.txt new file mode 100644 index 0000000..83cbbbc --- /dev/null +++ b/parts_pl_src/head_top/pl_topknot.txt @@ -0,0 +1,12 @@ +# pl_topknot: pixellab_src/pl_monk/pl_topknot.png minus base.png +# pivot at (31, 22) +...oooooo... +..o212223o.. +.o21122223o. +o2122223223o +o2232223223o +o333333333o. +.ooooooooo.. +.ocbbbbcco.. +.occccccco.. +.ooooPoooo.. diff --git a/parts_pl_src/head_top/pl_tuft_fluffy.txt b/parts_pl_src/head_top/pl_tuft_fluffy.txt new file mode 100644 index 0000000..4983e0a --- /dev/null +++ b/parts_pl_src/head_top/pl_tuft_fluffy.txt @@ -0,0 +1,16 @@ +# pl_tuft_fluffy: pixellab_src/pl_boar/pl_tuft_fluffy.png minus base.png +# pivot at (25, 17) +.......oo.... +.......o1o... +.......o11o.. +.......o11o.. +.......o111o. +.......o111o. +......o1111o. +....oo111112o +...o11111122o +.oo111111122o +.o1111111123o +o11111...22o. +o11...P....o. +o............ diff --git a/parts_pl_src/head_top/pl_wisp_ghostfire.txt b/parts_pl_src/head_top/pl_wisp_ghostfire.txt new file mode 100644 index 0000000..7f8420d --- /dev/null +++ b/parts_pl_src/head_top/pl_wisp_ghostfire.txt @@ -0,0 +1,20 @@ +# pl_wisp_ghostfire: pixellab_src/pl_wisp/pl_wisp_ghostfire.png minus base.png +# pivot at (32, 21) +.....o...... +....ovo..... +....ovvo.... +.....ovvo... +....oovrvo.. +...ovorrvo.. +..oovrrrvoo. +.ovorqrroovo +ovrvrqrrovvo +ovrrrqqrrrvo +ovrqqqqqqrvo +ovrqqqqqqrvo +.orrqqqqqvo. +.ovrrrrrro.. +..oorrrro... +...oooooo... +..orrrPrvoo. +....qrrrrr.. diff --git a/parts_pl_src/tail/pl_chick_tail_icicle.txt b/parts_pl_src/tail/pl_chick_tail_icicle.txt new file mode 100644 index 0000000..597e006 --- /dev/null +++ b/parts_pl_src/tail/pl_chick_tail_icicle.txt @@ -0,0 +1,22 @@ +# pl_chick_tail_icicle: pixellab_src/pl_chick/pl_chick_tail_icicle.png minus base.png +# pivot at (46, 40) +............oo...... +......oo..ooiio..... +.....oijoojiijo..... +....ojijoojijjo..... +....ojijkiijjko..... +....ojijkiijjooooo.. +....o.ikiijjkkjiiio. +...oojikiijjkiiiiko. +...ok.ikijjjiiijjko. +..okk.jiijjiiijjjo.. +.okkkjjijjiikkkoo... +.okkkk.jiiikkkkooo.. +.ok...kjjjkkkkiiijo. +o..kkk.kkjjjjjjjiiio +okkkk..Pkkkkkkkjjjo. +...kkkkkkkkkkkkkoo.. +.....kkkokkjjjoo.... +....k.koookkkiio.... +...ok.o...ookkio.... +...o.o......ooo..... diff --git a/parts_pl_src/tail/pl_cub_tail_rockclub.txt b/parts_pl_src/tail/pl_cub_tail_rockclub.txt new file mode 100644 index 0000000..fabe541 --- /dev/null +++ b/parts_pl_src/tail/pl_cub_tail_rockclub.txt @@ -0,0 +1,25 @@ +# pl_cub_tail_rockclub: pixellab_src/pl_cub/pl_cub_tail_rockclub.png minus base.png +# pivot at (46, 37) +......ooooo... +.....oxxxxzo.. +....oxxxxxzzo. +...oxxxxxxzxzo +...oxxxxxzzxzo +...ozyxzzxxxzo +P..ozzzzxxyzzo +....ozzyyyzzo. +.....ozzzzzo.. +......oo2oo... +.......o2o.... +.......o23o... +......o223o... +......o223o... +.....o223o.... +...oo2223o.... +.oo222233o.... +..222233o..... +...22333o..... +...3333o...... +...333o....... +....3o........ +...oo......... diff --git a/parts_pl_src/tail/pl_tail_bluefire.txt b/parts_pl_src/tail/pl_tail_bluefire.txt new file mode 100644 index 0000000..ae61288 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_bluefire.txt @@ -0,0 +1,49 @@ +# pl_tail_bluefire: pixellab_src/pl_fox/pl_tail_bluefire.png minus base.png +# pivot at (46, 32) +.........o.......... +........onoo........ +........onnno....... +.........onnno...... +.........onnno...... +.........onmmno..... +.........onmmno..... +....o....onmmmno.... +...ono..onnmmmno.... +....omo.onnmmmnno... +....ommonmmmmmmno... +....ommonmmmmmmno... +...onmonnmmlmmmno.o. +..onmmonmmmlmmno.ono +..onmmnnmmllmmnoomno +.onmmmnnmlllmmnonno. +.onmmmmmmlllmmnonmo. +.onmmlmmllllmmmnnmo. +.onmmlmmlllllmmnmmno +onnmmlllllmllmmmmmno +onmmmllllmmmllmmmmno +.nmmmlllmmmmllllmmno +.nmmllllmmllmlllmmno +.nmmlllmlllllmllmmno +.nmmmllmlllllmllmmno +o.nmmllmlllllmllmnno +...nmmlmmlllmmlmmno. +....nmllmmllmllmmno. +....nmmllmmmmmmmno.. +.....Pmmmmmmmmmno... +.....onnnmmmnnno.... +......ooo2m2ooo..... +........o222o....... +.........o223o...... +.........o2223o..... +..........o222o..... +..........o122o..... +..........o223o..... +..........o123o..... +.........o1123o..... +.........o1123o..... +.......oo1123o...... +....ooo111333o...... +.....2222333o....... +.....33333oo........ +.....333oo.......... +....oooo............ diff --git a/parts_pl_src/tail/pl_tail_bluefire_eel.txt b/parts_pl_src/tail/pl_tail_bluefire_eel.txt new file mode 100644 index 0000000..d96b3f1 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_bluefire_eel.txt @@ -0,0 +1,31 @@ +# pl_tail_bluefire_eel: pixellab_src/pl_eel/pl_tail_bluefire_eel.png minus base.png +# pivot at (41, 51) +.........oo..... +........ommo.... +........ommo.... +.........ommo... +.........ommmo.. +.......oommmmo.. +......omommmmo.. +......omommmmoo. +......ommmlmmomo +.....ommmmlmmmmo +....ommmmllmmmmo +....ommmllllmmmo +....ommmlnnllmmo +....oommmmnllmmo +...ommnnnnnlmmo. +..omnnoommlmmo.. +.omnno.ommmmo... +.omno...oooo.... +onmno........... +onmno........... +o.mno........... +.o.mno.......... +..ommo.......... +..P.mno......... +....mno......... +....nno......... +....no.......... +....no.......... +....o........... diff --git a/parts_pl_src/tail/pl_tail_bluefire_wisp.txt b/parts_pl_src/tail/pl_tail_bluefire_wisp.txt new file mode 100644 index 0000000..d29404f --- /dev/null +++ b/parts_pl_src/tail/pl_tail_bluefire_wisp.txt @@ -0,0 +1,22 @@ +# pl_tail_bluefire_wisp: pixellab_src/pl_sprite/pl_tail_bluefire_wisp.png minus base.png +# pivot at (39, 54) +..............o.... +.............omo... +.............omo... +............ommmo.. +...........oomlmo.. +..........omomlmoo. +.........omlmlllomo +.........omlllllmmo +........omlllllllmo +........omlllllllmo +........omlllllllmo +.........omllllllmo +..........omlllmmo. +...........ommmoo.. +.........oo2ooo.... +oo..o..oo22no...... +onoP22222nno....... +onnnnnnnnoo........ +oonnnnnoo.......... +.oooooo............ diff --git a/parts_pl_src/tail/pl_tail_club.txt b/parts_pl_src/tail/pl_tail_club.txt new file mode 100644 index 0000000..62f16c7 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_club.txt @@ -0,0 +1,22 @@ +# pl_tail_club: pixellab_src/pl_dino/pl_tail_club.png minus base.png +# pivot at (45, 48) +................oooo... +..............ooxyyyo.. +.............oxxxzzzyo. +............oxxxxzzzzyo +............oxxxxxyzzyo +............oxxxxxyyzzz +............oyxxxyyyyzz +............oyyxyyyzzzo +............ozyyyyzzzzo +......oo..oo1ozzzzzzzo. +.......2oo1123oozzzzo.. +.......211123o..oooo... +......111123o.......... +.....111133o........... +....P12333o............ +.....3333o............. +....333oo.............. +o..33oo................ +o333o.................. +oooo................... diff --git a/parts_pl_src/tail/pl_tail_curl_pig.txt b/parts_pl_src/tail/pl_tail_curl_pig.txt new file mode 100644 index 0000000..0cc15c2 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_curl_pig.txt @@ -0,0 +1,17 @@ +# pl_tail_curl_pig: pixellab_src/pl_boar/pl_tail_curl_pig.png minus base.png +# pivot at (48, 31) +...ooo..... +..o222oo... +.o223322o.. +o22333222o. +o33ooo222o. +o33o3oo222o +o3333oo222o +.P33ooo22oo +..ooooo2ooo +.....o22oo. +....o22ooo. +...o22ooo.. +...ooooo... +.....oo.... +.....o..... diff --git a/parts_pl_src/tail/pl_tail_curly.txt b/parts_pl_src/tail/pl_tail_curly.txt new file mode 100644 index 0000000..2f1600d --- /dev/null +++ b/parts_pl_src/tail/pl_tail_curly.txt @@ -0,0 +1,21 @@ +# pl_tail_curly: pixellab_src/pl_mochi/pl_tail_curly.png minus base.png +# pivot at (52, 46) +..oooo... +.o1113o.. +ox33313o. +o13oo313o +oo33oo13o +..ooo113o +..ox113o. +.ox113o.. +.o113o... +.o313o... +..o113o.. +..o313o.. +.oo313o.. +.ox233o.. +.o3133o.. +.P333o... +.o33o.... +.oco..... +.oo...... diff --git a/parts_pl_src/tail/pl_tail_dragon_fin.txt b/parts_pl_src/tail/pl_tail_dragon_fin.txt new file mode 100644 index 0000000..2b8da64 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_dragon_fin.txt @@ -0,0 +1,44 @@ +# pl_tail_dragon_fin: pixellab_src/pl_wyrm/pl_tail_dragon_fin.png minus base.png +# pivot at (44, 45) +...............oo. +...........ooooaao +........oooaacaaao +.......ocaacacaaao +.......ocaaccaaco. +......oacaacaaccao +.....obabaacaccaao +.....ocaccacccacco +.....occc2cccacco. +.....oc313ccbccaao +.....oo123caaaacco +....o2223ccccbbco. +...o1223ooccccoo.. +..o1223o..oooo.... +.o2123o........... +.o1233o........... +o3123o............ +o3123o............ +o3123o............ +o3223yo........... +o3222yo........... +.o222yo........... +.o3...yo.......... +.o....2yo......... +.....223o......... +...o3223yo........ +...o32223o........ +....o3223o........ +....o3122o........ +....o31223o....... +....P21223o....... +....o2123yo....... +.....1223yo....... +......223zo....... +......233zo....... +......23yo........ +......3yyo........ +...2..3yo......... +....33yyo......... +.....yzo.......... +....yyo........... +....oo............ diff --git a/parts_pl_src/tail/pl_tail_feather_fan.txt b/parts_pl_src/tail/pl_tail_feather_fan.txt new file mode 100644 index 0000000..de8a6e3 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_feather_fan.txt @@ -0,0 +1,40 @@ +# pl_tail_feather_fan: pixellab_src/pl_chick/pl_tail_feather_fan.png minus base.png +# pivot at (46, 40) +..........ooooo.. +........oocccccoo +......ooaacacoooo +.....oaaacaco.... +...oocaaacaco.... +..occaaacaco..... +..occaaacaco..... +..occaacaaco..... +.oaccaacaaco..... +.oaccaacaaaco.... +.oaacaacaaaco.... +.oaaacacaaacco... +.ocaaccacaacco... +.ocaaacacaacbco.. +.occaaaacaacaco.. +..ocaaaaacacaaco. +..occaaaacacaaco. +...occaaaccaaaco. +....occaabcaaacbo +.....ocaabcaacabo +.....occaacbacabo +......ocaacbcaabo +.....oocbbccbaaco +.....obcbbcbbabco +.....obobccbbbcco +.....obocccbbccco +.....oboccbbccco. +....obbcccbcbco.. +....obbcccbabco.. +...ocbcccbbacoo.. +.oocccccbbboooo.. +oocccccccccbbo... +occcccccbbbbo.... +Pcccocccbbbco.... +ooocccccccco..... +occcccccooo...... +oooccccco........ +...ooooo......... diff --git a/parts_pl_src/tail/pl_tail_fish.txt b/parts_pl_src/tail/pl_tail_fish.txt new file mode 100644 index 0000000..8d838f1 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_fish.txt @@ -0,0 +1,22 @@ +# pl_tail_fish: pixellab_src/pl_guppy/pl_tail_fish.png minus base.png +# pivot at (47, 47) +.....ooo +...ooaao +..oaaaao +.ooaaabo +.oabbabo +oaabaabo +obaabbo. +.bbbbbo. +.3baabo. +P3bcbo.. +o3bbbo.. +.obaao.. +.obaabo. +obbbabo. +obabbabo +.obabbao +..ocabao +...obbbo +....oobo +......oo diff --git a/parts_pl_src/tail/pl_tail_flame.txt b/parts_pl_src/tail/pl_tail_flame.txt new file mode 100644 index 0000000..99f4797 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_flame.txt @@ -0,0 +1,48 @@ +# pl_tail_flame: pixellab_src/pl_fox/pl_tail_flame.png minus base.png +# pivot at (46, 32) +...........oo...... +..........ohho..... +..........ohho..... +..........ohgho.... +..........ohggho... +.........ohgggho... +........oohgggho... +.......ohhggggo.... +....ooohgggggho.... +...ohhohgggggho.... +...ohhogggggho..... +..ohghhgggggho.o... +..ohghhgggggghoho.. +..ohgghgggggghogho. +.ohgggggggggghogho. +ohhgggggggfggghgho. +ohgggggggffgggggho. +ohggggggfffgggggho. +ohggggfffffggggggho +.hggggfffffggggggho +.hggggfffffffggggho +.o.gggfffffffggggho +...gggf23fffggggho. +..o.ggg223gggggho.. +...ohhg223ggggho... +...oooo223hhhho.... +......o2233ooo..... +.......o2233o...... +..P....o3223o...... +........o2223o..... +.........o223o..... +.........o223o..... +.........o1233o.... +.........o1233o.... +.........o2233o.... +........o12233o.... +........o1233o..... +.......o21133o..... +......o11133oo..... +...ooo211133o...... +..o111111333o...... +...11113333o....... +..11133333o........ +..3333333o......... +..33333oo.......... +.oooooo............ diff --git a/parts_pl_src/tail/pl_tail_fluffy.txt b/parts_pl_src/tail/pl_tail_fluffy.txt new file mode 100644 index 0000000..fc64771 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_fluffy.txt @@ -0,0 +1,34 @@ +# pl_tail_fluffy: pixellab_src/pl_cub/pl_tail_fluffy.png minus base.png +# pivot at (46, 37) +.......oooo...... +.....oo1111o..... +...oo111111ooo... +.oo11111111111o.. +.o1111111111111o. +o11111111111111o. +o111111113333111o +.111111133333311o +.11111113oooo311o +.11111113o33o313o +..1111133o313313o +..3111133o311133o +o33111113o333333o +o333111113o3333o. +oo333111133oooo.. +..o333111133o.... +..o.33311113o.... +...oo33211113o... +..P.o33311113o... +.....o33311133o.. +.....o33311113o.. +......o3311113o.. +......o3111113o.. +.....o33111133o.. +...ooo31111333o.. +.oo3331111333o... +.o33111333333o... +.o3313333333o.... +..o33333333o..... +..o333333oo...... +..o3333oo........ +..ooooo.......... diff --git a/parts_pl_src/tail/pl_tail_ghostfire.txt b/parts_pl_src/tail/pl_tail_ghostfire.txt new file mode 100644 index 0000000..93cac1a --- /dev/null +++ b/parts_pl_src/tail/pl_tail_ghostfire.txt @@ -0,0 +1,35 @@ +# pl_tail_ghostfire: pixellab_src/pl_owl/pl_tail_ghostfire.png minus base.png +# pivot at (44, 52) +............o....... +...........ovo...... +...........ovvo..... +...........ovvo..... +............ovvo.... +............ovrro... +.........o..ovrro... +........ovo.ovrro... +........ovoorrrro... +.......ovvoorrrro.o. +......oovooorrrroovo +.....ovvrovrrrvoovo. +.....orrvovrrrrovvo. +....ovrrvvvrqrrovvo. +....ovrrrrrqqrrovvo. +....orrrrrqqqrrovvo. +....orrqrrqqqqrrrrro +....orrqqrqqqqrrrrro +....ovrqqqqqqqrrqrro +....ovrqqqqqqqqqrrro +....ovrqqqqrqqqqrro. +.....ovrqqqrqqqqrro. +......oorv1qqqqrro.. +.......or2rvqqqrro.. +.......ov2vvvrrro... +......ov22vvoooo.... +......o22vvo........ +..oooo22voo......... +..o2122vvo.......... +.Pv22vvvo........... +.ovvvvoo............ +ovvvoo.............. +oooo................ diff --git a/parts_pl_src/tail/pl_tail_ice_shard.txt b/parts_pl_src/tail/pl_tail_ice_shard.txt new file mode 100644 index 0000000..b45e220 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_ice_shard.txt @@ -0,0 +1,20 @@ +# pl_tail_ice_shard: pixellab_src/pl_seal/pl_tail_ice_shard.png minus base.png +# pivot at (45, 54) +..........oo +.....o..ooio +....ojooiijo +...ojijiiijo +..ojijiiijjo +..oijiijjjio +..ojjiijjijo +..ojjijjjjjo +...okjjjjjo. +....okkjjko. +...okkkooo.. +..okkkko.... +...kkko..... +...kkko..... +...kko...... +..Pkko...... +.kkoo....... +ooo......... diff --git a/parts_pl_src/tail/pl_tail_leaf.txt b/parts_pl_src/tail/pl_tail_leaf.txt new file mode 100644 index 0000000..80ab8bd --- /dev/null +++ b/parts_pl_src/tail/pl_tail_leaf.txt @@ -0,0 +1,40 @@ +# pl_tail_leaf: pixellab_src/pl_fawn/pl_tail_leaf.png minus base.png +# pivot at (44, 40) +............oooo +.........oooyxzo +.......ooxxxyyo. +.....ooyxxxzyyo. +....oyxyyyzyyo.. +...oyyyyyzyyyo.. +..oyxyyyzyyyzo.. +..oyyyyzyyyyo... +.oyyyyyyyyyyyo.. +.oyzyyzyyyyyyo.. +oyyzyzyyyyyyyo.. +oyyyyzyyzzyyo... +ozyyzyzzzyyzo... +ozyyzzzyyyzzo... +ozzyzzyyyzzo.... +.ozzzzzzzzo..... +.ozzzzzzzo...... +..ozzoooo....... +..ozzo.......... +...o3o.......... +...o33o......... +...o333o........ +....o333oo...... +.....oo322o..... +.......o322o.... +........o222o... +.........o22o... +.........o223o.. +..........o22o.. +..........o22o.. +oo.......o223o.. +o2o......o223o.. +P22o....o3233o.. +o322oooo3223o... +o33222222233o... +oo333222333o.... +..oo33333oo..... +....ooooo....... diff --git a/parts_pl_src/tail/pl_tail_lightning.txt b/parts_pl_src/tail/pl_tail_lightning.txt new file mode 100644 index 0000000..d5a9360 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_lightning.txt @@ -0,0 +1,43 @@ +# pl_tail_lightning: pixellab_src/pl_imp/pl_tail_lightning.png minus base.png +# pivot at (42, 49) +.......ooooooo +......otttttto +......ottttto. +.....otttttto. +.....ottttto.. +.....otttto... +....ottttto... +....otttto.... +...ottttto.... +...otttttooo.. +...otttttttto. +....oootttto.. +......otttto.. +......ottto... +.....ottto.... +.....otto..... +....otto...... +....oto....... +....oo........ +...ouo........ +...oto........ +..osto........ +..osto........ +..osto........ +..osso........ +...osto....... +...osso....... +....oso....... +....osto...... +....osto...... +....osto...... +....osuo...... +...ossuo...... +..oossuo...... +ooosstuo...... +otsstuo....... +otsstuo....... +Puuuuo........ +.uuuo......... +ouoo.......... +oo............ diff --git a/parts_pl_src/tail/pl_tail_lightning_lizard.txt b/parts_pl_src/tail/pl_tail_lightning_lizard.txt new file mode 100644 index 0000000..7d6924a --- /dev/null +++ b/parts_pl_src/tail/pl_tail_lightning_lizard.txt @@ -0,0 +1,41 @@ +# pl_tail_lightning_lizard: pixellab_src/pl_lizard/pl_tail_lightning_lizard.png minus base.png +# pivot at (44, 47) +......o............. +.....oto..ooooo..... +.....oto.o222ooo.... +.....otoo223o....... +......o222ooo....... +.....o223ottto...... +....o323o.ooo....... +...o322o............ +...o323o............ +...ot23o............ +.o.o3t3o............ +otoo32to...o........ +.oto32to..oto....... +.oto3223o.oto....... +.otoo3223ooto....... +.ottto3223oto....... +..ooto33222o........ +...otoo332t2o....o.. +...oto.oo32t2oo.oto. +....o....o32t2ooto.. +........oo32223oto.. +.......otto3223oto.. +........oto3222tto.. +.........oto322to... +..........oottt3ooo. +...........o2223otto +......o...ot2223oto. +.....oto..o2t223oo.. +.....oto.o32t233o... +....oto.o32t223o.... +....otoo322t233oo... +...oo322222t23otto.. +....222tttt233oto... +....22t222333o.o.... +..P22tt22333o....... +..ttt333333o........ +ot3333333oooo....... +o33333oootttto...... +oooooo...oooo....... diff --git a/parts_pl_src/tail/pl_tail_puff.txt b/parts_pl_src/tail/pl_tail_puff.txt new file mode 100644 index 0000000..6702b7e --- /dev/null +++ b/parts_pl_src/tail/pl_tail_puff.txt @@ -0,0 +1,15 @@ +# pl_tail_puff: pixellab_src/pl_bunny/pl_tail_puff.png minus base.png +# pivot at (45, 49) +.....oo.... +...oo11o... +..oxxxxxo.. +.oxxxxxxxo. +oxxxxxxxxxo +oxxxxxxxxxo +o1xxxxxxx1o +.o1xxxxxx1o +.oo11xx111o +.o3o11111o. +P23oo111o.. +.2o..ooo... +.o......... diff --git a/parts_pl_src/tail/pl_tail_rattle.txt b/parts_pl_src/tail/pl_tail_rattle.txt new file mode 100644 index 0000000..c3d7bf7 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_rattle.txt @@ -0,0 +1,18 @@ +# pl_tail_rattle: pixellab_src/pl_snake/pl_tail_rattle.png minus base.png +# pivot at (45, 38) +..ooo... +.oyyyo.. +oyxyyzo. +oyyyyzo. +oyyyzzo. +ozzzzo.. +.oooooo. +.oyyyzzo +.oyxyyzo +.oPyyzzo +..ooooo. +..oyxzzo +..oyxyzo +..ozzzzo +...oozo. +.....oo. diff --git a/parts_pl_src/tail/pl_tail_scorpion.txt b/parts_pl_src/tail/pl_tail_scorpion.txt new file mode 100644 index 0000000..231fea9 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_scorpion.txt @@ -0,0 +1,34 @@ +# pl_tail_scorpion: pixellab_src/pl_bee/pl_tail_scorpion.png minus base.png +# pivot at (49, 45) +...ooo.oo....... +..obbbo22o...... +.obaab3222o..... +.oabbb32223oo... +obbbbco33312o... +obboccoo33122o.. +obcooo..o2123o.. +occo....o223oo.. +.oco.....o3333o. +..oo.....o2123o. +.........o2223o. +.........o2223o. +..........o333o. +.........o21223o +.........o21223o +.........o21223o +.........o33333o +........o21123o. +........o21123o. +........o33233o. +.......o313333o. +......oo31233o.. +.....o3332223o.. +.......13322o... +........1323o... +........1333o... +.....P..23oo.... +.......333o..... +...o..333o...... +...o333oo....... +...o33o......... +...ooo.......... diff --git a/parts_pl_src/tail/pl_tail_spade.txt b/parts_pl_src/tail/pl_tail_spade.txt new file mode 100644 index 0000000..f34771d --- /dev/null +++ b/parts_pl_src/tail/pl_tail_spade.txt @@ -0,0 +1,34 @@ +# pl_tail_spade: pixellab_src/pl_drake/pl_tail_spade.png minus base.png +# pivot at (48, 50) +....o..... +...obo.... +...oao.... +..oabbo... +.oabbbbo.. +obabbbbco. +obbbcbbco. +ocbcccbco. +.occccco.. +..oo2oo... +...o2o.... +..o22o.... +..o22o.... +..o22o.... +..o22o.... +...o22o... +...o22o... +....o22o.. +....o22o.. +.....o22o. +.....o22o. +......o22o +......o22o +......o22o +.....o322o +.....o222o +.....o223o +....oo223o +...ob222o. +..oo2223o. +.ob22..3o. +.o22P..o.. diff --git a/parts_pl_src/tail/pl_tail_splash.txt b/parts_pl_src/tail/pl_tail_splash.txt new file mode 100644 index 0000000..a7e379a --- /dev/null +++ b/parts_pl_src/tail/pl_tail_splash.txt @@ -0,0 +1,20 @@ +# pl_tail_splash: pixellab_src/pl_worm/pl_tail_splash.png minus base.png +# pivot at (48, 47) +......oooo.... +....oo11yyoo.. +...o1111yxxzo. +..o11133zyxxzo +.o1122ooozzxyo +.o113o...ozzyo +o113o....ozxyo +o113o...ozzyzo +o113o..ozyyzo. +o313o...oooo.. +.o113o........ +.o112o........ +..o11o........ +..oP13o....... +....13o....... +......o....... +......o....... +......o....... diff --git a/parts_pl_src/tail/pl_tail_stinger.txt b/parts_pl_src/tail/pl_tail_stinger.txt new file mode 100644 index 0000000..c4b9b13 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_stinger.txt @@ -0,0 +1,45 @@ +# pl_tail_stinger: pixellab_src/pl_grub/pl_tail_stinger.png minus base.png +# pivot at (49, 47) +...........oo. +.........oowo. +.......oowwo.. +......owww1o.. +....oo1ww1o... +....ob11wo.... +...obbb1o..... +..obabcco..... +..oaaccoo..... +.obabco....... +.oaabo........ +.oacco........ +obaco......... +obaco......... +ocaao......... +.oaaco........ +.ocaco........ +.ocbaco....... +.occaaco...... +..occaaco..... +...ocbabco.... +...occbabco... +....occbabo... +.....occaaco.. +......occaco.. +.......ocbaco. +.......occaao. +........ocaaco +........ocaaco +........ocaaco +........ocaaco +........ocaaco +........ocaaco +.......ocaacco +.......obaacco +.....oocaaaco. +.....ocbaacco. +.....oaaabco.. +.....Paabcco.. +.....oaccco... +.....occco.... +.....ocoo..... +.....oo....... diff --git a/parts_pl_src/tail/pl_tail_storm.txt b/parts_pl_src/tail/pl_tail_storm.txt new file mode 100644 index 0000000..ba72a59 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_storm.txt @@ -0,0 +1,30 @@ +# pl_tail_storm: pixellab_src/pl_hawk/pl_tail_storm.png minus base.png +# pivot at (47, 40) +.........o............. +........oso............ +........ouo............ +........ouo............ +...o....ouo............ +..ouo..ouo..........o.. +..ouo.ouuo.ooo...ooouo. +..ouo..ouoo33o..ouuuo.. +..ouoooouo313o.ousuo... +..ouuo3oo3113o.ouoo.... +.oouo33o31133oouuo..... +ouoo313o1113ouuuo...... +ouoo31331113ouoooo..... +ouuo31311133oo333o..... +ouou113u133311133o..... +ooou111u111uu133ooo.... +..ou11u111u11333ouuo... +..oouuu11u3333oouuo.... +...oouu11uu333oooooooo. +....oouuuu333112oouuuuo +.....oouu333332oouuuoo. +......oPo33oooooouoo... +.........oo..ouuuo..... +...........ooouuo...... +...........ouuoo....... +.........ooouuooo...... +.........ouuuouuuo..... +..........ooo.ooo...... diff --git a/parts_pl_src/tail/pl_tail_streamers.txt b/parts_pl_src/tail/pl_tail_streamers.txt new file mode 100644 index 0000000..8f2db70 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_streamers.txt @@ -0,0 +1,30 @@ +# pl_tail_streamers: pixellab_src/pl_duck/pl_tail_streamers.png minus base.png +# pivot at (45, 42) +.................o.... +.................oo... +....ooooo........oyo.. +..ooyyyyyoo.....ooyo.. +.ozyyyzzyyyo...ooyyo.. +.oyzzzooozyyoooyyyzo.. +ozyzooo..oozyyyyzzo... +ozzo.......ozzzzzo.... +ozzo........ooooo..... +ozz....ooooo.......... +.oo..ozyyyyyo......... +...oPzzzzzyyyo........ +...ooooooozzyo........ +....ozzo..ozyyo....... +....ozyyo..ozyo....... +....oozyzo.ozyo....... +......oyyo.ozyo....... +......ozyo.ozyo.....o. +......ozyo.ozyo.....o. +......ozyo.ozyo.....oo +......ozyo.ozyzo...oyo +......ozyo.ozzyzoooyyo +......ozyo..ozyyyyyyzo +......ozyo...ozzzzzzo. +......ozyyo...oooooo.. +.......ozyyooo........ +........ozzyyzo....... +.........ooooo........ diff --git a/parts_pl_src/tail/pl_tail_tuft.txt b/parts_pl_src/tail/pl_tail_tuft.txt new file mode 100644 index 0000000..1c50fff --- /dev/null +++ b/parts_pl_src/tail/pl_tail_tuft.txt @@ -0,0 +1,40 @@ +# pl_tail_tuft: pixellab_src/pl_brawler/pl_tail_tuft.png minus base.png +# pivot at (45, 51) +..........oooooo +.......oooaaacco +......oaobaaaaco +.....oaacaaaacco +....oaaaaaaaccco +....oaabaaaaccoo +....oacbabaaabco +....occocbaacco. +.....oo2ocbbcco. +.....o23occcco.. +....o23o.oooo... +....o23o........ +....o23o........ +....o23o........ +....o32o........ +....o32o........ +.....o23o....... +.....o323o...... +......o323o..... +......o323o..... +.......o323o.... +........o22o.... +........o323o... +.........o23o... +.........o23o... +.........o23o... +.........o23o... +........oa23o... +........o223o... +...o.ooo1233o... +.ooaoao2123o.... +oobooo22233o.... +o33a222233o..... +o3P2..333o...... +.o.3.333o....... +.....3oo........ +....3o.......... +...oo........... diff --git a/parts_pl_src/tail/pl_tail_vine.txt b/parts_pl_src/tail/pl_tail_vine.txt new file mode 100644 index 0000000..949ed80 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_vine.txt @@ -0,0 +1,30 @@ +# pl_tail_vine: pixellab_src/pl_worm/pl_tail_vine.png minus base.png +# pivot at (48, 47) +........oooo............. +........oxxxo............ +........oxxxxo........... +........oxxyxxo.......... +........oyxxzxo.......... +.........oyxxyo.......oo. +..........ooyyo.....ooxxo +............ooyo...oxxxxo +...........oxxoyo.oxxyxyo +..........oxyyyyyoyxyxyyo +..........oyyyoyyoyyyyyo. +...........ooo.oyyyyyyo.. +...............ozxyooo... +................oxoyyyo.. +............P...oxooyyyo. +................oxooooo.. +................oxo...... +................oxo...... +................oxo...... +................oxo...... +...............oxzo...... +...............oxzo...... +.............ooxzo....... +............ooxyzo....... +........ooooyxyyo........ +.oo.o.oozzxxzzzo......... +ozzzzzzzzzzzzoo.......... +.oooooooooooo............ diff --git a/parts_pl_src/tail/pl_tail_wisp_ghostfire.txt b/parts_pl_src/tail/pl_tail_wisp_ghostfire.txt new file mode 100644 index 0000000..c158ef2 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_wisp_ghostfire.txt @@ -0,0 +1,38 @@ +# pl_tail_wisp_ghostfire: pixellab_src/pl_wisp/pl_tail_wisp_ghostfire.png minus base.png +# pivot at (44, 48) +..............o....... +.............ovo...... +............ovvo...... +............ovvo...... +............ovvvo..... +.............ovvo..... +.............ovvvo.... +.............ovvvvo... +............ovvrvvo... +...........ovvvrvvo... +........o.ovvrvvvvo... +.......ovovvrrrvvo.... +.......ovovvrqrvvo.o.. +......ovvovrrqrvvoovo. +.....ovvvovrqqvvoovvo. +.....ovrvovrqqrvoovvo. +.....ovrvvvrqqrvoovvo. +.....ovrqvvrqqqrvovvvo +.....ovrqrrrqqqqrvvrvo +.....ovvrqqqqqqqrvrrvo +.oo...ovrqqqqqqqqqqvvo +..vo..ovvqqqqqqqqqvvo. +..qvo..ovrqqqqqqqqvvo. +..qqo...ovvqqqqqqqvo.. +.o.qro...ovrqqqqqrvo.. +..o.ro...ovrqqqqqvvo.. +...ovo..ovvqqqqqvvo... +oooPo.oovvvqqqqrvo.... +vvvooovvrrqqqqvvo..... +.vvvvvrrqqqqrvvo...... +..vrrrqqqqqvvvo....... +...vrrrrvvvooo........ +....vvvvooo........... +.....vvo.............. +......vo.............. +.....ooo.............. diff --git a/parts_pl_src/tail/pl_tail_wrapped.txt b/parts_pl_src/tail/pl_tail_wrapped.txt new file mode 100644 index 0000000..6597587 --- /dev/null +++ b/parts_pl_src/tail/pl_tail_wrapped.txt @@ -0,0 +1,27 @@ +# pl_tail_wrapped: pixellab_src/pl_monk/pl_tail_wrapped.png minus base.png +# pivot at (39, 52) +.............oooooo... +............o2222bco.. +...........o21222bb3o. +..........o212233c333o +.........o21223oooo33o +.........o1223o....o3o +........o21233o....o3o +........o2223o.....oo. +........o2223o....oo.. +........obbccco....... +.........obbbco....... +.........ocbbcco...... +..........occbco...... +..........o222bo...... +..........o2223o...... +..........o2223o...... +.........obc223o...... +.oo.....ocbbc33o...... +o23ooooo32bbcc3o...... +.3223ccc222ccco....... +.3222bbb2233co........ +P3332bbb2333o......... +oo333ccc33oo.......... +.o33cccooo............ +.ooooooo.............. diff --git a/pixellab_api.py b/pixellab_api.py new file mode 100644 index 0000000..486b416 --- /dev/null +++ b/pixellab_api.py @@ -0,0 +1,139 @@ +""" +Minimal PixelLab v2 client used by pixellab_library.py. + +- Token from PIXELLAB_API_KEY (environment or .env next to this file). +- Retries rate limits (429/529) with backoff, polls async jobs (edit endpoints return a job id), + and runs one job at a time across all processes (the account's concurrency limit is 1). +- Appends one line per paid call to pixellab_src/ledger.jsonl so spend can be tracked across + runs and parallel workers: `python pixellab_library.py cost`. +""" +import base64 +import fcntl +import io +import json +import os +import random +import sys +import time +from pathlib import Path + +import requests +from PIL import Image + +API = "https://api.pixellab.ai/v2" +LEDGER = Path(__file__).with_name("pixellab_src") / "ledger.jsonl" +LOCK = LEDGER.with_name(".api.lock") +RETRIES = 10 +JOB_POLL_SECONDS = 4 +JOB_TIMEOUT_SECONDS = 900 + + +class ApiError(Exception): + pass + + +def load_key(): + key = os.environ.get("PIXELLAB_API_KEY") + env = Path(__file__).with_name(".env") + if not key and env.exists(): + for line in env.read_text().splitlines(): + name, sep, value = line.strip().partition("=") + if sep and name.strip() == "PIXELLAB_API_KEY": + key = value.strip().strip("'\"") + if not key: + sys.exit("PIXELLAB_API_KEY not set (environment or .env)") + return key + + +def b64(img): + buf = io.BytesIO() + img.save(buf, format="PNG") + return {"type": "base64", "base64": base64.b64encode(buf.getvalue()).decode(), "format": "png"} + + +def decode(field): + data = field["base64"] + if data.startswith("data:"): + data = data.split(",", 1)[1] + return Image.open(io.BytesIO(base64.b64decode(data))).convert("RGBA") + + +def find_image(obj): + """First image in a response: a Base64Image dict or a data: URL, at any depth.""" + if isinstance(obj, dict): + if isinstance(obj.get("base64"), str): + return decode(obj) + obj = list(obj.values()) + if isinstance(obj, list): + for v in obj: + img = find_image(v) + if img is not None: + return img + if isinstance(obj, str) and obj.startswith("data:image"): + return decode({"base64": obj}) + return None + + +def redact(payload): + return {k: ("" if isinstance(v, dict) and v.get("type") == "base64" else v) for k, v in payload.items()} + + +class Client: + def __init__(self): + self.session = requests.Session() + self.session.headers["Authorization"] = f"Bearer {load_key()}" + + def call(self, method, path, payload=None): + for attempt in range(RETRIES): + try: + r = self.session.request(method, f"{API}/{path}", json=payload, timeout=300) + except requests.RequestException as e: + if attempt == RETRIES - 1: + raise ApiError(str(e)) + time.sleep(5 + attempt * 5) + continue + if r.status_code in (429, 529, 502, 503) and attempt < RETRIES - 1: + time.sleep(min(60, 6 * (attempt + 1)) + random.uniform(0, 4)) + continue + if not r.ok: + raise ApiError(f"{path}: {r.status_code} {r.text[:400]}") + return r.json() + + def balance(self): + return self.call("GET", "balance") + + def run(self, endpoint, payload, label): + """POST, wait for the job if there is one, return (image, usage). Logs the call to the ledger. + + The account allows one job at a time, so jobs from every process (parallel workers, other + terminals) queue on a file lock instead of failing with 429.""" + LOCK.parent.mkdir(parents=True, exist_ok=True) + with LOCK.open("a") as lock: + fcntl.flock(lock, fcntl.LOCK_EX) + try: + return self._run(endpoint, payload, label) + finally: + fcntl.flock(lock, fcntl.LOCK_UN) + + def _run(self, endpoint, payload, label): + resp = self.call("POST", endpoint, payload) + usage = resp.get("usage") + job = resp.get("background_job_id") + deadline = time.time() + JOB_TIMEOUT_SECONDS + while job: + if time.time() > deadline: + raise ApiError(f"job {job} still running after {JOB_TIMEOUT_SECONDS}s") + time.sleep(JOB_POLL_SECONDS) + status = self.call("GET", f"background-jobs/{job}") + if status["status"] == "failed": + raise ApiError(f"job {job} failed: {json.dumps(status.get('last_response'))[:400]}") + if status["status"] == "completed": + resp, usage, job = status.get("last_response") or {}, status.get("usage") or usage, None + img = find_image({k: v for k, v in resp.items() if k != "usage"}) + LEDGER.parent.mkdir(parents=True, exist_ok=True) + with LEDGER.open("a") as f: + f.write(json.dumps({"time": round(time.time()), "label": label, "endpoint": endpoint, + "usage": usage, "ok": img is not None}) + "\n") + if img is None: + raise ApiError(f"no image in response: {json.dumps(redact(resp))[:400]}") + return img, usage diff --git a/pixellab_library.py b/pixellab_library.py new file mode 100755 index 0000000..4dcbad6 --- /dev/null +++ b/pixellab_library.py @@ -0,0 +1,789 @@ +#!/usr/bin/env python3 +""" +Build the PixelLab part library (64x64 sprites, registry: sprite_parts_pl.py). + +Each base creature has a spec, pixellab_library/.json. The base is generated once with +PixelLab's pixen model; every part is an edit of that exact image ("add horns ...") made with +edit-image-pixen, and the part is the pixel difference between the edit and the base. All art +is drawn in a stand-in palette (teal body = main, crimson = accent, gold = type) that maps to +the palette keys, so the generator can recolor it with brand colors. + +Workflow + python pixellab_library.py generate pl_fox --base-only # base only (pixellab_src/pl_fox/base.png): review it first + python pixellab_library.py generate pl_fox # every missing edit + python pixellab_library.py extract pl_fox # grids parts_pl_src/, PNGs parts_pl/, diffs preview/pixellab/diff/ + python pixellab_library.py preview pl_fox # preview/pixellab/body_pl_fox.png + python pixellab_library.py generate pl_fox --parts pl_tail_flame --force # redo one edit (new seed!) + python pixellab_library.py preview --cross # every part on every body: preview/pixellab/cross_.png + python pixellab_library.py preview --random 60 # real random picks: preview/pixellab/random.png + python pixellab_library.py cost # spend so far (ledger) and live balance + python validate_parts.py --library pixellab # colors, markers, canvas fit + +Spec (pixellab_library/.json) + { + "name": "pl_fox", # unique, "pl_" prefix; also the body part name + "plan": "quadruped", # quadruped biped serpentine avian aquatic blob insectoid + "head": ["mammal_head"], # head-family tags; head_top parts gate on them via "requires" + "types": {"fire": 2}, "other": 1, # type boosts; every body is open to every type (other > 0) + "tags": [], "excludes": [], "deny": [], # as in sprite_parts.py (excludes: tags of parts it can't take) + "slots": ["head_top", "back", "tail"], # feature slots this body accepts (default all three) + "desc": "Chibi fox, 3/4 view", + "prompt": "chibi fox creature with ...", # body only; BASE_STYLE (colors, framing) is appended + "size": 48, # pixen canvas, multiple of 4; the creature is re-placed on 64x64 + "seed": 11, "direction": "south", "detail": "medium detail", + "anchors": {"tail": [40, 50]}, # optional, pixel coords on the 64x64 base + "parts": [{ + "slot": "tail", "name": "pl_tail_flame", + "edit": "add a long tail ending in a big orange and yellow flame, curling up on the right side", + "seed": 3, # change it to get a different edit + "types": {"fire": 6}, "other": 0, # picking weight per type / for other types + "plans": "all", # or a list of plans it may go on + "requires": [], "tags": ["tailed", "fiery"], "excludes": [], "motif": "fire", + "palette": "type", # main | accent | type: the ramp it mostly uses (for previews) + "fixed": "fire", # optional fixed-color ramp (generate_sprite.FIXED); needs types + other 0 + "fixed_from": ["accent", "type"], # ramps folded into the fixed ramp (default accent, type) + "z": null, # draw order override (back 10, tail 20, body 30, head_top 50) + "deny_bodies": [], # bodies it must never go on + "box": [x0, y0, x1, y1], "chars": "xyz", "min_area": 8, # optional diff filters + "skip": false # keep the spec entry but leave the part out of the library + }] + } + +Conventions every base and edit must follow so parts mix across bodies + - Front or 3/4 view facing the viewer (direction south / south-west), feet at the bottom. + - Tails come out on the image's RIGHT side. Wings and horns are symmetric pairs. + - Body in teal, details crimson; generic elemental features gold (type ramp, recolored per + type); fixed-color features in their natural colors (orange/yellow fire, pale ice, ...). + - The base creature fills its pixen canvas; at 64x64 it should leave room for features + (height <= ~46px, width <= ~48px). +""" +import argparse +import importlib +import json +import random +import sys +import zlib +from collections import deque +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path + +import numpy as np +from PIL import Image, ImageColor, ImageDraw + +import build_parts as bp +import generate_sprite as gs +import sprite_parts_pl as reg +from sprite_parts import TYPES + +SPEC_DIR = reg.SPEC_DIR +SRC_DIR = Path("pixellab_src") +GRID_DIR = Path("parts_pl_src") +PARTS_DIR = Path(reg.PARTS_DIR) +PREVIEW_DIR = Path("preview/pixellab") +CANVAS, GROUND_MARGIN = reg.CANVAS, reg.GROUND_MARGIN +SLOTS = reg.FEATURE_SLOTS + +# No franchise names here: "pokemon-style" made pixen copy existing designs (a Bulbasaur fox). +BASE_STYLE = (", original cute monster creature design, chibi proportions, teal body with darker teal shading, " + "small crimson details, big expressive eyes, full body, centered, retro handheld game sprite") +EDIT_SUFFIX = ", keep everything else exactly the same" + +# Stand-in palette: what PixelLab draws in, mapped to the legend characters of build_parts.py +STANDIN = { + "main": ("123", ("#9FE0D0", "#3E9C8F", "#1F5560")), # teal + "accent": ("abc", ("#F07A8A", "#C42E4A", "#7A1830")), # crimson + "type": ("xyz", ("#FFF0A0", "#F2C230", "#A87A10")), # gold +} +OUTLINE_RGB, WHITE_RGB = ImageColor.getrgb("#10131F"), (255, 255, 255) +OUTLINE_MAX_LIGHT = 0.17 # darker than every ramp's dark shade -> outline +# On a base, "gold" this pale or this washed-out is a cream/tan belly or highlight, not a gold +# detail (beaks, irises measure saturation >= 0.6): it becomes the main ramp, same shade. +BODY_PALE_GOLD_LIGHT = 0.7 +BODY_TAN_MAX_SAT = 0.45 +WHITE_MIN_LIGHT, WHITE_MAX_SAT = 0.9, 0.35 +GRAY_MAX_SAT = 0.12 # too gray to tell the hue -> nearest RGB +# Separating the feature from the body redrawn by the edit, on and right around the body: +NOISE_RGB = 48 # any edit pixel this close (raw RGB) to the base pixel is the body +SAME_RAMP_RGB = 120 # same ramp as the base pixel and closer than this: shading shift, body +JITTER_RAMPS = ("main", "outline", "white") # just outside the old silhouette: edge jitter, body +BODY_CHANGE_WARN = 0.12 +MARKER_CHAR = {"pivot": "P", "head_top": "^", "back": "B", "tail": "T", "aura": "A"} +PREVIEW_PALETTES = [("blue/amber", ["#1565C0", "#FFB300"]), ("green/red", ["#2E7D32", "#E53935"])] +BG = (226, 226, 220, 255) + + +class SpecError(Exception): + pass + + +# ---------------------------------------------------------------- specs + +def load_specs(names=()): + specs = reg.load_specs(SPEC_DIR) + seen = {} + for s in specs: + for key in ("name", "plan", "prompt"): + if key not in s: + raise SpecError(f"{s['_path']}: missing '{key}'") + if s["plan"] not in reg.PLANS: + raise SpecError(f"{s['_path']}: plan must be one of {reg.PLANS}") + for p in [s] + s.get("parts", []): + if p["name"] in seen: + raise SpecError(f"{s['_path']}: name {p['name']} already used in {seen[p['name']]}") + seen[p["name"]] = s["_path"] + for p in s.get("parts", []): + if p.get("slot") not in SLOTS: + raise SpecError(f"{s['_path']}: {p.get('name')}: slot must be one of {SLOTS}") + if p.get("fixed") and p["fixed"] not in gs.FIXED: + raise SpecError(f"{s['_path']}: {p['name']}: fixed must be one of {list(gs.FIXED)}") + if "edit" not in p: + raise SpecError(f"{s['_path']}: {p['name']}: missing 'edit'") + if names: + unknown = set(names) - {s["name"] for s in specs} + if unknown: + raise SpecError(f"no spec for {sorted(unknown)}") + specs = [s for s in specs if s["name"] in names] + return specs + + +def stable_seed(text): + return zlib.crc32(text.encode()) % 100000 + + +# ---------------------------------------------------------------- generation + +def normalize_base(raw): + """Binarize alpha, crop to the creature, put it bottom-centre on the 64x64 canvas.""" + arr = np.array(raw.convert("RGBA")) + arr[..., 3] = np.where(arr[..., 3] >= 128, 255, 0) + img = Image.fromarray(arr) + bbox = img.getbbox() + if bbox is None: + raise SpecError("base image is empty") + img = img.crop(bbox) + if img.width > CANVAS - 2 or img.height > CANVAS - GROUND_MARGIN - 1: + raise SpecError(f"base creature is {img.width}x{img.height}; must fit {CANVAS - 2}x{CANVAS - GROUND_MARGIN - 1} " + f"(use a smaller 'size')") + out = Image.new("RGBA", (CANVAS, CANVAS), (0, 0, 0, 0)) + out.paste(img, ((CANVAS - img.width) // 2, CANVAS - GROUND_MARGIN - img.height)) + return out + + +def base_payload(spec): + size = spec.get("size", 48) + return { + "description": spec["prompt"] + BASE_STYLE, + "image_size": {"width": size, "height": size}, + "no_background": True, + "outline": "single color black outline", + "detail": spec.get("detail", "medium detail"), + "view": "side", + "direction": spec.get("direction", "south"), + "seed": spec.get("seed", stable_seed(spec["name"])), + } + + +def edit_payload(spec, part, base): + return { + "image": gs_b64(base), + "description": part["edit"] + EDIT_SUFFIX, + "width": CANVAS, "height": CANVAS, + "seed": part.get("seed", stable_seed(part["name"])), + "no_background": True, + } + + +def gs_b64(img): + from pixellab_api import b64 + return b64(img) + + +def save_meta(path, endpoint, payload, usage): + from pixellab_api import redact + path.write_text(json.dumps({"endpoint": endpoint, "request": redact(payload), "usage": usage}, indent=2) + "\n") + + +MIN_USD = 0.30 # generate stops starting new bodies below this balance once trial generations are gone + + +def budget_ok(client): + bal = client.balance() + trial = (bal.get("subscription") or {}).get("generations") or 0 + usd = (bal.get("credits") or {}).get("usd") or 0 + if trial <= 0 and usd < MIN_USD: + print(f"budget stop: ${usd:.2f} left (floor ${MIN_USD:.2f}), no trial generations") + return False + return True + + +def generate(specs, only=(), force=False, dry=False, workers=1, base_only=False): + client = None + if not dry: + from pixellab_api import Client + client = Client() + for spec in specs: + if client and not budget_ok(client): + return + d = SRC_DIR / spec["name"] + d.mkdir(parents=True, exist_ok=True) + base_path = d / "base.png" + if force and not only or not base_path.exists(): + payload = base_payload(spec) + if dry: + print(f"{spec['name']}: create-image-pixen {json.dumps(payload)}") + else: + print(f"{spec['name']}: generating base ...") + try: + raw, usage = client.run("create-image-pixen", payload, f"{spec['name']}/base") + raw.save(d / "base_raw.png") + normalize_base(raw).save(base_path) + except Exception as e: # API error after retries, or a creature too big for 64x64 + print(f" base FAILED: {e}") + continue + save_meta(d / "base.json", "create-image-pixen", payload, usage) + stale = [f for f in d.glob("*.png") if not f.name.startswith("base")] + for f in stale: # edits of the old base no longer match it + f.unlink() + f.with_suffix(".json").unlink(missing_ok=True) + print(f" base saved ({usage})" + (f", removed {len(stale)} old edits" if stale else "")) + if base_only: + continue + if not base_path.exists(): + if dry: + print(f" (edits need {base_path})") + continue + base = Image.open(base_path).convert("RGBA") + todo = [p for p in spec.get("parts", []) + if (not only or p["name"] in only) and (force and (not only or p["name"] in only) + or not (d / f"{p['name']}.png").exists())] + todo = [p for p in todo if not p.get("skip")] + + def one(p): + payload = edit_payload(spec, p, base) + if dry: + return f" {p['name']}: edit-image-pixen \"{payload['description']}\" seed {payload['seed']}" + try: + img, usage = client.run("edit-image-pixen", payload, f"{spec['name']}/{p['name']}") + except Exception as e: # one failed edit shouldn't stop the others + return f" {p['name']}: FAILED {e}" + img.save(d / f"{p['name']}.png") + save_meta(d / f"{p['name']}.json", "edit-image-pixen", payload, usage) + return f" {p['name']}: saved ({usage})" + + with ThreadPoolExecutor(max_workers=max(1, workers)) as ex: + for line in ex.map(one, todo): + print(line) + + +# ---------------------------------------------------------------- color conversion + +def hls(rgb): + """(hue 0-1, lightness, saturation) of an (..., 3) array of 0-255 colors.""" + c = np.asarray(rgb, float) / 255.0 + mx, mn = c.max(-1), c.min(-1) + light, d = (mx + mn) / 2, mx - mn + sat = np.where(d == 0, 0.0, d / np.maximum(1 - np.abs(2 * light - 1), 1e-9)) + r, g, b = c[..., 0], c[..., 1], c[..., 2] + dd = np.maximum(d, 1e-9) + hue = np.where(mx == r, ((g - b) / dd) % 6, np.where(mx == g, (b - r) / dd + 2, (r - g) / dd + 4)) / 6 + return hue, light, sat + + +def ramp_table(fixed=None): + """[(ramp name, chars, rgb array 3x3)] for classification: stand-in ramps (+ one fixed ramp).""" + table = [(name, chars, np.array([ImageColor.getrgb(h) for h in hexes])) for name, (chars, hexes) in STANDIN.items()] + if fixed: + table.append((fixed, bp.FIXED_CHARS[fixed], np.array(gs.FIXED[fixed]))) + return table + + +def shade_centers(values, default): + """Light/base/dark lightness centres of one ramp's pixels (1D k-means, k=3), so an image's + own three tones map to the three shades whatever their absolute lightness.""" + if len(np.unique(np.round(values, 3))) < 3: + return default + centers = np.percentile(values, [85, 50, 15]) + for _ in range(20): + idx = np.abs(values[:, None] - centers).argmin(-1) + new = np.array([values[idx == k].mean() if (idx == k).any() else centers[k] for k in range(3)]) + if np.allclose(new, centers): + break + centers = new + return centers + + +def to_grid(arr, fixed=None, body=False): + """RGBA array -> (char grid, ramp-name grid). + + Exact stand-in / fixed colors map directly. Otherwise: very dark -> outline, bright and + unsaturated -> eye white, gray -> nearest color, anything else picks a ramp by hue and a + shade by clustering that ramp's lightness in this image into three tones. + body=True (base creatures): cream/tan gold (bellies, highlights) becomes the main ramp at the + same shade instead of type color; saturated gold details (beaks, irises) stay type.""" + table = ramp_table(fixed) + colors = np.concatenate([t[2] for t in table] + [np.array([OUTLINE_RGB, WHITE_RGB])]) + chars = np.array([c for t in table for c in t[1]] + ["o", "w"]) + names = np.array([t[0] for t in table for _ in range(3)] + ["outline", "white"]) + rgb = arr[..., :3].astype(int) + opaque = arr[..., 3] >= 128 + dist = ((rgb[:, :, None, :] - colors[None, None]) ** 2).sum(-1) + nearest = dist.argmin(-1) + hue, light, sat = hls(rgb) + exact = dist.min(-1) == 0 + outline = light <= OUTLINE_MAX_LIGHT + white = (light >= WHITE_MIN_LIGHT) & (sat <= WHITE_MAX_SAT) + gray = sat <= GRAY_MAX_SAT + ramp_hue = np.array([hls(t[2][1])[0] for t in table]) + gap = np.abs(hue[..., None] - ramp_hue) + ramp = np.minimum(gap, 1 - gap).argmin(-1) + free = opaque & ~(exact | outline | white | gray) + shade = np.zeros(ramp.shape, int) + for r, (_, _, rgbs) in enumerate(table): + sel = ramp == r + centers = shade_centers(light[free & sel], hls(rgbs)[1]) + shade[sel] = np.abs(light[sel][:, None] - centers).argmin(-1) + by_hue = ramp * 3 + shade + idx = np.select([exact | gray, outline, white], [nearest, len(chars) - 2, len(chars) - 1], by_hue) + if body: + tan = (names[idx] == "type") & ((light >= BODY_PALE_GOLD_LIGHT) | (sat < BODY_TAN_MAX_SAT)) + idx = np.where(tan, np.where(light >= BODY_PALE_GOLD_LIGHT, 0, idx % 3), idx) # main ramp is 0-2 + grid = np.where(opaque, chars[idx], ".") + ramps = np.where(opaque, names[idx], "empty") + return grid, ramps + + +def load_rgba(path): + return np.array(Image.open(path).convert("RGBA")) + + +# ---------------------------------------------------------------- extraction + +def grow(m, diag=True): + out = m.copy() + out[1:] |= m[:-1] + out[:-1] |= m[1:] + out[:, 1:] |= m[:, :-1] + out[:, :-1] |= m[:, 1:] + if diag: + out[1:, 1:] |= m[:-1, :-1] + out[1:, :-1] |= m[:-1, 1:] + out[:-1, 1:] |= m[1:, :-1] + out[:-1, :-1] |= m[1:, 1:] + return out + + +def components(mask): + """8-connected components as lists of (y, x).""" + seen = np.zeros_like(mask) + h, w = mask.shape + out = [] + for y, x in zip(*np.nonzero(mask)): + if seen[y, x]: + continue + seen[y, x] = True + comp, q = [], deque([(y, x)]) + while q: + cy, cx = q.popleft() + comp.append((cy, cx)) + for dy in (-1, 0, 1): + for dx in (-1, 0, 1): + ny, nx = cy + dy, cx + dx + if 0 <= ny < h and 0 <= nx < w and mask[ny, nx] and not seen[ny, nx]: + seen[ny, nx] = True + q.append((ny, nx)) + out.append(comp) + return out + + +def nearest(mask, x, y): + ys, xs = np.nonzero(mask) + i = int(np.argmin((xs - x) ** 2 + (ys - y) ** 2)) + return int(xs[i]), int(ys[i]) + + +def extract(base, part): + """Pixels of the edit that belong to the new feature. + + base/var: dicts with grid (chars), ramps (ramp names), rgb (raw array). Returns + (part char grid, fill mask, body-change fraction).""" + bgrid, vgrid = base["grid"], part["var"]["grid"] + bramp, vramp = base["ramps"], part["var"]["ramps"] + spec = part["spec"] + raw_dist = np.sqrt(((base["rgb"][..., :3].astype(int) - part["var"]["rgb"][..., :3].astype(int)) ** 2).sum(-1)) + near_body = grow(bgrid != ".") + over_body = bgrid != "." + noise = near_body & ((vramp == "outline") + | (over_body & (raw_dist < NOISE_RGB)) + | (over_body & (vramp == bramp) & (raw_dist < SAME_RAMP_RGB)) + | (~over_body & np.isin(vramp, JITTER_RAMPS))) + changed = (vgrid != ".") & (vgrid != bgrid) + allowed = np.ones_like(changed) + if "box" in spec: + x0, y0, x1, y1 = spec["box"] + allowed[:] = False + allowed[y0:y1 + 1, x0:x1 + 1] = True + if "chars" in spec: + allowed &= np.isin(vgrid, list(spec["chars"] + "o")) + keep = np.zeros_like(changed) + for comp in components(changed & allowed & ~noise): + if len(comp) >= spec.get("min_area", 8): + keep[tuple(np.array(comp).T)] = True + # The noise rule also drops the feature's root where it meets the body (a teal tail base, + # say). Take back changed pixels outside the original silhouette that touch the feature. + keep |= changed & allowed & (bgrid == ".") & grow(keep & (vgrid != "o")) + fill = keep & (vgrid != "o") + if not fill.any(): + raise SpecError(f"{spec['name']}: the edit added nothing (after box/chars/min_area)") + mask = keep | (grow(fill) & (vgrid == "o")) # plus the outline hugging the new fill + grid = np.where(mask, vgrid, ".") + if spec.get("fixed"): + grid = fold_fixed(grid, part["var"], fill, spec) + # Close the silhouette where the part ends in empty space; where it meets the creature it + # stays open, so a head_top drawn over the head joins without a seam. + grid[grow(fill, diag=False) & (vgrid == ".") & ~mask] = "o" + body_px = bgrid != "." + redrawn = body_px & ~grow(mask, diag=True) & ((vgrid == ".") | (raw_dist >= SAME_RAMP_RGB)) + return grid, fill, float(redrawn.sum() / max(1, body_px.sum())) + + +def fold_fixed(grid, var, fill, spec): + """Recolor the feature's pixels from the listed ramps into the fixed ramp, by lightness.""" + fixed = spec["fixed"] + sources = set(spec.get("fixed_from", ["accent", "type"])) | {fixed} + sel = fill & np.isin(var["ramps"], list(sources)) + if not sel.any(): + return grid + _, light, _ = hls(var["rgb"][..., :3]) + centers = shade_centers(light[sel], hls(np.array(gs.FIXED[fixed]))[1]) + shade = np.abs(light[sel][:, None] - centers).argmin(-1) + out = grid.copy() + out[sel] = np.array(list(bp.FIXED_CHARS[fixed]))[shade] + return out + + +def contact_anchor(bgrid, vgrid, fill): + """Body pixel nearest the middle of where the part touches the body (for a pair of horns or + wings, the middle of the head or back); None if the part doesn't touch the body.""" + touch = grow(fill, diag=False) & ~fill & (bgrid != ".") & (vgrid != ".") + if not touch.any(): + return None + ys, xs = np.nonzero(touch) + return nearest(bgrid != ".", xs.mean(), ys.mean()) + + +def default_anchors(bgrid): + opaque = bgrid != "." + ys, xs = np.nonzero(opaque) + x0, x1, y0, y1 = xs.min(), xs.max(), ys.min(), ys.max() + cx, cy, h = xs.mean(), ys.mean(), y1 - y0 + 1 + bottom = opaque & (np.arange(bgrid.shape[0])[:, None] == y1) + return { + "pivot": nearest(bottom, (x0 + x1) / 2, y1), + "aura": nearest(opaque, cx, cy), + "head_top": nearest(opaque, cx, y0), + "back": nearest(opaque, cx, cy - 0.2 * h), + "tail": nearest(opaque, x1, y0 + 0.75 * h), + } + + +def crop_box(mask, points): + ys, xs = np.nonzero(mask) + xs = list(xs) + [p[0] for p in points] + ys = list(ys) + [p[1] for p in points] + return min(xs), min(ys), max(xs), max(ys) + + +def write_part(slot, name, grid, header): + src = GRID_DIR / slot / f"{name}.txt" + src.parent.mkdir(parents=True, exist_ok=True) + src.write_text("".join(f"# {line}\n" for line in header) + "\n".join("".join(r) for r in grid) + "\n") + rows = bp.read_grid(src) # same validation build_parts applies + png = PARTS_DIR / slot / f"{name}.png" + png.parent.mkdir(parents=True, exist_ok=True) + bp.to_image(rows).save(png) + return png + + +def standin_image(grid): + """Char grid -> RGBA in the stand-in palette (readable, unlike the key colors).""" + lut = {"o": OUTLINE_RGB, "w": WHITE_RGB} + for chars, hexes in STANDIN.values(): + lut.update(zip(chars, (ImageColor.getrgb(h) for h in hexes))) + for ramp, chars in bp.FIXED_CHARS.items(): + lut.update(zip(chars, gs.FIXED[ramp])) + lut.update({m: (255, 0, 255) for m in MARKER_CHAR.values()}) + img = Image.new("RGBA", (grid.shape[1], grid.shape[0]), (0, 0, 0, 0)) + img.putdata([lut[c] + (255,) if c in lut else (0, 0, 0, 0) for c in grid.ravel()]) + return img + + +def zoom(img, k, bg=(27, 31, 42, 255)): + big = img.resize((img.width * k, img.height * k), Image.NEAREST) + return Image.alpha_composite(Image.new("RGBA", big.size, bg), big) + + +def hstack(tiles, gap=8, bg=(0, 0, 0, 0)): + sheet = Image.new("RGBA", (sum(t.width for t in tiles) + gap * (len(tiles) - 1), max(t.height for t in tiles)), bg) + x = 0 + for t in tiles: + sheet.paste(t, (x, 0)) + x += t.width + gap + return sheet + + +def extract_body(spec): + d = SRC_DIR / spec["name"] + if not (d / "base.png").exists(): + print(f"{spec['name']}: no base yet, run generate") + return + rgb = load_rgba(d / "base.png") + bgrid, bramps = to_grid(rgb, body=True) + base = {"grid": bgrid, "ramps": bramps, "rgb": rgb} + anchors = default_anchors(bgrid) + from_part, extracted = {}, [] + for p in spec.get("parts", []): + if p.get("skip"): + continue + src = d / f"{p['name']}.png" + if not src.exists(): + print(f" {p['name']}: no edit yet, run generate") + continue + vrgb = load_rgba(src) + if vrgb.shape != rgb.shape: + print(f" {p['name']}: edit is {vrgb.shape[1]}x{vrgb.shape[0]}, expected {CANVAS}x{CANVAS}; skipped") + continue + vgrid, vramps = to_grid(vrgb, p.get("fixed")) + var = {"grid": vgrid, "ramps": vramps, "rgb": vrgb} + try: + grid, fill, change = extract(base, {"spec": p, "var": var}) + except SpecError as e: + print(f" {p['name']}: {e}") + continue + if p["slot"] not in from_part: + a = contact_anchor(bgrid, vgrid, fill) + if a is None: + print(f" ! {p['name']}: doesn't touch the body; {p['slot']} anchor uses the default") + else: + from_part[p["slot"]] = a + extracted.append((p, var, grid, fill, change)) + anchors.update(from_part) + anchors.update({k: tuple(v) for k, v in spec.get("anchors", {}).items()}) + taken = {} + for k, xy in anchors.items(): + if xy in taken: + raise SpecError(f"{spec['name']}: {k} and {taken[xy]} anchors share pixel {xy}; set one in 'anchors'") + taken[xy] = k + + x0, y0, x1, y1 = crop_box(bgrid != ".", anchors.values()) + body = bgrid[y0:y1 + 1, x0:x1 + 1].copy() + for k, (x, y) in anchors.items(): + body[y - y0, x - x0] = MARKER_CHAR[k] + write_part("body", spec["name"], body, + [f"{spec['name']}: from pixellab_src/{spec['name']}/base.png (pixellab_library.py extract)"] + + [f"{k} at {xy}" + (" (from part)" if k in from_part else "") for k, xy in anchors.items()]) + print(f"{spec['name']}: body {body.shape[1]}x{body.shape[0]} " + + " ".join(f"{k}={anchors[k]}" for k in MARKER_CHAR)) + + diff_dir = PREVIEW_DIR / "diff" + diff_dir.mkdir(parents=True, exist_ok=True) + for p, var, grid, fill, change in extracted: + pivot = anchors[p["slot"]] + px0, py0, px1, py1 = crop_box(grid != ".", [pivot]) + pgrid = grid[py0:py1 + 1, px0:px1 + 1].copy() + pgrid[pivot[1] - py0, pivot[0] - px0] = "P" + write_part(p["slot"], p["name"], pgrid, + [f"{p['name']}: pixellab_src/{spec['name']}/{p['name']}.png minus base.png", f"pivot at {pivot}"]) + tiles = [Image.fromarray(rgb), Image.fromarray(var["rgb"]), standin_image(var["grid"]), standin_image(grid)] + hstack([zoom(t, 6) for t in tiles]).save(diff_dir / f"{p['name']}.png") + flag = " ! body redrawn, check the diff" if change > BODY_CHANGE_WARN else "" + print(f" {p['slot']:8} {p['name']:28} {pgrid.shape[1]}x{pgrid.shape[0]} {int(fill.sum())} px " + f"body change {change:.0%}{flag}") + + +def sweep_orphans(specs): + """Remove grids/PNGs for parts and bodies no longer in any spec (or marked skip).""" + live = {("body", s["name"]) for s in specs} + live |= {(p["slot"], p["name"]) for s in specs for p in s.get("parts", []) if not p.get("skip")} + for root, ext in ((GRID_DIR, "txt"), (PARTS_DIR, "png")): + for f in root.glob(f"*/*.{ext}"): + if (f.parent.name, f.stem) not in live: + f.unlink() + print(f"removed stale {f}") + + +# ---------------------------------------------------------------- previews + +def registry(): + gs._part_cache.clear() + reg._extents.clear() + return importlib.reload(reg) + + +def top_type(p, fallback="normal"): + if not p["types"]: + return fallback + return max(p["types"], key=p["types"].get) + + +def render(lib, body, picks, ptype, colors): + chosen = {"body": body, **{s: p for s, p in picks.items()}} + spr = gs.compose(lib.PARTS_DIR, chosen, "none", random.Random(0)) + spr = gs.place_on_canvas(spr, lib) + main, accent = gs.pick_main_accent([(gs.hex_to_rgb(c), 1.0) for c in colors], ptype) + return gs.recolor(spr, gs.build_palette(main, accent, ptype)) + + +def label_grid(cells, cols, path, scale, title=None): + """cells: [(label, image or None)] in a grid; None draws an empty cell.""" + cw, lh = CANVAS * scale, 12 + rows = -(-len(cells) // cols) + top = 16 if title else 0 + sheet = Image.new("RGBA", (cols * (cw + 4) + 4, top + rows * (cw + lh + 4) + 4), BG) + d = ImageDraw.Draw(sheet) + if title: + d.text((4, 2), title, fill=(30, 30, 30, 255)) + for i, (label, img) in enumerate(cells): + x, y = 4 + (i % cols) * (cw + 4), top + 4 + (i // cols) * (cw + lh + 4) + d.text((x, y), label[:28], fill=(40, 40, 40, 255)) + if img is not None: + sheet.alpha_composite(img.resize((cw, cw), Image.NEAREST), (x, y + lh)) + path.parent.mkdir(parents=True, exist_ok=True) + sheet.save(path) + print(path) + + +def preview_body(lib, spec): + by = {p["name"]: p for s in lib.SLOTS.values() for p in s} + if spec["name"] not in by: + print(f"{spec['name']}: not extracted") + return + body = by[spec["name"]] + btype = top_type(body) + own = [(p["slot"], by[p["name"]]) for p in spec.get("parts", []) if p["name"] in by] + cells = [] + for _, colors in PREVIEW_PALETTES: + base = Image.open(SRC_DIR / spec["name"] / "base.png").convert("RGBA") + cells.append(("pixellab base", Image.alpha_composite(Image.new("RGBA", base.size, (27, 31, 42, 255)), base))) + cells.append((spec["name"], render(lib, body, {}, btype, colors))) + for slot, p in own: + cells.append((p["name"], render(lib, body, {slot: p}, top_type(p, btype), colors))) + label_grid(cells, len(own) + 2, PREVIEW_DIR / f"body_{spec['name']}.png", 3) + + +def allowed_on(lib, body, slot, p): + tags = set(body["tags"]) | {f"plan:{body['plans'][0]}"} + if body["plans"][0] not in p["plans"] or p["name"] in body["deny"]: + return False + if p["requires"] and not set(p["requires"]) & tags: + return False + return not (set(p["tags"]) & set(body["excludes"]) or set(p["excludes"]) & tags) + + +def preview_cross(lib): + """Per slot: rows = bodies, columns = parts; every pairing the rules allow is rendered. + Gray cell: not allowed by plans/tags/deny. Red frame: rendered for review, but the generator + never picks it (detached from the body, or too big for the canvas).""" + colors = PREVIEW_PALETTES[0][1] + for slot in SLOTS: + parts = [p for p in lib.SLOTS[slot] if p["name"] != "none"] + if not parts: + continue + cells = [] + for body in lib.BODY: + for p in parts: + label = f"{body['name'][3:]}+{p['name'][3:]}" + if not allowed_on(lib, body, slot, p): + cells.append((label, Image.new("RGBA", (CANVAS, CANVAS), (200, 200, 196, 255)))) + continue + img = render(lib, body, {slot: p}, top_type(p, top_type(body)), colors) + if not lib.fits(body, {slot: p}): + if img.width > CANVAS: # expanded canvas: show the bottom-centre 64x64 + img = img.crop(((img.width - CANVAS) // 2, img.height - CANVAS, + (img.width + CANVAS) // 2, img.height)) + ImageDraw.Draw(img).rectangle((0, 0, CANVAS - 1, CANVAS - 1), outline=(220, 0, 0, 255), width=2) + label += " (detached)" if not lib.attached(body, slot, p) else " (too big)" + cells.append((label, img)) + label_grid(cells, len(parts), PREVIEW_DIR / f"cross_{slot}.png", 2, + title=f"{slot}: rows = bodies, columns = parts ({', '.join(p['name'] for p in parts)})") + + +def preview_random(lib, n): + palettes = [["#1565C0", "#FFB300"], ["#2E7D32", "#E53935"], ["#6A1B9A", "#FDD835"], ["#D84315", "#263238"], + ["#00897B", "#F06292"], ["#37474F", "#FFCA28"], ["#C62828", "#ECEFF1"], ["#F9A825", "#1A237E"]] + cells = [] + for i in range(n): + ptype = TYPES[i % len(TYPES)] + rng = random.Random(i) + plan, chosen, markings, _ = gs.pick_parts(lib, ptype, rng) + spr = gs.place_on_canvas(gs.compose(lib.PARTS_DIR, chosen, markings, rng), lib) + main, accent = gs.pick_main_accent([(gs.hex_to_rgb(c), 1.0) for c in palettes[i % len(palettes)]], ptype) + spr = gs.recolor(spr, gs.build_palette(main, accent, ptype)) + extras = [p["name"][3:] for s, p in chosen.items() if s != "body" and p["name"] != "none"] + cells.append((f"{ptype} {chosen['body']['name'][3:]} {' '.join(extras)}", spr)) + label_grid(cells, 10, PREVIEW_DIR / "random.png", 2) + + +# ---------------------------------------------------------------- cost + +def cost(): + ledger = SRC_DIR / "ledger.jsonl" + usd = gens = n = 0 + if ledger.exists(): + for line in ledger.read_text().splitlines(): + u = json.loads(line).get("usage") or {} + n += 1 + usd += u.get("usd", 0) or 0 + gens += u.get("generations", 0) or 0 + print(f"ledger: {n} calls, ${usd:.3f}, {gens:g} trial generations") + from pixellab_api import Client + print("balance:", Client().balance()) + + +def main(argv=None): + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + sub = ap.add_subparsers(dest="cmd", required=True) + g = sub.add_parser("generate", help="create missing bases and edits") + g.add_argument("bodies", nargs="*") + g.add_argument("--parts", nargs="*", default=(), help="only these parts (with --force: redo them)") + g.add_argument("--force", action="store_true", help="regenerate even if the image exists") + g.add_argument("--dry-run", action="store_true") + g.add_argument("--workers", type=int, default=1, + help="parallel edit requests (the account runs one job at a time, so extra workers just queue)") + g.add_argument("--base-only", action="store_true", help="only the base image (review it before paying for edits)") + e = sub.add_parser("extract", help="convert + diff + anchors -> parts_pl_src/ and parts_pl/") + e.add_argument("bodies", nargs="*") + pv = sub.add_parser("preview", help="review sheets in preview/pixellab/") + pv.add_argument("bodies", nargs="*") + pv.add_argument("--cross", action="store_true", help="every part on every body, one sheet per slot") + pv.add_argument("--random", type=int, metavar="N", help="N real random picks") + sub.add_parser("cost", help="spend so far and live balance") + a = ap.parse_args(argv) + try: + if a.cmd == "cost": + cost() + return 0 + specs = load_specs(getattr(a, "bodies", ())) + if a.cmd == "generate": + generate(specs, set(a.parts), a.force, a.dry_run, a.workers, a.base_only) + elif a.cmd == "extract": + for spec in specs: + extract_body(spec) + if not a.bodies: + sweep_orphans(specs) + elif a.cmd == "preview": + lib = registry() + if a.cross: + preview_cross(lib) + if a.random: + preview_random(lib, a.random) + if a.bodies or not (a.cross or a.random): + for spec in specs: + preview_body(lib, spec) + except (SpecError, reg.SpecError, bp.SourceError) as err: + print(f"error: {err}", file=sys.stderr) + return 1 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/pixellab_library/pl_axolotl.json b/pixellab_library/pl_axolotl.json new file mode 100644 index 0000000..4b637a8 --- /dev/null +++ b/pixellab_library/pl_axolotl.json @@ -0,0 +1,71 @@ +{ + "name": "pl_axolotl", + "plan": "aquatic", + "head": [ + "reptile_head" + ], + "types": { + "water": 3, + "poison": 2, + "dragon": 2 + }, + "slots": [ + "head_top", + "back" + ], + "desc": "Low-slung axolotl/newt creature with a wide flat head and crimson freckles", + "prompt": "chubby newt-like salamander creature crawling on four short splayed legs with webbed toes, very wide flat bald head with a broad smiling mouth, small beady eyes set on top of its head, smooth glossy skin, crimson freckles along its flanks, short thick tapering tail, smooth round head with no gills, no frills and no spikes", + "size": 44, + "seed": 42, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_gills_frill", + "edit": "add feathery crimson gill fronds sticking out on both sides of its head", + "seed": 1, + "types": { + "water": 4, + "poison": 3, + "dragon": 2 + }, + "other": 0.1, + "tags": [ + "finned" + ], + "motif": "water", + "palette": "accent" + }, + { + "slot": "back", + "name": "pl_coral_back", + "edit": "add a small clump of branching crimson coral with forked antler-like branches growing from the middle of its back", + "seed": 2, + "types": { + "water": 4, + "rock": 3, + "psychic": 2 + }, + "other": 0.05, + "motif": "water", + "palette": "accent" + }, + { + "slot": "head_top", + "name": "pl_axolotl_sprout", + "edit": "add a small gold two-leaf sprout growing from the top of its head", + "seed": 1, + "types": { + "grass": 6, + "bug": 1, + "normal": 0.5 + }, + "other": 0.1, + "tags": [ + "leafy" + ], + "motif": "plant", + "palette": "type" + } + ] +} diff --git a/pixellab_library/pl_bee.json b/pixellab_library/pl_bee.json new file mode 100644 index 0000000..dc1594c --- /dev/null +++ b/pixellab_library/pl_bee.json @@ -0,0 +1,88 @@ +{ + "name": "pl_bee", + "plan": "insectoid", + "head": [ + "insect_head" + ], + "types": { + "bug": 2, + "flying": 1.5, + "electric": 1.5 + }, + "other": 1, + "desc": "Fuzzy round hornet-like creature with big compound eyes, hooked mandibles and crimson stripes", + "prompt": "fuzzy round hornet-like creature facing the viewer, plump round teal body covered in short teal fuzz with two thick crimson stripes, round head with big dark oval compound eyes and two small hooked mandibles, four tiny arms, short stubby legs, no wings, no stinger", + "size": 44, + "seed": 59, + "direction": "south", + "parts": [ + { + "slot": "back", + "name": "pl_wings_bug", + "edit": "add a pair of small pale gold translucent veined insect wings on its back", + "seed": 1, + "types": { + "bug": 6, + "grass": 2, + "poison": 2, + "psychic": 1.5, + "electric": 1 + }, + "other": 0.1, + "tags": [ + "winged" + ], + "motif": "bug", + "palette": "type" + }, + { + "slot": "head_top", + "name": "pl_antennae_spark", + "edit": "add two thin teal antennae on top of its head, each tipped with a bright yellow electric spark", + "seed": 1, + "types": { + "electric": 6, + "bug": 2 + }, + "other": 0, + "tags": [], + "motif": "electric", + "palette": "main", + "fixed": "electric" + }, + { + "slot": "tail", + "name": "pl_tail_scorpion", + "edit": "add a segmented teal scorpion tail with a crimson barbed stinger, curling up on the right side", + "seed": 1, + "types": { + "bug": 5, + "poison": 5 + }, + "other": 0.05, + "tags": [ + "tailed", + "spiky" + ], + "motif": "bug", + "palette": "main" + }, + { + "slot": "head_top", + "name": "pl_bee_halo", + "edit": "add a small glowing gold halo ring floating above its head", + "seed": 1, + "types": { + "psychic": 5, + "normal": 1, + "flying": 1 + }, + "other": 0.2, + "requires": [], + "tags": [], + "motif": "sky", + "palette": "type", + "skip": true + } + ] +} \ No newline at end of file diff --git a/pixellab_library/pl_beetle.json b/pixellab_library/pl_beetle.json new file mode 100644 index 0000000..fe08220 --- /dev/null +++ b/pixellab_library/pl_beetle.json @@ -0,0 +1,81 @@ +{ + "name": "pl_beetle", + "plan": "insectoid", + "head": [ + "insect_head" + ], + "types": { + "bug": 2, + "rock": 1.5, + "ground": 1.5 + }, + "other": 1, + "slots": [ + "head_top", + "back" + ], + "desc": "Round armored dome beetle with wide flat mandibles and stubby legs", + "prompt": "round armored beetle creature facing the viewer, tall domed teal shell with a crimson seam down the middle and two crimson spots, small wide head with two short flat curved mandibles and a smooth bald forehead, six short stubby legs, no horn, no wings", + "size": 44, + "seed": 31, + "direction": "south", + "parts": [ + { + "slot": "head_top", + "name": "pl_horn_beetle", + "edit": "add one big curved crimson rhinoceros beetle horn rising from the top of its head", + "seed": 1, + "types": { + "bug": 5, + "fighting": 3, + "rock": 2 + }, + "other": 0.15, + "requires": [ + "mammal_head", + "reptile_head", + "insect_head", + "integrated_head", + "ghost_head" + ], + "tags": [ + "horned" + ], + "motif": "bug", + "palette": "accent" + }, + { + "slot": "back", + "name": "pl_wings_elytra", + "edit": "add a pair of small crimson beetle wing cases opened up behind its shell, with thin translucent wings peeking out beneath them", + "seed": 2, + "types": { + "bug": 6, + "flying": 2 + }, + "other": 0.1, + "tags": [ + "winged" + ], + "motif": "bug", + "palette": "accent" + }, + { + "slot": "back", + "name": "pl_beetle_rock_spikes", + "edit": "add three big jagged gold rock chunks sticking up from behind its shell", + "seed": 2, + "types": { + "rock": 5, + "ground": 4, + "fighting": 1 + }, + "other": 0.1, + "tags": [ + "spiky" + ], + "motif": "armor", + "palette": "type" + } + ] +} \ No newline at end of file diff --git a/pixellab_library/pl_boar.json b/pixellab_library/pl_boar.json new file mode 100644 index 0000000..c96cb32 --- /dev/null +++ b/pixellab_library/pl_boar.json @@ -0,0 +1,102 @@ +{ + "name": "pl_boar", + "plan": "quadruped", + "head": [ + "mammal_head" + ], + "types": { + "ground": 2.5, + "normal": 2, + "fighting": 1.5 + }, + "other": 1, + "excludes": [ + "eared" + ], + "desc": "Stocky boar with a broad flat snout, small upturned tusks and floppy ears", + "prompt": "stocky barrel-bodied boar-like creature standing on four short thick legs with small hooves, broad flat pig snout with a crimson nose disc, two small curved tusks poking up from its lower jaw, small fierce eyes, small floppy ears folded forward, low wide smooth head with no hair on top, crimson stripe markings on its flanks, short smooth fur, no mane, no tail, round rump with nothing behind it", + "size": 48, + "seed": 714, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_tuft_fluffy", + "edit": "add one small fluffy teal tuft of fur sticking up on top of its forehead", + "seed": 2, + "types": { + "normal": 5, + "fighting": 1, + "ice": 1 + }, + "other": 0.4, + "tags": [ + "fluffy" + ], + "requires": [ + "mammal_head", + "integrated_head" + ], + "palette": "main" + }, + { + "slot": "back", + "name": "pl_mane_bristle", + "edit": "add a tall ridge of spiky crimson bristles sticking up high along its back", + "seed": 3, + "types": { + "normal": 3, + "ground": 4, + "fighting": 3 + }, + "other": 0.3, + "tags": [ + "fluffy" + ], + "palette": "accent", + "box": [ + 0, + 0, + 43, + 25 + ] + }, + { + "slot": "back", + "name": "pl_saddle_rock", + "edit": "add a small pile of three gold boulders strapped on top of its back", + "seed": 2, + "types": { + "ground": 5, + "rock": 4 + }, + "other": 0.1, + "tags": [ + "armored" + ], + "motif": "armor", + "palette": "type", + "box": [ + 0, + 0, + 63, + 18 + ] + }, + { + "slot": "tail", + "name": "pl_tail_curl_pig", + "edit": "add a small curly teal pig tail starting at its rump and curling on the right side", + "seed": 1, + "types": { + "normal": 4, + "ground": 2 + }, + "other": 0.4, + "tags": [ + "tailed" + ], + "palette": "main" + } + ] +} diff --git a/pixellab_library/pl_brawler.json b/pixellab_library/pl_brawler.json new file mode 100644 index 0000000..cd7aaeb --- /dev/null +++ b/pixellab_library/pl_brawler.json @@ -0,0 +1,91 @@ +{ + "name": "pl_brawler", + "plan": "biped", + "head": [ + "reptile_head" + ], + "types": { + "fighting": 3, + "normal": 2, + "rock": 2 + }, + "desc": "Stout upright lizard brawler with a wide flat toad head, heavy brow and huge bandaged fists", + "prompt": "stout upright lizard brawler creature in a fighting stance, wide flat toad-like head, heavy brow ridge, underbite with two small fangs, barrel chest, huge oversized fists wrapped in crimson bandages, short thick bowed legs, no tail", + "size": 44, + "seed": 533, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_headband", + "edit": "add a crimson cloth headband tied around its forehead with two trailing ends", + "seed": 1, + "types": { + "fighting": 7, + "normal": 0.5 + }, + "other": 0.02, + "requires": [ + "mammal_head", + "reptile_head", + "rock_head", + "ghost_head" + ], + "tags": [ + "_headband" + ], + "palette": "accent" + }, + { + "slot": "back", + "name": "pl_mane_fire", + "edit": "add a mane of orange and yellow flames around its shoulders and neck", + "seed": 1, + "types": { + "fire": 8 + }, + "other": 0, + "tags": [ + "fiery" + ], + "motif": "fire", + "palette": "type", + "fixed": "fire" + }, + { + "slot": "tail", + "name": "pl_tail_tuft", + "edit": "add a long thin teal tail ending in a crimson fur tuft, curling up on the right side", + "seed": 1, + "types": { + "normal": 2, + "psychic": 3, + "poison": 2, + "electric": 2 + }, + "other": 0.4, + "tags": [ + "tailed" + ], + "palette": "main" + }, + { + "slot": "back", + "name": "pl_brawler_shell", + "edit": "add a big round crimson turtle shell on its back, sticking out wide behind both sides of its body", + "seed": 2, + "types": { + "water": 3, + "ground": 2, + "rock": 2, + "fighting": 1 + }, + "other": 0.1, + "tags": [ + "shelled" + ], + "motif": "armor", + "palette": "accent" + } + ] +} diff --git a/pixellab_library/pl_bunny.json b/pixellab_library/pl_bunny.json new file mode 100644 index 0000000..939562d --- /dev/null +++ b/pixellab_library/pl_bunny.json @@ -0,0 +1,93 @@ +{ + "name": "pl_bunny", + "plan": "biped", + "head": [ + "mammal_head" + ], + "types": { + "normal": 2.5, + "grass": 2, + "psychic": 2 + }, + "desc": "Upright earless rabbit-like hopper with buck teeth, crimson heart nose, freckles and huge flat feet", + "prompt": "rabbit-like creature standing tall and upright on huge long flat hind feet, seen from the front, round smooth head that is earless (the ears are not drawn), big round dark eyes, two big buck teeth, small crimson heart-shaped nose, crimson freckles on its cheeks, short paw arms, chubby round belly with a crimson oval belly patch, no tail", + "size": 44, + "seed": 733, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_ears_long", + "edit": "add two long upright teal rabbit ears with crimson insides on top of its head", + "seed": 1, + "types": { + "normal": 3, + "psychic": 3, + "grass": 2, + "flying": 1.5 + }, + "other": 0.3, + "requires": [ + "mammal_head", + "integrated_head" + ], + "tags": [ + "eared" + ], + "palette": "main" + }, + { + "slot": "back", + "name": "pl_wings_tiny", + "edit": "add a pair of small gold feathered wings spread from its back", + "seed": 3, + "types": { + "flying": 4, + "normal": 2, + "psychic": 1.5, + "ice": 1 + }, + "other": 0.3, + "tags": [ + "winged", + "feathered" + ], + "motif": "feather", + "palette": "type" + }, + { + "slot": "tail", + "name": "pl_tail_puff", + "edit": "add a small round fluffy cotton-ball tail with jagged fur edges, sticking out from behind its right hip", + "seed": 2, + "types": { + "normal": 4, + "ice": 2, + "grass": 1 + }, + "other": 0.5, + "tags": [ + "tailed", + "fluffy" + ], + "palette": "main" + }, + { + "slot": "head_top", + "name": "pl_bunny_flower_crown", + "edit": "add a small ring of teal leaves with one crimson flower sitting on top of its head", + "seed": 1, + "types": { + "grass": 5, + "poison": 1.5, + "psychic": 1 + }, + "other": 0.1, + "tags": [ + "leafy" + ], + "motif": "plant", + "palette": "main" + } + ] +} diff --git a/pixellab_library/pl_chick.json b/pixellab_library/pl_chick.json new file mode 100644 index 0000000..7162aa2 --- /dev/null +++ b/pixellab_library/pl_chick.json @@ -0,0 +1,97 @@ +{ + "name": "pl_chick", + "plan": "avian", + "head": [ + "beak_head" + ], + "types": { + "normal": 2, + "flying": 2, + "ice": 1.5 + }, + "desc": "Round puffball fledgling on long thin stilt legs with a fluffy crimson down collar", + "prompt": "round puffball fledgling bird with a perfectly round fluffy body, standing on two long thin stilt legs with big three-toed feet, tiny folded stub wings at its sides, short pointed beak, small teardrop-shaped crimson cheek marks, a ring of fluffy crimson down around its neck like a scarf, no crest, no tail", + "size": 44, + "seed": 301, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_crest_feather", + "edit": "add a tall crest of crimson feathers on top of its head", + "seed": 1, + "types": { + "flying": 5, + "normal": 2, + "fire": 1.5 + }, + "other": 0.3, + "tags": [ + "feathered" + ], + "motif": "feather", + "palette": "accent" + }, + { + "slot": "back", + "name": "pl_wings_gold", + "edit": "add two small gold feathered wings sticking up from behind its back, one on the left and one on the right, mirror symmetric", + "seed": 3, + "types": { + "flying": 6, + "normal": 1, + "psychic": 1, + "fire": 1 + }, + "other": 0.3, + "tags": [ + "winged", + "feathered" + ], + "motif": "feather", + "palette": "type" + }, + { + "slot": "tail", + "name": "pl_tail_feather_fan", + "edit": "add a fanned tail of long crimson tail feathers sticking out on the right side", + "seed": 1, + "types": { + "flying": 6, + "fire": 2, + "psychic": 1.5, + "normal": 1 + }, + "other": 0.2, + "tags": [ + "tailed", + "feathered" + ], + "motif": "feather", + "palette": "accent" + }, + { + "slot": "tail", + "name": "pl_chick_tail_icicle", + "edit": "add a short fanned tail of pale icy blue ice crystal feathers sticking out on the right side", + "seed": 1, + "types": { + "ice": 7 + }, + "other": 0, + "tags": [ + "tailed", + "crystal" + ], + "motif": "crystal", + "palette": "type", + "fixed": "ice", + "fixed_from": [ + "main", + "accent", + "type", + "white" + ] + } + ] +} diff --git a/pixellab_library/pl_crab.json b/pixellab_library/pl_crab.json new file mode 100644 index 0000000..7033b04 --- /dev/null +++ b/pixellab_library/pl_crab.json @@ -0,0 +1,27 @@ +{ + "name": "pl_crab", + "plan": "insectoid", + "head": ["insect_head"], + "types": {"water": 2, "rock": 1.5, "bug": 1.5}, + "other": 1, + "slots": ["head_top", "back"], + "desc": "Chunky squat crab with two lopsided big claws held up and eyes on short stalks", + "prompt": "chunky squat crab creature facing the viewer, wide flat oval teal carapace with a crimson zigzag rim along its front edge, two big round eyes on short thick stalks, one oversized blocky claw and one smaller claw both raised up beside its body with crimson pincer tips, four short stubby pointed legs on each side, tiny smiling mouth, no shell on its back, nothing on its head", + "size": 44, + "seed": 611, + "direction": "south", + "parts": [ + {"slot": "head_top", "name": "pl_coral_crown", + "edit": "add a few small branching crimson coral twigs growing on top of its head between its eye stalks", + "seed": 1, "types": {"water": 4, "rock": 3, "psychic": 1}, "other": 0.1, + "tags": [], "motif": "water", "palette": "accent"}, + {"slot": "back", "name": "pl_shell_spiral", + "edit": "add a round gold spiral hermit crab shell on its back, the shell bulges up behind its body like a big snail shell, small and compact", + "seed": 3, "types": {"water": 5, "rock": 3, "bug": 1}, "other": 0.1, + "tags": ["shelled"], "motif": "armor", "palette": "type", "box": [13, 0, 50, 33]}, + {"slot": "back", "name": "pl_barnacles", + "edit": "add a cluster of small teal barnacles and tiny shells growing on top of its back, poking up behind its body, no sparkles", + "seed": 2, "types": {"water": 4, "rock": 3}, "other": 0.1, + "tags": [], "palette": "main"} + ] +} diff --git a/pixellab_library/pl_cub.json b/pixellab_library/pl_cub.json new file mode 100644 index 0000000..d9913f9 --- /dev/null +++ b/pixellab_library/pl_cub.json @@ -0,0 +1,93 @@ +{ + "name": "pl_cub", + "plan": "quadruped", + "head": [ + "mammal_head" + ], + "types": { + "ground": 2, + "normal": 2, + "fighting": 2 + }, + "excludes": [ + "eared" + ], + "desc": "Stocky badger-like cub with small round ears and a crimson stripe mask", + "prompt": "chunky stocky badger-like cub standing on four short thick legs, wide flat head with a blunt square snout, tiny rounded ears, a crimson stripe running from its nose over its forehead, crimson band across its shoulders, big front paws with crimson claws, no tail", + "size": 44, + "seed": 301, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_horns_ram", + "edit": "add a pair of small curled gold ram horns on the sides of its head", + "seed": 1, + "types": { + "rock": 4, + "ground": 3, + "fighting": 3, + "normal": 1 + }, + "other": 0.3, + "tags": [ + "horned" + ], + "motif": "armor", + "palette": "type" + }, + { + "slot": "back", + "name": "pl_plates_rock", + "edit": "add a few small gold rock armor plates sticking out from its back, just behind its shoulders", + "seed": 3, + "types": { + "rock": 6, + "ground": 3, + "fighting": 1 + }, + "other": 0.1, + "tags": [ + "armored" + ], + "motif": "armor", + "palette": "type" + }, + { + "slot": "tail", + "name": "pl_tail_fluffy", + "edit": "add a big fluffy teal tail curling up on the right side", + "seed": 1, + "types": { + "normal": 4, + "ice": 3, + "electric": 2, + "psychic": 2 + }, + "other": 0.4, + "tags": [ + "tailed", + "fluffy" + ], + "palette": "main" + }, + { + "slot": "tail", + "name": "pl_cub_tail_rockclub", + "edit": "add a short thick teal tail ending in a round gold rock club, curling up on the right side", + "seed": 1, + "types": { + "ground": 4, + "rock": 4, + "fighting": 2 + }, + "other": 0.2, + "tags": [ + "tailed", + "armored" + ], + "motif": "armor", + "palette": "type" + } + ] +} diff --git a/pixellab_library/pl_dino.json b/pixellab_library/pl_dino.json new file mode 100644 index 0000000..a109695 --- /dev/null +++ b/pixellab_library/pl_dino.json @@ -0,0 +1,110 @@ +{ + "name": "pl_dino", + "plan": "biped", + "head": [ + "reptile_head" + ], + "types": { + "dragon": 2, + "ground": 2.5, + "rock": 2.5 + }, + "desc": "Chunky upright little dinosaur with a blunt boxy snout and tiny arms", + "prompt": "chunky little dinosaur standing upright on thick stubby legs, big boxy head with a wide blunt square snout and small nostrils, small beady eyes set high, underbite with a row of tiny teeth, very short tiny arms, round pot belly with crimson horizontal belly stripes, no tail, no spikes", + "size": 44, + "seed": 422, + "direction": "south-west", + "parts": [ + { + "slot": "back", + "name": "pl_spikes_back", + "edit": "add a row of big crimson triangular spikes along its back, from the back of its head down to its lower back, keep everything else unchanged", + "seed": 3, + "types": { + "ground": 4, + "poison": 3, + "rock": 3, + "dragon": 2, + "ice": 2 + }, + "other": 0.2, + "tags": [ + "spiky" + ], + "motif": "armor", + "palette": "accent", + "z": 35, + "deny_bodies": [ + "pl_bee", + "pl_beetle", + "pl_bunny", + "pl_hawk", + "pl_owl", + "pl_mochi", + "pl_pebble", + "pl_seal" + ] + }, + { + "slot": "tail", + "name": "pl_tail_club", + "edit": "add a thick teal tail ending in a big round gold club, extending out on the right side", + "seed": 1, + "types": { + "rock": 5, + "ground": 4, + "fighting": 1.5 + }, + "other": 0.05, + "tags": [ + "tailed" + ], + "motif": "armor", + "palette": "type" + }, + { + "slot": "head_top", + "name": "pl_horn_single", + "edit": "add one gold horn pointing up from its forehead", + "seed": 1, + "types": { + "normal": 2, + "fighting": 3, + "ground": 3, + "rock": 2 + }, + "other": 0.3, + "requires": [ + "mammal_head", + "reptile_head", + "rock_head", + "insect_head", + "integrated_head", + "ghost_head" + ], + "tags": [ + "horned" + ], + "motif": "armor", + "palette": "type" + }, + { + "slot": "back", + "name": "pl_dino_crystals_back", + "edit": "add a small cluster of gold crystal shards growing out of its back behind its shoulders", + "seed": 1, + "types": { + "rock": 5, + "psychic": 2.5, + "ground": 2, + "ice": 1 + }, + "other": 0.1, + "tags": [ + "crystal" + ], + "motif": "crystal", + "palette": "type" + } + ] +} diff --git a/pixellab_library/pl_drake.json b/pixellab_library/pl_drake.json new file mode 100644 index 0000000..51e9241 --- /dev/null +++ b/pixellab_library/pl_drake.json @@ -0,0 +1,104 @@ +{ + "name": "pl_drake", + "plan": "quadruped", + "head": [ + "reptile_head" + ], + "types": { + "dragon": 2, + "fire": 2, + "rock": 1.5 + }, + "desc": "Sturdy baby dragon on four legs with brow ridges and crimson spine diamonds", + "prompt": "sturdy baby dragon standing on four thick legs, medium-length rounded reptile snout, small bony brow ridges over narrow eyes, thick neck, a row of crimson diamond markings along its spine, crimson armored belly plates, stubby claws, no wings, no horns, no tail", + "size": 44, + "seed": 461, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_horns_dragon", + "edit": "add a pair of small swept-back crimson dragon horns on top of its head", + "seed": 1, + "types": { + "dragon": 6, + "fire": 2, + "rock": 1 + }, + "other": 0.15, + "tags": [ + "horned" + ], + "motif": "dragon", + "palette": "accent" + }, + { + "slot": "back", + "name": "pl_wings_dragon", + "edit": "add a pair of small crimson membrane dragon wings spread out to both sides from its back", + "seed": 2, + "types": { + "dragon": 6, + "fire": 3, + "flying": 2 + }, + "other": 0.1, + "tags": [ + "winged" + ], + "motif": "dragon", + "palette": "accent" + }, + { + "slot": "tail", + "name": "pl_tail_spade", + "edit": "add a long teal tail ending in a crimson spade-shaped tip, curling up on the right side", + "seed": 1, + "types": { + "dragon": 5, + "poison": 2, + "ghost": 2 + }, + "other": 0.2, + "tags": [ + "tailed" + ], + "motif": "dragon", + "palette": "main" + }, + { + "slot": "back", + "name": "pl_mane_flame", + "edit": "add a ridge of orange and yellow flames running along its back", + "seed": 1, + "types": { + "fire": 8 + }, + "other": 0, + "tags": [ + "fiery" + ], + "motif": "fire", + "palette": "type", + "fixed": "fire" + }, + { + "slot": "back", + "name": "pl_drake_crystals", + "edit": "add a cluster of three pointed gold crystals growing up out of its back", + "seed": 2, + "types": { + "rock": 5, + "psychic": 3, + "ice": 1 + }, + "other": 0.15, + "tags": [ + "crystal", + "spiky" + ], + "motif": "crystal", + "palette": "type" + } + ] +} diff --git a/pixellab_library/pl_duck.json b/pixellab_library/pl_duck.json new file mode 100644 index 0000000..9224967 --- /dev/null +++ b/pixellab_library/pl_duck.json @@ -0,0 +1,83 @@ +{ + "name": "pl_duck", + "plan": "avian", + "head": [ + "beak_head" + ], + "types": { + "water": 2, + "flying": 2, + "normal": 1.5 + }, + "desc": "Round duckling waterbird with a wide spoon-shaped crimson bill, crimson neck ring and big webbed feet", + "prompt": "plump round duckling waterbird standing on two short legs with oversized flat crimson webbed feet, egg-shaped body with a short thick neck, very wide flat spoon-shaped crimson bill that flares out at the tip, small calm half-lidded eyes, a thin crimson ring around its neck, tiny stub wings folded at its sides, no crest, no tail", + "size": 44, + "seed": 711, + "direction": "south-west", + "anchors": { + "back": [ + 34, + 34 + ] + }, + "parts": [ + { + "slot": "head_top", + "name": "pl_plume_feather", + "edit": "add a single long curved crimson plume feather sticking up from the top of its head and curving back", + "seed": 1, + "types": { + "flying": 5, + "normal": 2, + "psychic": 1 + }, + "other": 0.3, + "tags": [ + "feathered" + ], + "motif": "feather", + "palette": "accent" + }, + { + "slot": "tail", + "name": "pl_tail_streamers", + "edit": "add two long wavy gold streamer tail feathers growing from its rear end at the lower right of its body, trailing out to the right side", + "seed": 2, + "types": { + "flying": 6, + "psychic": 2, + "dragon": 1 + }, + "other": 0.2, + "tags": [ + "tailed", + "feathered" + ], + "motif": "feather", + "palette": "type" + }, + { + "slot": "back", + "name": "pl_cloud_puffs", + "edit": "add a big cluster of puffy pale teal clouds behind its back, billowing up above its shoulders and sticking out on both sides of its body", + "seed": 3, + "types": { + "flying": 5, + "ice": 2, + "psychic": 1 + }, + "other": 0.2, + "tags": [ + "fluffy" + ], + "motif": "sky", + "palette": "main", + "box": [ + 41, + 0, + 63, + 63 + ] + } + ] +} diff --git a/pixellab_library/pl_eel.json b/pixellab_library/pl_eel.json new file mode 100644 index 0000000..4ce5b6c --- /dev/null +++ b/pixellab_library/pl_eel.json @@ -0,0 +1,81 @@ +{ + "name": "pl_eel", + "plan": "serpentine", + "head": [ + "reptile_head" + ], + "types": { + "water": 3, + "electric": 2, + "dragon": 2 + }, + "desc": "Rising S-curved sea serpent with a broad flat head and whisker barbels", + "prompt": "chibi eel creature standing upright like a question mark, long smooth tubular body curving down into a small coiled tail at the bottom, rounded head with a short snout and a small closed smiling mouth, two thin whisker barbels hanging from its chin, pale cream belly, small crimson spots along its sides, smooth round head with no crest, no fins and no horns, no ground", + "size": 44, + "seed": 74, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_crest_electric", + "edit": "add a crest of three bright yellow zigzag lightning bolts standing up on top of its head", + "seed": 2, + "types": { + "electric": 7, + "water": 1 + }, + "other": 0, + "motif": "electric", + "palette": "type", + "fixed": "electric", + "fixed_from": [ + "main", + "accent", + "type", + "white" + ] + }, + { + "slot": "back", + "name": "pl_sail_fin", + "edit": "add a tall crimson sailfish fin ribbed with thin spines running down its back", + "seed": 2, + "types": { + "water": 3, + "dragon": 4, + "fire": 2, + "electric": 1.5 + }, + "other": 0.1, + "tags": [ + "finned" + ], + "motif": "dragon", + "palette": "accent" + }, + { + "slot": "tail", + "name": "pl_tail_bluefire_eel", + "edit": "add a thin teal tail curling up on the right side with its tip wreathed in bright blue flames", + "seed": 1, + "types": { + "water": 2, + "ghost": 3, + "dragon": 2 + }, + "other": 0, + "tags": [ + "tailed" + ], + "motif": "fire", + "palette": "type", + "fixed": "bluefire", + "fixed_from": [ + "main", + "accent", + "type", + "white" + ] + } + ] +} diff --git a/pixellab_library/pl_fawn.json b/pixellab_library/pl_fawn.json new file mode 100644 index 0000000..76c718f --- /dev/null +++ b/pixellab_library/pl_fawn.json @@ -0,0 +1,85 @@ +{ + "name": "pl_fawn", + "plan": "quadruped", + "head": [ + "mammal_head" + ], + "types": { + "grass": 2, + "psychic": 2, + "normal": 1.5 + }, + "desc": "Dainty fawn with long slender legs, droopy ears and crimson spot rows", + "prompt": "dainty deer fawn creature standing on four very long slender legs with small crimson hooves, narrow tapered muzzle, long droopy ears, two rows of small crimson spots along its back, tiny body, no antlers, no tail", + "size": 44, + "seed": 521, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_antlers_leafy", + "edit": "add a pair of small gold antlers sprouting small leaves on top of its head", + "seed": 1, + "types": { + "grass": 6, + "bug": 2, + "normal": 1 + }, + "other": 0.1, + "tags": [ + "horned", + "leafy" + ], + "motif": "plant", + "palette": "type" + }, + { + "slot": "back", + "name": "pl_leaf_cape", + "edit": "add a cape of large overlapping gold leaves draped over its back", + "seed": 2, + "types": { + "grass": 6, + "bug": 2 + }, + "other": 0.05, + "tags": [ + "leafy" + ], + "motif": "plant", + "palette": "type" + }, + { + "slot": "tail", + "name": "pl_tail_leaf", + "edit": "add a tail ending in a big gold leaf, curling up on the right side", + "seed": 1, + "types": { + "grass": 7, + "bug": 1.5 + }, + "other": 0.05, + "tags": [ + "tailed", + "leafy" + ], + "motif": "plant", + "palette": "type" + }, + { + "slot": "head_top", + "name": "pl_fawn_halo", + "edit": "add a small glowing gold halo ring floating above its head", + "seed": 1, + "types": { + "psychic": 6, + "ghost": 2, + "normal": 1 + }, + "other": 0.2, + "tags": [], + "palette": "type", + "skip": true + } + ] +} diff --git a/pixellab_library/pl_fox.json b/pixellab_library/pl_fox.json new file mode 100644 index 0000000..0a832e2 --- /dev/null +++ b/pixellab_library/pl_fox.json @@ -0,0 +1,30 @@ +{ + "name": "pl_fox", + "plan": "quadruped", + "head": ["mammal_head"], + "types": {"fire": 2, "normal": 2, "electric": 1.5}, + "excludes": ["eared"], + "desc": "Lean fox-like creature with huge triangular ears and a forehead diamond", + "prompt": "lean fox-like creature standing alert on four thin legs, long narrow snout, oversized triangular ears with crimson insides, small diamond mark on its forehead, slim body, no tail", + "size": 44, + "seed": 202, + "direction": "south-west", + "parts": [ + {"slot": "tail", "name": "pl_tail_flame", + "edit": "add a long fluffy tail ending in a big orange and yellow flame, curling up on the right side", + "seed": 1, "types": {"fire": 6}, "other": 0, "tags": ["tailed", "fiery"], "motif": "fire", + "palette": "type", "fixed": "fire"}, + {"slot": "head_top", "name": "pl_crown_ice", + "edit": "add a crown of pale icy blue ice crystals on top of its head", + "seed": 1, "types": {"ice": 6}, "other": 0, "tags": ["crystal"], "motif": "crystal", + "palette": "type", "fixed": "ice", "fixed_from": ["main", "accent", "type", "white"]}, + {"slot": "back", "name": "pl_wings_feather", + "edit": "add a pair of gold feathered wings spread from its back", + "seed": 1, "types": {"flying": 6, "normal": 1, "psychic": 1, "fire": 1}, "other": 0.3, + "tags": ["winged", "feathered"], "motif": "feather", "palette": "type"}, + {"slot": "tail", "name": "pl_tail_bluefire", + "edit": "add a long fluffy tail ending in a big flame of bright deep blue fire with a violet-blue core, curling up on the right side", + "seed": 8, "types": {"fire": 3, "ghost": 4, "dragon": 1}, "other": 0, "tags": ["tailed", "fiery"], "motif": "fire", + "palette": "type", "fixed": "bluefire"} + ] +} diff --git a/pixellab_library/pl_grub.json b/pixellab_library/pl_grub.json new file mode 100644 index 0000000..727294d --- /dev/null +++ b/pixellab_library/pl_grub.json @@ -0,0 +1,84 @@ +{ + "name": "pl_grub", + "plan": "insectoid", + "head": [ + "insect_head" + ], + "types": { + "bug": 2, + "grass": 1.5, + "poison": 1.5 + }, + "other": 1, + "desc": "Plump stacked-segment larva with a wide flat face and stubby nub feet", + "prompt": "plump chubby larva grub creature sitting upright facing the viewer, body made of four fat stacked teal rings that shrink toward the top, wide flat round face with a broad smiling mouth and two small eyes set far apart, crimson freckle dots along each ring, many tiny stubby nub feet along its belly, no antennae, no horn, no tail", + "size": 44, + "seed": 47, + "direction": "south", + "parts": [ + { + "slot": "head_top", + "name": "pl_antennae", + "edit": "add two teal antennae with round crimson bulb tips on top of its head", + "seed": 1, + "types": { + "bug": 5, + "electric": 2, + "psychic": 2 + }, + "other": 0.3, + "tags": [], + "motif": "bug", + "palette": "main" + }, + { + "slot": "back", + "name": "pl_mushrooms_back", + "edit": "add a small cluster of crimson-capped mushrooms with white spots growing on its back", + "seed": 1, + "types": { + "poison": 4, + "grass": 3, + "bug": 3, + "ghost": 1 + }, + "other": 0.05, + "tags": [], + "motif": "plant", + "palette": "accent" + }, + { + "slot": "tail", + "name": "pl_tail_stinger", + "edit": "add a thick curved crimson stinger tail with a big sharp pointed barb at its tip, curving up on the right side", + "seed": 3, + "types": { + "bug": 5, + "poison": 5 + }, + "other": 0.05, + "tags": [ + "tailed" + ], + "motif": "bug", + "palette": "accent" + }, + { + "slot": "head_top", + "name": "pl_grub_flower", + "edit": "add one small gold flower with round petals blooming on top of its head", + "seed": 1, + "types": { + "grass": 5, + "bug": 2, + "psychic": 1 + }, + "other": 0.2, + "tags": [ + "leafy" + ], + "motif": "plant", + "palette": "type" + } + ] +} \ No newline at end of file diff --git a/pixellab_library/pl_guppy.json b/pixellab_library/pl_guppy.json new file mode 100644 index 0000000..4db6e58 --- /dev/null +++ b/pixellab_library/pl_guppy.json @@ -0,0 +1,91 @@ +{ + "name": "pl_guppy", + "plan": "aquatic", + "head": [ + "integrated_head" + ], + "types": { + "water": 3, + "ice": 2, + "poison": 2 + }, + "desc": "Round bubbly fish creature hovering upright with tiny arm-like fins", + "prompt": "round bubble-shaped fish creature hovering upright, plump spherical body, short blunt snout with small pouty lips, two tiny paddle fins held out like little arms, pale cream belly, crimson polka-dot spots on its sides, little bubbles around it, no tail fin, no dorsal fin, no fins on its head", + "size": 40, + "seed": 31, + "direction": "south", + "parts": [ + { + "slot": "head_top", + "name": "pl_fins_head", + "edit": "add small crimson fin frills on top of its head", + "seed": 1, + "types": { + "water": 5, + "ice": 2, + "dragon": 1.5 + }, + "other": 0.1, + "tags": [ + "finned" + ], + "motif": "water", + "palette": "accent" + }, + { + "slot": "back", + "name": "pl_fin_dorsal", + "edit": "add a crimson shark-style dorsal fin rising from its back", + "seed": 1, + "types": { + "water": 7, + "ice": 2, + "dragon": 1.5 + }, + "other": 0.05, + "tags": [ + "finned" + ], + "motif": "water", + "palette": "accent" + }, + { + "slot": "tail", + "name": "pl_tail_fish", + "edit": "add a crimson fish tail fin with two pointed lobes, attached to its body and sticking out on the right side", + "seed": 2, + "types": { + "water": 7, + "ice": 2, + "dragon": 1.5 + }, + "other": 0.05, + "plans": [ + "aquatic", + "serpentine", + "quadruped", + "biped" + ], + "tags": [ + "tailed", + "finned" + ], + "motif": "water", + "palette": "accent" + }, + { + "slot": "head_top", + "name": "pl_guppy_pearl_crown", + "edit": "add a small crown of three round gold pearls sitting on top of its head", + "seed": 4, + "types": { + "psychic": 3, + "water": 3, + "normal": 2 + }, + "other": 0.2, + "motif": "water", + "palette": "type" + } + ] +} diff --git a/pixellab_library/pl_hawk.json b/pixellab_library/pl_hawk.json new file mode 100644 index 0000000..f75b6fd --- /dev/null +++ b/pixellab_library/pl_hawk.json @@ -0,0 +1,86 @@ +{ + "name": "pl_hawk", + "plan": "avian", + "head": [ + "beak_head" + ], + "types": { + "flying": 2, + "fighting": 2, + "fire": 1.5 + }, + "desc": "Proud young raptor with crimson war-paint eye stripes, V chest mark and crossed wing-arms", + "prompt": "proud young bird of prey standing upright with puffed out chest, sharp hooked beak, fierce narrow eyes with crimson war paint stripes under them, a crimson V-shaped marking on its chest, folded wings crossed in front of its chest like arms, strong thick legs with big talons, no crest, no tail", + "size": 44, + "seed": 521, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_crest_flame", + "edit": "add a crest of orange and yellow flames on top of its head", + "seed": 1, + "types": { + "fire": 8 + }, + "other": 0, + "tags": [ + "fiery" + ], + "motif": "fire", + "palette": "type", + "fixed": "fire" + }, + { + "slot": "back", + "name": "pl_wings_storm", + "edit": "add a pair of small wings shaped like jagged zigzag bright yellow lightning bolts, spread out from behind its shoulders", + "seed": 3, + "types": { + "electric": 8 + }, + "other": 0, + "tags": [ + "winged" + ], + "motif": "electric", + "palette": "type", + "fixed": "electric", + "fixed_from": [ + "main", + "accent", + "type", + "white" + ] + }, + { + "slot": "tail", + "name": "pl_tail_storm", + "edit": "add tail feathers crackling with bright yellow lightning sticking out on the right side", + "seed": 1, + "types": { + "electric": 7 + }, + "other": 0, + "tags": [ + "tailed" + ], + "motif": "electric", + "palette": "type", + "fixed": "electric" + }, + { + "slot": "head_top", + "name": "pl_hawk_headband", + "edit": "add a thick gold cloth headband with a dark outline tied around its forehead, with two short knot ends fluttering out to the right", + "seed": 2, + "types": { + "fighting": 6, + "normal": 1.5 + }, + "other": 0.3, + "tags": [], + "palette": "type" + } + ] +} diff --git a/pixellab_library/pl_imp.json b/pixellab_library/pl_imp.json new file mode 100644 index 0000000..3e51a59 --- /dev/null +++ b/pixellab_library/pl_imp.json @@ -0,0 +1,93 @@ +{ + "name": "pl_imp", + "plan": "biped", + "head": [ + "mammal_head" + ], + "types": { + "electric": 2.5, + "normal": 2, + "psychic": 2 + }, + "desc": "Small hunched mischievous imp with a wide fanged grin, pointed chin and long thin arms", + "prompt": "small mischievous imp creature standing upright, slightly hunched, bright teal skin, completely bald egg-shaped head with smooth sides and no ears at all, sly narrow eyes, very wide toothy grin with two tiny fangs, pointed chin, long thin arms with three-fingered hands, skinny legs with big flat feet, crimson spade-shaped mark on its belly, no tail", + "size": 40, + "seed": 317, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_ears_bolt", + "edit": "add two big zigzag bright yellow lightning bolt shaped ears growing out of the top sides of its head", + "seed": 2, + "types": { + "electric": 8 + }, + "other": 0, + "requires": [ + "mammal_head", + "integrated_head" + ], + "tags": [ + "eared" + ], + "motif": "electric", + "palette": "type", + "fixed": "electric", + "fixed_from": [ + "main", + "accent", + "type", + "white" + ] + }, + { + "slot": "tail", + "name": "pl_tail_lightning", + "edit": "add a zigzag bright yellow lightning bolt shaped tail sticking up on the right side", + "seed": 1, + "types": { + "electric": 8 + }, + "other": 0, + "tags": [ + "tailed" + ], + "motif": "electric", + "palette": "type", + "fixed": "electric", + "fixed_from": [ + "main", + "accent", + "type", + "white" + ] + }, + { + "slot": "back", + "name": "pl_coils_electric", + "edit": "add two small gold coil prongs sticking up from behind its shoulders, crackling with bright yellow electric sparks", + "seed": 1, + "types": { + "electric": 7 + }, + "other": 0, + "motif": "electric", + "palette": "type", + "fixed": "electric" + }, + { + "slot": "head_top", + "name": "pl_imp_halo", + "edit": "add a thin glowing gold halo ring floating just above its head", + "seed": 1, + "types": { + "psychic": 6, + "normal": 1, + "ghost": 1 + }, + "other": 0.1, + "palette": "type" + } + ] +} diff --git a/pixellab_library/pl_lizard.json b/pixellab_library/pl_lizard.json new file mode 100644 index 0000000..2359ec7 --- /dev/null +++ b/pixellab_library/pl_lizard.json @@ -0,0 +1,32 @@ +{ + "name": "pl_lizard", + "plan": "quadruped", + "head": ["reptile_head"], + "types": {"poison": 2, "electric": 1.5, "grass": 1.5}, + "other": 1, + "desc": "Slender quick gecko with huge bulging eyes, splayed sticky toe pads and crimson throat dots", + "prompt": "small slender tailless gecko creature crouching on four splayed legs, seen from the front facing the viewer, rounded head with huge bulging round eyes and a wide smiling mouth, round sticky toe pads on its feet, a row of small crimson dots along its sides, pale belly, bright teal skin, its rear is hidden behind its body, no tail at all", + "size": 44, + "seed": 734, + "direction": "south", + "anchors": {"back": [32, 32]}, + "parts": [ + {"slot": "head_top", "name": "pl_snowcap", + "edit": "add a small cap of pale icy blue snow and ice crystals sitting on top of its head", + "seed": 1, "types": {"ice": 7}, "other": 0, + "tags": ["crystal"], "motif": "crystal", "palette": "type", + "fixed": "ice", "fixed_from": ["main", "accent", "type", "white"]}, + {"slot": "head_top", "name": "pl_frill_neck", + "edit": "add a crimson frilled lizard neck frill, one round fan of crimson skin with dark ribs spread open behind its head like a small umbrella, compact, only a bit wider than its head", + "seed": 3, "types": {"poison": 4, "dragon": 3, "ground": 2}, "other": 0.15, + "tags": ["finned"], "palette": "accent", "z": 25, "skip": true}, + {"slot": "back", "name": "pl_spines_toxic", + "edit": "add a short row of five sharp crimson spines sticking up from behind its head, each spine tipped with a gold venom drop, nothing else", + "seed": 2, "types": {"poison": 7}, "other": 0.05, + "tags": ["spiky"], "palette": "accent", "box": [20, 0, 41, 40]}, + {"slot": "tail", "name": "pl_tail_lightning_lizard", + "edit": "add a long thin teal lizard tail starting at its hip and curving out on the right side, crackling with bright yellow lightning bolts along it", + "seed": 1, "types": {"electric": 7}, "other": 0, + "tags": ["tailed"], "motif": "electric", "palette": "type", "fixed": "electric"} + ] +} diff --git a/pixellab_library/pl_mochi.json b/pixellab_library/pl_mochi.json new file mode 100644 index 0000000..6828c8f --- /dev/null +++ b/pixellab_library/pl_mochi.json @@ -0,0 +1,83 @@ +{ + "name": "pl_mochi", + "plan": "blob", + "head": [ + "integrated_head" + ], + "types": { + "normal": 2, + "grass": 2, + "psychic": 1.5 + }, + "desc": "Soft squashed dumpling creature with tiny stub feet and a pinched top", + "prompt": "soft squashed dumpling creature shaped like a wide flattened rice cake, a small pinched twist of dough on its top center, sleepy half-closed crescent eyes, tiny crimson blush marks, small smiling mouth, two tiny stub feet peeking out at the bottom, no arms", + "size": 44, + "seed": 401, + "direction": "south", + "parts": [ + { + "slot": "head_top", + "name": "pl_sprout_leaf", + "edit": "add a small gold leaf sprout with two leaves growing from the top of its head", + "seed": 1, + "types": { + "grass": 6, + "bug": 1 + }, + "other": 0.1, + "tags": [ + "leafy" + ], + "motif": "plant", + "palette": "type" + }, + { + "slot": "back", + "name": "pl_flower_back", + "edit": "add a big crimson flower with a gold center blooming behind it", + "seed": 1, + "types": { + "grass": 5, + "psychic": 2, + "poison": 1.5 + }, + "other": 0.05, + "tags": [ + "floral" + ], + "motif": "plant", + "palette": "accent" + }, + { + "slot": "tail", + "name": "pl_tail_curly", + "edit": "add a short curly teal tail curling up on the right side", + "seed": 1, + "types": { + "normal": 3, + "psychic": 3, + "grass": 1.5 + }, + "other": 0.3, + "tags": [ + "tailed" + ], + "palette": "main" + }, + { + "slot": "head_top", + "name": "pl_mochi_halo", + "edit": "add a thin glowing gold halo ring floating above its head", + "seed": 1, + "types": { + "psychic": 5, + "normal": 1.5, + "ghost": 1 + }, + "other": 0.2, + "tags": [], + "palette": "type", + "skip": true + } + ] +} \ No newline at end of file diff --git a/pixellab_library/pl_monk.json b/pixellab_library/pl_monk.json new file mode 100644 index 0000000..c06d397 --- /dev/null +++ b/pixellab_library/pl_monk.json @@ -0,0 +1,85 @@ +{ + "name": "pl_monk", + "plan": "biped", + "head": [ + "mammal_head" + ], + "types": { + "fighting": 3, + "normal": 2, + "psychic": 1.5 + }, + "other": 1, + "excludes": [ + "eared" + ], + "desc": "Small calm bald monk creature with a blunt muzzle, crimson brow marks, hand wraps and sash", + "prompt": "small upright martial artist monk creature standing calmly with palms pressed together in front of its chest, big round head with a short blunt animal muzzle and a dark button nose, calm determined half-closed eyes under thick crimson brow marks, small round animal ears on the sides of its head, slim body with a crimson sash tied around its waist, forearms and hands wrapped in crimson cloth hand wraps, short sturdy legs with bare three-toed feet, bald smooth head, no hair, no tail, nothing behind it", + "size": 44, + "seed": 613, + "direction": "south-west", + "parts": [ + { + "slot": "back", + "name": "pl_scarf_long", + "edit": "add a long crimson scarf wrapped around its neck, with its long end trailing out behind it to the right", + "seed": 1, + "types": { + "fighting": 5, + "normal": 3, + "flying": 1 + }, + "other": 0.4, + "tags": [], + "palette": "accent" + }, + { + "slot": "back", + "name": "pl_cape_short", + "edit": "add a short gold cape draped from its shoulders behind its back", + "seed": 1, + "types": { + "fighting": 4, + "psychic": 2, + "normal": 2 + }, + "other": 0.2, + "tags": [], + "palette": "type" + }, + { + "slot": "tail", + "name": "pl_tail_wrapped", + "edit": "add a long teal tail wrapped in crimson bandage strips, starting at its lower back and curling up on the right side", + "seed": 1, + "types": { + "fighting": 6, + "normal": 1 + }, + "other": 0.1, + "tags": [ + "tailed" + ], + "palette": "main" + }, + { + "slot": "head_top", + "name": "pl_topknot", + "edit": "add a small teal topknot of hair on top of its head, tied with a crimson band", + "seed": 1, + "types": { + "fighting": 4, + "normal": 3, + "psychic": 1 + }, + "other": 0.3, + "requires": [ + "mammal_head", + "reptile_head", + "integrated_head" + ], + "tags": [], + "palette": "main" + } + ] +} diff --git a/pixellab_library/pl_owl.json b/pixellab_library/pl_owl.json new file mode 100644 index 0000000..e3f26c5 --- /dev/null +++ b/pixellab_library/pl_owl.json @@ -0,0 +1,86 @@ +{ + "name": "pl_owl", + "plan": "avian", + "head": [ + "beak_head" + ], + "types": { + "psychic": 2, + "ghost": 2, + "flying": 1.5 + }, + "excludes": [ + "eared" + ], + "desc": "Pear-shaped owl with huge crimson-ringed eyes, spiral ear tufts and crescent chest marks", + "prompt": "pear-shaped owl-like bird sitting upright, enormous round staring eyes ringed in crimson, two long ear tufts that curl into spirals at the tips, tiny hooked beak, three small crimson crescent moon marks on its chest, folded wings wrapped around its sides like a cloak, short stubby talons, no tail", + "size": 44, + "seed": 411, + "direction": "south", + "parts": [ + { + "slot": "head_top", + "name": "pl_crown_bluefire", + "edit": "add a small cluster of bright blue flames burning on top of its head", + "seed": 2, + "types": { + "ghost": 4, + "psychic": 3, + "fire": 2 + }, + "other": 0, + "tags": [ + "fiery" + ], + "motif": "spooky", + "palette": "type", + "fixed": "bluefire" + }, + { + "slot": "back", + "name": "pl_shroud_ghostfire", + "edit": "add glowing purple ghostly flames rising from behind its shoulders", + "seed": 1, + "types": { + "ghost": 7, + "psychic": 1 + }, + "other": 0, + "tags": [], + "motif": "spooky", + "palette": "type", + "fixed": "ghostfire" + }, + { + "slot": "tail", + "name": "pl_tail_ghostfire", + "edit": "add a wispy tail of glowing purple ghostly flame curling out on the right side", + "seed": 1, + "types": { + "ghost": 7, + "psychic": 1.5 + }, + "other": 0, + "tags": [ + "tailed" + ], + "motif": "spooky", + "palette": "type", + "fixed": "ghostfire" + }, + { + "slot": "head_top", + "name": "pl_owl_halo", + "edit": "add a small thin gold halo ring floating high above its head, not touching the head", + "seed": 2, + "types": { + "psychic": 6, + "ghost": 2, + "normal": 1 + }, + "other": 0.2, + "tags": [], + "palette": "type" + } + ] +} diff --git a/pixellab_library/pl_pebble.json b/pixellab_library/pl_pebble.json new file mode 100644 index 0000000..08af6cf --- /dev/null +++ b/pixellab_library/pl_pebble.json @@ -0,0 +1,57 @@ +{ + "name": "pl_pebble", + "plan": "blob", + "head": [ + "integrated_head" + ], + "types": { + "rock": 2, + "ground": 2, + "fighting": 1.5 + }, + "slots": [ + "head_top", + "back" + ], + "desc": "Round chunky boulder creature with a stern unibrow face and stubby feet", + "prompt": "round chunky boulder creature, its whole body is one bright saturated teal stone with a few flat chipped facets and thin dark teal cracks, stern determined face with one thick crimson unibrow ridge and a small frown, two short stubby teal feet at the bottom, no arms", + "size": 44, + "seed": 502, + "direction": "south", + "parts": [ + { + "slot": "head_top", + "name": "pl_crystals_head", + "edit": "add a small cluster of gold crystal spikes growing from the top of its head", + "seed": 1, + "types": { + "rock": 5, + "psychic": 3, + "ground": 1 + }, + "other": 0.05, + "tags": [ + "crystal" + ], + "motif": "crystal", + "palette": "type" + }, + { + "slot": "back", + "name": "pl_crystal_cluster", + "edit": "add two clusters of gold crystals jutting out diagonally from behind its back on the left and right sides", + "seed": 1, + "types": { + "rock": 5, + "psychic": 3, + "ice": 1 + }, + "other": 0.05, + "tags": [ + "crystal" + ], + "motif": "crystal", + "palette": "type" + } + ] +} \ No newline at end of file diff --git a/pixellab_library/pl_seal.json b/pixellab_library/pl_seal.json new file mode 100644 index 0000000..576d834 --- /dev/null +++ b/pixellab_library/pl_seal.json @@ -0,0 +1,105 @@ +{ + "name": "pl_seal", + "plan": "aquatic", + "head": [ + "mammal_head" + ], + "types": { + "ice": 3, + "water": 3, + "normal": 2 + }, + "desc": "Chubby otter-like seal pup sitting upright on broad flippers", + "prompt": "chubby otter-like seal pup sitting upright, pear-shaped plump body, broad flat front flippers resting on its belly, wide flat muzzle with whisker dots and a tiny dark nose, crimson stripe markings across its shoulders, pale belly patch, rear flippers tucked under, no ears, no tail", + "size": 40, + "seed": 51, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_horn_ice", + "edit": "add a single pale icy blue ice crystal horn on top of its head", + "seed": 1, + "types": { + "ice": 8 + }, + "other": 0, + "tags": [ + "horned", + "crystal" + ], + "motif": "crystal", + "palette": "type", + "fixed": "ice", + "fixed_from": [ + "main", + "accent", + "type", + "white" + ] + }, + { + "slot": "back", + "name": "pl_icicles_back", + "edit": "add a small fan of pale icy blue icicles sticking out from its back on the right side, behind its shoulders", + "seed": 3, + "types": { + "ice": 8 + }, + "other": 0, + "tags": [ + "spiky", + "crystal" + ], + "motif": "crystal", + "palette": "type", + "fixed": "ice", + "fixed_from": [ + "main", + "accent", + "type", + "white" + ] + }, + { + "slot": "tail", + "name": "pl_tail_ice_shard", + "edit": "add a short teal tail ending in a pale icy blue ice shard, sticking out on the right side", + "seed": 1, + "types": { + "ice": 8 + }, + "other": 0, + "tags": [ + "tailed", + "crystal" + ], + "motif": "crystal", + "palette": "type", + "fixed": "ice", + "fixed_from": [ + "main", + "accent", + "type", + "white" + ] + }, + { + "slot": "back", + "name": "pl_seal_shell", + "edit": "add one small gold spiral seashell stuck to the middle of its back on the right side", + "seed": 2, + "types": { + "water": 4, + "rock": 2, + "normal": 1 + }, + "other": 0.1, + "tags": [ + "shelled" + ], + "motif": "water", + "palette": "type" + } + ] +} diff --git a/pixellab_library/pl_slime.json b/pixellab_library/pl_slime.json new file mode 100644 index 0000000..e9253ee --- /dev/null +++ b/pixellab_library/pl_slime.json @@ -0,0 +1,67 @@ +{ + "name": "pl_slime", + "plan": "blob", + "head": [ + "integrated_head" + ], + "types": { + "poison": 2, + "water": 2, + "ghost": 1.5 + }, + "slots": [ + "head_top", + "back" + ], + "desc": "Drippy teardrop goo blob with a lopsided grin and goo drips", + "prompt": "small gooey slime creature shaped like a squat teardrop with a pointed tip leaning to one side, thick goo drips running down its sides and pooling at its base, one eye winking and a lopsided cheeky grin showing a single crimson tongue, crimson freckle spots on its cheeks, no arms, no legs", + "size": 44, + "seed": 301, + "direction": "south", + "parts": [ + { + "slot": "head_top", + "name": "pl_mushroom_cap", + "edit": "add a small crimson mushroom cap with pale cream spots sitting on top of its head", + "seed": 1, + "types": { + "poison": 4, + "grass": 3, + "bug": 2 + }, + "other": 0.1, + "tags": [], + "motif": "plant", + "palette": "accent" + }, + { + "slot": "back", + "name": "pl_bubbles_toxic", + "edit": "add a cluster of round gold bubbles of different sizes rising up from behind its body on both sides", + "seed": 2, + "types": { + "poison": 6, + "water": 2 + }, + "other": 0.05, + "tags": [], + "palette": "type" + }, + { + "slot": "back", + "name": "pl_slime_spikes_poison", + "edit": "add a fan of five large sharp gold spikes sticking up from behind its back", + "seed": 2, + "types": { + "poison": 4, + "ground": 2, + "rock": 1 + }, + "other": 0.2, + "tags": [ + "spiky" + ], + "palette": "type" + } + ] +} \ No newline at end of file diff --git a/pixellab_library/pl_snake.json b/pixellab_library/pl_snake.json new file mode 100644 index 0000000..d7283be --- /dev/null +++ b/pixellab_library/pl_snake.json @@ -0,0 +1,70 @@ +{ + "name": "pl_snake", + "plan": "serpentine", + "head": [ + "reptile_head" + ], + "types": { + "poison": 3, + "ground": 2, + "normal": 2 + }, + "desc": "Thick coiled snake with a raised wedge head and crimson diamond pattern", + "prompt": "thick snake creature coiled in a tall spiral pile with its head raised high, broad wedge-shaped head with a blunt square snout and heavy brow ridges, crimson diamond pattern along its coils, pale banded underbelly, thin tail tip resting on the right side, no hood, no rattle", + "size": 44, + "seed": 61, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_hood_cobra", + "edit": "add a small crimson cobra hood flaring out just behind its neck", + "seed": 2, + "types": { + "poison": 6, + "dragon": 2, + "ground": 1 + }, + "other": 0.05, + "requires": ["reptile_head"], + "palette": "accent" + }, + { + "slot": "tail", + "name": "pl_tail_rattle", + "edit": "turn the tip of its curled tail on the right into a gold rattlesnake rattle made of three rounded segments", + "seed": 4, + "types": { + "poison": 4, + "ground": 4, + "normal": 1 + }, + "other": 0.2, + "plans": [ + "serpentine", + "quadruped", + "biped" + ], + "tags": [ + "tailed" + ], + "palette": "type" + }, + { + "slot": "back", + "name": "pl_spikes_frill", + "edit": "add a row of large crimson spikes sticking far out from the back of its neck on the right side", + "seed": 3, + "types": { + "poison": 3, + "dragon": 3, + "ground": 2 + }, + "other": 0.2, + "tags": [ + "spiky" + ], + "palette": "accent" + } + ] +} diff --git a/pixellab_library/pl_sprite.json b/pixellab_library/pl_sprite.json new file mode 100644 index 0000000..5eeab14 --- /dev/null +++ b/pixellab_library/pl_sprite.json @@ -0,0 +1,111 @@ +{ + "name": "pl_sprite", + "plan": "biped", + "head": [ + "mammal_head" + ], + "types": { + "psychic": 2, + "fire": 1.5, + "ice": 1.5 + }, + "desc": "Tiny hovering fairy-imp with an oversized round head, dangling legs and a crimson star on its chest", + "prompt": "tiny fairy imp creature hovering in the air with its short legs dangling, oversized perfectly round smooth bald head with no ears at all, small round body, huge sparkling eyes, small mischievous smile with one tiny fang, stubby little arms with mitten hands held out, a small crimson star marking on its chest, crimson pointed slippers, no wings, no horns, no tail", + "size": 40, + "seed": 733, + "direction": "south-west", + "parts": [ + { + "slot": "head_top", + "name": "pl_ears_flame", + "edit": "add two pointed ears made of orange and yellow flames on the top sides of its head", + "seed": 1, + "types": { + "fire": 8 + }, + "other": 0, + "requires": [ + "mammal_head", + "integrated_head" + ], + "tags": [ + "eared", + "fiery" + ], + "motif": "fire", + "palette": "type", + "fixed": "fire", + "fixed_from": [ + "accent", + "type" + ] + }, + { + "slot": "head_top", + "name": "pl_horns_ember", + "edit": "add two small stubby teal horns on top of its head with small orange and yellow flames burning at their tips", + "seed": 1, + "types": { + "fire": 7, + "dragon": 1 + }, + "other": 0, + "requires": [ + "mammal_head", + "reptile_head", + "rock_head", + "insect_head", + "integrated_head", + "ghost_head" + ], + "tags": [ + "horned", + "fiery" + ], + "motif": "fire", + "palette": "type", + "fixed": "fire" + }, + { + "slot": "back", + "name": "pl_cape_frost", + "edit": "add a short jagged cape of pale icy blue ice crystals hanging from its shoulders and spreading out behind its body on both sides", + "seed": 2, + "types": { + "ice": 8 + }, + "other": 0, + "tags": [ + "crystal" + ], + "motif": "crystal", + "palette": "type", + "fixed": "ice", + "fixed_from": [ + "main", + "accent", + "type", + "white" + ] + }, + { + "slot": "tail", + "name": "pl_tail_bluefire_wisp", + "edit": "add a short wispy tail of bright deep blue fire with a violet-blue core, starting at its lower back and flicking up on the right side", + "seed": 2, + "types": { + "ghost": 3, + "fire": 3, + "psychic": 2 + }, + "other": 0, + "tags": [ + "tailed", + "fiery" + ], + "motif": "fire", + "palette": "type", + "fixed": "bluefire" + } + ] +} diff --git a/pixellab_library/pl_wisp.json b/pixellab_library/pl_wisp.json new file mode 100644 index 0000000..014d7cb --- /dev/null +++ b/pixellab_library/pl_wisp.json @@ -0,0 +1,93 @@ +{ + "name": "pl_wisp", + "plan": "blob", + "head": [ + "ghost_head", + "integrated_head" + ], + "types": { + "ghost": 2.5, + "psychic": 2 + }, + "desc": "Floating hooded ghost blob with a wavy trailing bottom and a crimson collar", + "prompt": "small floating ghost creature like a droopy hooded sheet, rounded top, body tapering into a wavy ragged trailing bottom that does not touch the ground, two large hollow oval eyes, small open o-shaped mouth, a crimson scarf collar tied around its neck, two tiny stubby nub arms", + "size": 44, + "seed": 601, + "direction": "south", + "parts": [ + { + "slot": "head_top", + "name": "pl_wisp_ghostfire", + "edit": "add a small floating wisp of glowing purple ghostly flame hovering on top of its head", + "seed": 1, + "types": { + "ghost": 7, + "psychic": 1 + }, + "other": 0, + "tags": [], + "motif": "spooky", + "palette": "type", + "fixed": "ghostfire" + }, + { + "slot": "back", + "name": "pl_wings_bat", + "edit": "add a pair of small compact crimson bat wings spread from its back", + "seed": 1, + "types": { + "ghost": 4, + "poison": 4, + "dragon": 2, + "flying": 2 + }, + "other": 0.1, + "tags": [ + "winged" + ], + "motif": "spooky", + "palette": "accent" + }, + { + "slot": "tail", + "name": "pl_tail_wisp_ghostfire", + "edit": "add a trailing wisp of glowing purple ghostly flames on the right side", + "seed": 1, + "types": { + "ghost": 7, + "psychic": 1.5 + }, + "other": 0, + "tags": [ + "tailed" + ], + "motif": "spooky", + "palette": "type", + "fixed": "ghostfire" + }, + { + "slot": "back", + "name": "pl_wisp_orbs_bluefire", + "edit": "add two small floating orbs of bright blue flame hovering on both sides of its body", + "seed": 1, + "types": { + "ghost": 4, + "fire": 4, + "psychic": 2 + }, + "other": 0, + "tags": [ + "fiery" + ], + "motif": "spooky", + "palette": "type", + "fixed": "bluefire", + "fixed_from": [ + "main", + "accent", + "type", + "white" + ] + } + ] +} \ No newline at end of file diff --git a/pixellab_library/pl_worm.json b/pixellab_library/pl_worm.json new file mode 100644 index 0000000..9802aab --- /dev/null +++ b/pixellab_library/pl_worm.json @@ -0,0 +1,91 @@ +{ + "name": "pl_worm", + "plan": "serpentine", + "head": [ + "integrated_head" + ], + "types": { + "ground": 2, + "grass": 1.5, + "bug": 1.5 + }, + "other": 1, + "desc": "Chubby burrowing worm poking upright with a blunt snout, crimson ring bands and stubby digging claws", + "prompt": "chubby burrowing worm creature poking upright out of the ground, thick soft segmented teal body that is widest at the bottom, blunt rounded snout with a tiny button nose, small sleepy half-closed eyes, thick crimson ring bands around its body, two small stubby shovel-like digging claws on its chest, its lower body bending out to the right in a short round stub, no legs, no antennae, no tail, no dirt", + "size": 44, + "seed": 418, + "direction": "south", + "anchors": { + "head_top": [ + 29, + 24 + ] + }, + "parts": [ + { + "slot": "head_top", + "name": "pl_flower_bud", + "edit": "add a small closed crimson flower bud on a short teal stem with one tiny teal leaf, growing from the top of its head", + "seed": 1, + "types": { + "grass": 6, + "poison": 1, + "psychic": 1 + }, + "other": 0.1, + "tags": [ + "leafy", + "floral" + ], + "motif": "plant", + "palette": "accent" + }, + { + "slot": "tail", + "name": "pl_tail_splash", + "edit": "add a teal tail coming out of its back end on the right side, ending in a curling gold water splash wave", + "seed": 1, + "types": { + "water": 7, + "ice": 1 + }, + "other": 0.05, + "tags": [ + "tailed" + ], + "motif": "water", + "palette": "type" + }, + { + "slot": "tail", + "name": "pl_tail_vine", + "edit": "add a short thick gold leafy vine with three broad leaves, sprouting from the round stub at its lower right and trailing out to the right side", + "seed": 2, + "types": { + "grass": 7, + "bug": 2 + }, + "other": 0.05, + "tags": [ + "tailed", + "leafy" + ], + "motif": "plant", + "palette": "type" + }, + { + "slot": "back", + "name": "pl_rocks_dirt", + "edit": "add a lumpy clump of round gold dirt clods and small pebbles stuck on its back, peeking out over its right shoulder", + "seed": 3, + "types": { + "ground": 6, + "rock": 2 + }, + "other": 0.1, + "tags": [], + "motif": "armor", + "palette": "type" + } + ] +} diff --git a/pixellab_library/pl_wyrm.json b/pixellab_library/pl_wyrm.json new file mode 100644 index 0000000..6f8489e --- /dev/null +++ b/pixellab_library/pl_wyrm.json @@ -0,0 +1,74 @@ +{ + "name": "pl_wyrm", + "plan": "serpentine", + "head": [ + "reptile_head" + ], + "types": { + "dragon": 2, + "water": 2, + "psychic": 1.5 + }, + "other": 1, + "desc": "Elegant young serpentine dragon in an S-curve with whisker barbels and crimson belly scutes", + "prompt": "elegant young eastern-style serpent dragon rising in a graceful S-curve, slender long teal body, long narrow snout with two thin drooping crimson whisker barbels, almond-shaped narrow eyes, small crimson scale ridge dots along its spine, pale segmented belly scales, two tiny clawed forelegs near its chest, body ending in a short blunt tail stub on the right side, no horns, no wings, no fins", + "size": 44, + "seed": 731, + "direction": "south-west", + "anchors": { + "back": [ + 34, + 30 + ] + }, + "parts": [ + { + "slot": "head_top", + "name": "pl_horns_antler_dragon", + "edit": "add a pair of short thick gold dragon antlers, each with two branching prongs, growing from the top of its head", + "seed": 2, + "types": { + "dragon": 6, + "psychic": 1, + "water": 1 + }, + "other": 0.1, + "tags": [ + "horned" + ], + "motif": "dragon", + "palette": "type" + }, + { + "slot": "tail", + "name": "pl_tail_dragon_fin", + "edit": "extend its body into a long teal tail curling up on the right side, ending in a fan-shaped crimson fin", + "seed": 1, + "types": { + "dragon": 5, + "water": 3 + }, + "other": 0.15, + "tags": [ + "tailed", + "finned" + ], + "motif": "dragon", + "palette": "main" + }, + { + "slot": "back", + "name": "pl_pearl_orb", + "edit": "add one single small round shining gold pearl orb resting against the back of its curved neck on the right side, just behind its head", + "seed": 3, + "types": { + "dragon": 4, + "psychic": 4, + "water": 2 + }, + "other": 0.05, + "tags": [], + "palette": "type" + } + ] +} diff --git a/pixellab_src/ledger.jsonl b/pixellab_src/ledger.jsonl new file mode 100644 index 0000000..71bf063 --- /dev/null +++ b/pixellab_src/ledger.jsonl @@ -0,0 +1,245 @@ +{"time": 1790900931, "label": "pl_fox/base", "endpoint": "create-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790900965, "label": "pl_fox/pl_tail_flame", "endpoint": "edit-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901012, "label": "pl_fox/pl_crown_ice", "endpoint": "edit-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901111, "label": "pl_fox/pl_wings_feather", "endpoint": "edit-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901300, "label": "pl_fox/base", "endpoint": "create-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901338, "label": "pl_fox/pl_tail_flame", "endpoint": "edit-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901411, "label": "pl_fox/pl_crown_ice", "endpoint": "edit-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901503, "label": "pl_fox/pl_wings_feather", "endpoint": "edit-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901672, "label": "pl_mochi/base", "endpoint": "create-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901677, "label": "pl_slime/base", "endpoint": "create-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901714, "label": "pl_pebble/base", "endpoint": "create-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901754, "label": "pl_brawler/base", "endpoint": "create-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901796, "label": "pl_bunny/base", "endpoint": "create-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901831, "label": "pl_axolotl/base", "endpoint": "create-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901863, "label": "pl_eel/base", "endpoint": "create-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901907, "label": "pl_dino/base", "endpoint": "create-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901947, "label": "pl_imp/base", "endpoint": "create-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790901989, "label": "pl_cub/base", "endpoint": "create-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790902003, "label": "pl_slime/pl_mushroom_cap", "endpoint": "edit-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790902026, "label": "pl_drake/base", "endpoint": "create-image-pixen", "usage": {"type": "generations", "generations": 1.0}, "ok": true} +{"time": 1790902027, "label": "pl_brawler/pl_headband", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007008051236470541}, "ok": true} +{"time": 1790902052, "label": "pl_owl/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.006684374809265137}, "ok": true} +{"time": 1790902087, "label": "pl_hawk/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007353315035502116}, "ok": true} +{"time": 1790902098, "label": "pl_brawler/pl_tail_tuft", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.011516327937444053}, "ok": true} +{"time": 1790902121, "label": "pl_chick/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007238638586468167}, "ok": true} +{"time": 1790902151, "label": "pl_fawn/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.00735997584131029}, "ok": true} +{"time": 1790902154, "label": "pl_slime/pl_bubbles_toxic", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008990888648562963}, "ok": true} +{"time": 1790902182, "label": "pl_guppy/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007430701335271199}, "ok": true} +{"time": 1790902204, "label": "pl_pebble/pl_crystals_head", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009409929619895088}, "ok": true} +{"time": 1790902238, "label": "pl_pebble/pl_crystal_cluster", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.0077369888358645965}, "ok": true} +{"time": 1790902239, "label": "pl_seal/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.009559364239374797}, "ok": true} +{"time": 1790902297, "label": "pl_beetle/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.00919856505923801}, "ok": true} +{"time": 1790902309, "label": "pl_dino/pl_tail_club", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007662267552481757}, "ok": true} +{"time": 1790902334, "label": "pl_grub/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007096679316626655}, "ok": true} +{"time": 1790902354, "label": "pl_hawk/pl_crest_flame", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008972050587336224}, "ok": true} +{"time": 1790902371, "label": "pl_snake/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.0075322285228305395}, "ok": true} +{"time": 1790902401, "label": "pl_bee/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.0072988010512457955}, "ok": true} +{"time": 1790902418, "label": "pl_hawk/pl_wings_storm", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.01151705410745409}, "ok": true} +{"time": 1790902424, "label": "pl_axolotl/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.006673484298917983}, "ok": true} +{"time": 1790902461, "label": "pl_bee/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007764167918099298}, "ok": true} +{"time": 1790902482, "label": "pl_hawk/pl_tail_storm", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.011546242449018692}, "ok": true} +{"time": 1790902502, "label": "pl_drake/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007941274033652412}, "ok": true} +{"time": 1790902524, "label": "pl_owl/pl_crown_bluefire", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00812294438150194}, "ok": true} +{"time": 1790902536, "label": "pl_bee/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.006860756450229221}, "ok": true} +{"time": 1790902553, "label": "pl_owl/pl_shroud_ghostfire", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007713085333506267}, "ok": true} +{"time": 1790902588, "label": "pl_bee/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.008565245813793606}, "ok": true} +{"time": 1790902604, "label": "pl_owl/pl_tail_ghostfire", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008242531723446316}, "ok": true} +{"time": 1790902630, "label": "pl_bunny/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.008478051821390789}, "ok": true} +{"time": 1790902637, "label": "pl_guppy/pl_fin_dorsal", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007716622273127238}, "ok": true} +{"time": 1790902684, "label": "pl_eel/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007197259240680271}, "ok": true} +{"time": 1790902693, "label": "pl_beetle/pl_horn_beetle", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009436408387290107}, "ok": true} +{"time": 1790902741, "label": "pl_guppy/pl_fins_head", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009395943297280206}, "ok": true} +{"time": 1790902779, "label": "pl_cub/pl_horns_ram", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007494111246532865}, "ok": true} +{"time": 1790902830, "label": "pl_cub/pl_plates_rock", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00978751171959771}, "ok": true} +{"time": 1790902913, "label": "pl_cub/pl_tail_fluffy", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010967689222759671}, "ok": true} +{"time": 1790902980, "label": "pl_mochi/pl_flower_back", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.011016767740249634}, "ok": true} +{"time": 1790903020, "label": "pl_imp/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.008241831832461887}, "ok": true} +{"time": 1790903039, "label": "pl_mochi/pl_tail_curly", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00873938759167989}, "ok": true} +{"time": 1790903053, "label": "pl_bunny/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007280090755886502}, "ok": true} +{"time": 1790903102, "label": "pl_seal/pl_horn_ice", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010622908380296496}, "ok": true} +{"time": 1790903152, "label": "pl_snake/pl_tail_rattle", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.005}, "ok": true} +{"time": 1790903193, "label": "pl_beetle/pl_wings_elytra", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008267430782318116}, "ok": true} +{"time": 1790903232, "label": "pl_axolotl/pl_gills_frill", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00701213977071974}, "ok": true} +{"time": 1790903287, "label": "pl_fawn/pl_antlers_leafy", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009486502726872762}, "ok": true} +{"time": 1790903348, "label": "pl_snake/pl_spikes_frill", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010987513807084827}, "ok": true} +{"time": 1790903393, "label": "pl_chick/pl_wings_gold", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.005}, "ok": true} +{"time": 1790903459, "label": "pl_brawler/pl_mane_fire", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.011837061219745213}, "ok": true} +{"time": 1790903501, "label": "pl_mochi/pl_sprout_leaf", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00859204641977946}, "ok": true} +{"time": 1790903543, "label": "pl_bunny/pl_ears_long", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008531954050064086}, "ok": true} +{"time": 1790903585, "label": "pl_grub/pl_antennae", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.0081728073226081}, "ok": true} +{"time": 1790903658, "label": "pl_axolotl/pl_coral_back", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010786550336413913}, "ok": true} +{"time": 1790903696, "label": "pl_fawn/pl_leaf_cape", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008496582084231907}, "ok": true} +{"time": 1790903746, "label": "pl_chick/pl_tail_feather_fan", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00789507219526503}, "ok": true} +{"time": 1790903796, "label": "pl_guppy/pl_tail_fish", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009600913127263386}, "ok": true} +{"time": 1790903838, "label": "pl_dino/pl_spikes_back", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008733896334966025}, "ok": true} +{"time": 1790903870, "label": "pl_wisp/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007996700392829048}, "ok": true} +{"time": 1790903895, "label": "pl_bunny/pl_wings_tiny", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007164622783660889}, "ok": true} +{"time": 1790903927, "label": "pl_grub/pl_mushrooms_back", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007732026365068223}, "ok": true} +{"time": 1790903977, "label": "pl_eel/pl_crest_electric", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008965424405203926}, "ok": true} +{"time": 1790904011, "label": "pl_fawn/pl_tail_leaf", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007907035244835749}, "ok": true} +{"time": 1790904073, "label": "pl_chick/pl_crest_feather", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010989243825276693}, "ok": true} +{"time": 1790904136, "label": "pl_seal/pl_icicles_back", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010845678594377305}, "ok": true} +{"time": 1790904188, "label": "pl_dino/pl_horn_single", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009642295916875203}, "ok": true} +{"time": 1790904283, "label": "pl_bunny/pl_tail_puff", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00944568665822347}, "ok": true} +{"time": 1790904342, "label": "pl_grub/pl_tail_stinger", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010855581680933635}, "ok": true} +{"time": 1790904380, "label": "pl_eel/pl_sail_fin", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008169162962171767}, "ok": true} +{"time": 1790904422, "label": "pl_drake/pl_horns_dragon", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00810156528155009}, "ok": true} +{"time": 1790904472, "label": "pl_hawk/pl_wings_storm", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009453291416168214}, "ok": true} +{"time": 1790904539, "label": "pl_seal/pl_tail_ice_shard", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00912098413043552}, "ok": true} +{"time": 1790904564, "label": "pl_slime/pl_bubbles_toxic", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007215490871005589}, "ok": true} +{"time": 1790904614, "label": "pl_wisp/pl_wisp_ghostfire", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009791300031873916}, "ok": true} +{"time": 1790904648, "label": "pl_dino/pl_spikes_back", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00783378725581699}, "ok": true} +{"time": 1790904698, "label": "pl_imp/pl_ears_bolt", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009347385009129842}, "ok": true} +{"time": 1790904745, "label": "pl_bee/pl_wings_bug", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008985003100501167}, "ok": true} +{"time": 1790904791, "label": "pl_eel/pl_tail_bluefire_eel", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008823530991872152}, "ok": true} +{"time": 1790904847, "label": "pl_drake/pl_wings_dragon", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008440255747901068}, "ok": true} +{"time": 1790904886, "label": "pl_dino/pl_dino_crystals_back", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008272239208221436}, "ok": true} +{"time": 1790904923, "label": "pl_mochi/pl_mochi_halo", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008262450774510701}, "ok": true} +{"time": 1790904978, "label": "pl_chick/pl_wings_gold", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010140569686889648}, "ok": true} +{"time": 1790905032, "label": "pl_snake/pl_hood_cobra", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.01033480503824022}, "ok": true} +{"time": 1790905082, "label": "pl_pebble/pl_crystal_cluster", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008272511853112115}, "ok": true} +{"time": 1790905120, "label": "pl_wisp/pl_wings_bat", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008215370098749796}, "ok": true} +{"time": 1790905166, "label": "pl_dino/pl_spikes_back", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00943149651421441}, "ok": true} +{"time": 1790905207, "label": "pl_imp/pl_tail_lightning", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008408881690767075}, "ok": true} +{"time": 1790905256, "label": "pl_bee/pl_antennae_spark", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.005}, "ok": true} +{"time": 1790905301, "label": "pl_eel/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.008923349486456978}, "ok": true} +{"time": 1790905326, "label": "pl_drake/pl_tail_spade", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007170078939861721}, "ok": true} +{"time": 1790905368, "label": "pl_slime/pl_slime_spikes_poison", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00881155037879944}, "ok": true} +{"time": 1790905431, "label": "pl_chick/pl_chick_tail_icicle", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.01125643727514479}, "ok": true} +{"time": 1790905494, "label": "pl_guppy/pl_tail_fish", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.011478334824244181}, "ok": true} +{"time": 1790905519, "label": "pl_pebble/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.0075424768659803606}, "ok": true} +{"time": 1790905565, "label": "pl_wisp/pl_tail_wisp_ghostfire", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009443331638971965}, "ok": true} +{"time": 1790905602, "label": "pl_brawler/pl_brawler_shell", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007726308849122789}, "ok": true} +{"time": 1790905648, "label": "pl_imp/pl_coils_electric", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008433530542585586}, "ok": true} +{"time": 1790905690, "label": "pl_axolotl/pl_coral_back", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007997944328520034}, "ok": true} +{"time": 1790905758, "label": "pl_drake/pl_mane_flame", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.011202545192506578}, "ok": true} +{"time": 1790905804, "label": "pl_owl/pl_crown_bluefire", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008386059257719252}, "ok": true} +{"time": 1790905838, "label": "pl_seal/pl_icicles_back", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.0076048691537645135}, "ok": true} +{"time": 1790905871, "label": "pl_pebble/pl_crystals_head", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007605802588992649}, "ok": true} +{"time": 1790905905, "label": "pl_slime/pl_slime_spikes_poison", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.0076432718965742325}, "ok": true} +{"time": 1790905951, "label": "pl_brawler/pl_brawler_shell", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007864947530958387}, "ok": true} +{"time": 1790905984, "label": "pl_imp/pl_ears_bolt", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.0077951335112253824}, "ok": true} +{"time": 1790906026, "label": "pl_axolotl/pl_axolotl_sprout", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009012135638131035}, "ok": true} +{"time": 1790906105, "label": "pl_fox/pl_tail_bluefire", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.011679916911655003}, "ok": true} +{"time": 1790906139, "label": "pl_hawk/pl_hawk_headband", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007753235366609362}, "ok": true} +{"time": 1790906173, "label": "pl_snake/pl_hood_cobra", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00776524575551351}, "ok": true} +{"time": 1790906206, "label": "pl_pebble/pl_crystal_cluster", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007932556125852797}, "ok": true} +{"time": 1790906240, "label": "pl_bunny/pl_tail_puff", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00800647751490275}, "ok": true} +{"time": 1790906295, "label": "pl_bee/pl_tail_scorpion", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00997934995757209}, "ok": true} +{"time": 1790906336, "label": "pl_beetle/pl_wings_elytra", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008795385970009699}, "ok": true} +{"time": 1790906407, "label": "pl_imp/pl_imp_halo", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.011542788982391358}, "ok": true} +{"time": 1790906456, "label": "pl_eel/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007537920713424682}, "ok": true} +{"time": 1790906544, "label": "pl_owl/pl_owl_halo", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.005}, "ok": true} +{"time": 1790906627, "label": "pl_snake/pl_tail_rattle", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.01204998352792528}, "ok": true} +{"time": 1790906653, "label": "pl_wisp/pl_wisp_orbs_bluefire", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00711135114563836}, "ok": true} +{"time": 1790906802, "label": "pl_fox/pl_tail_bluefire", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.01958835331598918}, "ok": true} +{"time": 1790906853, "label": "pl_bunny/pl_bunny_flower_crown", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009475136783387926}, "ok": true} +{"time": 1790906913, "label": "pl_bee/pl_bee_halo", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009446719884872437}, "ok": true} +{"time": 1790907005, "label": "pl_beetle/pl_beetle_rock_spikes", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.014205417553583781}, "ok": true} +{"time": 1790907030, "label": "pl_drake/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007226672887802124}, "ok": true} +{"time": 1790907081, "label": "pl_cub/pl_plates_rock", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00932117944293552}, "ok": true} +{"time": 1790907140, "label": "pl_eel/pl_crest_electric", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010673703140682646}, "ok": true} +{"time": 1790907182, "label": "pl_dino/pl_spikes_back", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008427866220474244}, "ok": true} +{"time": 1790907233, "label": "pl_hawk/pl_wings_storm", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009655291530821059}, "ok": true} +{"time": 1790907279, "label": "pl_owl/pl_owl_halo", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009244155989752876}, "ok": true} +{"time": 1790907322, "label": "pl_hawk/pl_hawk_headband", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009156441820992364}, "ok": true} +{"time": 1790907411, "label": "pl_snake/pl_spikes_frill", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010006278859244454}, "ok": true} +{"time": 1790907454, "label": "pl_grub/pl_tail_stinger", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008545126570595635}, "ok": true} +{"time": 1790907486, "label": "pl_drake/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007173289855321249}, "ok": true} +{"time": 1790907524, "label": "pl_fawn/pl_leaf_cape", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008365429057015313}, "ok": true} +{"time": 1790907570, "label": "pl_eel/pl_sail_fin", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.005}, "ok": true} +{"time": 1790907604, "label": "pl_chick/pl_wings_gold", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00773183994823032}, "ok": true} +{"time": 1790907646, "label": "pl_bunny/pl_wings_tiny", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008811935080422295}, "ok": true} +{"time": 1790907688, "label": "pl_guppy/pl_guppy_bubble_crown", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008917144139607747}, "ok": true} +{"time": 1790907730, "label": "pl_grub/pl_grub_flower", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008501098288430108}, "ok": true} +{"time": 1790907755, "label": "pl_drake/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007315795368618436}, "ok": true} +{"time": 1790907789, "label": "pl_cub/pl_cub_tail_rockclub", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00794953179359436}, "ok": true} +{"time": 1790907826, "label": "pl_eel/pl_tail_bluefire_eel", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008572399139404297}, "ok": true} +{"time": 1790907915, "label": "pl_brawler/pl_mane_fire", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.01005796061621772}, "ok": true} +{"time": 1790907953, "label": "pl_seal/pl_seal_shell", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00847970986366272}, "ok": true} +{"time": 1790907986, "label": "pl_beetle/pl_beetle_rock_spikes", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007727013852861193}, "ok": true} +{"time": 1790908037, "label": "pl_fawn/pl_fawn_halo", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00966904049449497}, "ok": true} +{"time": 1790908072, "label": "pl_drake/pl_horns_dragon", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008072009775373671}, "ok": true} +{"time": 1790908123, "label": "pl_eel/pl_crest_electric", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009726119703716701}, "ok": true} +{"time": 1790908173, "label": "pl_bunny/pl_wings_tiny", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009463470273547703}, "ok": true} +{"time": 1790908257, "label": "pl_grub/pl_tail_stinger", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.012547792620129056}, "ok": true} +{"time": 1790908307, "label": "pl_guppy/pl_guppy_bubble_crown", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009812922848595513}, "ok": true} +{"time": 1790908358, "label": "pl_cub/pl_plates_rock", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009668046156565349}, "ok": true} +{"time": 1790908405, "label": "pl_drake/pl_wings_dragon", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009162568171819051}, "ok": true} +{"time": 1790908446, "label": "pl_eel/pl_sail_fin", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.005}, "ok": true} +{"time": 1790908485, "label": "pl_seal/pl_icicles_back", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008393628385331895}, "ok": true} +{"time": 1790908532, "label": "pl_drake/pl_tail_spade", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009379288011127048}, "ok": true} +{"time": 1790908588, "label": "pl_seal/pl_seal_shell", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010229756938086615}, "ok": true} +{"time": 1790908705, "label": "pl_drake/pl_mane_flame", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.017054271486070423}, "ok": true} +{"time": 1790908759, "label": "pl_snake/pl_tail_rattle", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010120997561348809}, "ok": true} +{"time": 1790908797, "label": "pl_drake/pl_drake_crystals", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007586653762393527}, "ok": true} +{"time": 1790908831, "label": "pl_snake/pl_spikes_frill", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007791194968753391}, "ok": true} +{"time": 1790908857, "label": "pl_drake/pl_drake_crystals", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007149896489249336}, "ok": true} +{"time": 1790908895, "label": "pl_guppy/pl_guppy_bubble_crown", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007729158586925931}, "ok": true} +{"time": 1790908942, "label": "pl_snake/pl_tail_rattle", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009106588496102228}, "ok": true} +{"time": 1790909008, "label": "pl_guppy/pl_guppy_pearl_crown", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008294328848520915}, "ok": true} +{"time": 1790909257, "label": "pl_wyrm/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007901206307941014}, "ok": true} +{"time": 1790909299, "label": "pl_crab/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.008341445472505357}, "ok": true} +{"time": 1790909330, "label": "pl_monk/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007200281567043729}, "ok": true} +{"time": 1790909363, "label": "pl_duck/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.0075111570623185905}, "ok": true} +{"time": 1790909404, "label": "pl_worm/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.008012065596050687}, "ok": true} +{"time": 1790909433, "label": "pl_lizard/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007050547970665826}, "ok": true} +{"time": 1790909459, "label": "pl_boar/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.006684410068723891}, "ok": true} +{"time": 1790909489, "label": "pl_sprite/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007053209622701009}, "ok": true} +{"time": 1790909523, "label": "pl_wyrm/pl_horns_antler_dragon", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00807293889257643}, "ok": true} +{"time": 1790909544, "label": "pl_lizard/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.006921526432037354}, "ok": true} +{"time": 1790909587, "label": "pl_monk/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007972194221284656}, "ok": true} +{"time": 1790909638, "label": "pl_duck/pl_plume_feather", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009356668896145292}, "ok": true} +{"time": 1790909675, "label": "pl_wyrm/pl_tail_dragon_fin", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008324551158481174}, "ok": true} +{"time": 1790909711, "label": "pl_crab/pl_coral_crown", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008108901209301418}, "ok": true} +{"time": 1790909750, "label": "pl_boar/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.008424108160866632}, "ok": true} +{"time": 1790909822, "label": "pl_duck/pl_tail_streamers", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.011178641451729669}, "ok": true} +{"time": 1790909881, "label": "pl_wyrm/pl_pearl_orb", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008510448879665799}, "ok": true} +{"time": 1790909956, "label": "pl_crab/pl_shell_spiral", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.012000780661900839}, "ok": true} +{"time": 1790909986, "label": "pl_monk/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.007854612085554335}, "ok": true} +{"time": 1790910021, "label": "pl_duck/pl_cloud_puffs", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007863560729556613}, "ok": true} +{"time": 1790910063, "label": "pl_worm/pl_flower_bud", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009059144099553426}, "ok": true} +{"time": 1790910105, "label": "pl_crab/pl_barnacles", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008617922915352716}, "ok": true} +{"time": 1790910145, "label": "pl_boar/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.008553334845436944}, "ok": true} +{"time": 1790910179, "label": "pl_sprite/pl_ears_flame", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007806698931588067}, "ok": true} +{"time": 1790910212, "label": "pl_worm/pl_tail_vine", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007846587710910374}, "ok": true} +{"time": 1790910255, "label": "pl_crab/pl_shell_spiral", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.005}, "ok": true} +{"time": 1790910309, "label": "pl_sprite/pl_horns_ember", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009262786441379123}, "ok": true} +{"time": 1790910351, "label": "pl_monk/pl_scarf_long", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00850315202607049}, "ok": true} +{"time": 1790910410, "label": "pl_worm/pl_tail_splash", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010474376466539172}, "ok": true} +{"time": 1790910462, "label": "pl_lizard/base", "endpoint": "create-image-pixen", "usage": {"type": "usd", "usd": 0.010209760109583537}, "ok": true} +{"time": 1790910505, "label": "pl_sprite/pl_cape_frost", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007785622093412612}, "ok": true} +{"time": 1790910545, "label": "pl_monk/pl_cape_short", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008199535210927329}, "ok": true} +{"time": 1790910583, "label": "pl_worm/pl_rocks_dirt", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008276161034901936}, "ok": true} +{"time": 1790910625, "label": "pl_crab/pl_shell_spiral", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008746390872531467}, "ok": true} +{"time": 1790910659, "label": "pl_sprite/pl_tail_bluefire_wisp", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007568790488772922}, "ok": true} +{"time": 1790910692, "label": "pl_monk/pl_tail_wrapped", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007768456167644925}, "ok": true} +{"time": 1790910726, "label": "pl_wyrm/pl_horns_antler_dragon", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008083348910013836}, "ok": true} +{"time": 1790910761, "label": "pl_crab/pl_barnacles", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.0077620227866702605}, "ok": true} +{"time": 1790910828, "label": "pl_monk/pl_topknot", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.011284227742089165}, "ok": true} +{"time": 1790910861, "label": "pl_wyrm/pl_pearl_orb", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007729458782407973}, "ok": true} +{"time": 1790910899, "label": "pl_duck/pl_tail_streamers", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008180538150999282}, "ok": true} +{"time": 1790910932, "label": "pl_lizard/pl_snowcap", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00781151032447815}, "ok": true} +{"time": 1790910995, "label": "pl_boar/pl_tuft_fluffy", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010866874403423734}, "ok": true} +{"time": 1790911039, "label": "pl_worm/pl_tail_vine", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008835690948698256}, "ok": true} +{"time": 1790911077, "label": "pl_duck/pl_cloud_puffs", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.0077955478032430015}, "ok": true} +{"time": 1790911119, "label": "pl_lizard/pl_frill_neck", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008397285964753892}, "ok": true} +{"time": 1790911185, "label": "pl_boar/pl_mane_bristle", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010003296269310846}, "ok": true} +{"time": 1790911232, "label": "pl_worm/pl_rocks_dirt", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.005}, "ok": true} +{"time": 1790911274, "label": "pl_sprite/pl_cape_frost", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007821742879019843}, "ok": true} +{"time": 1790911332, "label": "pl_lizard/pl_spines_toxic", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009679730335871379}, "ok": true} +{"time": 1790911390, "label": "pl_boar/pl_saddle_rock", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.010937547339333428}, "ok": true} +{"time": 1790911420, "label": "pl_worm/pl_rocks_dirt", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007724657085206773}, "ok": true} +{"time": 1790911488, "label": "pl_sprite/pl_tail_bluefire_wisp", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.011745978699790108}, "ok": true} +{"time": 1790911526, "label": "pl_lizard/pl_tail_lightning_lizard", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007716657373640272}, "ok": true} +{"time": 1790911561, "label": "pl_boar/pl_tail_curl_pig", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008048070271809897}, "ok": true} +{"time": 1790911604, "label": "pl_wyrm/pl_pearl_orb", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.008364033275180392}, "ok": true} +{"time": 1790911655, "label": "pl_lizard/pl_frill_neck", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009255997233920628}, "ok": true} +{"time": 1790911728, "label": "pl_duck/pl_cloud_puffs", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.012242308616638185}, "ok": true} +{"time": 1790911782, "label": "pl_boar/pl_tuft_fluffy", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009188066562016806}, "ok": true} +{"time": 1790911816, "label": "pl_lizard/pl_spines_toxic", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.00770892694261339}, "ok": true} +{"time": 1790911850, "label": "pl_boar/pl_mane_bristle", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007705155769983927}, "ok": true} +{"time": 1790911913, "label": "pl_lizard/pl_frill_neck", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.011213760746849908}, "ok": true} +{"time": 1790911951, "label": "pl_boar/pl_saddle_rock", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.007961846457587348}, "ok": true} +{"time": 1790912044, "label": "pl_boar/pl_mane_bristle", "endpoint": "edit-image-pixen", "usage": {"type": "usd", "usd": 0.009079684257507326}, "ok": true} diff --git a/pixellab_src/pl_axolotl/base.json b/pixellab_src/pl_axolotl/base.json new file mode 100644 index 0000000..d04e68f --- /dev/null +++ b/pixellab_src/pl_axolotl/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "chubby newt-like salamander creature crawling on four short splayed legs with webbed toes, very wide flat bald head with a broad smiling mouth, small beady eyes set on top of its head, smooth glossy skin, crimson freckles along its flanks, short thick tapering tail, smooth round head with no gills, no frills and no spikes, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 42 + }, + "usage": { + "type": "usd", + "usd": 0.006673484298917983 + } +} diff --git a/pixellab_src/pl_axolotl/base.png b/pixellab_src/pl_axolotl/base.png new file mode 100644 index 0000000..3f9cda8 Binary files /dev/null and b/pixellab_src/pl_axolotl/base.png differ diff --git a/pixellab_src/pl_axolotl/base_raw.png b/pixellab_src/pl_axolotl/base_raw.png new file mode 100644 index 0000000..b31d787 Binary files /dev/null and b/pixellab_src/pl_axolotl/base_raw.png differ diff --git a/pixellab_src/pl_axolotl/pl_axolotl_sprout.json b/pixellab_src/pl_axolotl/pl_axolotl_sprout.json new file mode 100644 index 0000000..8aed026 --- /dev/null +++ b/pixellab_src/pl_axolotl/pl_axolotl_sprout.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small gold two-leaf sprout growing from the top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009012135638131035 + } +} diff --git a/pixellab_src/pl_axolotl/pl_axolotl_sprout.png b/pixellab_src/pl_axolotl/pl_axolotl_sprout.png new file mode 100644 index 0000000..bfd719a Binary files /dev/null and b/pixellab_src/pl_axolotl/pl_axolotl_sprout.png differ diff --git a/pixellab_src/pl_axolotl/pl_coral_back.json b/pixellab_src/pl_axolotl/pl_coral_back.json new file mode 100644 index 0000000..0e4ea2c --- /dev/null +++ b/pixellab_src/pl_axolotl/pl_coral_back.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small clump of branching crimson coral with forked antler-like branches growing from the middle of its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007997944328520034 + } +} diff --git a/pixellab_src/pl_axolotl/pl_coral_back.png b/pixellab_src/pl_axolotl/pl_coral_back.png new file mode 100644 index 0000000..8806c12 Binary files /dev/null and b/pixellab_src/pl_axolotl/pl_coral_back.png differ diff --git a/pixellab_src/pl_axolotl/pl_gills_frill.json b/pixellab_src/pl_axolotl/pl_gills_frill.json new file mode 100644 index 0000000..31b36fd --- /dev/null +++ b/pixellab_src/pl_axolotl/pl_gills_frill.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add feathery crimson gill fronds sticking out on both sides of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00701213977071974 + } +} diff --git a/pixellab_src/pl_axolotl/pl_gills_frill.png b/pixellab_src/pl_axolotl/pl_gills_frill.png new file mode 100644 index 0000000..88aeaa5 Binary files /dev/null and b/pixellab_src/pl_axolotl/pl_gills_frill.png differ diff --git a/pixellab_src/pl_bee/base.json b/pixellab_src/pl_bee/base.json new file mode 100644 index 0000000..d06eed1 --- /dev/null +++ b/pixellab_src/pl_bee/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "fuzzy round hornet-like creature facing the viewer, plump round teal body covered in short teal fuzz with two thick crimson stripes, round head with big dark oval compound eyes and two small hooked mandibles, four tiny arms, short stubby legs, no wings, no stinger, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south", + "seed": 59 + }, + "usage": { + "type": "usd", + "usd": 0.008565245813793606 + } +} diff --git a/pixellab_src/pl_bee/base.png b/pixellab_src/pl_bee/base.png new file mode 100644 index 0000000..f82d577 Binary files /dev/null and b/pixellab_src/pl_bee/base.png differ diff --git a/pixellab_src/pl_bee/base_raw.png b/pixellab_src/pl_bee/base_raw.png new file mode 100644 index 0000000..2d07a8c Binary files /dev/null and b/pixellab_src/pl_bee/base_raw.png differ diff --git a/pixellab_src/pl_bee/pl_antennae_spark.json b/pixellab_src/pl_bee/pl_antennae_spark.json new file mode 100644 index 0000000..8e8a8e5 --- /dev/null +++ b/pixellab_src/pl_bee/pl_antennae_spark.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add two thin teal antennae on top of its head, each tipped with a bright yellow electric spark, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.005 + } +} diff --git a/pixellab_src/pl_bee/pl_antennae_spark.png b/pixellab_src/pl_bee/pl_antennae_spark.png new file mode 100644 index 0000000..a034dbf Binary files /dev/null and b/pixellab_src/pl_bee/pl_antennae_spark.png differ diff --git a/pixellab_src/pl_bee/pl_bee_halo.json b/pixellab_src/pl_bee/pl_bee_halo.json new file mode 100644 index 0000000..801cf59 --- /dev/null +++ b/pixellab_src/pl_bee/pl_bee_halo.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small glowing gold halo ring floating above its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009446719884872437 + } +} diff --git a/pixellab_src/pl_bee/pl_bee_halo.png b/pixellab_src/pl_bee/pl_bee_halo.png new file mode 100644 index 0000000..e7ca7f1 Binary files /dev/null and b/pixellab_src/pl_bee/pl_bee_halo.png differ diff --git a/pixellab_src/pl_bee/pl_tail_scorpion.json b/pixellab_src/pl_bee/pl_tail_scorpion.json new file mode 100644 index 0000000..1ebf878 --- /dev/null +++ b/pixellab_src/pl_bee/pl_tail_scorpion.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a segmented teal scorpion tail with a crimson barbed stinger, curling up on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00997934995757209 + } +} diff --git a/pixellab_src/pl_bee/pl_tail_scorpion.png b/pixellab_src/pl_bee/pl_tail_scorpion.png new file mode 100644 index 0000000..bda1ce9 Binary files /dev/null and b/pixellab_src/pl_bee/pl_tail_scorpion.png differ diff --git a/pixellab_src/pl_bee/pl_wings_bug.json b/pixellab_src/pl_bee/pl_wings_bug.json new file mode 100644 index 0000000..c5376d6 --- /dev/null +++ b/pixellab_src/pl_bee/pl_wings_bug.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a pair of small pale gold translucent veined insect wings on its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008985003100501167 + } +} diff --git a/pixellab_src/pl_bee/pl_wings_bug.png b/pixellab_src/pl_bee/pl_wings_bug.png new file mode 100644 index 0000000..2b37779 Binary files /dev/null and b/pixellab_src/pl_bee/pl_wings_bug.png differ diff --git a/pixellab_src/pl_beetle/base.json b/pixellab_src/pl_beetle/base.json new file mode 100644 index 0000000..e06ccd3 --- /dev/null +++ b/pixellab_src/pl_beetle/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "round armored beetle creature facing the viewer, tall domed teal shell with a crimson seam down the middle and two crimson spots, small wide head with two short flat curved mandibles and a smooth bald forehead, six short stubby legs, no horn, no wings, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south", + "seed": 31 + }, + "usage": { + "type": "usd", + "usd": 0.00919856505923801 + } +} diff --git a/pixellab_src/pl_beetle/base.png b/pixellab_src/pl_beetle/base.png new file mode 100644 index 0000000..c4a8ad2 Binary files /dev/null and b/pixellab_src/pl_beetle/base.png differ diff --git a/pixellab_src/pl_beetle/base_raw.png b/pixellab_src/pl_beetle/base_raw.png new file mode 100644 index 0000000..e629eaf Binary files /dev/null and b/pixellab_src/pl_beetle/base_raw.png differ diff --git a/pixellab_src/pl_beetle/pl_beetle_rock_spikes.json b/pixellab_src/pl_beetle/pl_beetle_rock_spikes.json new file mode 100644 index 0000000..8971f37 --- /dev/null +++ b/pixellab_src/pl_beetle/pl_beetle_rock_spikes.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add three big jagged gold rock chunks sticking up from behind its shell, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007727013852861193 + } +} diff --git a/pixellab_src/pl_beetle/pl_beetle_rock_spikes.png b/pixellab_src/pl_beetle/pl_beetle_rock_spikes.png new file mode 100644 index 0000000..f0af0c2 Binary files /dev/null and b/pixellab_src/pl_beetle/pl_beetle_rock_spikes.png differ diff --git a/pixellab_src/pl_beetle/pl_horn_beetle.json b/pixellab_src/pl_beetle/pl_horn_beetle.json new file mode 100644 index 0000000..727bfd0 --- /dev/null +++ b/pixellab_src/pl_beetle/pl_horn_beetle.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add one big curved crimson rhinoceros beetle horn rising from the top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009436408387290107 + } +} diff --git a/pixellab_src/pl_beetle/pl_horn_beetle.png b/pixellab_src/pl_beetle/pl_horn_beetle.png new file mode 100644 index 0000000..0446f44 Binary files /dev/null and b/pixellab_src/pl_beetle/pl_horn_beetle.png differ diff --git a/pixellab_src/pl_beetle/pl_wings_elytra.json b/pixellab_src/pl_beetle/pl_wings_elytra.json new file mode 100644 index 0000000..69fbe11 --- /dev/null +++ b/pixellab_src/pl_beetle/pl_wings_elytra.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a pair of small crimson beetle wing cases opened up behind its shell, with thin translucent wings peeking out beneath them, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008795385970009699 + } +} diff --git a/pixellab_src/pl_beetle/pl_wings_elytra.png b/pixellab_src/pl_beetle/pl_wings_elytra.png new file mode 100644 index 0000000..bce3b90 Binary files /dev/null and b/pixellab_src/pl_beetle/pl_wings_elytra.png differ diff --git a/pixellab_src/pl_boar/base.json b/pixellab_src/pl_boar/base.json new file mode 100644 index 0000000..ae5314a --- /dev/null +++ b/pixellab_src/pl_boar/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "stocky barrel-bodied boar-like creature standing on four short thick legs with small hooves, broad flat pig snout with a crimson nose disc, two small curved tusks poking up from its lower jaw, small fierce eyes, small floppy ears folded forward, low wide smooth head with no hair on top, crimson stripe markings on its flanks, short smooth fur, no mane, no tail, round rump with nothing behind it, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 48, + "height": 48 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 714 + }, + "usage": { + "type": "usd", + "usd": 0.008553334845436944 + } +} diff --git a/pixellab_src/pl_boar/base.png b/pixellab_src/pl_boar/base.png new file mode 100644 index 0000000..6aeb27e Binary files /dev/null and b/pixellab_src/pl_boar/base.png differ diff --git a/pixellab_src/pl_boar/base_raw.png b/pixellab_src/pl_boar/base_raw.png new file mode 100644 index 0000000..ca6817e Binary files /dev/null and b/pixellab_src/pl_boar/base_raw.png differ diff --git a/pixellab_src/pl_boar/pl_mane_bristle.json b/pixellab_src/pl_boar/pl_mane_bristle.json new file mode 100644 index 0000000..fd5d7ac --- /dev/null +++ b/pixellab_src/pl_boar/pl_mane_bristle.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a tall ridge of spiky crimson bristles sticking up high along its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009079684257507326 + } +} diff --git a/pixellab_src/pl_boar/pl_mane_bristle.png b/pixellab_src/pl_boar/pl_mane_bristle.png new file mode 100644 index 0000000..963e23b Binary files /dev/null and b/pixellab_src/pl_boar/pl_mane_bristle.png differ diff --git a/pixellab_src/pl_boar/pl_saddle_rock.json b/pixellab_src/pl_boar/pl_saddle_rock.json new file mode 100644 index 0000000..6a68855 --- /dev/null +++ b/pixellab_src/pl_boar/pl_saddle_rock.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small pile of three gold boulders strapped on top of its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007961846457587348 + } +} diff --git a/pixellab_src/pl_boar/pl_saddle_rock.png b/pixellab_src/pl_boar/pl_saddle_rock.png new file mode 100644 index 0000000..c517872 Binary files /dev/null and b/pixellab_src/pl_boar/pl_saddle_rock.png differ diff --git a/pixellab_src/pl_boar/pl_tail_curl_pig.json b/pixellab_src/pl_boar/pl_tail_curl_pig.json new file mode 100644 index 0000000..113a049 --- /dev/null +++ b/pixellab_src/pl_boar/pl_tail_curl_pig.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small curly teal pig tail starting at its rump and curling on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008048070271809897 + } +} diff --git a/pixellab_src/pl_boar/pl_tail_curl_pig.png b/pixellab_src/pl_boar/pl_tail_curl_pig.png new file mode 100644 index 0000000..3895561 Binary files /dev/null and b/pixellab_src/pl_boar/pl_tail_curl_pig.png differ diff --git a/pixellab_src/pl_boar/pl_tuft_fluffy.json b/pixellab_src/pl_boar/pl_tuft_fluffy.json new file mode 100644 index 0000000..20db5d4 --- /dev/null +++ b/pixellab_src/pl_boar/pl_tuft_fluffy.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add one small fluffy teal tuft of fur sticking up on top of its forehead, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009188066562016806 + } +} diff --git a/pixellab_src/pl_boar/pl_tuft_fluffy.png b/pixellab_src/pl_boar/pl_tuft_fluffy.png new file mode 100644 index 0000000..6449821 Binary files /dev/null and b/pixellab_src/pl_boar/pl_tuft_fluffy.png differ diff --git a/pixellab_src/pl_brawler/base.json b/pixellab_src/pl_brawler/base.json new file mode 100644 index 0000000..dbe0470 --- /dev/null +++ b/pixellab_src/pl_brawler/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "stout upright lizard brawler creature in a fighting stance, wide flat toad-like head, heavy brow ridge, underbite with two small fangs, barrel chest, huge oversized fists wrapped in crimson bandages, short thick bowed legs, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 533 + }, + "usage": { + "type": "generations", + "generations": 1.0 + } +} diff --git a/pixellab_src/pl_brawler/base.png b/pixellab_src/pl_brawler/base.png new file mode 100644 index 0000000..e765358 Binary files /dev/null and b/pixellab_src/pl_brawler/base.png differ diff --git a/pixellab_src/pl_brawler/base_raw.png b/pixellab_src/pl_brawler/base_raw.png new file mode 100644 index 0000000..90a82fa Binary files /dev/null and b/pixellab_src/pl_brawler/base_raw.png differ diff --git a/pixellab_src/pl_brawler/pl_brawler_shell.json b/pixellab_src/pl_brawler/pl_brawler_shell.json new file mode 100644 index 0000000..5623021 --- /dev/null +++ b/pixellab_src/pl_brawler/pl_brawler_shell.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a big round crimson turtle shell on its back, sticking out wide behind both sides of its body, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007864947530958387 + } +} diff --git a/pixellab_src/pl_brawler/pl_brawler_shell.png b/pixellab_src/pl_brawler/pl_brawler_shell.png new file mode 100644 index 0000000..5ff558d Binary files /dev/null and b/pixellab_src/pl_brawler/pl_brawler_shell.png differ diff --git a/pixellab_src/pl_brawler/pl_headband.json b/pixellab_src/pl_brawler/pl_headband.json new file mode 100644 index 0000000..4628192 --- /dev/null +++ b/pixellab_src/pl_brawler/pl_headband.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a crimson cloth headband tied around its forehead with two trailing ends, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007008051236470541 + } +} diff --git a/pixellab_src/pl_brawler/pl_headband.png b/pixellab_src/pl_brawler/pl_headband.png new file mode 100644 index 0000000..07c8d6b Binary files /dev/null and b/pixellab_src/pl_brawler/pl_headband.png differ diff --git a/pixellab_src/pl_brawler/pl_mane_fire.json b/pixellab_src/pl_brawler/pl_mane_fire.json new file mode 100644 index 0000000..7034b38 --- /dev/null +++ b/pixellab_src/pl_brawler/pl_mane_fire.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a mane of orange and yellow flames around its shoulders and neck, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.011837061219745213 + } +} diff --git a/pixellab_src/pl_brawler/pl_mane_fire.png b/pixellab_src/pl_brawler/pl_mane_fire.png new file mode 100644 index 0000000..0b27c22 Binary files /dev/null and b/pixellab_src/pl_brawler/pl_mane_fire.png differ diff --git a/pixellab_src/pl_brawler/pl_tail_tuft.json b/pixellab_src/pl_brawler/pl_tail_tuft.json new file mode 100644 index 0000000..85bbaaa --- /dev/null +++ b/pixellab_src/pl_brawler/pl_tail_tuft.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a long thin teal tail ending in a crimson fur tuft, curling up on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.011516327937444053 + } +} diff --git a/pixellab_src/pl_brawler/pl_tail_tuft.png b/pixellab_src/pl_brawler/pl_tail_tuft.png new file mode 100644 index 0000000..72db9a2 Binary files /dev/null and b/pixellab_src/pl_brawler/pl_tail_tuft.png differ diff --git a/pixellab_src/pl_bunny/base.json b/pixellab_src/pl_bunny/base.json new file mode 100644 index 0000000..bd9fa87 --- /dev/null +++ b/pixellab_src/pl_bunny/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "rabbit-like creature standing tall and upright on huge long flat hind feet, seen from the front, round smooth head that is earless (the ears are not drawn), big round dark eyes, two big buck teeth, small crimson heart-shaped nose, crimson freckles on its cheeks, short paw arms, chubby round belly with a crimson oval belly patch, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 733 + }, + "usage": { + "type": "usd", + "usd": 0.007280090755886502 + } +} diff --git a/pixellab_src/pl_bunny/base.png b/pixellab_src/pl_bunny/base.png new file mode 100644 index 0000000..eb73381 Binary files /dev/null and b/pixellab_src/pl_bunny/base.png differ diff --git a/pixellab_src/pl_bunny/base_raw.png b/pixellab_src/pl_bunny/base_raw.png new file mode 100644 index 0000000..ff17f88 Binary files /dev/null and b/pixellab_src/pl_bunny/base_raw.png differ diff --git a/pixellab_src/pl_bunny/pl_bunny_flower_crown.json b/pixellab_src/pl_bunny/pl_bunny_flower_crown.json new file mode 100644 index 0000000..f6bf79f --- /dev/null +++ b/pixellab_src/pl_bunny/pl_bunny_flower_crown.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small ring of teal leaves with one crimson flower sitting on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009475136783387926 + } +} diff --git a/pixellab_src/pl_bunny/pl_bunny_flower_crown.png b/pixellab_src/pl_bunny/pl_bunny_flower_crown.png new file mode 100644 index 0000000..fdc3389 Binary files /dev/null and b/pixellab_src/pl_bunny/pl_bunny_flower_crown.png differ diff --git a/pixellab_src/pl_bunny/pl_ears_long.json b/pixellab_src/pl_bunny/pl_ears_long.json new file mode 100644 index 0000000..23f438d --- /dev/null +++ b/pixellab_src/pl_bunny/pl_ears_long.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add two long upright teal rabbit ears with crimson insides on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008531954050064086 + } +} diff --git a/pixellab_src/pl_bunny/pl_ears_long.png b/pixellab_src/pl_bunny/pl_ears_long.png new file mode 100644 index 0000000..b383e54 Binary files /dev/null and b/pixellab_src/pl_bunny/pl_ears_long.png differ diff --git a/pixellab_src/pl_bunny/pl_tail_puff.json b/pixellab_src/pl_bunny/pl_tail_puff.json new file mode 100644 index 0000000..4440fbd --- /dev/null +++ b/pixellab_src/pl_bunny/pl_tail_puff.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small round fluffy cotton-ball tail with jagged fur edges, sticking out from behind its right hip, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00800647751490275 + } +} diff --git a/pixellab_src/pl_bunny/pl_tail_puff.png b/pixellab_src/pl_bunny/pl_tail_puff.png new file mode 100644 index 0000000..e7077c3 Binary files /dev/null and b/pixellab_src/pl_bunny/pl_tail_puff.png differ diff --git a/pixellab_src/pl_bunny/pl_wings_tiny.json b/pixellab_src/pl_bunny/pl_wings_tiny.json new file mode 100644 index 0000000..4a285d1 --- /dev/null +++ b/pixellab_src/pl_bunny/pl_wings_tiny.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a pair of small gold feathered wings spread from its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009463470273547703 + } +} diff --git a/pixellab_src/pl_bunny/pl_wings_tiny.png b/pixellab_src/pl_bunny/pl_wings_tiny.png new file mode 100644 index 0000000..7e34855 Binary files /dev/null and b/pixellab_src/pl_bunny/pl_wings_tiny.png differ diff --git a/pixellab_src/pl_chick/base.json b/pixellab_src/pl_chick/base.json new file mode 100644 index 0000000..adc9dd5 --- /dev/null +++ b/pixellab_src/pl_chick/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "round puffball fledgling bird with a perfectly round fluffy body, standing on two long thin stilt legs with big three-toed feet, tiny folded stub wings at its sides, short pointed beak, small teardrop-shaped crimson cheek marks, a ring of fluffy crimson down around its neck like a scarf, no crest, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 301 + }, + "usage": { + "type": "usd", + "usd": 0.007238638586468167 + } +} diff --git a/pixellab_src/pl_chick/base.png b/pixellab_src/pl_chick/base.png new file mode 100644 index 0000000..8161149 Binary files /dev/null and b/pixellab_src/pl_chick/base.png differ diff --git a/pixellab_src/pl_chick/base_raw.png b/pixellab_src/pl_chick/base_raw.png new file mode 100644 index 0000000..b4eaeb7 Binary files /dev/null and b/pixellab_src/pl_chick/base_raw.png differ diff --git a/pixellab_src/pl_chick/pl_chick_tail_icicle.json b/pixellab_src/pl_chick/pl_chick_tail_icicle.json new file mode 100644 index 0000000..c26e577 --- /dev/null +++ b/pixellab_src/pl_chick/pl_chick_tail_icicle.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a short fanned tail of pale icy blue ice crystal feathers sticking out on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.01125643727514479 + } +} diff --git a/pixellab_src/pl_chick/pl_chick_tail_icicle.png b/pixellab_src/pl_chick/pl_chick_tail_icicle.png new file mode 100644 index 0000000..fb332c1 Binary files /dev/null and b/pixellab_src/pl_chick/pl_chick_tail_icicle.png differ diff --git a/pixellab_src/pl_chick/pl_crest_feather.json b/pixellab_src/pl_chick/pl_crest_feather.json new file mode 100644 index 0000000..0f36507 --- /dev/null +++ b/pixellab_src/pl_chick/pl_crest_feather.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a tall crest of crimson feathers on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.010989243825276693 + } +} diff --git a/pixellab_src/pl_chick/pl_crest_feather.png b/pixellab_src/pl_chick/pl_crest_feather.png new file mode 100644 index 0000000..37bc69e Binary files /dev/null and b/pixellab_src/pl_chick/pl_crest_feather.png differ diff --git a/pixellab_src/pl_chick/pl_tail_feather_fan.json b/pixellab_src/pl_chick/pl_tail_feather_fan.json new file mode 100644 index 0000000..9e7e003 --- /dev/null +++ b/pixellab_src/pl_chick/pl_tail_feather_fan.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a fanned tail of long crimson tail feathers sticking out on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00789507219526503 + } +} diff --git a/pixellab_src/pl_chick/pl_tail_feather_fan.png b/pixellab_src/pl_chick/pl_tail_feather_fan.png new file mode 100644 index 0000000..67bbb5a Binary files /dev/null and b/pixellab_src/pl_chick/pl_tail_feather_fan.png differ diff --git a/pixellab_src/pl_chick/pl_wings_gold.json b/pixellab_src/pl_chick/pl_wings_gold.json new file mode 100644 index 0000000..7dbaf88 --- /dev/null +++ b/pixellab_src/pl_chick/pl_wings_gold.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add two small gold feathered wings sticking up from behind its back, one on the left and one on the right, mirror symmetric, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00773183994823032 + } +} diff --git a/pixellab_src/pl_chick/pl_wings_gold.png b/pixellab_src/pl_chick/pl_wings_gold.png new file mode 100644 index 0000000..a4c0510 Binary files /dev/null and b/pixellab_src/pl_chick/pl_wings_gold.png differ diff --git a/pixellab_src/pl_crab/base.json b/pixellab_src/pl_crab/base.json new file mode 100644 index 0000000..f0dffb6 --- /dev/null +++ b/pixellab_src/pl_crab/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "chunky squat crab creature facing the viewer, wide flat oval teal carapace with a crimson zigzag rim along its front edge, two big round eyes on short thick stalks, one oversized blocky claw and one smaller claw both raised up beside its body with crimson pincer tips, four short stubby pointed legs on each side, tiny smiling mouth, no shell on its back, nothing on its head, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south", + "seed": 611 + }, + "usage": { + "type": "usd", + "usd": 0.008341445472505357 + } +} diff --git a/pixellab_src/pl_crab/base.png b/pixellab_src/pl_crab/base.png new file mode 100644 index 0000000..d93de7f Binary files /dev/null and b/pixellab_src/pl_crab/base.png differ diff --git a/pixellab_src/pl_crab/base_raw.png b/pixellab_src/pl_crab/base_raw.png new file mode 100644 index 0000000..8b8c086 Binary files /dev/null and b/pixellab_src/pl_crab/base_raw.png differ diff --git a/pixellab_src/pl_crab/pl_barnacles.json b/pixellab_src/pl_crab/pl_barnacles.json new file mode 100644 index 0000000..060b2b7 --- /dev/null +++ b/pixellab_src/pl_crab/pl_barnacles.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a cluster of small teal barnacles and tiny shells growing on top of its back, poking up behind its body, no sparkles, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.0077620227866702605 + } +} diff --git a/pixellab_src/pl_crab/pl_barnacles.png b/pixellab_src/pl_crab/pl_barnacles.png new file mode 100644 index 0000000..ca00504 Binary files /dev/null and b/pixellab_src/pl_crab/pl_barnacles.png differ diff --git a/pixellab_src/pl_crab/pl_coral_crown.json b/pixellab_src/pl_crab/pl_coral_crown.json new file mode 100644 index 0000000..0dcadd2 --- /dev/null +++ b/pixellab_src/pl_crab/pl_coral_crown.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a few small branching crimson coral twigs growing on top of its head between its eye stalks, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008108901209301418 + } +} diff --git a/pixellab_src/pl_crab/pl_coral_crown.png b/pixellab_src/pl_crab/pl_coral_crown.png new file mode 100644 index 0000000..9b5b65f Binary files /dev/null and b/pixellab_src/pl_crab/pl_coral_crown.png differ diff --git a/pixellab_src/pl_crab/pl_shell_spiral.json b/pixellab_src/pl_crab/pl_shell_spiral.json new file mode 100644 index 0000000..0fe983c --- /dev/null +++ b/pixellab_src/pl_crab/pl_shell_spiral.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a round gold spiral hermit crab shell on its back, the shell bulges up behind its body like a big snail shell, small and compact, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008746390872531467 + } +} diff --git a/pixellab_src/pl_crab/pl_shell_spiral.png b/pixellab_src/pl_crab/pl_shell_spiral.png new file mode 100644 index 0000000..4e689cc Binary files /dev/null and b/pixellab_src/pl_crab/pl_shell_spiral.png differ diff --git a/pixellab_src/pl_cub/base.json b/pixellab_src/pl_cub/base.json new file mode 100644 index 0000000..df4be8b --- /dev/null +++ b/pixellab_src/pl_cub/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "chunky stocky badger-like cub standing on four short thick legs, wide flat head with a blunt square snout, tiny rounded ears, a crimson stripe running from its nose over its forehead, crimson band across its shoulders, big front paws with crimson claws, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 301 + }, + "usage": { + "type": "generations", + "generations": 1.0 + } +} diff --git a/pixellab_src/pl_cub/base.png b/pixellab_src/pl_cub/base.png new file mode 100644 index 0000000..71be89b Binary files /dev/null and b/pixellab_src/pl_cub/base.png differ diff --git a/pixellab_src/pl_cub/base_raw.png b/pixellab_src/pl_cub/base_raw.png new file mode 100644 index 0000000..c1d2a99 Binary files /dev/null and b/pixellab_src/pl_cub/base_raw.png differ diff --git a/pixellab_src/pl_cub/pl_cub_tail_rockclub.json b/pixellab_src/pl_cub/pl_cub_tail_rockclub.json new file mode 100644 index 0000000..534dafe --- /dev/null +++ b/pixellab_src/pl_cub/pl_cub_tail_rockclub.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a short thick teal tail ending in a round gold rock club, curling up on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00794953179359436 + } +} diff --git a/pixellab_src/pl_cub/pl_cub_tail_rockclub.png b/pixellab_src/pl_cub/pl_cub_tail_rockclub.png new file mode 100644 index 0000000..996e553 Binary files /dev/null and b/pixellab_src/pl_cub/pl_cub_tail_rockclub.png differ diff --git a/pixellab_src/pl_cub/pl_horns_ram.json b/pixellab_src/pl_cub/pl_horns_ram.json new file mode 100644 index 0000000..db89171 --- /dev/null +++ b/pixellab_src/pl_cub/pl_horns_ram.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a pair of small curled gold ram horns on the sides of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007494111246532865 + } +} diff --git a/pixellab_src/pl_cub/pl_horns_ram.png b/pixellab_src/pl_cub/pl_horns_ram.png new file mode 100644 index 0000000..b7b2307 Binary files /dev/null and b/pixellab_src/pl_cub/pl_horns_ram.png differ diff --git a/pixellab_src/pl_cub/pl_plates_rock.json b/pixellab_src/pl_cub/pl_plates_rock.json new file mode 100644 index 0000000..c93f200 --- /dev/null +++ b/pixellab_src/pl_cub/pl_plates_rock.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a few small gold rock armor plates sticking out from its back, just behind its shoulders, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009668046156565349 + } +} diff --git a/pixellab_src/pl_cub/pl_plates_rock.png b/pixellab_src/pl_cub/pl_plates_rock.png new file mode 100644 index 0000000..36e0fd7 Binary files /dev/null and b/pixellab_src/pl_cub/pl_plates_rock.png differ diff --git a/pixellab_src/pl_cub/pl_tail_fluffy.json b/pixellab_src/pl_cub/pl_tail_fluffy.json new file mode 100644 index 0000000..b8249c6 --- /dev/null +++ b/pixellab_src/pl_cub/pl_tail_fluffy.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a big fluffy teal tail curling up on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.010967689222759671 + } +} diff --git a/pixellab_src/pl_cub/pl_tail_fluffy.png b/pixellab_src/pl_cub/pl_tail_fluffy.png new file mode 100644 index 0000000..261ddab Binary files /dev/null and b/pixellab_src/pl_cub/pl_tail_fluffy.png differ diff --git a/pixellab_src/pl_dino/base.json b/pixellab_src/pl_dino/base.json new file mode 100644 index 0000000..f05b35c --- /dev/null +++ b/pixellab_src/pl_dino/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "chunky little dinosaur standing upright on thick stubby legs, big boxy head with a wide blunt square snout and small nostrils, small beady eyes set high, underbite with a row of tiny teeth, very short tiny arms, round pot belly with crimson horizontal belly stripes, no tail, no spikes, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 422 + }, + "usage": { + "type": "generations", + "generations": 1.0 + } +} diff --git a/pixellab_src/pl_dino/base.png b/pixellab_src/pl_dino/base.png new file mode 100644 index 0000000..7b81f23 Binary files /dev/null and b/pixellab_src/pl_dino/base.png differ diff --git a/pixellab_src/pl_dino/base_raw.png b/pixellab_src/pl_dino/base_raw.png new file mode 100644 index 0000000..3a59b5c Binary files /dev/null and b/pixellab_src/pl_dino/base_raw.png differ diff --git a/pixellab_src/pl_dino/pl_dino_crystals_back.json b/pixellab_src/pl_dino/pl_dino_crystals_back.json new file mode 100644 index 0000000..4db070b --- /dev/null +++ b/pixellab_src/pl_dino/pl_dino_crystals_back.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small cluster of gold crystal shards growing out of its back behind its shoulders, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008272239208221436 + } +} diff --git a/pixellab_src/pl_dino/pl_dino_crystals_back.png b/pixellab_src/pl_dino/pl_dino_crystals_back.png new file mode 100644 index 0000000..75f7f95 Binary files /dev/null and b/pixellab_src/pl_dino/pl_dino_crystals_back.png differ diff --git a/pixellab_src/pl_dino/pl_horn_single.json b/pixellab_src/pl_dino/pl_horn_single.json new file mode 100644 index 0000000..37557be --- /dev/null +++ b/pixellab_src/pl_dino/pl_horn_single.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add one gold horn pointing up from its forehead, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009642295916875203 + } +} diff --git a/pixellab_src/pl_dino/pl_horn_single.png b/pixellab_src/pl_dino/pl_horn_single.png new file mode 100644 index 0000000..9591cc5 Binary files /dev/null and b/pixellab_src/pl_dino/pl_horn_single.png differ diff --git a/pixellab_src/pl_dino/pl_spikes_back.json b/pixellab_src/pl_dino/pl_spikes_back.json new file mode 100644 index 0000000..f1ffd32 --- /dev/null +++ b/pixellab_src/pl_dino/pl_spikes_back.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a row of big crimson triangular spikes along its back, from the back of its head down to its lower back, keep everything else unchanged, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00943149651421441 + } +} diff --git a/pixellab_src/pl_dino/pl_spikes_back.png b/pixellab_src/pl_dino/pl_spikes_back.png new file mode 100644 index 0000000..e15ec69 Binary files /dev/null and b/pixellab_src/pl_dino/pl_spikes_back.png differ diff --git a/pixellab_src/pl_dino/pl_tail_club.json b/pixellab_src/pl_dino/pl_tail_club.json new file mode 100644 index 0000000..0a4fd7f --- /dev/null +++ b/pixellab_src/pl_dino/pl_tail_club.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a thick teal tail ending in a big round gold club, extending out on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007662267552481757 + } +} diff --git a/pixellab_src/pl_dino/pl_tail_club.png b/pixellab_src/pl_dino/pl_tail_club.png new file mode 100644 index 0000000..30b43d5 Binary files /dev/null and b/pixellab_src/pl_dino/pl_tail_club.png differ diff --git a/pixellab_src/pl_drake/base.json b/pixellab_src/pl_drake/base.json new file mode 100644 index 0000000..9c7e8d5 --- /dev/null +++ b/pixellab_src/pl_drake/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "sturdy baby dragon standing on four thick legs, medium-length rounded reptile snout, small bony brow ridges over narrow eyes, thick neck, a row of crimson diamond markings along its spine, crimson armored belly plates, stubby claws, no wings, no horns, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 461 + }, + "usage": { + "type": "usd", + "usd": 0.007315795368618436 + } +} diff --git a/pixellab_src/pl_drake/base.png b/pixellab_src/pl_drake/base.png new file mode 100644 index 0000000..b8c8a36 Binary files /dev/null and b/pixellab_src/pl_drake/base.png differ diff --git a/pixellab_src/pl_drake/base_raw.png b/pixellab_src/pl_drake/base_raw.png new file mode 100644 index 0000000..eef6a4f Binary files /dev/null and b/pixellab_src/pl_drake/base_raw.png differ diff --git a/pixellab_src/pl_drake/pl_drake_crystals.json b/pixellab_src/pl_drake/pl_drake_crystals.json new file mode 100644 index 0000000..204c57f --- /dev/null +++ b/pixellab_src/pl_drake/pl_drake_crystals.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a cluster of three pointed gold crystals growing up out of its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007149896489249336 + } +} diff --git a/pixellab_src/pl_drake/pl_drake_crystals.png b/pixellab_src/pl_drake/pl_drake_crystals.png new file mode 100644 index 0000000..a00725b Binary files /dev/null and b/pixellab_src/pl_drake/pl_drake_crystals.png differ diff --git a/pixellab_src/pl_drake/pl_horns_dragon.json b/pixellab_src/pl_drake/pl_horns_dragon.json new file mode 100644 index 0000000..86997a7 --- /dev/null +++ b/pixellab_src/pl_drake/pl_horns_dragon.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a pair of small swept-back crimson dragon horns on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008072009775373671 + } +} diff --git a/pixellab_src/pl_drake/pl_horns_dragon.png b/pixellab_src/pl_drake/pl_horns_dragon.png new file mode 100644 index 0000000..fd769ef Binary files /dev/null and b/pixellab_src/pl_drake/pl_horns_dragon.png differ diff --git a/pixellab_src/pl_drake/pl_mane_flame.json b/pixellab_src/pl_drake/pl_mane_flame.json new file mode 100644 index 0000000..72ed316 --- /dev/null +++ b/pixellab_src/pl_drake/pl_mane_flame.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a ridge of orange and yellow flames running along its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.017054271486070423 + } +} diff --git a/pixellab_src/pl_drake/pl_mane_flame.png b/pixellab_src/pl_drake/pl_mane_flame.png new file mode 100644 index 0000000..6650fae Binary files /dev/null and b/pixellab_src/pl_drake/pl_mane_flame.png differ diff --git a/pixellab_src/pl_drake/pl_tail_spade.json b/pixellab_src/pl_drake/pl_tail_spade.json new file mode 100644 index 0000000..2061e15 --- /dev/null +++ b/pixellab_src/pl_drake/pl_tail_spade.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a long teal tail ending in a crimson spade-shaped tip, curling up on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009379288011127048 + } +} diff --git a/pixellab_src/pl_drake/pl_tail_spade.png b/pixellab_src/pl_drake/pl_tail_spade.png new file mode 100644 index 0000000..bfd0041 Binary files /dev/null and b/pixellab_src/pl_drake/pl_tail_spade.png differ diff --git a/pixellab_src/pl_drake/pl_wings_dragon.json b/pixellab_src/pl_drake/pl_wings_dragon.json new file mode 100644 index 0000000..313e143 --- /dev/null +++ b/pixellab_src/pl_drake/pl_wings_dragon.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a pair of small crimson membrane dragon wings spread out to both sides from its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009162568171819051 + } +} diff --git a/pixellab_src/pl_drake/pl_wings_dragon.png b/pixellab_src/pl_drake/pl_wings_dragon.png new file mode 100644 index 0000000..105900f Binary files /dev/null and b/pixellab_src/pl_drake/pl_wings_dragon.png differ diff --git a/pixellab_src/pl_duck/base.json b/pixellab_src/pl_duck/base.json new file mode 100644 index 0000000..f97da68 --- /dev/null +++ b/pixellab_src/pl_duck/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "plump round duckling waterbird standing on two short legs with oversized flat crimson webbed feet, egg-shaped body with a short thick neck, very wide flat spoon-shaped crimson bill that flares out at the tip, small calm half-lidded eyes, a thin crimson ring around its neck, tiny stub wings folded at its sides, no crest, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 711 + }, + "usage": { + "type": "usd", + "usd": 0.0075111570623185905 + } +} diff --git a/pixellab_src/pl_duck/base.png b/pixellab_src/pl_duck/base.png new file mode 100644 index 0000000..b770771 Binary files /dev/null and b/pixellab_src/pl_duck/base.png differ diff --git a/pixellab_src/pl_duck/base_raw.png b/pixellab_src/pl_duck/base_raw.png new file mode 100644 index 0000000..2ce1592 Binary files /dev/null and b/pixellab_src/pl_duck/base_raw.png differ diff --git a/pixellab_src/pl_duck/pl_cloud_puffs.json b/pixellab_src/pl_duck/pl_cloud_puffs.json new file mode 100644 index 0000000..1bbef7a --- /dev/null +++ b/pixellab_src/pl_duck/pl_cloud_puffs.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a big cluster of puffy pale teal clouds behind its back, billowing up above its shoulders and sticking out on both sides of its body, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.012242308616638185 + } +} diff --git a/pixellab_src/pl_duck/pl_cloud_puffs.png b/pixellab_src/pl_duck/pl_cloud_puffs.png new file mode 100644 index 0000000..1ad2ffc Binary files /dev/null and b/pixellab_src/pl_duck/pl_cloud_puffs.png differ diff --git a/pixellab_src/pl_duck/pl_plume_feather.json b/pixellab_src/pl_duck/pl_plume_feather.json new file mode 100644 index 0000000..6119d26 --- /dev/null +++ b/pixellab_src/pl_duck/pl_plume_feather.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a single long curved crimson plume feather sticking up from the top of its head and curving back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009356668896145292 + } +} diff --git a/pixellab_src/pl_duck/pl_plume_feather.png b/pixellab_src/pl_duck/pl_plume_feather.png new file mode 100644 index 0000000..65119cc Binary files /dev/null and b/pixellab_src/pl_duck/pl_plume_feather.png differ diff --git a/pixellab_src/pl_duck/pl_tail_streamers.json b/pixellab_src/pl_duck/pl_tail_streamers.json new file mode 100644 index 0000000..224f311 --- /dev/null +++ b/pixellab_src/pl_duck/pl_tail_streamers.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add two long wavy gold streamer tail feathers growing from its rear end at the lower right of its body, trailing out to the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008180538150999282 + } +} diff --git a/pixellab_src/pl_duck/pl_tail_streamers.png b/pixellab_src/pl_duck/pl_tail_streamers.png new file mode 100644 index 0000000..9e88fe2 Binary files /dev/null and b/pixellab_src/pl_duck/pl_tail_streamers.png differ diff --git a/pixellab_src/pl_eel/base.json b/pixellab_src/pl_eel/base.json new file mode 100644 index 0000000..7aefd88 --- /dev/null +++ b/pixellab_src/pl_eel/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "chibi eel creature standing upright like a question mark, long smooth tubular body curving down into a small coiled tail at the bottom, rounded head with a short snout and a small closed smiling mouth, two thin whisker barbels hanging from its chin, pale cream belly, small crimson spots along its sides, smooth round head with no crest, no fins and no horns, no ground, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 74 + }, + "usage": { + "type": "usd", + "usd": 0.007537920713424682 + } +} diff --git a/pixellab_src/pl_eel/base.png b/pixellab_src/pl_eel/base.png new file mode 100644 index 0000000..fa1ad3b Binary files /dev/null and b/pixellab_src/pl_eel/base.png differ diff --git a/pixellab_src/pl_eel/base_raw.png b/pixellab_src/pl_eel/base_raw.png new file mode 100644 index 0000000..9a66e79 Binary files /dev/null and b/pixellab_src/pl_eel/base_raw.png differ diff --git a/pixellab_src/pl_eel/pl_crest_electric.json b/pixellab_src/pl_eel/pl_crest_electric.json new file mode 100644 index 0000000..6724829 --- /dev/null +++ b/pixellab_src/pl_eel/pl_crest_electric.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a crest of three bright yellow zigzag lightning bolts standing up on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009726119703716701 + } +} diff --git a/pixellab_src/pl_eel/pl_crest_electric.png b/pixellab_src/pl_eel/pl_crest_electric.png new file mode 100644 index 0000000..880d402 Binary files /dev/null and b/pixellab_src/pl_eel/pl_crest_electric.png differ diff --git a/pixellab_src/pl_eel/pl_sail_fin.json b/pixellab_src/pl_eel/pl_sail_fin.json new file mode 100644 index 0000000..27666ba --- /dev/null +++ b/pixellab_src/pl_eel/pl_sail_fin.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a tall crimson sailfish fin ribbed with thin spines running down its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.005 + } +} diff --git a/pixellab_src/pl_eel/pl_sail_fin.png b/pixellab_src/pl_eel/pl_sail_fin.png new file mode 100644 index 0000000..b443b78 Binary files /dev/null and b/pixellab_src/pl_eel/pl_sail_fin.png differ diff --git a/pixellab_src/pl_eel/pl_tail_bluefire_eel.json b/pixellab_src/pl_eel/pl_tail_bluefire_eel.json new file mode 100644 index 0000000..fc86728 --- /dev/null +++ b/pixellab_src/pl_eel/pl_tail_bluefire_eel.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a thin teal tail curling up on the right side with its tip wreathed in bright blue flames, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008572399139404297 + } +} diff --git a/pixellab_src/pl_eel/pl_tail_bluefire_eel.png b/pixellab_src/pl_eel/pl_tail_bluefire_eel.png new file mode 100644 index 0000000..4d28ef6 Binary files /dev/null and b/pixellab_src/pl_eel/pl_tail_bluefire_eel.png differ diff --git a/pixellab_src/pl_fawn/base.json b/pixellab_src/pl_fawn/base.json new file mode 100644 index 0000000..fb50ae6 --- /dev/null +++ b/pixellab_src/pl_fawn/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "dainty deer fawn creature standing on four very long slender legs with small crimson hooves, narrow tapered muzzle, long droopy ears, two rows of small crimson spots along its back, tiny body, no antlers, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 521 + }, + "usage": { + "type": "usd", + "usd": 0.00735997584131029 + } +} diff --git a/pixellab_src/pl_fawn/base.png b/pixellab_src/pl_fawn/base.png new file mode 100644 index 0000000..997a814 Binary files /dev/null and b/pixellab_src/pl_fawn/base.png differ diff --git a/pixellab_src/pl_fawn/base_raw.png b/pixellab_src/pl_fawn/base_raw.png new file mode 100644 index 0000000..55a8a90 Binary files /dev/null and b/pixellab_src/pl_fawn/base_raw.png differ diff --git a/pixellab_src/pl_fawn/pl_antlers_leafy.json b/pixellab_src/pl_fawn/pl_antlers_leafy.json new file mode 100644 index 0000000..ed9ddff --- /dev/null +++ b/pixellab_src/pl_fawn/pl_antlers_leafy.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a pair of small gold antlers sprouting small leaves on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009486502726872762 + } +} diff --git a/pixellab_src/pl_fawn/pl_antlers_leafy.png b/pixellab_src/pl_fawn/pl_antlers_leafy.png new file mode 100644 index 0000000..67f20ac Binary files /dev/null and b/pixellab_src/pl_fawn/pl_antlers_leafy.png differ diff --git a/pixellab_src/pl_fawn/pl_fawn_halo.json b/pixellab_src/pl_fawn/pl_fawn_halo.json new file mode 100644 index 0000000..989f852 --- /dev/null +++ b/pixellab_src/pl_fawn/pl_fawn_halo.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small glowing gold halo ring floating above its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00966904049449497 + } +} diff --git a/pixellab_src/pl_fawn/pl_fawn_halo.png b/pixellab_src/pl_fawn/pl_fawn_halo.png new file mode 100644 index 0000000..46916c5 Binary files /dev/null and b/pixellab_src/pl_fawn/pl_fawn_halo.png differ diff --git a/pixellab_src/pl_fawn/pl_leaf_cape.json b/pixellab_src/pl_fawn/pl_leaf_cape.json new file mode 100644 index 0000000..cdf14c1 --- /dev/null +++ b/pixellab_src/pl_fawn/pl_leaf_cape.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a cape of large overlapping gold leaves draped over its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008365429057015313 + } +} diff --git a/pixellab_src/pl_fawn/pl_leaf_cape.png b/pixellab_src/pl_fawn/pl_leaf_cape.png new file mode 100644 index 0000000..9327013 Binary files /dev/null and b/pixellab_src/pl_fawn/pl_leaf_cape.png differ diff --git a/pixellab_src/pl_fawn/pl_tail_leaf.json b/pixellab_src/pl_fawn/pl_tail_leaf.json new file mode 100644 index 0000000..83f6ecf --- /dev/null +++ b/pixellab_src/pl_fawn/pl_tail_leaf.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a tail ending in a big gold leaf, curling up on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007907035244835749 + } +} diff --git a/pixellab_src/pl_fawn/pl_tail_leaf.png b/pixellab_src/pl_fawn/pl_tail_leaf.png new file mode 100644 index 0000000..4eac954 Binary files /dev/null and b/pixellab_src/pl_fawn/pl_tail_leaf.png differ diff --git a/pixellab_src/pl_fox/base.json b/pixellab_src/pl_fox/base.json new file mode 100644 index 0000000..a47c0b0 --- /dev/null +++ b/pixellab_src/pl_fox/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "lean fox-like creature standing alert on four thin legs, long narrow snout, oversized triangular ears with crimson insides, small diamond mark on its forehead, slim body, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 202 + }, + "usage": { + "type": "generations", + "generations": 1.0 + } +} diff --git a/pixellab_src/pl_fox/base.png b/pixellab_src/pl_fox/base.png new file mode 100644 index 0000000..1970227 Binary files /dev/null and b/pixellab_src/pl_fox/base.png differ diff --git a/pixellab_src/pl_fox/base_raw.png b/pixellab_src/pl_fox/base_raw.png new file mode 100644 index 0000000..e46ba26 Binary files /dev/null and b/pixellab_src/pl_fox/base_raw.png differ diff --git a/pixellab_src/pl_fox/pl_crown_ice.json b/pixellab_src/pl_fox/pl_crown_ice.json new file mode 100644 index 0000000..5bbdf9a --- /dev/null +++ b/pixellab_src/pl_fox/pl_crown_ice.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a crown of pale icy blue ice crystals on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "generations", + "generations": 1.0 + } +} diff --git a/pixellab_src/pl_fox/pl_crown_ice.png b/pixellab_src/pl_fox/pl_crown_ice.png new file mode 100644 index 0000000..2bc4523 Binary files /dev/null and b/pixellab_src/pl_fox/pl_crown_ice.png differ diff --git a/pixellab_src/pl_fox/pl_tail_bluefire.json b/pixellab_src/pl_fox/pl_tail_bluefire.json new file mode 100644 index 0000000..4f909df --- /dev/null +++ b/pixellab_src/pl_fox/pl_tail_bluefire.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a long fluffy tail ending in a big flame of bright deep blue fire with a violet-blue core, curling up on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 8, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.01958835331598918 + } +} diff --git a/pixellab_src/pl_fox/pl_tail_bluefire.png b/pixellab_src/pl_fox/pl_tail_bluefire.png new file mode 100644 index 0000000..1b3095b Binary files /dev/null and b/pixellab_src/pl_fox/pl_tail_bluefire.png differ diff --git a/pixellab_src/pl_fox/pl_tail_flame.json b/pixellab_src/pl_fox/pl_tail_flame.json new file mode 100644 index 0000000..ea00dae --- /dev/null +++ b/pixellab_src/pl_fox/pl_tail_flame.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a long fluffy tail ending in a big orange and yellow flame, curling up on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "generations", + "generations": 1.0 + } +} diff --git a/pixellab_src/pl_fox/pl_tail_flame.png b/pixellab_src/pl_fox/pl_tail_flame.png new file mode 100644 index 0000000..019e79b Binary files /dev/null and b/pixellab_src/pl_fox/pl_tail_flame.png differ diff --git a/pixellab_src/pl_fox/pl_wings_feather.json b/pixellab_src/pl_fox/pl_wings_feather.json new file mode 100644 index 0000000..a842e6a --- /dev/null +++ b/pixellab_src/pl_fox/pl_wings_feather.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a pair of gold feathered wings spread from its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "generations", + "generations": 1.0 + } +} diff --git a/pixellab_src/pl_fox/pl_wings_feather.png b/pixellab_src/pl_fox/pl_wings_feather.png new file mode 100644 index 0000000..016ad02 Binary files /dev/null and b/pixellab_src/pl_fox/pl_wings_feather.png differ diff --git a/pixellab_src/pl_grub/base.json b/pixellab_src/pl_grub/base.json new file mode 100644 index 0000000..14c660a --- /dev/null +++ b/pixellab_src/pl_grub/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "plump chubby larva grub creature sitting upright facing the viewer, body made of four fat stacked teal rings that shrink toward the top, wide flat round face with a broad smiling mouth and two small eyes set far apart, crimson freckle dots along each ring, many tiny stubby nub feet along its belly, no antennae, no horn, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south", + "seed": 47 + }, + "usage": { + "type": "usd", + "usd": 0.007096679316626655 + } +} diff --git a/pixellab_src/pl_grub/base.png b/pixellab_src/pl_grub/base.png new file mode 100644 index 0000000..a18eb16 Binary files /dev/null and b/pixellab_src/pl_grub/base.png differ diff --git a/pixellab_src/pl_grub/base_raw.png b/pixellab_src/pl_grub/base_raw.png new file mode 100644 index 0000000..2cf084b Binary files /dev/null and b/pixellab_src/pl_grub/base_raw.png differ diff --git a/pixellab_src/pl_grub/pl_antennae.json b/pixellab_src/pl_grub/pl_antennae.json new file mode 100644 index 0000000..3c5b474 --- /dev/null +++ b/pixellab_src/pl_grub/pl_antennae.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add two teal antennae with round crimson bulb tips on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.0081728073226081 + } +} diff --git a/pixellab_src/pl_grub/pl_antennae.png b/pixellab_src/pl_grub/pl_antennae.png new file mode 100644 index 0000000..8207ed2 Binary files /dev/null and b/pixellab_src/pl_grub/pl_antennae.png differ diff --git a/pixellab_src/pl_grub/pl_grub_flower.json b/pixellab_src/pl_grub/pl_grub_flower.json new file mode 100644 index 0000000..e606ea4 --- /dev/null +++ b/pixellab_src/pl_grub/pl_grub_flower.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add one small gold flower with round petals blooming on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008501098288430108 + } +} diff --git a/pixellab_src/pl_grub/pl_grub_flower.png b/pixellab_src/pl_grub/pl_grub_flower.png new file mode 100644 index 0000000..f371bc8 Binary files /dev/null and b/pixellab_src/pl_grub/pl_grub_flower.png differ diff --git a/pixellab_src/pl_grub/pl_mushrooms_back.json b/pixellab_src/pl_grub/pl_mushrooms_back.json new file mode 100644 index 0000000..a279413 --- /dev/null +++ b/pixellab_src/pl_grub/pl_mushrooms_back.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small cluster of crimson-capped mushrooms with white spots growing on its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007732026365068223 + } +} diff --git a/pixellab_src/pl_grub/pl_mushrooms_back.png b/pixellab_src/pl_grub/pl_mushrooms_back.png new file mode 100644 index 0000000..2295e0c Binary files /dev/null and b/pixellab_src/pl_grub/pl_mushrooms_back.png differ diff --git a/pixellab_src/pl_grub/pl_tail_stinger.json b/pixellab_src/pl_grub/pl_tail_stinger.json new file mode 100644 index 0000000..d76a7e4 --- /dev/null +++ b/pixellab_src/pl_grub/pl_tail_stinger.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a thick curved crimson stinger tail with a big sharp pointed barb at its tip, curving up on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.012547792620129056 + } +} diff --git a/pixellab_src/pl_grub/pl_tail_stinger.png b/pixellab_src/pl_grub/pl_tail_stinger.png new file mode 100644 index 0000000..9210113 Binary files /dev/null and b/pixellab_src/pl_grub/pl_tail_stinger.png differ diff --git a/pixellab_src/pl_guppy/base.json b/pixellab_src/pl_guppy/base.json new file mode 100644 index 0000000..fbdef7c --- /dev/null +++ b/pixellab_src/pl_guppy/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "round bubble-shaped fish creature hovering upright, plump spherical body, short blunt snout with small pouty lips, two tiny paddle fins held out like little arms, pale cream belly, crimson polka-dot spots on its sides, little bubbles around it, no tail fin, no dorsal fin, no fins on its head, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 40, + "height": 40 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south", + "seed": 31 + }, + "usage": { + "type": "usd", + "usd": 0.007430701335271199 + } +} diff --git a/pixellab_src/pl_guppy/base.png b/pixellab_src/pl_guppy/base.png new file mode 100644 index 0000000..1d3aa60 Binary files /dev/null and b/pixellab_src/pl_guppy/base.png differ diff --git a/pixellab_src/pl_guppy/base_raw.png b/pixellab_src/pl_guppy/base_raw.png new file mode 100644 index 0000000..c281c0a Binary files /dev/null and b/pixellab_src/pl_guppy/base_raw.png differ diff --git a/pixellab_src/pl_guppy/pl_fin_dorsal.json b/pixellab_src/pl_guppy/pl_fin_dorsal.json new file mode 100644 index 0000000..7980781 --- /dev/null +++ b/pixellab_src/pl_guppy/pl_fin_dorsal.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a crimson shark-style dorsal fin rising from its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007716622273127238 + } +} diff --git a/pixellab_src/pl_guppy/pl_fin_dorsal.png b/pixellab_src/pl_guppy/pl_fin_dorsal.png new file mode 100644 index 0000000..feda91a Binary files /dev/null and b/pixellab_src/pl_guppy/pl_fin_dorsal.png differ diff --git a/pixellab_src/pl_guppy/pl_fins_head.json b/pixellab_src/pl_guppy/pl_fins_head.json new file mode 100644 index 0000000..972d729 --- /dev/null +++ b/pixellab_src/pl_guppy/pl_fins_head.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add small crimson fin frills on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009395943297280206 + } +} diff --git a/pixellab_src/pl_guppy/pl_fins_head.png b/pixellab_src/pl_guppy/pl_fins_head.png new file mode 100644 index 0000000..b180901 Binary files /dev/null and b/pixellab_src/pl_guppy/pl_fins_head.png differ diff --git a/pixellab_src/pl_guppy/pl_guppy_bubble_crown.json b/pixellab_src/pl_guppy/pl_guppy_bubble_crown.json new file mode 100644 index 0000000..33e694e --- /dev/null +++ b/pixellab_src/pl_guppy/pl_guppy_bubble_crown.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a few tiny round gold bubbles resting in a small cluster on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007729158586925931 + } +} diff --git a/pixellab_src/pl_guppy/pl_guppy_pearl_crown.json b/pixellab_src/pl_guppy/pl_guppy_pearl_crown.json new file mode 100644 index 0000000..43afea3 --- /dev/null +++ b/pixellab_src/pl_guppy/pl_guppy_pearl_crown.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small crown of three round gold pearls sitting on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 4, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008294328848520915 + } +} diff --git a/pixellab_src/pl_guppy/pl_guppy_pearl_crown.png b/pixellab_src/pl_guppy/pl_guppy_pearl_crown.png new file mode 100644 index 0000000..384ac16 Binary files /dev/null and b/pixellab_src/pl_guppy/pl_guppy_pearl_crown.png differ diff --git a/pixellab_src/pl_guppy/pl_tail_fish.json b/pixellab_src/pl_guppy/pl_tail_fish.json new file mode 100644 index 0000000..fab9954 --- /dev/null +++ b/pixellab_src/pl_guppy/pl_tail_fish.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a crimson fish tail fin with two pointed lobes, attached to its body and sticking out on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.011478334824244181 + } +} diff --git a/pixellab_src/pl_guppy/pl_tail_fish.png b/pixellab_src/pl_guppy/pl_tail_fish.png new file mode 100644 index 0000000..7da370d Binary files /dev/null and b/pixellab_src/pl_guppy/pl_tail_fish.png differ diff --git a/pixellab_src/pl_hawk/base.json b/pixellab_src/pl_hawk/base.json new file mode 100644 index 0000000..103a059 --- /dev/null +++ b/pixellab_src/pl_hawk/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "proud young bird of prey standing upright with puffed out chest, sharp hooked beak, fierce narrow eyes with crimson war paint stripes under them, a crimson V-shaped marking on its chest, folded wings crossed in front of its chest like arms, strong thick legs with big talons, no crest, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 521 + }, + "usage": { + "type": "usd", + "usd": 0.007353315035502116 + } +} diff --git a/pixellab_src/pl_hawk/base.png b/pixellab_src/pl_hawk/base.png new file mode 100644 index 0000000..50a9347 Binary files /dev/null and b/pixellab_src/pl_hawk/base.png differ diff --git a/pixellab_src/pl_hawk/base_raw.png b/pixellab_src/pl_hawk/base_raw.png new file mode 100644 index 0000000..f88867d Binary files /dev/null and b/pixellab_src/pl_hawk/base_raw.png differ diff --git a/pixellab_src/pl_hawk/pl_crest_flame.json b/pixellab_src/pl_hawk/pl_crest_flame.json new file mode 100644 index 0000000..4c8cdcc --- /dev/null +++ b/pixellab_src/pl_hawk/pl_crest_flame.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a crest of orange and yellow flames on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008972050587336224 + } +} diff --git a/pixellab_src/pl_hawk/pl_crest_flame.png b/pixellab_src/pl_hawk/pl_crest_flame.png new file mode 100644 index 0000000..d60c6a3 Binary files /dev/null and b/pixellab_src/pl_hawk/pl_crest_flame.png differ diff --git a/pixellab_src/pl_hawk/pl_hawk_headband.json b/pixellab_src/pl_hawk/pl_hawk_headband.json new file mode 100644 index 0000000..c7580db --- /dev/null +++ b/pixellab_src/pl_hawk/pl_hawk_headband.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a thick gold cloth headband with a dark outline tied around its forehead, with two short knot ends fluttering out to the right, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009156441820992364 + } +} diff --git a/pixellab_src/pl_hawk/pl_hawk_headband.png b/pixellab_src/pl_hawk/pl_hawk_headband.png new file mode 100644 index 0000000..f93b720 Binary files /dev/null and b/pixellab_src/pl_hawk/pl_hawk_headband.png differ diff --git a/pixellab_src/pl_hawk/pl_tail_storm.json b/pixellab_src/pl_hawk/pl_tail_storm.json new file mode 100644 index 0000000..2a520f9 --- /dev/null +++ b/pixellab_src/pl_hawk/pl_tail_storm.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add tail feathers crackling with bright yellow lightning sticking out on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.011546242449018692 + } +} diff --git a/pixellab_src/pl_hawk/pl_tail_storm.png b/pixellab_src/pl_hawk/pl_tail_storm.png new file mode 100644 index 0000000..85b7a82 Binary files /dev/null and b/pixellab_src/pl_hawk/pl_tail_storm.png differ diff --git a/pixellab_src/pl_hawk/pl_wings_storm.json b/pixellab_src/pl_hawk/pl_wings_storm.json new file mode 100644 index 0000000..ad0e46e --- /dev/null +++ b/pixellab_src/pl_hawk/pl_wings_storm.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a pair of small wings shaped like jagged zigzag bright yellow lightning bolts, spread out from behind its shoulders, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009655291530821059 + } +} diff --git a/pixellab_src/pl_hawk/pl_wings_storm.png b/pixellab_src/pl_hawk/pl_wings_storm.png new file mode 100644 index 0000000..9a134e4 Binary files /dev/null and b/pixellab_src/pl_hawk/pl_wings_storm.png differ diff --git a/pixellab_src/pl_imp/base.json b/pixellab_src/pl_imp/base.json new file mode 100644 index 0000000..378dc57 --- /dev/null +++ b/pixellab_src/pl_imp/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "small mischievous imp creature standing upright, slightly hunched, bright teal skin, completely bald egg-shaped head with smooth sides and no ears at all, sly narrow eyes, very wide toothy grin with two tiny fangs, pointed chin, long thin arms with three-fingered hands, skinny legs with big flat feet, crimson spade-shaped mark on its belly, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 40, + "height": 40 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 317 + }, + "usage": { + "type": "usd", + "usd": 0.008241831832461887 + } +} diff --git a/pixellab_src/pl_imp/base.png b/pixellab_src/pl_imp/base.png new file mode 100644 index 0000000..5fee751 Binary files /dev/null and b/pixellab_src/pl_imp/base.png differ diff --git a/pixellab_src/pl_imp/base_raw.png b/pixellab_src/pl_imp/base_raw.png new file mode 100644 index 0000000..21e8fb8 Binary files /dev/null and b/pixellab_src/pl_imp/base_raw.png differ diff --git a/pixellab_src/pl_imp/pl_coils_electric.json b/pixellab_src/pl_imp/pl_coils_electric.json new file mode 100644 index 0000000..e6dc9dc --- /dev/null +++ b/pixellab_src/pl_imp/pl_coils_electric.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add two small gold coil prongs sticking up from behind its shoulders, crackling with bright yellow electric sparks, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008433530542585586 + } +} diff --git a/pixellab_src/pl_imp/pl_coils_electric.png b/pixellab_src/pl_imp/pl_coils_electric.png new file mode 100644 index 0000000..47e01f6 Binary files /dev/null and b/pixellab_src/pl_imp/pl_coils_electric.png differ diff --git a/pixellab_src/pl_imp/pl_ears_bolt.json b/pixellab_src/pl_imp/pl_ears_bolt.json new file mode 100644 index 0000000..01b6b21 --- /dev/null +++ b/pixellab_src/pl_imp/pl_ears_bolt.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add two big zigzag bright yellow lightning bolt shaped ears growing out of the top sides of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.0077951335112253824 + } +} diff --git a/pixellab_src/pl_imp/pl_ears_bolt.png b/pixellab_src/pl_imp/pl_ears_bolt.png new file mode 100644 index 0000000..5edb895 Binary files /dev/null and b/pixellab_src/pl_imp/pl_ears_bolt.png differ diff --git a/pixellab_src/pl_imp/pl_imp_halo.json b/pixellab_src/pl_imp/pl_imp_halo.json new file mode 100644 index 0000000..7e802ce --- /dev/null +++ b/pixellab_src/pl_imp/pl_imp_halo.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a thin glowing gold halo ring floating just above its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.011542788982391358 + } +} diff --git a/pixellab_src/pl_imp/pl_imp_halo.png b/pixellab_src/pl_imp/pl_imp_halo.png new file mode 100644 index 0000000..04cd397 Binary files /dev/null and b/pixellab_src/pl_imp/pl_imp_halo.png differ diff --git a/pixellab_src/pl_imp/pl_tail_lightning.json b/pixellab_src/pl_imp/pl_tail_lightning.json new file mode 100644 index 0000000..4149e0c --- /dev/null +++ b/pixellab_src/pl_imp/pl_tail_lightning.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a zigzag bright yellow lightning bolt shaped tail sticking up on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008408881690767075 + } +} diff --git a/pixellab_src/pl_imp/pl_tail_lightning.png b/pixellab_src/pl_imp/pl_tail_lightning.png new file mode 100644 index 0000000..a8ef6d0 Binary files /dev/null and b/pixellab_src/pl_imp/pl_tail_lightning.png differ diff --git a/pixellab_src/pl_lizard/base.json b/pixellab_src/pl_lizard/base.json new file mode 100644 index 0000000..9d02c79 --- /dev/null +++ b/pixellab_src/pl_lizard/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "small slender tailless gecko creature crouching on four splayed legs, seen from the front facing the viewer, rounded head with huge bulging round eyes and a wide smiling mouth, round sticky toe pads on its feet, a row of small crimson dots along its sides, pale belly, bright teal skin, its rear is hidden behind its body, no tail at all, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south", + "seed": 734 + }, + "usage": { + "type": "usd", + "usd": 0.010209760109583537 + } +} diff --git a/pixellab_src/pl_lizard/base.png b/pixellab_src/pl_lizard/base.png new file mode 100644 index 0000000..2250d6a Binary files /dev/null and b/pixellab_src/pl_lizard/base.png differ diff --git a/pixellab_src/pl_lizard/base_raw.png b/pixellab_src/pl_lizard/base_raw.png new file mode 100644 index 0000000..3c563ec Binary files /dev/null and b/pixellab_src/pl_lizard/base_raw.png differ diff --git a/pixellab_src/pl_lizard/pl_frill_neck.json b/pixellab_src/pl_lizard/pl_frill_neck.json new file mode 100644 index 0000000..8c45d7e --- /dev/null +++ b/pixellab_src/pl_lizard/pl_frill_neck.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a crimson frilled lizard neck frill, one round fan of crimson skin with dark ribs spread open behind its head like a small umbrella, compact, only a bit wider than its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.011213760746849908 + } +} diff --git a/pixellab_src/pl_lizard/pl_frill_neck.png b/pixellab_src/pl_lizard/pl_frill_neck.png new file mode 100644 index 0000000..919e35e Binary files /dev/null and b/pixellab_src/pl_lizard/pl_frill_neck.png differ diff --git a/pixellab_src/pl_lizard/pl_snowcap.json b/pixellab_src/pl_lizard/pl_snowcap.json new file mode 100644 index 0000000..1a2e31a --- /dev/null +++ b/pixellab_src/pl_lizard/pl_snowcap.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small cap of pale icy blue snow and ice crystals sitting on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00781151032447815 + } +} diff --git a/pixellab_src/pl_lizard/pl_snowcap.png b/pixellab_src/pl_lizard/pl_snowcap.png new file mode 100644 index 0000000..6e282a0 Binary files /dev/null and b/pixellab_src/pl_lizard/pl_snowcap.png differ diff --git a/pixellab_src/pl_lizard/pl_spines_toxic.json b/pixellab_src/pl_lizard/pl_spines_toxic.json new file mode 100644 index 0000000..9ca7f43 --- /dev/null +++ b/pixellab_src/pl_lizard/pl_spines_toxic.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a short row of five sharp crimson spines sticking up from behind its head, each spine tipped with a gold venom drop, nothing else, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00770892694261339 + } +} diff --git a/pixellab_src/pl_lizard/pl_spines_toxic.png b/pixellab_src/pl_lizard/pl_spines_toxic.png new file mode 100644 index 0000000..ffe86ef Binary files /dev/null and b/pixellab_src/pl_lizard/pl_spines_toxic.png differ diff --git a/pixellab_src/pl_lizard/pl_tail_lightning_lizard.json b/pixellab_src/pl_lizard/pl_tail_lightning_lizard.json new file mode 100644 index 0000000..abc5dd8 --- /dev/null +++ b/pixellab_src/pl_lizard/pl_tail_lightning_lizard.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a long thin teal lizard tail starting at its hip and curving out on the right side, crackling with bright yellow lightning bolts along it, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007716657373640272 + } +} diff --git a/pixellab_src/pl_lizard/pl_tail_lightning_lizard.png b/pixellab_src/pl_lizard/pl_tail_lightning_lizard.png new file mode 100644 index 0000000..5ef1692 Binary files /dev/null and b/pixellab_src/pl_lizard/pl_tail_lightning_lizard.png differ diff --git a/pixellab_src/pl_mochi/base.json b/pixellab_src/pl_mochi/base.json new file mode 100644 index 0000000..92ca101 --- /dev/null +++ b/pixellab_src/pl_mochi/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "soft squashed dumpling creature shaped like a wide flattened rice cake, a small pinched twist of dough on its top center, sleepy half-closed crescent eyes, tiny crimson blush marks, small smiling mouth, two tiny stub feet peeking out at the bottom, no arms, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south", + "seed": 401 + }, + "usage": { + "type": "generations", + "generations": 1.0 + } +} diff --git a/pixellab_src/pl_mochi/base.png b/pixellab_src/pl_mochi/base.png new file mode 100644 index 0000000..2331402 Binary files /dev/null and b/pixellab_src/pl_mochi/base.png differ diff --git a/pixellab_src/pl_mochi/base_raw.png b/pixellab_src/pl_mochi/base_raw.png new file mode 100644 index 0000000..c3b0ecb Binary files /dev/null and b/pixellab_src/pl_mochi/base_raw.png differ diff --git a/pixellab_src/pl_mochi/pl_flower_back.json b/pixellab_src/pl_mochi/pl_flower_back.json new file mode 100644 index 0000000..1657c1b --- /dev/null +++ b/pixellab_src/pl_mochi/pl_flower_back.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a big crimson flower with a gold center blooming behind it, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.011016767740249634 + } +} diff --git a/pixellab_src/pl_mochi/pl_flower_back.png b/pixellab_src/pl_mochi/pl_flower_back.png new file mode 100644 index 0000000..926cb46 Binary files /dev/null and b/pixellab_src/pl_mochi/pl_flower_back.png differ diff --git a/pixellab_src/pl_mochi/pl_mochi_halo.json b/pixellab_src/pl_mochi/pl_mochi_halo.json new file mode 100644 index 0000000..22f0b4b --- /dev/null +++ b/pixellab_src/pl_mochi/pl_mochi_halo.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a thin glowing gold halo ring floating above its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008262450774510701 + } +} diff --git a/pixellab_src/pl_mochi/pl_mochi_halo.png b/pixellab_src/pl_mochi/pl_mochi_halo.png new file mode 100644 index 0000000..f809344 Binary files /dev/null and b/pixellab_src/pl_mochi/pl_mochi_halo.png differ diff --git a/pixellab_src/pl_mochi/pl_sprout_leaf.json b/pixellab_src/pl_mochi/pl_sprout_leaf.json new file mode 100644 index 0000000..535c54b --- /dev/null +++ b/pixellab_src/pl_mochi/pl_sprout_leaf.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small gold leaf sprout with two leaves growing from the top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00859204641977946 + } +} diff --git a/pixellab_src/pl_mochi/pl_sprout_leaf.png b/pixellab_src/pl_mochi/pl_sprout_leaf.png new file mode 100644 index 0000000..dc56d1d Binary files /dev/null and b/pixellab_src/pl_mochi/pl_sprout_leaf.png differ diff --git a/pixellab_src/pl_mochi/pl_tail_curly.json b/pixellab_src/pl_mochi/pl_tail_curly.json new file mode 100644 index 0000000..02b0b0e --- /dev/null +++ b/pixellab_src/pl_mochi/pl_tail_curly.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a short curly teal tail curling up on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00873938759167989 + } +} diff --git a/pixellab_src/pl_mochi/pl_tail_curly.png b/pixellab_src/pl_mochi/pl_tail_curly.png new file mode 100644 index 0000000..ed091f8 Binary files /dev/null and b/pixellab_src/pl_mochi/pl_tail_curly.png differ diff --git a/pixellab_src/pl_monk/base.json b/pixellab_src/pl_monk/base.json new file mode 100644 index 0000000..d30ef65 --- /dev/null +++ b/pixellab_src/pl_monk/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "small upright martial artist monk creature standing calmly with palms pressed together in front of its chest, big round head with a short blunt animal muzzle and a dark button nose, calm determined half-closed eyes under thick crimson brow marks, small round animal ears on the sides of its head, slim body with a crimson sash tied around its waist, forearms and hands wrapped in crimson cloth hand wraps, short sturdy legs with bare three-toed feet, bald smooth head, no hair, no tail, nothing behind it, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 613 + }, + "usage": { + "type": "usd", + "usd": 0.007854612085554335 + } +} diff --git a/pixellab_src/pl_monk/base.png b/pixellab_src/pl_monk/base.png new file mode 100644 index 0000000..e369794 Binary files /dev/null and b/pixellab_src/pl_monk/base.png differ diff --git a/pixellab_src/pl_monk/base_raw.png b/pixellab_src/pl_monk/base_raw.png new file mode 100644 index 0000000..250e6e6 Binary files /dev/null and b/pixellab_src/pl_monk/base_raw.png differ diff --git a/pixellab_src/pl_monk/pl_cape_short.json b/pixellab_src/pl_monk/pl_cape_short.json new file mode 100644 index 0000000..337c7a5 --- /dev/null +++ b/pixellab_src/pl_monk/pl_cape_short.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a short gold cape draped from its shoulders behind its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008199535210927329 + } +} diff --git a/pixellab_src/pl_monk/pl_cape_short.png b/pixellab_src/pl_monk/pl_cape_short.png new file mode 100644 index 0000000..bb8b3d6 Binary files /dev/null and b/pixellab_src/pl_monk/pl_cape_short.png differ diff --git a/pixellab_src/pl_monk/pl_scarf_long.json b/pixellab_src/pl_monk/pl_scarf_long.json new file mode 100644 index 0000000..93d8906 --- /dev/null +++ b/pixellab_src/pl_monk/pl_scarf_long.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a long crimson scarf wrapped around its neck, with its long end trailing out behind it to the right, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00850315202607049 + } +} diff --git a/pixellab_src/pl_monk/pl_scarf_long.png b/pixellab_src/pl_monk/pl_scarf_long.png new file mode 100644 index 0000000..38b470c Binary files /dev/null and b/pixellab_src/pl_monk/pl_scarf_long.png differ diff --git a/pixellab_src/pl_monk/pl_tail_wrapped.json b/pixellab_src/pl_monk/pl_tail_wrapped.json new file mode 100644 index 0000000..3537443 --- /dev/null +++ b/pixellab_src/pl_monk/pl_tail_wrapped.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a long teal tail wrapped in crimson bandage strips, starting at its lower back and curling up on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007768456167644925 + } +} diff --git a/pixellab_src/pl_monk/pl_tail_wrapped.png b/pixellab_src/pl_monk/pl_tail_wrapped.png new file mode 100644 index 0000000..812e2a3 Binary files /dev/null and b/pixellab_src/pl_monk/pl_tail_wrapped.png differ diff --git a/pixellab_src/pl_monk/pl_topknot.json b/pixellab_src/pl_monk/pl_topknot.json new file mode 100644 index 0000000..a3f56f4 --- /dev/null +++ b/pixellab_src/pl_monk/pl_topknot.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small teal topknot of hair on top of its head, tied with a crimson band, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.011284227742089165 + } +} diff --git a/pixellab_src/pl_monk/pl_topknot.png b/pixellab_src/pl_monk/pl_topknot.png new file mode 100644 index 0000000..7820ef5 Binary files /dev/null and b/pixellab_src/pl_monk/pl_topknot.png differ diff --git a/pixellab_src/pl_owl/base.json b/pixellab_src/pl_owl/base.json new file mode 100644 index 0000000..53d93e5 --- /dev/null +++ b/pixellab_src/pl_owl/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "pear-shaped owl-like bird sitting upright, enormous round staring eyes ringed in crimson, two long ear tufts that curl into spirals at the tips, tiny hooked beak, three small crimson crescent moon marks on its chest, folded wings wrapped around its sides like a cloak, short stubby talons, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south", + "seed": 411 + }, + "usage": { + "type": "usd", + "usd": 0.006684374809265137 + } +} diff --git a/pixellab_src/pl_owl/base.png b/pixellab_src/pl_owl/base.png new file mode 100644 index 0000000..6591b29 Binary files /dev/null and b/pixellab_src/pl_owl/base.png differ diff --git a/pixellab_src/pl_owl/base_raw.png b/pixellab_src/pl_owl/base_raw.png new file mode 100644 index 0000000..e1a69d5 Binary files /dev/null and b/pixellab_src/pl_owl/base_raw.png differ diff --git a/pixellab_src/pl_owl/pl_crown_bluefire.json b/pixellab_src/pl_owl/pl_crown_bluefire.json new file mode 100644 index 0000000..41a9bf9 --- /dev/null +++ b/pixellab_src/pl_owl/pl_crown_bluefire.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small cluster of bright blue flames burning on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008386059257719252 + } +} diff --git a/pixellab_src/pl_owl/pl_crown_bluefire.png b/pixellab_src/pl_owl/pl_crown_bluefire.png new file mode 100644 index 0000000..ec473b3 Binary files /dev/null and b/pixellab_src/pl_owl/pl_crown_bluefire.png differ diff --git a/pixellab_src/pl_owl/pl_owl_halo.json b/pixellab_src/pl_owl/pl_owl_halo.json new file mode 100644 index 0000000..1c75446 --- /dev/null +++ b/pixellab_src/pl_owl/pl_owl_halo.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small thin gold halo ring floating high above its head, not touching the head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009244155989752876 + } +} diff --git a/pixellab_src/pl_owl/pl_owl_halo.png b/pixellab_src/pl_owl/pl_owl_halo.png new file mode 100644 index 0000000..caba2b5 Binary files /dev/null and b/pixellab_src/pl_owl/pl_owl_halo.png differ diff --git a/pixellab_src/pl_owl/pl_shroud_ghostfire.json b/pixellab_src/pl_owl/pl_shroud_ghostfire.json new file mode 100644 index 0000000..e27e579 --- /dev/null +++ b/pixellab_src/pl_owl/pl_shroud_ghostfire.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add glowing purple ghostly flames rising from behind its shoulders, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007713085333506267 + } +} diff --git a/pixellab_src/pl_owl/pl_shroud_ghostfire.png b/pixellab_src/pl_owl/pl_shroud_ghostfire.png new file mode 100644 index 0000000..425ea29 Binary files /dev/null and b/pixellab_src/pl_owl/pl_shroud_ghostfire.png differ diff --git a/pixellab_src/pl_owl/pl_tail_ghostfire.json b/pixellab_src/pl_owl/pl_tail_ghostfire.json new file mode 100644 index 0000000..56dd963 --- /dev/null +++ b/pixellab_src/pl_owl/pl_tail_ghostfire.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a wispy tail of glowing purple ghostly flame curling out on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008242531723446316 + } +} diff --git a/pixellab_src/pl_owl/pl_tail_ghostfire.png b/pixellab_src/pl_owl/pl_tail_ghostfire.png new file mode 100644 index 0000000..e8b67a1 Binary files /dev/null and b/pixellab_src/pl_owl/pl_tail_ghostfire.png differ diff --git a/pixellab_src/pl_pebble/base.json b/pixellab_src/pl_pebble/base.json new file mode 100644 index 0000000..d0537da --- /dev/null +++ b/pixellab_src/pl_pebble/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "round chunky boulder creature, its whole body is one bright saturated teal stone with a few flat chipped facets and thin dark teal cracks, stern determined face with one thick crimson unibrow ridge and a small frown, two short stubby teal feet at the bottom, no arms, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south", + "seed": 502 + }, + "usage": { + "type": "usd", + "usd": 0.0075424768659803606 + } +} diff --git a/pixellab_src/pl_pebble/base.png b/pixellab_src/pl_pebble/base.png new file mode 100644 index 0000000..a7129cd Binary files /dev/null and b/pixellab_src/pl_pebble/base.png differ diff --git a/pixellab_src/pl_pebble/base_raw.png b/pixellab_src/pl_pebble/base_raw.png new file mode 100644 index 0000000..7f13081 Binary files /dev/null and b/pixellab_src/pl_pebble/base_raw.png differ diff --git a/pixellab_src/pl_pebble/pl_crystal_cluster.json b/pixellab_src/pl_pebble/pl_crystal_cluster.json new file mode 100644 index 0000000..30bcfee --- /dev/null +++ b/pixellab_src/pl_pebble/pl_crystal_cluster.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add two clusters of gold crystals jutting out diagonally from behind its back on the left and right sides, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007932556125852797 + } +} diff --git a/pixellab_src/pl_pebble/pl_crystal_cluster.png b/pixellab_src/pl_pebble/pl_crystal_cluster.png new file mode 100644 index 0000000..afc76b2 Binary files /dev/null and b/pixellab_src/pl_pebble/pl_crystal_cluster.png differ diff --git a/pixellab_src/pl_pebble/pl_crystals_head.json b/pixellab_src/pl_pebble/pl_crystals_head.json new file mode 100644 index 0000000..d7054ae --- /dev/null +++ b/pixellab_src/pl_pebble/pl_crystals_head.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small cluster of gold crystal spikes growing from the top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007605802588992649 + } +} diff --git a/pixellab_src/pl_pebble/pl_crystals_head.png b/pixellab_src/pl_pebble/pl_crystals_head.png new file mode 100644 index 0000000..ecd0f03 Binary files /dev/null and b/pixellab_src/pl_pebble/pl_crystals_head.png differ diff --git a/pixellab_src/pl_seal/base.json b/pixellab_src/pl_seal/base.json new file mode 100644 index 0000000..380de77 --- /dev/null +++ b/pixellab_src/pl_seal/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "chubby otter-like seal pup sitting upright, pear-shaped plump body, broad flat front flippers resting on its belly, wide flat muzzle with whisker dots and a tiny dark nose, crimson stripe markings across its shoulders, pale belly patch, rear flippers tucked under, no ears, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 40, + "height": 40 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 51 + }, + "usage": { + "type": "usd", + "usd": 0.009559364239374797 + } +} diff --git a/pixellab_src/pl_seal/base.png b/pixellab_src/pl_seal/base.png new file mode 100644 index 0000000..8b69803 Binary files /dev/null and b/pixellab_src/pl_seal/base.png differ diff --git a/pixellab_src/pl_seal/base_raw.png b/pixellab_src/pl_seal/base_raw.png new file mode 100644 index 0000000..067d383 Binary files /dev/null and b/pixellab_src/pl_seal/base_raw.png differ diff --git a/pixellab_src/pl_seal/pl_horn_ice.json b/pixellab_src/pl_seal/pl_horn_ice.json new file mode 100644 index 0000000..e7eef5f --- /dev/null +++ b/pixellab_src/pl_seal/pl_horn_ice.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a single pale icy blue ice crystal horn on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.010622908380296496 + } +} diff --git a/pixellab_src/pl_seal/pl_horn_ice.png b/pixellab_src/pl_seal/pl_horn_ice.png new file mode 100644 index 0000000..01ab604 Binary files /dev/null and b/pixellab_src/pl_seal/pl_horn_ice.png differ diff --git a/pixellab_src/pl_seal/pl_icicles_back.json b/pixellab_src/pl_seal/pl_icicles_back.json new file mode 100644 index 0000000..7f3cc41 --- /dev/null +++ b/pixellab_src/pl_seal/pl_icicles_back.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small fan of pale icy blue icicles sticking out from its back on the right side, behind its shoulders, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008393628385331895 + } +} diff --git a/pixellab_src/pl_seal/pl_icicles_back.png b/pixellab_src/pl_seal/pl_icicles_back.png new file mode 100644 index 0000000..5a853eb Binary files /dev/null and b/pixellab_src/pl_seal/pl_icicles_back.png differ diff --git a/pixellab_src/pl_seal/pl_seal_shell.json b/pixellab_src/pl_seal/pl_seal_shell.json new file mode 100644 index 0000000..276f3ce --- /dev/null +++ b/pixellab_src/pl_seal/pl_seal_shell.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add one small gold spiral seashell stuck to the middle of its back on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.010229756938086615 + } +} diff --git a/pixellab_src/pl_seal/pl_seal_shell.png b/pixellab_src/pl_seal/pl_seal_shell.png new file mode 100644 index 0000000..7cb7eb3 Binary files /dev/null and b/pixellab_src/pl_seal/pl_seal_shell.png differ diff --git a/pixellab_src/pl_seal/pl_tail_ice_shard.json b/pixellab_src/pl_seal/pl_tail_ice_shard.json new file mode 100644 index 0000000..e3a75c7 --- /dev/null +++ b/pixellab_src/pl_seal/pl_tail_ice_shard.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a short teal tail ending in a pale icy blue ice shard, sticking out on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00912098413043552 + } +} diff --git a/pixellab_src/pl_seal/pl_tail_ice_shard.png b/pixellab_src/pl_seal/pl_tail_ice_shard.png new file mode 100644 index 0000000..bca673e Binary files /dev/null and b/pixellab_src/pl_seal/pl_tail_ice_shard.png differ diff --git a/pixellab_src/pl_slime/base.json b/pixellab_src/pl_slime/base.json new file mode 100644 index 0000000..374c4c3 --- /dev/null +++ b/pixellab_src/pl_slime/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "small gooey slime creature shaped like a squat teardrop with a pointed tip leaning to one side, thick goo drips running down its sides and pooling at its base, one eye winking and a lopsided cheeky grin showing a single crimson tongue, crimson freckle spots on its cheeks, no arms, no legs, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south", + "seed": 301 + }, + "usage": { + "type": "generations", + "generations": 1.0 + } +} diff --git a/pixellab_src/pl_slime/base.png b/pixellab_src/pl_slime/base.png new file mode 100644 index 0000000..1545032 Binary files /dev/null and b/pixellab_src/pl_slime/base.png differ diff --git a/pixellab_src/pl_slime/base_raw.png b/pixellab_src/pl_slime/base_raw.png new file mode 100644 index 0000000..7845e84 Binary files /dev/null and b/pixellab_src/pl_slime/base_raw.png differ diff --git a/pixellab_src/pl_slime/pl_bubbles_toxic.json b/pixellab_src/pl_slime/pl_bubbles_toxic.json new file mode 100644 index 0000000..5b110d7 --- /dev/null +++ b/pixellab_src/pl_slime/pl_bubbles_toxic.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a cluster of round gold bubbles of different sizes rising up from behind its body on both sides, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007215490871005589 + } +} diff --git a/pixellab_src/pl_slime/pl_bubbles_toxic.png b/pixellab_src/pl_slime/pl_bubbles_toxic.png new file mode 100644 index 0000000..c040df3 Binary files /dev/null and b/pixellab_src/pl_slime/pl_bubbles_toxic.png differ diff --git a/pixellab_src/pl_slime/pl_mushroom_cap.json b/pixellab_src/pl_slime/pl_mushroom_cap.json new file mode 100644 index 0000000..b214e1c --- /dev/null +++ b/pixellab_src/pl_slime/pl_mushroom_cap.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small crimson mushroom cap with pale cream spots sitting on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "generations", + "generations": 1.0 + } +} diff --git a/pixellab_src/pl_slime/pl_mushroom_cap.png b/pixellab_src/pl_slime/pl_mushroom_cap.png new file mode 100644 index 0000000..0bfad03 Binary files /dev/null and b/pixellab_src/pl_slime/pl_mushroom_cap.png differ diff --git a/pixellab_src/pl_slime/pl_slime_spikes_poison.json b/pixellab_src/pl_slime/pl_slime_spikes_poison.json new file mode 100644 index 0000000..faa200a --- /dev/null +++ b/pixellab_src/pl_slime/pl_slime_spikes_poison.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a fan of five large sharp gold spikes sticking up from behind its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.0076432718965742325 + } +} diff --git a/pixellab_src/pl_slime/pl_slime_spikes_poison.png b/pixellab_src/pl_slime/pl_slime_spikes_poison.png new file mode 100644 index 0000000..ff1b1b7 Binary files /dev/null and b/pixellab_src/pl_slime/pl_slime_spikes_poison.png differ diff --git a/pixellab_src/pl_snake/base.json b/pixellab_src/pl_snake/base.json new file mode 100644 index 0000000..2d74d16 --- /dev/null +++ b/pixellab_src/pl_snake/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "thick snake creature coiled in a tall spiral pile with its head raised high, broad wedge-shaped head with a blunt square snout and heavy brow ridges, crimson diamond pattern along its coils, pale banded underbelly, thin tail tip resting on the right side, no hood, no rattle, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 61 + }, + "usage": { + "type": "usd", + "usd": 0.0075322285228305395 + } +} diff --git a/pixellab_src/pl_snake/base.png b/pixellab_src/pl_snake/base.png new file mode 100644 index 0000000..7b4a2fc Binary files /dev/null and b/pixellab_src/pl_snake/base.png differ diff --git a/pixellab_src/pl_snake/base_raw.png b/pixellab_src/pl_snake/base_raw.png new file mode 100644 index 0000000..93f0aba Binary files /dev/null and b/pixellab_src/pl_snake/base_raw.png differ diff --git a/pixellab_src/pl_snake/pl_hood_cobra.json b/pixellab_src/pl_snake/pl_hood_cobra.json new file mode 100644 index 0000000..35d8fad --- /dev/null +++ b/pixellab_src/pl_snake/pl_hood_cobra.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small crimson cobra hood flaring out just behind its neck, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00776524575551351 + } +} diff --git a/pixellab_src/pl_snake/pl_hood_cobra.png b/pixellab_src/pl_snake/pl_hood_cobra.png new file mode 100644 index 0000000..3878537 Binary files /dev/null and b/pixellab_src/pl_snake/pl_hood_cobra.png differ diff --git a/pixellab_src/pl_snake/pl_spikes_frill.json b/pixellab_src/pl_snake/pl_spikes_frill.json new file mode 100644 index 0000000..49f8f49 --- /dev/null +++ b/pixellab_src/pl_snake/pl_spikes_frill.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a row of large crimson spikes sticking far out from the back of its neck on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007791194968753391 + } +} diff --git a/pixellab_src/pl_snake/pl_spikes_frill.png b/pixellab_src/pl_snake/pl_spikes_frill.png new file mode 100644 index 0000000..c28f1c5 Binary files /dev/null and b/pixellab_src/pl_snake/pl_spikes_frill.png differ diff --git a/pixellab_src/pl_snake/pl_tail_rattle.json b/pixellab_src/pl_snake/pl_tail_rattle.json new file mode 100644 index 0000000..091eb55 --- /dev/null +++ b/pixellab_src/pl_snake/pl_tail_rattle.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "turn the tip of its curled tail on the right into a gold rattlesnake rattle made of three rounded segments, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 4, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009106588496102228 + } +} diff --git a/pixellab_src/pl_snake/pl_tail_rattle.png b/pixellab_src/pl_snake/pl_tail_rattle.png new file mode 100644 index 0000000..4bf6796 Binary files /dev/null and b/pixellab_src/pl_snake/pl_tail_rattle.png differ diff --git a/pixellab_src/pl_sprite/base.json b/pixellab_src/pl_sprite/base.json new file mode 100644 index 0000000..6d5430e --- /dev/null +++ b/pixellab_src/pl_sprite/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "tiny fairy imp creature hovering in the air with its short legs dangling, oversized perfectly round smooth bald head with no ears at all, small round body, huge sparkling eyes, small mischievous smile with one tiny fang, stubby little arms with mitten hands held out, a small crimson star marking on its chest, crimson pointed slippers, no wings, no horns, no tail, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 40, + "height": 40 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 733 + }, + "usage": { + "type": "usd", + "usd": 0.007053209622701009 + } +} diff --git a/pixellab_src/pl_sprite/base.png b/pixellab_src/pl_sprite/base.png new file mode 100644 index 0000000..9041527 Binary files /dev/null and b/pixellab_src/pl_sprite/base.png differ diff --git a/pixellab_src/pl_sprite/base_raw.png b/pixellab_src/pl_sprite/base_raw.png new file mode 100644 index 0000000..3bfd5c6 Binary files /dev/null and b/pixellab_src/pl_sprite/base_raw.png differ diff --git a/pixellab_src/pl_sprite/pl_cape_frost.json b/pixellab_src/pl_sprite/pl_cape_frost.json new file mode 100644 index 0000000..08870df --- /dev/null +++ b/pixellab_src/pl_sprite/pl_cape_frost.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a short jagged cape of pale icy blue ice crystals hanging from its shoulders and spreading out behind its body on both sides, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007821742879019843 + } +} diff --git a/pixellab_src/pl_sprite/pl_cape_frost.png b/pixellab_src/pl_sprite/pl_cape_frost.png new file mode 100644 index 0000000..ce6d9a1 Binary files /dev/null and b/pixellab_src/pl_sprite/pl_cape_frost.png differ diff --git a/pixellab_src/pl_sprite/pl_ears_flame.json b/pixellab_src/pl_sprite/pl_ears_flame.json new file mode 100644 index 0000000..ebf403d --- /dev/null +++ b/pixellab_src/pl_sprite/pl_ears_flame.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add two pointed ears made of orange and yellow flames on the top sides of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007806698931588067 + } +} diff --git a/pixellab_src/pl_sprite/pl_ears_flame.png b/pixellab_src/pl_sprite/pl_ears_flame.png new file mode 100644 index 0000000..3563a98 Binary files /dev/null and b/pixellab_src/pl_sprite/pl_ears_flame.png differ diff --git a/pixellab_src/pl_sprite/pl_horns_ember.json b/pixellab_src/pl_sprite/pl_horns_ember.json new file mode 100644 index 0000000..4c29543 --- /dev/null +++ b/pixellab_src/pl_sprite/pl_horns_ember.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add two small stubby teal horns on top of its head with small orange and yellow flames burning at their tips, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009262786441379123 + } +} diff --git a/pixellab_src/pl_sprite/pl_horns_ember.png b/pixellab_src/pl_sprite/pl_horns_ember.png new file mode 100644 index 0000000..12b4441 Binary files /dev/null and b/pixellab_src/pl_sprite/pl_horns_ember.png differ diff --git a/pixellab_src/pl_sprite/pl_tail_bluefire_wisp.json b/pixellab_src/pl_sprite/pl_tail_bluefire_wisp.json new file mode 100644 index 0000000..dab77ce --- /dev/null +++ b/pixellab_src/pl_sprite/pl_tail_bluefire_wisp.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a short wispy tail of bright deep blue fire with a violet-blue core, starting at its lower back and flicking up on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.011745978699790108 + } +} diff --git a/pixellab_src/pl_sprite/pl_tail_bluefire_wisp.png b/pixellab_src/pl_sprite/pl_tail_bluefire_wisp.png new file mode 100644 index 0000000..a43aea9 Binary files /dev/null and b/pixellab_src/pl_sprite/pl_tail_bluefire_wisp.png differ diff --git a/pixellab_src/pl_wisp/base.json b/pixellab_src/pl_wisp/base.json new file mode 100644 index 0000000..e2401f6 --- /dev/null +++ b/pixellab_src/pl_wisp/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "small floating ghost creature like a droopy hooded sheet, rounded top, body tapering into a wavy ragged trailing bottom that does not touch the ground, two large hollow oval eyes, small open o-shaped mouth, a crimson scarf collar tied around its neck, two tiny stubby nub arms, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south", + "seed": 601 + }, + "usage": { + "type": "usd", + "usd": 0.007996700392829048 + } +} diff --git a/pixellab_src/pl_wisp/base.png b/pixellab_src/pl_wisp/base.png new file mode 100644 index 0000000..3961b35 Binary files /dev/null and b/pixellab_src/pl_wisp/base.png differ diff --git a/pixellab_src/pl_wisp/base_raw.png b/pixellab_src/pl_wisp/base_raw.png new file mode 100644 index 0000000..e1420ca Binary files /dev/null and b/pixellab_src/pl_wisp/base_raw.png differ diff --git a/pixellab_src/pl_wisp/pl_tail_wisp_ghostfire.json b/pixellab_src/pl_wisp/pl_tail_wisp_ghostfire.json new file mode 100644 index 0000000..409828d --- /dev/null +++ b/pixellab_src/pl_wisp/pl_tail_wisp_ghostfire.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a trailing wisp of glowing purple ghostly flames on the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009443331638971965 + } +} diff --git a/pixellab_src/pl_wisp/pl_tail_wisp_ghostfire.png b/pixellab_src/pl_wisp/pl_tail_wisp_ghostfire.png new file mode 100644 index 0000000..5fc5e9e Binary files /dev/null and b/pixellab_src/pl_wisp/pl_tail_wisp_ghostfire.png differ diff --git a/pixellab_src/pl_wisp/pl_wings_bat.json b/pixellab_src/pl_wisp/pl_wings_bat.json new file mode 100644 index 0000000..2008f72 --- /dev/null +++ b/pixellab_src/pl_wisp/pl_wings_bat.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a pair of small compact crimson bat wings spread from its back, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008215370098749796 + } +} diff --git a/pixellab_src/pl_wisp/pl_wings_bat.png b/pixellab_src/pl_wisp/pl_wings_bat.png new file mode 100644 index 0000000..0d23950 Binary files /dev/null and b/pixellab_src/pl_wisp/pl_wings_bat.png differ diff --git a/pixellab_src/pl_wisp/pl_wisp_ghostfire.json b/pixellab_src/pl_wisp/pl_wisp_ghostfire.json new file mode 100644 index 0000000..085d494 --- /dev/null +++ b/pixellab_src/pl_wisp/pl_wisp_ghostfire.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small floating wisp of glowing purple ghostly flame hovering on top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009791300031873916 + } +} diff --git a/pixellab_src/pl_wisp/pl_wisp_ghostfire.png b/pixellab_src/pl_wisp/pl_wisp_ghostfire.png new file mode 100644 index 0000000..61f6a80 Binary files /dev/null and b/pixellab_src/pl_wisp/pl_wisp_ghostfire.png differ diff --git a/pixellab_src/pl_wisp/pl_wisp_orbs_bluefire.json b/pixellab_src/pl_wisp/pl_wisp_orbs_bluefire.json new file mode 100644 index 0000000..665e336 --- /dev/null +++ b/pixellab_src/pl_wisp/pl_wisp_orbs_bluefire.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add two small floating orbs of bright blue flame hovering on both sides of its body, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.00711135114563836 + } +} diff --git a/pixellab_src/pl_wisp/pl_wisp_orbs_bluefire.png b/pixellab_src/pl_wisp/pl_wisp_orbs_bluefire.png new file mode 100644 index 0000000..ff94b54 Binary files /dev/null and b/pixellab_src/pl_wisp/pl_wisp_orbs_bluefire.png differ diff --git a/pixellab_src/pl_worm/base.json b/pixellab_src/pl_worm/base.json new file mode 100644 index 0000000..c6b28de --- /dev/null +++ b/pixellab_src/pl_worm/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "chubby burrowing worm creature poking upright out of the ground, thick soft segmented teal body that is widest at the bottom, blunt rounded snout with a tiny button nose, small sleepy half-closed eyes, thick crimson ring bands around its body, two small stubby shovel-like digging claws on its chest, its lower body bending out to the right in a short round stub, no legs, no antennae, no tail, no dirt, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south", + "seed": 418 + }, + "usage": { + "type": "usd", + "usd": 0.008012065596050687 + } +} diff --git a/pixellab_src/pl_worm/base.png b/pixellab_src/pl_worm/base.png new file mode 100644 index 0000000..652e42b Binary files /dev/null and b/pixellab_src/pl_worm/base.png differ diff --git a/pixellab_src/pl_worm/base_raw.png b/pixellab_src/pl_worm/base_raw.png new file mode 100644 index 0000000..0b1a070 Binary files /dev/null and b/pixellab_src/pl_worm/base_raw.png differ diff --git a/pixellab_src/pl_worm/pl_flower_bud.json b/pixellab_src/pl_worm/pl_flower_bud.json new file mode 100644 index 0000000..6c6fe16 --- /dev/null +++ b/pixellab_src/pl_worm/pl_flower_bud.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a small closed crimson flower bud on a short teal stem with one tiny teal leaf, growing from the top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.009059144099553426 + } +} diff --git a/pixellab_src/pl_worm/pl_flower_bud.png b/pixellab_src/pl_worm/pl_flower_bud.png new file mode 100644 index 0000000..08e4778 Binary files /dev/null and b/pixellab_src/pl_worm/pl_flower_bud.png differ diff --git a/pixellab_src/pl_worm/pl_rocks_dirt.json b/pixellab_src/pl_worm/pl_rocks_dirt.json new file mode 100644 index 0000000..152a9db --- /dev/null +++ b/pixellab_src/pl_worm/pl_rocks_dirt.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a lumpy clump of round gold dirt clods and small pebbles stuck on its back, peeking out over its right shoulder, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.007724657085206773 + } +} diff --git a/pixellab_src/pl_worm/pl_rocks_dirt.png b/pixellab_src/pl_worm/pl_rocks_dirt.png new file mode 100644 index 0000000..d39feaf Binary files /dev/null and b/pixellab_src/pl_worm/pl_rocks_dirt.png differ diff --git a/pixellab_src/pl_worm/pl_tail_splash.json b/pixellab_src/pl_worm/pl_tail_splash.json new file mode 100644 index 0000000..21a359f --- /dev/null +++ b/pixellab_src/pl_worm/pl_tail_splash.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a teal tail coming out of its back end on the right side, ending in a curling gold water splash wave, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.010474376466539172 + } +} diff --git a/pixellab_src/pl_worm/pl_tail_splash.png b/pixellab_src/pl_worm/pl_tail_splash.png new file mode 100644 index 0000000..2402bf0 Binary files /dev/null and b/pixellab_src/pl_worm/pl_tail_splash.png differ diff --git a/pixellab_src/pl_worm/pl_tail_vine.json b/pixellab_src/pl_worm/pl_tail_vine.json new file mode 100644 index 0000000..4ee0ea3 --- /dev/null +++ b/pixellab_src/pl_worm/pl_tail_vine.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a short thick gold leafy vine with three broad leaves, sprouting from the round stub at its lower right and trailing out to the right side, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008835690948698256 + } +} diff --git a/pixellab_src/pl_worm/pl_tail_vine.png b/pixellab_src/pl_worm/pl_tail_vine.png new file mode 100644 index 0000000..5f231bc Binary files /dev/null and b/pixellab_src/pl_worm/pl_tail_vine.png differ diff --git a/pixellab_src/pl_wyrm/base.json b/pixellab_src/pl_wyrm/base.json new file mode 100644 index 0000000..cda3d1e --- /dev/null +++ b/pixellab_src/pl_wyrm/base.json @@ -0,0 +1,20 @@ +{ + "endpoint": "create-image-pixen", + "request": { + "description": "elegant young eastern-style serpent dragon rising in a graceful S-curve, slender long teal body, long narrow snout with two thin drooping crimson whisker barbels, almond-shaped narrow eyes, small crimson scale ridge dots along its spine, pale segmented belly scales, two tiny clawed forelegs near its chest, body ending in a short blunt tail stub on the right side, no horns, no wings, no fins, original cute monster creature design, chibi proportions, teal body with darker teal shading, small crimson details, big expressive eyes, full body, centered, retro handheld game sprite", + "image_size": { + "width": 44, + "height": 44 + }, + "no_background": true, + "outline": "single color black outline", + "detail": "medium detail", + "view": "side", + "direction": "south-west", + "seed": 731 + }, + "usage": { + "type": "usd", + "usd": 0.007901206307941014 + } +} diff --git a/pixellab_src/pl_wyrm/base.png b/pixellab_src/pl_wyrm/base.png new file mode 100644 index 0000000..9c690da Binary files /dev/null and b/pixellab_src/pl_wyrm/base.png differ diff --git a/pixellab_src/pl_wyrm/base_raw.png b/pixellab_src/pl_wyrm/base_raw.png new file mode 100644 index 0000000..6d48c89 Binary files /dev/null and b/pixellab_src/pl_wyrm/base_raw.png differ diff --git a/pixellab_src/pl_wyrm/pl_horns_antler_dragon.json b/pixellab_src/pl_wyrm/pl_horns_antler_dragon.json new file mode 100644 index 0000000..a6135bd --- /dev/null +++ b/pixellab_src/pl_wyrm/pl_horns_antler_dragon.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add a pair of short thick gold dragon antlers, each with two branching prongs, growing from the top of its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 2, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008083348910013836 + } +} diff --git a/pixellab_src/pl_wyrm/pl_horns_antler_dragon.png b/pixellab_src/pl_wyrm/pl_horns_antler_dragon.png new file mode 100644 index 0000000..0dc4877 Binary files /dev/null and b/pixellab_src/pl_wyrm/pl_horns_antler_dragon.png differ diff --git a/pixellab_src/pl_wyrm/pl_pearl_orb.json b/pixellab_src/pl_wyrm/pl_pearl_orb.json new file mode 100644 index 0000000..40eace6 --- /dev/null +++ b/pixellab_src/pl_wyrm/pl_pearl_orb.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "add one single small round shining gold pearl orb resting against the back of its curved neck on the right side, just behind its head, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 3, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008364033275180392 + } +} diff --git a/pixellab_src/pl_wyrm/pl_pearl_orb.png b/pixellab_src/pl_wyrm/pl_pearl_orb.png new file mode 100644 index 0000000..b628e49 Binary files /dev/null and b/pixellab_src/pl_wyrm/pl_pearl_orb.png differ diff --git a/pixellab_src/pl_wyrm/pl_tail_dragon_fin.json b/pixellab_src/pl_wyrm/pl_tail_dragon_fin.json new file mode 100644 index 0000000..11f0bda --- /dev/null +++ b/pixellab_src/pl_wyrm/pl_tail_dragon_fin.json @@ -0,0 +1,15 @@ +{ + "endpoint": "edit-image-pixen", + "request": { + "image": "", + "description": "extend its body into a long teal tail curling up on the right side, ending in a fan-shaped crimson fin, keep everything else exactly the same", + "width": 64, + "height": 64, + "seed": 1, + "no_background": true + }, + "usage": { + "type": "usd", + "usd": 0.008324551158481174 + } +} diff --git a/pixellab_src/pl_wyrm/pl_tail_dragon_fin.png b/pixellab_src/pl_wyrm/pl_tail_dragon_fin.png new file mode 100644 index 0000000..2d14bf8 Binary files /dev/null and b/pixellab_src/pl_wyrm/pl_tail_dragon_fin.png differ diff --git a/preview.py b/preview.py index cb06025..21f277a 100755 --- a/preview.py +++ b/preview.py @@ -1,6 +1,8 @@ #!/usr/bin/env python3 """ -Contact sheets for the sprite part library. Writes PNGs into preview/ (or $PREVIEW_OUT). +Contact sheets for a sprite part library. Writes PNGs into preview/ (or $PREVIEW_OUT). + + python preview.py [--library pixellab|classic] ... # default library: pixellab python preview.py bases # every base creature, bare and lightly varied python preview.py body # one base with markings and a few variations @@ -13,7 +15,7 @@ Contact sheets for the sprite part library. Writes PNGs into preview/ (or $PREVI Options: --markings (default none), --scale N, --type (type ramp) Grid sheets are drawn in three test palettes (dark / light / near-gray), one row block each. -Cells with a red frame triggered "canvas expanded". Set PARTS_DIR to preview another library. +Cells with a red frame triggered "canvas expanded". Set PARTS_DIR to override the library's parts folder. """ import os import random @@ -23,16 +25,27 @@ from pathlib import Path from PIL import Image, ImageDraw import generate_sprite as gs -import sprite_parts as cfg +from sprite_parts import TYPES OUT = Path(os.environ.get("PREVIEW_OUT", "preview")) # set PREVIEW_OUT to keep sheets apart -PARTS = os.environ.get("PARTS_DIR", "parts") +lib = None # registry module, set in main +PARTS = None PALETTES = [("dark", ["#0D47A1", "#FFC107"]), ("light", ["#FFEB3B", "#5D4037"]), ("gray", ["#757575", "#E53935"])] BG = (226, 226, 220, 255) LABEL_H = 9 -BY_NAME = {slot: {p["name"]: p for p in parts} for slot, parts in cfg.SLOTS.items()} -DEFAULT_BODY = "base_fox" +BY_NAME = {} +DEFAULT_BODY = None + + +def use_library(name): + """Point the module state at a registry module.""" + global lib, PARTS, BY_NAME, DEFAULT_BODY + lib = gs.load_library(name) + PARTS = os.environ.get("PARTS_DIR", lib.PARTS_DIR) + BY_NAME = {slot: {p["name"]: p for p in parts} for slot, parts in lib.SLOTS.items()} + names = [b["name"] for b in lib.BODY] + DEFAULT_BODY = "base_fox" if "base_fox" in names else (names[0] if names else None) def P(slot, name): @@ -62,7 +75,7 @@ def allowed(slot, name, chosen): def top_type(slot, name): p = P(slot, name) - return max(cfg.TYPES, key=lambda t: gs.part_weight(p, t)) + return max(TYPES, key=lambda t: gs.part_weight(p, t)) def typed(chosen, ptype): @@ -94,7 +107,7 @@ def sheet(cells, path, ptype=None, markings="none", scale=4, cols=6): return cols = min(cols, len(cells)) rows_per = (len(cells) + cols - 1) // cols - cw, ch = gs.CANVAS, gs.CANVAS + LABEL_H + cw, ch = lib.CANVAS, lib.CANVAS + LABEL_H block_h = rows_per * ch + 12 img = Image.new("RGBA", (cols * cw, block_h * len(PALETTES)), BG) d = ImageDraw.Draw(img) @@ -104,15 +117,15 @@ def sheet(cells, path, ptype=None, markings="none", scale=4, cols=6): for i, (label, chosen) in enumerate(cells): cx, cy = (i % cols) * cw, y0 + 12 + (i // cols) * ch sprite = compose(chosen, markings) - expanded = max(sprite.width + 2, sprite.height + gs.GROUND_MARGIN + 1) > gs.CANVAS - spr = colored(gs.place_on_canvas(sprite), colors, typed(chosen, ptype)) + expanded = max(sprite.width + 2, sprite.height + lib.GROUND_MARGIN + 1) > lib.CANVAS + spr = colored(gs.place_on_canvas(sprite, lib), colors, typed(chosen, ptype)) if spr.size[0] > cw: - spr = spr.crop(((spr.width - cw) // 2, spr.height - gs.CANVAS, (spr.width + cw) // 2, spr.height)) + spr = spr.crop(((spr.width - cw) // 2, spr.height - lib.CANVAS, (spr.width + cw) // 2, spr.height)) img.alpha_composite(spr, (cx, cy)) if expanded: - d.rectangle((cx, cy, cx + cw - 1, cy + gs.CANVAS - 1), outline=(220, 0, 0, 255)) + d.rectangle((cx, cy, cx + cw - 1, cy + lib.CANVAS - 1), outline=(220, 0, 0, 255)) label = f"{label} {sprite.width}x{sprite.height}!" - d.text((cx + 1, cy + gs.CANVAS - 1), label[:19], fill=(40, 40, 40, 255)) + d.text((cx + 1, cy + lib.CANVAS - 1), label[:19], fill=(40, 40, 40, 255)) OUT.mkdir(parents=True, exist_ok=True) img.resize((img.width * scale, img.height * scale), Image.NEAREST).save(path) print(path) @@ -184,12 +197,16 @@ def raw_sheet(items, path, scale=8, cols=6): def variation(b): - """A light, legal variation for a base: first allowed head_top, back and tail in a fixed list.""" + """A light, legal variation for a base: first allowed head_top, back and tail in a fixed list + (any part of the slot if the library has none of the listed names).""" chosen = {"body": b} prefs = {"head_top": ["leaf_sprout", "crest_flame", "gem_forehead", "horn_single"], "back": ["wings_feather_small", "wings_bug", "spikes_back", "dorsal_fin"], "tail": ["tail_flame_tip", "tail_leaf", "tail_fish_fin", "tail_stinger", "tail_wispy", "tail_rattle"]} for slot, names in prefs.items(): + known = BY_NAME.get(slot, {}) + if not any(n in known for n in names): + names = [n for n in known if n != "none"] for n in names: if exists(slot, n) and allowed(slot, n, {**chosen, slot: n}): chosen[slot] = n @@ -198,9 +215,9 @@ def variation(b): def parse_opts(args): - opts, rest, it = {"markings": "none", "scale": None, "type": None}, [], iter(args) + opts, rest, it = {"markings": "none", "scale": None, "type": None, "library": gs.DEFAULT_LIBRARY}, [], iter(args) for a in it: - if a in ("--markings", "--scale", "--type"): + if a in ("--markings", "--scale", "--type", "--library"): opts[a[2:]] = next(it) else: rest.append(a) @@ -209,6 +226,10 @@ def parse_opts(args): def main(argv): opts, args = parse_opts(argv) + if opts["library"] not in gs.LIBRARIES: + print(f"unknown library {opts['library']!r}, choose from {', '.join(gs.LIBRARIES)}") + return + use_library(opts["library"]) scale = int(opts["scale"]) if opts["scale"] else None kw = {"markings": opts["markings"], "scale": scale or 4, "ptype": opts["type"]} if not args: @@ -223,7 +244,7 @@ def main(argv): elif cmd == "body": b = args[1] cells = [("bare", {"body": b}), ("varied", variation(b))] - cells += [(m, {"body": b, "_markings": m}) for m in cfg.MARKINGS if m != "none"] + cells += [(m, {"body": b, "_markings": m}) for m in lib.MARKINGS if m != "none"] sheet(cells, OUT / f"body_{b}.png", **kw) elif cmd == "part": slot, name = args[1], args[2] @@ -258,10 +279,11 @@ def main(argv): groups.append(cur) zoom_sheet(groups, OUT / "zoom.png", scale=scale or 5, markings=opts["markings"], ptype=opts["type"]) elif cmd == "all": - main(["bases"]) - for slot in cfg.SLOTS: - main(["raw", slot]) - main(["slot", slot]) + lflag = ["--library", opts["library"]] + main(lflag + ["bases"]) + for slot in lib.SLOTS: + main(lflag + ["raw", slot]) + main(lflag + ["slot", slot]) else: print(__doc__) diff --git a/sprite_parts.py b/sprite_parts.py index 4b64964..c66e2d9 100644 --- a/sprite_parts.py +++ b/sprite_parts.py @@ -22,6 +22,12 @@ Editing this file changes which parts existing businesses get, since every pick draws from the same seeded random sequence. """ +# Library constants (see generate_sprite.LIBRARIES) +NAME = "classic" +CANVAS = 96 # final sprite size (square) +GROUND_MARGIN = 4 # empty rows under the feet +PARTS_DIR = "parts" + TYPES = [ "normal", "fire", "water", "grass", "electric", "ice", "fighting", "poison", "ground", "flying", "psychic", "bug", "rock", "ghost", "dragon", diff --git a/sprite_parts_pl.py b/sprite_parts_pl.py new file mode 100644 index 0000000..378da8e --- /dev/null +++ b/sprite_parts_pl.py @@ -0,0 +1,217 @@ +""" +Part library generated with PixelLab (64x64 sprites). Same interface as sprite_parts.py. + +The library is described by one JSON spec per base creature in pixellab_library/.json +(schema in pixellab_library.py). The spec says how the art is generated (prompts, seeds), +how parts are extracted, and how they are picked (types, plans, tags). This module turns the +specs into the picking tables generate_sprite.py uses. Only parts that have been extracted +(parts_pl//.png exists) are registered. + +Differences from the classic library: +- Every body is available to every type (`other` defaults to 1); `types` only boosts. +- Parts with a fixed-color ramp ("fixed": "fire", ...) are type-locked: they must list + `types` and have other=0. +- `fits()` keeps every random pick inside the 64x64 canvas, so parts from any body can be + offered to every body without hand-written size deny lists. +""" +import json +from pathlib import Path + +from sprite_parts import MOTIF_PAIRS as CLASSIC_MOTIF_PAIRS +from sprite_parts import PLAN_WEIGHTS as CLASSIC_PLAN_WEIGHTS +from sprite_parts import PLANS, TYPES, TYPE_COLORS, none, part # noqa: F401 (TYPES/TYPE_COLORS re-exported) + +NAME = "pixellab" +CANVAS = 64 +GROUND_MARGIN = 3 +PARTS_DIR = "parts_pl" +SPEC_DIR = Path(__file__).with_name("pixellab_library") + +ALL = PLANS +FEATURE_SLOTS = ("head_top", "back", "tail") +DISABLED_SLOTS = {"aura"} +MAX_FEATURES = 2 +MOTIF_SAME, MOTIF_CLASH = 2.5, 0.08 +# Detailed generated art doesn't take painted-on spots well; markings stay off. +MARKINGS = {"none": {"_other": 1}} +# Weight of an empty slot, per slot. With MAX_FEATURES = 2 and head_top/back picked before tail, +# these give about: head_top 69%, back 55%, tail 51% filled, 2% plain (simulated over all types +# with 31 bodies / 111 parts). Re-tune when the library grows a lot. +NONE_WEIGHT = {"head_top": 10.0, "back": 16.0, "tail": 1.0} +PLAN_FLOOR = 1.0 # every plan stays possible for every type + + +class SpecError(Exception): + pass + + +def load_specs(spec_dir=SPEC_DIR): + specs = [] + for path in sorted(Path(spec_dir).glob("*.json")): + spec = json.loads(path.read_text()) + spec["_path"] = str(path) + specs.append(spec) + return specs + + +def _plans(value): + return list(ALL) if value in (None, "all") else list(value) + + +def _build(specs, parts_dir=PARTS_DIR): + body, slots, motifs = [], {s: [] for s in FEATURE_SLOTS}, {} + deny_from_parts = {} + for s in specs: + name = s["name"] + for p in s.get("parts", []): + if p.get("skip"): + continue + if p.get("fixed") and (p.get("other", 0) or not p.get("types")): + raise SpecError(f"{s['_path']}: {p['name']} uses fixed colors '{p['fixed']}' and must be " + f"type-locked: give it 'types' and other=0") + if not (Path(parts_dir) / p["slot"] / f"{p['name']}.png").exists(): + continue + palette = "fixed" if p.get("fixed") else p.get("palette", "main") + entry = part( + p["name"], _plans(p.get("plans")), p.get("types"), p.get("other", 0.3), + tags=list(p.get("tags", [])) + [f"_slot_{p['slot']}"], requires=p.get("requires", ()), + excludes=p.get("excludes", ()), palette=palette, z=p.get("z"), + desc=p.get("desc", p.get("edit", "")) + f" (from {name})") + entry["source"] = name # the body it was generated on (see attached()) + slots[p["slot"]].append(entry) + if p.get("motif"): + motifs[p["name"]] = p["motif"] + for b in p.get("deny_bodies", []): + deny_from_parts.setdefault(b, []).append(p["name"]) + if not (Path(parts_dir) / "body" / f"{name}.png").exists(): + continue + heads = [s["head"]] if isinstance(s.get("head"), str) else list(s.get("head", [])) + closed = [f"_slot_{slot}" for slot in FEATURE_SLOTS if slot not in s.get("slots", FEATURE_SLOTS)] + body.append(part( + name, [s["plan"]], s.get("types"), s.get("other", 1.0), tags=heads + list(s.get("tags", [])), + excludes=list(s.get("excludes", [])) + closed, deny=list(s.get("deny", [])), desc=s.get("desc", ""))) + for b in body: + b["deny"] += deny_from_parts.get(b["name"], []) + table = {"body": body, "aura": []} + for slot in FEATURE_SLOTS: + table[slot] = [none(other=NONE_WEIGHT[slot])] + slots[slot] + return table, motifs + + +SLOTS, MOTIFS = _build(load_specs()) +BODY = SLOTS["body"] +MOTIF_PAIRS = set(CLASSIC_MOTIF_PAIRS) + +_present = {b["plans"][0] for b in BODY} +PLAN_WEIGHTS = {t: {plan: CLASSIC_PLAN_WEIGHTS[t].get(plan, 0) + PLAN_FLOOR for plan in PLANS if plan in _present} + for t in TYPES} + + +# ------------------------------------------------------------------ canvas fit + attachment + +_extents = {} +_touch = {} + + +def _extent(slot, name): + """(anchors, opaque bbox, opaque mask without marker pixels) of a compiled part, cached.""" + key = (slot, name) + if key not in _extents: + import numpy as np + from PIL import Image + + import generate_sprite as gs # lazy: generate_sprite imports this module by name + img, anchors = gs.load_part(PARTS_DIR, slot, name) + raw = np.array(Image.open(Path(PARTS_DIR) / slot / f"{name}.png").convert("RGBA")) + mask = raw[..., 3] > 0 + for col in gs.MARKERS.values(): + mask &= ~np.all(raw[..., :3] == col, axis=-1) + _extents[key] = (anchors, img.getbbox(), mask) + return _extents[key] + + +MIN_COMPONENT = 6 # smaller specks are ignored by the attachment check + + +def _components(mask): + """8-connected components of a mask with at least MIN_COMPONENT pixels, as (ys, xs) arrays.""" + import numpy as np + seen = np.zeros_like(mask) + h, w = mask.shape + out = [] + for y0, x0 in zip(*np.nonzero(mask)): + if seen[y0, x0]: + continue + seen[y0, x0] = True + stack, comp = [(y0, x0)], [] + while stack: + y, x = stack.pop() + comp.append((y, x)) + for ny in (y - 1, y, y + 1): + for nx in (x - 1, x, x + 1): + if 0 <= ny < h and 0 <= nx < w and mask[ny, nx] and not seen[ny, nx]: + seen[ny, nx] = True + stack.append((ny, nx)) + if len(comp) >= MIN_COMPONENT: + out.append(tuple(np.array(comp).T)) + return out + + +_comps = {} + + +def contacts(body_name, slot, part_name): + """For each sizeable piece of the part (placed at the body's anchor): does it touch the body + (overlap or 8-adjacent)? Tuple of bools, one per piece, in a fixed order.""" + key = (body_name, slot, part_name) + if key not in _touch: + import numpy as np + banch, _, bmask = _extent("body", body_name) + panch, _, pmask = _extent(slot, part_name) + if (slot, part_name) not in _comps: + _comps[(slot, part_name)] = _components(pmask) + grown = bmask.copy() + for dy in (-1, 0, 1): + for dx in (-1, 0, 1): + grown |= np.roll(np.roll(np.pad(bmask, 1), dy, 0), dx, 1)[1:-1, 1:-1] + ox, oy = banch[slot][0] - panch["pivot"][0], banch[slot][1] - panch["pivot"][1] + hits = [] + for ys, xs in _comps[(slot, part_name)]: + xs, ys = xs + ox, ys + oy + inside = (xs >= 0) & (ys >= 0) & (xs < bmask.shape[1]) & (ys < bmask.shape[0]) + hits.append(bool(grown[ys[inside], xs[inside]].any())) + _touch[key] = tuple(hits) + return _touch[key] + + +_bodies = {b["name"] for b in BODY} + + +def attached(body, slot, p): + """Every piece of the part that touches its own source body must touch this body too. A pair + of wings needs both wings attached; a stemless tail or back spikes can't hang in mid-air; + pieces that float free by design (halo, sparks, orbs) may float anywhere.""" + here = contacts(body["name"], slot, p["name"]) + source = p.get("source") + home = contacts(source, slot, p["name"]) if source in _bodies else (True,) * len(here) + return all(h or not s for h, s in zip(here, home)) + + +def fits(body, picks): + """True if `body` plus `picks` ({slot: part}) composes within CANVAS, using the same placement + as generate_sprite.compose + place_on_canvas, and every part is attached to the body.""" + banch, bb, _ = _extent("body", body["name"]) + bx, by = banch["pivot"] + boxes = [(bb[0] - bx, bb[1] - by, bb[2] - bx, bb[3] - by)] + for slot, p in picks.items(): + if p["name"] == "none": + continue + if not attached(body, slot, p): + return False + anch, pb, _ = _extent(slot, p["name"]) + ax, ay = banch[slot] + ox, oy = ax - bx - anch["pivot"][0], ay - by - anch["pivot"][1] + boxes.append((pb[0] + ox, pb[1] + oy, pb[2] + ox, pb[3] + oy)) + w = max(b[2] for b in boxes) - min(b[0] for b in boxes) + h = max(b[3] for b in boxes) - min(b[1] for b in boxes) + return w + 2 <= CANVAS and h + GROUND_MARGIN + 1 <= CANVAS diff --git a/validate_parts.py b/validate_parts.py index 41ff20f..ed343b5 100755 --- a/validate_parts.py +++ b/validate_parts.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 """ -Validate the part library in parts/. +Validate a part library (default: the pixellab one in parts_pl/; --library classic for parts/). Fails on: - a missing file for any part listed in sprite_parts.py @@ -8,9 +8,10 @@ Fails on: - any partial alpha - a missing (or duplicated) required marker for the slot / body type - any legal composite that triggers "canvas expanded": checked exhaustively per body - via bounding boxes, plus a random sample of real composites + via bounding boxes (only for libraries without a fits() rule), plus a random sample of + real composites - python validate_parts.py [--sample N] + python validate_parts.py [--library pixellab|classic] [--sample N] [--verbose] """ import random import sys @@ -21,10 +22,11 @@ import numpy as np from PIL import Image import generate_sprite as gs -import sprite_parts as cfg +from sprite_parts import TYPES -PARTS = Path("parts") -ALLOWED = {tuple(v) for v in gs.KEYS.values()} | {gs.PUPIL, gs.EYE_WHITE} | {tuple(v) for v in gs.MARKERS.values()} +lib = None # registry module, set in main +PARTS = None +ALLOWED = {tuple(v) for v in gs.KEYS.values()} | {gs.PUPIL, gs.EYE_WHITE} | {tuple(v) for v in gs.MARKERS.values()} | gs.FIXED_COLORS MARKER_BY_COLOR = {v: k for k, v in gs.MARKERS.items()} @@ -87,7 +89,7 @@ def exhaustive_extents(): found by taking each side's extreme from a different slot (or one part covering both).""" problems = [] worst = {} - for body in cfg.BODY: + for body in lib.BODY: plan = body["plans"][0] b = bbox_of("body", body["name"]) if b is None: @@ -100,7 +102,7 @@ def exhaustive_extents(): opt = {} for slot in gs.PICK_ORDER[1:]: lst = [] - for p in cfg.SLOTS[slot]: + for p in lib.SLOTS[slot]: if p["name"] == "none" or plan not in p["plans"] or p["name"] in body["deny"]: continue if p["requires"] and not set(p["requires"]) & tags: @@ -138,10 +140,10 @@ def exhaustive_extents(): w, wwhy = worst_span(0, 2, fx0, fx1) h, hwhy = worst_span(1, 3, fy0, fy1) worst[body["name"]] = (w, h, wwhy, hwhy) - if w + 2 > gs.CANVAS: - problems.append(f"{body['name']}: worst width {w} > {gs.CANVAS - 2} ({wwhy})") - if h + gs.GROUND_MARGIN + 1 > gs.CANVAS: - problems.append(f"{body['name']}: worst height {h} > {gs.CANVAS - gs.GROUND_MARGIN - 1} ({hwhy})") + if w + 2 > lib.CANVAS: + problems.append(f"{body['name']}: worst width {w} > {lib.CANVAS - 2} ({wwhy})") + if h + lib.GROUND_MARGIN + 1 > lib.CANVAS: + problems.append(f"{body['name']}: worst height {h} > {lib.CANVAS - lib.GROUND_MARGIN - 1} ({hwhy})") return problems, worst @@ -149,37 +151,52 @@ def sample_composites(n): problems = [] rng = random.Random(12345) for i in range(n): - ptype = rng.choice(cfg.TYPES) + ptype = rng.choice(TYPES) prng = random.Random(i) - plan, chosen, markings, tags = gs.pick_parts(ptype, prng) + plan, chosen, markings, tags = gs.pick_parts(lib, ptype, prng) if any(not (PARTS / s / f"{p['name']}.png").exists() for s, p in chosen.items() if p["name"] != "none"): continue spr = gs.compose(str(PARTS), chosen, markings, prng) - if max(spr.width + 2, spr.height + gs.GROUND_MARGIN + 1) > gs.CANVAS: + if max(spr.width + 2, spr.height + lib.GROUND_MARGIN + 1) > lib.CANVAS: problems.append(f"sample {ptype} seed {i}: {spr.width}x{spr.height} " f"({', '.join(f'{s}={p['name']}' for s, p in chosen.items())})") return problems def main(argv): + global lib, PARTS n = 2000 if "--sample" in argv: n = int(argv[argv.index("--sample") + 1]) + name = argv[argv.index("--library") + 1] if "--library" in argv else gs.DEFAULT_LIBRARY + if name not in gs.LIBRARIES: + print(f"unknown library {name!r}, choose from {', '.join(gs.LIBRARIES)}") + return 2 + lib = gs.load_library(name) + PARTS = Path(lib.PARTS_DIR) + print(f"library {name} ({PARTS}/, canvas {lib.CANVAS})") + if not lib.BODY: + print("library is empty (no bodies), nothing to validate") + return 0 errs = [] - for slot, parts in cfg.SLOTS.items(): + for slot, parts in lib.SLOTS.items(): for p in parts: if p["name"] != "none": errs += check_file(slot, p) - size_probs, worst = exhaustive_extents() - errs += size_probs + if hasattr(lib, "fits"): + worst = {} + print("exhaustive size check skipped: library has a fits() rule, relying on the random sample") + else: + size_probs, worst = exhaustive_extents() + errs += size_probs errs += sample_composites(n) for e in errs: print("FAIL", e) if "--verbose" in argv: for b, (w, hh, ww, hw) in sorted(worst.items()): print(f"{b:16s} worst {w}x{hh} w:{ww} h:{hw}") - total = sum(1 for parts in cfg.SLOTS.values() for p in parts if p["name"] != "none") - present = sum(1 for slot, parts in cfg.SLOTS.items() for p in parts + total = sum(1 for parts in lib.SLOTS.values() for p in parts if p["name"] != "none") + present = sum(1 for slot, parts in lib.SLOTS.items() for p in parts if p["name"] != "none" and (PARTS / slot / f"{p['name']}.png").exists()) print(f"{present}/{total} parts present, {len(errs)} problem(s)") return 1 if errs else 0