Add slohmaier and akpolke avatars
This commit is contained in:
@@ -11,10 +11,15 @@ Eine Sammlung von Avataren für OpenClaw Agents.
|
|||||||
|  | **Lexa** | `lexa.png` |
|
|  | **Lexa** | `lexa.png` |
|
||||||
|  | **Luxo** | `luxo.png` |
|
|  | **Luxo** | `luxo.png` |
|
||||||
|  | **Lyra** | `lyra.png` |
|
|  | **Lyra** | `lyra.png` |
|
||||||
|
|  | **Mycroft** | `mycroft.png` |
|
||||||
|
|  | **Jarvis** | `jarvis.png` |
|
||||||
|  | **Nova** | `nova.png` |
|
|  | **Nova** | `nova.png` |
|
||||||
|  | **Polo** | `polo.png` |
|
|  | **Polo** | `polo.png` |
|
||||||
|  | **Rex** | `rex.png` |
|
|  | **Rex** | `rex.png` |
|
||||||
|  | **Swift** | `swift.png` |
|
|  | **Swift** | `swift.png` |
|
||||||
|
|  | **Homeserver** | `homeserver.png` |
|
||||||
|
|  | **Slohmaier** | `slohmaier.png` |
|
||||||
|
|  | **Akpolke** | `akpolke.png` |
|
||||||
|
|
||||||
## Details
|
## Details
|
||||||
|
|
||||||
|
|||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 1005 B |
@@ -0,0 +1,104 @@
|
|||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
BG = (26, 26, 46)
|
||||||
|
HAIR = (230, 200, 90)
|
||||||
|
HAIR_DARK = (200, 170, 70)
|
||||||
|
SKIN = (240, 210, 190)
|
||||||
|
SKIN_DARK = (215, 185, 165)
|
||||||
|
DRESS = (200, 60, 90)
|
||||||
|
DRESS_DARK = (165, 45, 70)
|
||||||
|
BLACK = (20, 20, 20)
|
||||||
|
WHITE = (240, 240, 240)
|
||||||
|
GRAY = (120, 125, 130)
|
||||||
|
|
||||||
|
S = 32
|
||||||
|
g = [[BG] * S for _ in range(S)]
|
||||||
|
|
||||||
|
def rect(t, b, l, r, c):
|
||||||
|
for y in range(t, b + 1):
|
||||||
|
for x in range(l, r + 1):
|
||||||
|
g[y][x] = c
|
||||||
|
|
||||||
|
def hline(y, l, r, c):
|
||||||
|
for x in range(l, r + 1):
|
||||||
|
g[y][x] = c
|
||||||
|
|
||||||
|
def vline(x, t, b, c):
|
||||||
|
for y in range(t, b + 1):
|
||||||
|
g[y][x] = c
|
||||||
|
|
||||||
|
# --- HAIR (rows 2-5), blonde, flowing ---
|
||||||
|
rect(2, 5, 12, 19, HAIR)
|
||||||
|
# hair sides framing face
|
||||||
|
vline(12, 3, 8, HAIR)
|
||||||
|
vline(19, 3, 8, HAIR)
|
||||||
|
# hair top shading
|
||||||
|
hline(2, 12, 19, HAIR_DARK)
|
||||||
|
|
||||||
|
# --- FACE (rows 5-10), light skin ---
|
||||||
|
rect(5, 10, 13, 18, SKIN)
|
||||||
|
vline(13, 5, 10, SKIN_DARK)
|
||||||
|
vline(18, 5, 10, SKIN_DARK)
|
||||||
|
|
||||||
|
# --- EYES (rows 7-8) ---
|
||||||
|
g[7][14] = BLACK; g[7][15] = BLACK
|
||||||
|
g[7][16] = BLACK; g[7][17] = BLACK
|
||||||
|
# eye glint
|
||||||
|
g[7][14] = WHITE; g[7][16] = WHITE
|
||||||
|
|
||||||
|
# --- LIPS (row 9) ---
|
||||||
|
g[9][15] = DRESS_DARK; g[9][16] = DRESS_DARK
|
||||||
|
|
||||||
|
# --- NECK (row 11) ---
|
||||||
|
rect(11, 11, 15, 16, SKIN_DARK)
|
||||||
|
|
||||||
|
# --- DRESS / TORSO (rows 12-21), elegant model silhouette ---
|
||||||
|
rect(12, 21, 12, 19, DRESS)
|
||||||
|
vline(12, 12, 21, DRESS_DARK)
|
||||||
|
vline(19, 12, 21, DRESS_DARK)
|
||||||
|
# neckline
|
||||||
|
hline(12, 13, 18, DRESS_DARK)
|
||||||
|
|
||||||
|
# --- ARMS (rows 12-19), slender ---
|
||||||
|
rect(12, 19, 9, 11, SKIN)
|
||||||
|
rect(12, 19, 20, 22, SKIN)
|
||||||
|
# hands
|
||||||
|
rect(18, 19, 9, 11, SKIN_DARK)
|
||||||
|
rect(18, 19, 20, 22, SKIN_DARK)
|
||||||
|
|
||||||
|
# --- DRESS FLARE / SKIRT (rows 22-27) ---
|
||||||
|
rect(22, 27, 10, 21, DRESS)
|
||||||
|
vline(10, 22, 27, DRESS_DARK)
|
||||||
|
vline(21, 22, 27, DRESS_DARK)
|
||||||
|
# waist
|
||||||
|
hline(22, 11, 20, DRESS_DARK)
|
||||||
|
|
||||||
|
# --- LEGS (rows 28-29), model legs ---
|
||||||
|
rect(28, 29, 13, 15, SKIN)
|
||||||
|
rect(28, 29, 16, 18, SKIN)
|
||||||
|
|
||||||
|
# --- HEELS (row 30) ---
|
||||||
|
g[30][13] = BLACK; g[30][14] = BLACK
|
||||||
|
g[30][17] = BLACK; g[30][18] = BLACK
|
||||||
|
|
||||||
|
# --- GROUND (row 31) ---
|
||||||
|
hline(31, 9, 22, GRAY)
|
||||||
|
|
||||||
|
# Scale up
|
||||||
|
img = Image.new("RGBA", (256, 256), BG + (255,))
|
||||||
|
pixels = img.load()
|
||||||
|
scale = 256 // S
|
||||||
|
for y in range(S):
|
||||||
|
for x in range(S):
|
||||||
|
c = g[y][x]
|
||||||
|
if c == BG:
|
||||||
|
continue
|
||||||
|
for dy in range(scale):
|
||||||
|
for dx in range(scale):
|
||||||
|
px = x * scale + dx
|
||||||
|
py = y * scale + dy
|
||||||
|
if 0 <= px < 256 and 0 <= py < 256:
|
||||||
|
pixels[px, py] = c + (255,)
|
||||||
|
|
||||||
|
img.save("akpolke.png", "PNG", optimize=True)
|
||||||
|
print("Saved akpolke.png 256x256")
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
BG = (26, 26, 46)
|
||||||
|
SKIN = (150, 100, 70)
|
||||||
|
SKIN_DARK = (120, 80, 55)
|
||||||
|
SHIRT = (120, 60, 40)
|
||||||
|
SHIRT_DARK = (95, 45, 30)
|
||||||
|
PANTS = (40, 40, 50)
|
||||||
|
PANTS_DARK = (30, 30, 40)
|
||||||
|
BLACK = (20, 20, 20)
|
||||||
|
WHITE = (240, 240, 240)
|
||||||
|
RED = (200, 50, 50)
|
||||||
|
GRAY = (120, 125, 130)
|
||||||
|
|
||||||
|
S = 32
|
||||||
|
g = [[BG] * S for _ in range(S)]
|
||||||
|
|
||||||
|
def rect(t, b, l, r, c):
|
||||||
|
for y in range(t, b + 1):
|
||||||
|
for x in range(l, r + 1):
|
||||||
|
g[y][x] = c
|
||||||
|
|
||||||
|
def hline(y, l, r, c):
|
||||||
|
for x in range(l, r + 1):
|
||||||
|
g[y][x] = c
|
||||||
|
|
||||||
|
def vline(x, t, b, c):
|
||||||
|
for y in range(t, b + 1):
|
||||||
|
g[y][x] = c
|
||||||
|
|
||||||
|
# --- HEAD (rows 4-10), bald, brown skin ---
|
||||||
|
rect(4, 10, 13, 18, SKIN)
|
||||||
|
# face shading
|
||||||
|
vline(13, 4, 10, SKIN_DARK)
|
||||||
|
vline(18, 4, 10, SKIN_DARK)
|
||||||
|
# ears
|
||||||
|
g[5][12] = SKIN; g[6][12] = SKIN
|
||||||
|
g[5][19] = SKIN; g[6][19] = SKIN
|
||||||
|
|
||||||
|
# --- SUNGLASSES (rows 6-8) ---
|
||||||
|
rect(6, 8, 13, 15, BLACK)
|
||||||
|
rect(6, 8, 16, 18, BLACK)
|
||||||
|
hline(7, 13, 18, BLACK) # bridge
|
||||||
|
# lens glint
|
||||||
|
g[6][14] = WHITE; g[6][17] = WHITE
|
||||||
|
|
||||||
|
# --- MOUTH (row 9) ---
|
||||||
|
g[9][15] = SKIN_DARK; g[9][16] = SKIN_DARK
|
||||||
|
|
||||||
|
# --- NECK (row 11) ---
|
||||||
|
rect(11, 11, 15, 16, SKIN_DARK)
|
||||||
|
|
||||||
|
# --- TORSO / SHIRT (rows 12-21) ---
|
||||||
|
rect(12, 21, 11, 20, SHIRT)
|
||||||
|
vline(11, 12, 21, SHIRT_DARK)
|
||||||
|
vline(20, 12, 21, SHIRT_DARK)
|
||||||
|
# collar
|
||||||
|
hline(12, 12, 19, SHIRT_DARK)
|
||||||
|
|
||||||
|
# --- ARMS (rows 12-19) ---
|
||||||
|
rect(12, 19, 8, 10, SHIRT)
|
||||||
|
rect(12, 19, 21, 23, SHIRT)
|
||||||
|
# hands
|
||||||
|
rect(18, 19, 8, 10, SKIN)
|
||||||
|
rect(18, 19, 21, 23, SKIN)
|
||||||
|
|
||||||
|
# --- BLIND CANE (rows 12-30), held in right hand ---
|
||||||
|
# white cane with red tip, vertical line at x=24
|
||||||
|
vline(24, 12, 28, WHITE)
|
||||||
|
vline(24, 29, 30, RED)
|
||||||
|
# hand grip on cane
|
||||||
|
g[18][24] = SKIN; g[19][24] = SKIN
|
||||||
|
|
||||||
|
# --- PANTS (rows 22-28) ---
|
||||||
|
rect(22, 28, 12, 19, PANTS)
|
||||||
|
vline(12, 22, 28, PANTS_DARK)
|
||||||
|
vline(19, 22, 28, PANTS_DARK)
|
||||||
|
# legs split
|
||||||
|
vline(15, 22, 28, PANTS_DARK)
|
||||||
|
|
||||||
|
# --- SHOES (rows 29-30) ---
|
||||||
|
rect(29, 30, 12, 15, BLACK)
|
||||||
|
rect(29, 30, 16, 19, BLACK)
|
||||||
|
|
||||||
|
# --- GROUND (row 31) ---
|
||||||
|
hline(31, 8, 24, GRAY)
|
||||||
|
|
||||||
|
# Scale up
|
||||||
|
img = Image.new("RGBA", (256, 256), BG + (255,))
|
||||||
|
pixels = img.load()
|
||||||
|
scale = 256 // S
|
||||||
|
for y in range(S):
|
||||||
|
for x in range(S):
|
||||||
|
c = g[y][x]
|
||||||
|
if c == BG:
|
||||||
|
continue
|
||||||
|
for dy in range(scale):
|
||||||
|
for dx in range(scale):
|
||||||
|
px = x * scale + dx
|
||||||
|
py = y * scale + dy
|
||||||
|
if 0 <= px < 256 and 0 <= py < 256:
|
||||||
|
pixels[px, py] = c + (255,)
|
||||||
|
|
||||||
|
img.save("slohmaier.png", "PNG", optimize=True)
|
||||||
|
print("Saved slohmaier.png 256x256")
|
||||||
+18
@@ -19,3 +19,21 @@
|
|||||||
|
|
||||||
## Polo — Homeserver Admin
|
## Polo — Homeserver Admin
|
||||||
> 8-bit pixel art icon, dark background (#1a1a2e), a polo horse rider carrying a server rack like a polo mallet, with network cables as reins, red and steel grey palette, retro game sprite style, 256x256
|
> 8-bit pixel art icon, dark background (#1a1a2e), a polo horse rider carrying a server rack like a polo mallet, with network cables as reins, red and steel grey palette, retro game sprite style, 256x256
|
||||||
|
|
||||||
|
## Mycroft — Stefans Voice/iOS-Assistent
|
||||||
|
> 8-bit pixel art icon, dark background (#1a1a2e), a retro studio microphone with sound-wave dots on both sides, steel grey and white with teal glow accents, retro game sprite style, 256x256
|
||||||
|
|
||||||
|
## Jarvis — Katis Assistent
|
||||||
|
> 8-bit pixel art icon, dark background (#1a1a2e), a glowing arc-reactor core with concentric cyan and gold rings around a white center, blue and gold palette, retro game sprite style, 256x256
|
||||||
|
|
||||||
|
## Homeserver — Accessible Dashboard Favicon
|
||||||
|
> 8-bit pixel art icon, dark background (#1a1a2e), a small house with a red triangular roof and a server rack inside, steel grey body with red indicator LEDs and drive bays, antenna on top, red and steel grey palette, retro game sprite style, 256x256
|
||||||
|
> (Generated via Python Pillow, see generate_homeserver.py)
|
||||||
|
|
||||||
|
## Slohmaier — Stefan
|
||||||
|
> 8-bit pixel art icon, dark background (#1a1a2e), a standing bald man with brown skin, black sunglasses and a white blind cane with red tip, brown shirt and dark pants, brown/black/white/red/grey palette, retro game sprite style, 256x256
|
||||||
|
> (Generated via Python Pillow, see generate_slohmaier.py)
|
||||||
|
|
||||||
|
## Akpolke — Kati
|
||||||
|
> 8-bit pixel art icon, dark background (#1a1a2e), a blonde model woman with flowing golden hair, light skin, elegant red dress with flared skirt and high heels, blonde/light-skin/red palette, retro game sprite style, 256x256
|
||||||
|
> (Generated via Python Pillow, see generate_akpolke.py)
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
Reference in New Issue
Block a user