e-os-v5 / scripts /os5_spec.py
KillerBoss's picture
E-OS v0.5: Style-Morphing Full-Frame Generative OS (NPU 1.12ms)
ce521ce verified
Raw History Blame Contribute Delete
5.62 kB
# E-OS v5 — shared spec (Python dataset side).
# MUST stay in sync with eos-apk/src/com/killerboss/eos/{OsPainter.kt,OsState.kt}
#
# Philosophy (user requirement v4):
# - NO MASKS, NO CELL GATING: one FrameGenerator produces the ENTIRE frame.
# - Code draws only a ROUGH layout hint (flat shapes, "was wo sein soll") as
# conditioning input for the generator ("Hilfe für den frame Generator").
# - Target: 60 Hz full-frame generation on Hexagon NPU.
# - Back buttons everywhere (top-left + nav bar + hardware back).
#
# Geometry: everything is authored at FULL resolution 384x832 (portrait).
# hint = full-res rough drawing downscaled to 192x416 (generator input)
# styled = full-res final frame (384x832) (generator output / GT)
FULL_W, FULL_H = 384, 832
HINT_W, HINT_H = 192, 416 # = FULL/2
STATE_DIM = 40
# ---------------- v5: what the MODEL can do that code cannot ----------------
# * STYLE MORPHING : one soft vector blends 3 complete visual languages
# (Neon/Glas/Aurora) — code would need 3 theme engines
# plus blending logic in every draw call.
# * MOOD/ENERGY : one scalar scales glow, particles, shadows coherently
# across the WHOLE OS — code = dozens of constants.
# * WEATHER THEMING: learned cross-screen consistency (rain cools the whole
# OS, night adds stars everywhere) — code = 8x4 variants.
STYLES = ["Neon", "Glas", "Aurora"]
MOODS = ["Ruhig", "Normal", "Vollgas"]
MOOD_ENERGY = [0.25, 0.6, 1.0]
SCREENS = ["LOCK", "HOME", "DRAWER", "CALC", "WEATHER", "MUSIC", "SETTINGS", "ABOUT"]
N_SCREENS = 8
# ---------------- state vector layout (40 floats) ----------------
# 0..7 screen one-hot
# 8 transition t (0 = none, 0..1 slide progress)
# 9 from_screen / 7.0 (slide source)
# 10..13 ripple1 x/W, y/H, r/RMAX, strength
# 14..17 ripple2
# 18..19 day phase sin, cos (phase = minutes/1440)
# 20 second pulse (0..1)
# 21..22 accent hue sin, cos (hue/360*2pi)
# 23 battery /100
# 24 music level (0..1)
# 25..28 weather one-hot: sunny, cloudy, rain, night-clear
# 29 music playing (0/1)
# 30 pressed flag (0/1)
# 31 aurora/firefly global drift phase (0..1)
# 32..34 STYLE one-hot (Neon, Glas, Aurora) — soft blends allowed at runtime
# 35 MOOD/energy scalar 0..1 (Ruhig 0.25, Normal 0.6, Vollgas 1.0)
# 36 back chip visible (0/1, all screens except LOCK)
# 37..39 reserved (0)
RMAX = 300.0
# ---------------- palette (rough hint theme, flat) ----------------
H_BG = (17, 19, 26)
H_CARD = (30, 34, 44)
H_STROKE = (52, 58, 70)
H_TXT = (210, 216, 226)
H_DIM = (130, 138, 152)
H_ACC = (120, 130, 150) # neutral accent in hint (hue lives in state vec)
# ---------------- layout ----------------
STATUS_H = 24
NAV_H = 52
NAV_Y0 = FULL_H - NAV_H # 780
# nav bar buttons (x0,y0,x1,y1)
NAV_BACK = (10, 790, 70, 822)
NAV_HOME = (162, 790, 222, 822)
NAV_APPS = (314, 790, 374, 822)
BACK_BTN = (12, 34, 64, 78) # in-app back button (sub screens)
HOME_CARDS = {
"clock": (16, 60, 368, 196),
"weather": (16, 212, 240, 344),
"music": (256, 212, 368, 344),
"tip": (16, 360, 368, 428),
}
DOCK_Y0, DOCK_Y1 = 452, 566 # icons circles r=30 cy=498; labels y 556
DOCK_XS = [68, 152, 236, 320]
APPS_PILL = (16, 584, 368, 640)
DRAWER_SEARCH = (76, 36, 368, 80) # v5: starts right of the back chip
DRAWER_Y0 = 104 # grid 3x4, cell 117x130
DRAWER_CELL_W, DRAWER_CELL_H = 117, 130
DRAWER_APPS = ["Rechner", "Wetter", "Musik", "Einstellungen", "Info", "Notizen",
"Galerie", "Uhr", "Browser", "Kamera", "Spiele", "Dateien"]
CALC_DISP = (76, 40, 368, 150) # v5: starts right of the back chip
CALC_GRID = (16, 166, 368, 700)
CALC_KEYS = [["C", "±", "%", "÷"],
["7", "8", "9", "×"],
["4", "5", "6", "−"],
["1", "2", "3", "+"],
["0", ".", "⌫", "="]]
WEATHER_CITY_Y = 44
WEATHER_TEMP = (16, 84) # big temp (below the back chip)
WEATHER_ANIM = (16, 210, 368, 420) # condition animation zone
WEATHER_HOURLY = (16, 436, 368, 540) # 5 mini cards
WEATHER_DETAIL = (16, 556, 368, 700)
MUSIC_ART = (92, 56, 292, 256)
MUSIC_TITLE_Y = 288
MUSIC_ARTIST_Y = 314
MUSIC_PROG = (32, 348, 352, 364)
MUSIC_SPEC = (16, 392, 368, 560) # 24 spectrum bars
MUSIC_CTRL_Y0, MUSIC_CTRL_Y1 = 590, 700
MUSIC_CTRL_XS = [86, 192, 298] # prev, play, next (r=34)
SETTINGS_HUE_Y = (92, 144) # 12 swatches 28px, x = 16 + i*29.3
SETTINGS_ROWS = [("WLAN", 0), ("Bluetooth", 1), ("KI-Effekte", 2), ("Energie sparen", 3)]
SETTINGS_ROW_Y0 = 170
SETTINGS_ROW_H, SETTINGS_ROW_GAP = 50, 14
SETTINGS_TOGGLE = (300, 352) # track x range
# v5: style + mood selector rows (the AI-only controls)
SETTINGS_STYLE_ROW = (16, 426, 368, 476)
SETTINGS_MOOD_ROW = (16, 490, 368, 540)
SETTINGS_PILL_XS = [240, 292, 344] # pill centers (right half), w 48 h 26
SETTINGS_PILL_HW, SETTINGS_PILL_HH = 25, 14
SETTINGS_INFO_Y0 = 556 # npu status card + diagnose card (v5 y)
SETTINGS_CARD_H = 64
CITIES = ["Berlin", "Hamburg", "München", "Köln"]
CONDS = ["Sonnig", "Wolkig", "Regen", "Klar Nacht"]
MUSIC_TRACKS = [("Neon Horizont", "KillerBoss"), ("NPU Dreams", "Hexagon"),
("Deep Blue", "Aurora Kids")]
TOASTS = ["WLAN verbunden", "Update bereit", "Modus aktiv", "Effekte an", "Speicher frei"]
TOAST_RECT = (72, 716, 312, 756)
# effect params (styled theme)
SHADOW_DY, SHADOW_BLUR, SHADOW_A = 6, 9, 0.38
GLOW_BLUR = 10
RIPPLE_W = 5