Live2D od A do Z: Wise One (ChatGPT + Cubism Editor PRO)
Kompletny proces: od jednego obrazka wygenerowanego w ChatGPT, przez warstwowy plik PSD, po ruszającą się postać Live2D na stronie ariku.pl i w Lunecie. Pisany na żywo przy pierwszym modelu — Wise One v1 (postać od pasa w górę), październik 2026.
Poradnik ma dwie części:
- Część I — dla początkujących. Co to jest Live2D, jak wygląda cały proces i jak krok po kroku zriggować gotowy PSD w Cubism Editorze. Wystarczy, żeby zrobić pierwszy model.
- Część II — dla zaawansowanych. Wszystkie szczegóły: jak przygotować „Live2D-ready” PSD z obrazków z ChatGPT (ComfyUI See-through + skrypty Pythona), co daje wersja PRO, fizyka, animacje, eksport, osadzenie w przeglądarce i w Lunecie (Tauri), licencje, pułapki — i jak to faktycznie przebiegało u nas.
Program: Live2D Cubism Editor 5.3 (PRO, trial 42 dni od 2026-10-17). Plik wejściowy:
C:\wise-one\wise-one-v1-3x.psd(3072×4608 px). Wynik:C:\wise-one\wise-one-v1.cmo3(projekt) iC:\wise-one\runtime\(pliki dla strony). Źródła pipeline'u: repo Luneta, katalogassets/design/live2d/(README,scripts/,workflows/,chatgpt/PROMPTY.md). Zadania: Vikunja, projekt 15, epik 680.
CZĘŚĆ I — DLA POCZĄTKUJĄCYCH
1. Co w ogóle robimy
Live2D to nie animacja 3D ani film. Bierzemy płaski rysunek pocięty na warstwy (oczy, usta, włosy, ciało…) i każdą warstwę zamieniamy w gumową siatkę, którą da się wyginać. Potem uczymy program, jak ma wyglądać postać przy różnych ustawieniach suwaków („głowa w lewo”, „oczy zamknięte”, „usta otwarte”). Strona internetowa porusza tymi suwakami w czasie rzeczywistym — i postać „żyje”.
Cały proces w 7 krokach
| # | Etap | Narzędzie | Kto / ile czasu u nas |
|---|---|---|---|
| 1 | Obraz bazowy postaci | ChatGPT (generowanie obrazów) | właściciel, kilka podejść |
| 2 | Warianty (zamknięte oczy, usta A/I/U/E/O, miny, części zasłonięte) | ChatGPT — edycje 1:1 obrazu bazowego | właściciel, ~20 edycji |
| 3 | Pocięcie na warstwy | ComfyUI + See-through + skrypty Pythona | automat na ariku-pc |
| 4 | Plik PSD gotowy pod Live2D | skrypt build_psd.py |
automat |
| 5 | Rigging (siatki, deformery, parametry) | Live2D Cubism Editor | ręcznie — to jest serce pracy |
| 6 | Eksport dla przeglądarki | Cubism Editor → .moc3 + .model3.json |
kilka kliknięć |
| 7 | Osadzenie na stronie / w Lunecie | pixi.js + pixi-live2d-display | kod |
Jeśli dopiero zaczynasz — etapy 1–4 możesz pominąć, bo PSD Wise One jest już gotowy. Zaczynasz od kroku 5 (sekcja 4 poniżej).
2. Słowniczek (5 pojęć, które trzeba znać)
| Pojęcie | Co to jest |
|---|---|
| ArtMesh | Jedna warstwa z PSD zamieniona w „gumową” siatkę trójkątów. Ruszając punktami siatki, wyginamy obrazek. |
| Deformer | Niewidzialny „uchwyt” na grupie ArtMeshy. Warp wygina jak siatka, Rotation obraca wokół punktu. Deformery można zagnieżdżać (głowa w ciele). |
| Parametr | Suwak, np. ParamAngleX = obrót głowy w lewo/prawo. Program na stronie steruje właśnie suwakami. |
| Keyform (klucz) | Zapamiętany kształt dla konkretnej wartości suwaka (np. głowa przy −30 i przy +30). Pomiędzy kluczami Cubism sam liczy płynne przejście. |
| Clipping (maska) | Warstwa widoczna tylko w obrysie innej warstwy — tęczówka nie wychodzi poza białko oka. |
Złota zasada: nazwy parametrów zostawiamy standardowe (ParamAngleX, ParamEyeLOpen…).
Dzięki temu mruganie, oddech, patrzenie za kursorem i ruch ust działają na stronie bez pisania kodu.
3. FREE czy PRO?
Cubism Editor ma wersję FREE (darmową, z limitami) i PRO (płatną, z 42-dniowym trialem).
- FREE wystarczy na mały model, ale ma limity liczby części, parametrów i rozmiaru tekstury — nasz PSD (dużo warstw, wariantów i tekstura 4096) w nie wchodzi. Aktualne limity sprawdź w oficjalnym porównaniu wersji na stronie Live2D.
- PRO daje m.in. automatyczne generowanie mimiki głowy (Automatic Generation of Facial Motion), szablony (Templates), większe tekstury i więcej elementów. Robimy na trialu PRO — trzeba zdążyć w 42 dni albo potem zostać z projektem otwieranym w trybie FREE (da się go oglądać, nie zawsze edytować).
Plan na trial: tydzień 1 — rig twarzy i eksport, który działa na stronie. Reszta — szlify.
4. Pierwsze uruchomienie
- Uruchom
C:\Program Files\Live2D Cubism 5.3\CubismEditor5.exe. - Jeśli pojawi się okno o nowej wersji — kliknij Cancel (po japońsku キャンセル). Nie klikaj „Open” (開く) — to zamyka edytor i otwiera stronę pobierania. Wersja 5.3 wystarczy.
- Interfejs jest już przełączony na angielski. (Gdyby nie był: ustawienia programu → język → English, potem restart edytora.)
- Przy pierwszym uruchomieniu wybierz licencję PRO (trial).
5. Co jest w naszym PSD
Warstwy (od góry do dołu), wszystkie w pełnym rozmiarze płótna 3072×4608:
| Grupa | Warstwy | Do czego |
|---|---|---|
~variants (ukryta) |
~eyelid_closed_l/r, ~eyes_left/right/up/down, ~brow_surprised/angry/sad_l/r, ~face_surprised/angry/sad/wink/blush, ~mouth_A/I/U/E/O, ~mouth_smile, ~mouth_pout, ~ears_flat_l/r |
Wzorce do kluczy: zamknięte oczy, miny, kształty ust. Nie są to stałe części postaci. |
front_hair |
front_hair |
grzywka (jeden blok) |
ears |
ears_l, ears_r |
uszy |
eyes |
eyebrow_l/r, eyelash_l/r, irides_l/r, eyewhite_l/r |
brwi, rzęsy, tęczówki, białka |
head |
mouth, nose, face, neckwear, head_bald |
twarz i „łysa” głowa pod włosami |
body |
hand_l/r, sleeve_l/r, topwear, neck |
ciało |
back_hair |
back_hair |
włosy z tyłu |
Końcówki
_l/_rto lewa / prawa strona postaci (nie nasza). Warstwy pod spodem (np.head_bald, skóra pod grzywką) są dorysowane — dzięki temu przy ruchu nie widać dziur.
6. Import PSD
- Przeciągnij
wise-one-v1-3x.psddo okna edytora (albo File → Open i wybierz PSD). Cubism utworzy nowy model, a każda warstwa stanie się ArtMeshem. - Sprawdź paletę Parts (lewa strona): czy jest grupa
~variantsz ukrytymi warstwami. Jeśli jej nie ma — zatrzymaj się, bez niej nie zrobimy mrugania ani min. - Od razu zapisz: File → Save As →
C:\wise-one\wise-one-v1.cmo3. Od teraz Ctrl+S po każdym etapie.
Nowy model ma już gotowy zestaw standardowych parametrów (paleta Parameters po prawej). Nie twórz ich od nowa — używaj tych, które są.
7. Siatki (Auto Mesh)
Siatka decyduje, jak gładko obrazek się wygina. Więcej punktów = ładniejszy ruch, ale wolniej.
- Zaznacz wszystkie ArtMeshe (klik w obszar roboczy, Ctrl+A).
- Uruchom automatyczne generowanie siatki (menu Modeling → Mesh, ikonka siatki na pasku). Ustawienie standardowe wystarczy dla ciała i włosów.
- Dla oczu, ust i brwi powtórz z gęstszym ustawieniem (mniejszy rozstaw punktów) — te części ruszają się najbardziej i są małe.
8. Deformery (szkielet)
Układ, który chcemy dostać (od zewnątrz do środka):
Body (ruch ciała, ParamBodyAngleX/Y/Z)
├─ Breath (oddech, ParamBreath) ── topwear, sleeve_l/r, hand_l/r
├─ neck, back_hair
└─ Head (obrót głowy, ParamAngleX/Y/Z) ── head, eyes, ears, front_hair
Szybka droga (PRO): automatyczna mimika
- Zaznacz części głowy.
- Uruchom Automatic Generation of Facial Motion (menu Modeling).
Program sam tworzy deformery głowy i klucze dla
ParamAngleX/Y/Z. - Poruszaj suwakami
ParamAngleXiParamAngleY— głowa ma się obracać bez dziur i rozjazdów. - Jeśli narzędzie nie rozpozna naszych warstw, robimy to ręcznie (niżej).
Ręcznie
- Zaznacz ArtMeshe głowy → Create Rotation Deformer → nazwij
Head. Punkt obrotu ustaw na szyi. - Wybierz
ParamAngleZ, kliknij Add 3 keys (−30 / 0 / +30), na skrajnych kluczach przekręć deformer. - Dla
ParamAngleX/Ydodaj nad głową Warp Deformer i na skrajnych kluczach lekko „przesuń” twarz w stronę obrotu (bliższa strona szersza, dalsza węższa). - Tak samo deformer
BodydlaParamBodyAngleX(zakres ±10 — ciało rusza się mniej niż głowa).
9. Parametry krok po kroku
Schemat zawsze ten sam: zaznacz obiekt → wybierz parametr → Add 2 keys / Add 3 keys → ustaw suwak na skraj → zmień kształt / przezroczystość.
Mruganie: ParamEyeLOpen, ParamEyeROpen (0 = zamknięte, 1 = otwarte)
- Przy 1: widoczne
eyewhite,irides,eyelash;~eyelid_closed_lniewidoczna. - Przy 0:
eyewhite,irides,eyelashprzezroczyste (opacity 0),~eyelid_closed_lwidoczna. - Najprostsza metoda dla pierwszego modelu to właśnie podmiana przez przezroczystość. Ładniejsza (Część II): przy 0 zgnieść rzęsy siatką w kreskę.
- Powtórz dla prawego oka z warstwami
_r.
Patrzenie: ParamEyeBallX, ParamEyeBallY (−1 … +1)
- Najpierw maska: zaznacz
irides_l→ w Inspectorze w polu Clipping wpisz ID ArtMeshaeyewhite_l. To samo dlairides_r←eyewhite_r. Teraz tęczówka nie wyjdzie poza białko. - Dodaj 3 klucze i przesuń tęczówki o tyle pikseli (wyliczone z
wise-one-v1-3x-gaze.json, już ×3):
| w lewo (X=−1) | w prawo (X=+1) | w górę (Y=+1) | w dół (Y=−1) | |
|---|---|---|---|---|
lewe oko (irides_l) |
ok. −49 px | ok. +53 px | ok. −39 px | ok. +50 px |
prawe oko (irides_r) |
ok. −57 px | ok. +44 px | ok. −47 px | ok. +42 px |
(Wartości „w górę/w dół” to przesunięcie w pikselach obrazka — minus = w górę.)
Warstwy ~eyes_left/right/up/down pokazują, jak to ma wyglądać.
Usta: ParamMouthOpenY i ParamMouthForm
ParamMouthOpenY(0 = zamknięte, 1 = otwarte): przy 0 widocznemouth, przy 1 —~mouth_A(albo~mouth_O). To ten suwak porusza ustami, gdy postać „mówi” (lip-sync).ParamMouthForm(−1 … +1): −1 =~mouth_pout, +1 =~mouth_smile.~mouth_I,~mouth_E,~mouth_Umogą posłużyć jako kształty pośrednie.
Oddech: ParamBreath (0 … 1)
Na deformerze Breath: przy 1 lekko unieś ramiona i tors (kilka pikseli w górę). Mniej znaczy lepiej.
Dodatki (gdy podstawy działają)
| Parametr | Warstwy | Jak |
|---|---|---|
ParamBrowLY/RY, ParamBrowLAngle/RAngle, ParamBrowLForm/RForm |
eyebrow_* ↔ ~brow_surprised/angry/sad_* |
wzorce jako skrajne klucze |
ParamCheek |
~face_blush |
0–1, sama przezroczystość |
ParamEarFlat (własny parametr) |
ears_l/r ↔ ~ears_flat_l/r |
przy 1 ukryj zwykłe uszy |
ParamHairFront, ParamHairBack |
front_hair, back_hair |
pod fizykę (sekcja 10) |
10. Fizyka włosów (opcjonalnie)
- Na
front_hairiback_hairdodaj klucze dlaParamHairFront/ParamHairBack(włosy lekko wychylone w lewo przy −1 i w prawo przy +1). - Otwórz ustawienia fizyki (menu Modeling → Physics). Wejście:
ParamAngleX,ParamBodyAngleX; wyjście:ParamHairFront,ParamHairBack. Sprawdź podglądem — włosy mają „dobiegać” za głową. - Uwaga: grzywka jest w v1 jednym kawałkiem, więc kołysze się cała naraz. Pasma rozdzielimy w v2.
11. Miny i animacje
- Miny (
.exp3.json):surprised,angry,sad(brwi +~face_*),wink,blush. Każda mina to zapis kilku suwaków naraz. - Animacje (
.motion3.json):Idle— spokojny oddech i delikatny ruch głowy, odtwarzany w pętli. Robi się je w trybie Animation (przełącznik u góry okna) na osi czasu.
12. Eksport na stronę
-
Ustaw grupy specjalne (żeby strona wiedziała, czym mrugać i ruszać ustami):
- EyeBlink =
ParamEyeLOpen,ParamEyeROpen - LipSync =
ParamMouthOpenY
W 5.3 robi się to w ustawieniach Eye Blink / Lip Sync (menu Modeling). Jeśli nazwa jest inna, szukaj pozycji ze słowem „Eye Blink”.
- EyeBlink =
-
File → Export For Runtime → Export as moc3 file:
- rozmiar tekstury 4096 (dla Lunety wystarczy 2048),
- zaznacz eksport fizyki i
model3.json, - katalog:
C:\wise-one\runtime\.
-
Miny i animacje eksportujemy osobno (z trybu Animation) do tego samego katalogu.
-
W katalogu powinny się znaleźć:
*.moc3,*.model3.json,*.physics3.json, tekstury*.png,*.exp3.json,*.motion3.json. -
Gotowe pliki odbiera ariku-pc (scp z
C:\wise-one\runtime\) i wstawia na ariku.pl / do Lunety.
13. Najczęstsze problemy
| Objaw | Przyczyna | Co zrobić |
|---|---|---|
| Edytor zamknął się przy starcie | kliknięto „Open” w oknie aktualizacji | uruchom ponownie, wybierz Cancel |
Brak grupy ~variants |
ukryte warstwy nie weszły przy imporcie | sprawdź import PSD, nie idź dalej |
| Tęczówka wychodzi poza oko | brak clippingu | irides_* → Inspector → Clipping = eyewhite_* |
| Dziury przy obrocie głowy | za mało siatki / za duży zakres | gęstsza siatka, mniejszy wychył kluczy |
| Na stronie postać nie mruga | brak grupy EyeBlink | sekcja 12.1 i ponowny eksport |
| Usta nie ruszają się przy mowie | brak grupy LipSync albo inna nazwa parametru | parametr musi się nazywać ParamMouthOpenY |
CZĘŚĆ II — DLA ZAAWANSOWANYCH
14. Architektura pipeline'u i podział ról
Decyzja z 2026-10-17: każde narzędzie robi to, w czym jest najlepsze, a człowiek zatwierdza każdy etap.
| Co | Narzędzie | Dlaczego tak |
|---|---|---|
| Obraz bazowy i edycje 1:1 (oczy, usta, brwi, uszy, części zasłonięte) | ChatGPT (generowanie/edycja obrazów), prompty w chatgpt/PROMPTY.md |
najlepiej trzyma styl i pozę przy edycji; właściciel pobiera wyniki do ~/Downloads |
| Maski warstw i głębia | ComfyUI + See-through (scripts/comfy_run.py, workflowy w workflows/) |
rozkłada postać anime na semantyczne warstwy razem z częściami zasłoniętymi |
| Piksele warstw, poprawki, złożenie, PSD | skrypty Pythona (scripts/), venv /mnt/nvme/ai/comfy-venv |
deterministyczne, powtarzalne, sprawdzalne liczbowo |
| Rig | Cubism Editor 5.3 PRO, ręcznie | siatek, deformerów, kluczy i fizyki nie da się sensownie zautomatyzować |
| Runtime | pixi.js 6 + pixi-live2d-display 0.4 + Cubism Core | stabilny, przetestowany stos dla Cubism 4/5 .moc3 |
Pliki robocze leżą poza gitem (/mnt/nvme/ai/wise-one/ na ariku-pc); assets/design/ w Lunecie
również nie jest commitowany bez prośby właściciela.
Bramki (G) — bez akceptu nie idziemy dalej
| Etap | Wynik | Bramka |
|---|---|---|
| E1 baza | jedna postać, bez tekstu i tła, oczy w pełni otwarte, usta zamknięte | zamrożona — od teraz wszystkie edycje robimy od niej |
| E2 edycje ChatGPT | ~20 wariantów 1:1 | każda edycja oceniona: sylwetka bez zmian? |
| E3 See-through | warstwy na pełnym płótnie | kontaktówka warstw |
| E4 czyszczenie | poprawione twarz, szyja, tors, rękawy, łysa głowa | compose_check.py: złożenie ≈ baza |
| E5 ruch i mimika | warianty, tęczówki, powieki, brwi, usta, uszy, gaze.json |
kontaktówka + podgląd |
| E6 PSD | wise-one-v1-3x.psd 3072×4608 |
import w Cubism, ~variants obecna |
| E7 rig | .cmo3 + eksport runtime |
test na stronie |
Do przeglądu każdej bramki: contact_sheet.py (kontaktówka warstw na szachownicy) + composite i diff.png.
15. ChatGPT — obraz bazowy i edycje
Obraz bazowy (E1) — wymagania
- Jedna postać, frontalnie lub lekko 3/4, kadr od pasa w górę (v1), bez tekstu, logo i tła (jednolite tło, najlepiej jasne/neutralne — łatwiej wyciąć).
- Oczy szeroko otwarte, usta zamknięte, neutralna mina. To stan „0” wszystkich parametrów.
- Ręce nie zasłaniają twarzy ani tułowia; włosy nie przecinają oczu (grzywka może zakrywać brwi częściowo, ale wtedy brwi trzeba osobno dorysować).
- Czysty, kreskówkowy styl z wyraźnym konturem — See-through radzi sobie z nim najlepiej.
- Po akceptacji baza jest zamrożona. Każda późniejsza poprawka bazy unieważnia wszystkie edycje.
Edycje 1:1 (E2) — reguła numer jeden
Każda edycja ma zmieniać tylko jedną rzecz. Szablon promptu, którego się trzymamy:
Edytuj załączony obraz. Zmień TYLKO: <co dokładnie>.
Kadr, poza, proporcje, styl, kolory, oświetlenie, tło i wszystkie pozostałe szczegóły
mają pozostać identyczne piksel w piksel. Nie przesuwaj, nie skaluj, nie poprawiaj niczego innego.
Lista edycji, które robiliśmy (pełne prompty: chatgpt/PROMPTY.md w repo Lunety):
| Grupa | Edycje | Po co |
|---|---|---|
| Oczy | zamknięte powieki (edit-01), spojrzenie w lewo / prawo / górę / dół | mruganie, zakresy ParamEyeBall*, gaze.json |
| Usta | A, I, U, E, O, uśmiech, „dzióbek” (pout) | lip-sync i ParamMouthForm |
| Brwi / twarz | zdziwienie, złość, smutek, mrugnięcie, rumieniec | miny .exp3.json |
| Uszy | uszy położone płasko | własny ParamEarFlat |
| Części zasłonięte | bez grzywki (skóra czoła), bez włosów (łysa głowa), sama kurtka, tors bez rąk (edit-14), bez dłoni | żeby przy ruchu pod spodem nie było dziur |
Słaba edycja = odrzucić i powtórzyć mocniejszym promptem, nie łatać. Typowe błędy ChatGPT: lekko przesunięta lub przeskalowana postać, zmieniona fryzura, inna grubość konturu, „poprawione” dłonie. Drobne przesunięcie skrypty wyrównają (ECC), ale zmienionej sylwetki — już nie.
Wskazówki:
- Wgrywaj zawsze bazę, nie poprzednią edycję — inaczej błędy się kumulują.
- Przy częściach zasłoniętych (bez grzywki, łysa głowa) dopisz, co ma się pojawić w miejscu usuniętej rzeczy („gładkie czoło w kolorze skóry”, „kształt czaszki”).
- Nazwy plików od razu porządkuj (
edit-01-eyes-closed.pngitd.) — skrypty biorą je po nazwie.
16. ComfyUI + See-through (E3)
See-through rozkłada pojedynczy obraz postaci anime na warstwy semantyczne (włosy przód/tył, oczy, twarz, ubranie…) i szacuje głębię, dorysowując części zasłonięte.
- Uruchamiamy przez
scripts/comfy_run.pyz workflowem zworkflows/. - Rozdzielczość 1024. Przy 1280 VAE pada na XPU (Intel Arc) — nie próbuj wyżej, skalujemy później.
- Zasoby: szczyt RAM ~23 GB, VRAM ~10 GB, ~4,5 min na przebieg. Nie odpalać przy uruchomionej grze.
- Dwa przebiegi:
- ciało — cała baza,
- głowa — wycinek głowy (większe oczy/usta = dokładniejsze maski małych części).
- Składanie na wspólne płótno:
split_to_canvas.py --pixels base [--full-size WxH --offset x,y]— piksele widoczne bierzemy z bazy (ostrzejsze, wierne), a z See-through tylko maski i części zasłonięte.
17. Czyszczenie warstw (E4)
| Skrypt | Co robi |
|---|---|
fix_face.py |
skóra twarzy/czoła z edycji „bez grzywki” — żeby pod grzywką była prawdziwa skóra |
fix_back_neck.py |
dorysowana tylna część szyi (widoczna przy obrocie głowy) |
topwear_from_edit.py |
tors/kurtka z edycji „sama kurtka” |
cut_arms_head.py |
rękawy, dłonie i łysa głowa wycięte z odpowiednich edycji |
defringe.py |
usuwa jasne/ciemne obwódki na krawędziach alfy (halo po wycinaniu) |
compose_check.py |
składa wszystkie warstwy i porównuje z bazą: średnia różnica ma być mała, diff.png do obejrzenia |
Mechanizm „edycja → warstwa”: edycja z ChatGPT jest wyrównywana do bazy algorytmem ECC (OpenCV, dopasowanie afiniczne), potem liczona jest różnica i z niej powstaje maska nowej części. Dlatego edycje muszą być 1:1 — ECC skoryguje przesunięcie o kilka pikseli, ale nie inną pozę.
18. Ruch i mimika (E5)
| Skrypt | Wynik |
|---|---|
diff_layers.py |
warianty (brwi, twarze, rumieniec) z edycji jako osobne warstwy ~... |
eye_rig.py |
tęczówki oddzielone od białek, zamknięte powieki, brwi, gaze.json |
mouth_shapes.py |
~mouth_A/I/U/E/O/smile/pout |
ears_flat.py |
~ears_flat_l/r |
gaze.json zawiera środki tęczówek i przesunięcia (left/right/up/down) zmierzone z edycji „patrzy w…”.
Wartości są w pikselach płótna 1024 — dla PSD 3x mnożymy ×3 (stąd tabela w sekcji 9).
19. Budowa PSD (E6) — wymagania „Live2D-ready”
upscale_layers.py (RealESRGAN ×3 na XPU) → PSD_SRC=up3 build_psd.py OUT.psd.
Wymagania, które skrypt spełnia, a które warto znać przy ręcznym PSD:
- Każda część na osobnej warstwie, każda warstwa w pełnym rozmiarze płótna (pozycje się nie rozjeżdżają).
- Bez masek przycinających, efektów warstw i warstw dopasowania — Cubism ich nie importuje (albo importuje źle). Wszystko zrasteryzowane, tryb mieszania Normal.
- RGB, 8 bit, przezroczyste tło.
- Unikalne nazwy ASCII warstw — stają się ID ArtMeshy.
- Części zasłonięte dorysowane (skóra pod grzywką, łysa głowa, tors pod rękami).
- Warianty w ukrytej grupie
~variants— Cubism je importuje, ale nie pokazuje na starcie. - Grupy i kolejność rysowania ustawione w
ORDERwbuild_psd.py. - Rozdzielczość: 1024 z See-through to za mało na teksturę 4096 → upscale ×3 do 3072×4608.
20. Rig dla zaawansowanych
Siatki
- Auto Mesh na start, potem ręcznie: gęściej oczy, usta, grzywka, rzadziej duże płaskie powierzchnie.
- Punkty siatki kładź na krawędziach kształtu i liniach zgięcia (np. wzdłuż powieki) — wtedy deformacja nie „pływa”.
- Glue (sklejanie siatek) dla części, które muszą się stykać (szyja–twarz, rękaw–dłoń).
Hierarchia deformerów
Body_Rotation (ParamBodyAngleZ)
└─ Body_Warp (ParamBodyAngleX/Y)
├─ Breath_Warp (ParamBreath) ── topwear, sleeve_*, hand_*
├─ neck
├─ BackHair_Warp (ParamHairBack) ── back_hair
└─ Head_Rotation (ParamAngleZ, pivot na szyi)
└─ Face_Warp (ParamAngleX/Y)
├─ Eye_L_Warp / Eye_R_Warp ── eyewhite, irides, eyelash, ~eyelid_closed
├─ Brow_L / Brow_R ── eyebrow_*
├─ Mouth_Warp ── mouth, ~mouth_*
├─ ears_*
└─ FrontHair_Warp (ParamHairFront) ── front_hair
- Rotation dla obrotów wokół punktu (
AngleZ,BodyAngleZ), Warp dla „pseudo-3D” (AngleX/Y). - Przy
ParamAngleX+ParamAngleYnaraz robi się 2D keyform (siatka 3×3 kluczy). Skrajne rogi (np. X=30, Y=30) często trzeba ręcznie poprawić — automat liczy je jako mieszankę, co daje „spłaszczenie”. - Włosy z tyłu ruszają się przeciwnie do twarzy przy
AngleX(paralaksa) — to daje wrażenie głębi.
Ładniejsze mruganie
Zamiast samej przezroczystości: przy EyeOpen=0 zgnieć siatkę rzęs w łuk zamkniętej powieki, białko
i tęczówkę przytnij (clipping) do obrysu oka — przy wartościach pośrednich oko zamyka się płynnie,
a nie „przenika”. Klucz pośredni 0.5 pomaga uniknąć „pustego” oka w połowie mrugnięcia.
Opcjonalnie ParamEyeLSmile/RSmile — oczy-łuki przy uśmiechu.
Usta i lip-sync
ParamMouthOpenY×ParamMouthFormto również siatka 2D (otwarcie × kształt). Minimum: 2×3 klucze.- Kształty samogłosek (
~mouth_A/I/U/E/O) można wpiąć jako klucze pośrednie albo — w PRO — użyć Motion Sync (lip-sync na podstawie samogłosek z dźwięku) zamiast samej głośności.
Multiply / Screen color
ArtMesh może mieć kolor mnożony/ekranowy sterowany parametrem — tak robi się np. rumieniec bez osobnej warstwy albo przyciemnienie postaci w Lunecie. Runtime (pixi-live2d-display 0.4) obsługuje to tylko częściowo — testuj przed użyciem.
Fizyka
- Modeling → Physics (ustawienia fizyki i scen). Grupa = wejścia (
ParamAngleX/Z,ParamBodyAngleX/Z) → wahadło (długość, sztywność, opór) → wyjście (ParamHairFront,ParamHairBack, ew. ucho/kokarda). - Dłuższe wahadło = wolniejszy, „cięższy” ruch. Grzywka: krótkie, sztywne; włosy z tyłu: dłuższe.
- Eksport fizyki →
*.physics3.json.
Template (PRO)
Gdy automatyczna mimika nie rozpoznaje warstw, można nałożyć szablon z gotowego modelu (np. Hiyori z Cubism SDK Samples) — przenosi deformery i klucze, które potem dopasowujemy ręcznie. Działa najlepiej, gdy podział warstw jest podobny do szablonu.
21. Animacje i miny
- Tryb Animation → nowa scena → oś czasu, klucze parametrów w czasie.
Idle(pętla, 4–8 s):ParamBreathsinusoidalnie, delikatnyParamAngleX/Z(±3–5), od czasu do czasuParamEyeBall*. Mruganie nie w animacji — robi je runtime (grupa EyeBlink).Tap(v2): reakcja na kliknięcie, np. znak pokoju.- Miny: ustawiasz suwaki (brwi,
ParamCheek,~face_*) i zapisujesz jako expression →.exp3.json. - Eksport: File → Export For Runtime → motion3.json / exp3.json, do tego samego katalogu co model.
- W
model3.jsonmotions są w grupach (Idle,TapBody…) — nazwy grup to te, których używa kod.
22. Eksport — szczegóły
- Atlas tekstur: przy eksporcie Cubism składa ArtMeshe w atlas. 4096 dla strony; dla Lunety 2048 (mniej VRAM, wystarczy przy mniejszym oknie). Sprawdź, czy nic nie zostało przeskalowane za mocno.
model3.jsonmusi zawieraćGroups:EyeBlink=ParamEyeLOpen,ParamEyeROpen;LipSync=ParamMouthOpenY. Bez tego runtime nie mruga i nie rusza ustami.HitAreas(opcjonalnie) — obszary klikalne (Head,Body) do reakcji na dotyk.- Projekt
.cmo3trzymamy wC:\wise-one\, eksport wC:\wise-one\runtime\→ scp na ariku-pc (/mnt/nvme/ai/wise-one/e7-rig/runtime/).
23. Runtime: strona i Luneta
Stos (wersje przypięte): pixi.js@6.5.10 + pixi-live2d-display@0.4.0 (Cubism 4/5 .moc3)
- Cubism Core
live2dcubismcore.min.js. pixi-live2d-display 0.4 wymaga PIXI v6, nie v7+.
// Core musi być załadowany przed importem (window.Live2DCubismCore).
await loadScript(coreUrl); // <script src> z ariku.pl / asset protocol Tauri
import * as PIXI from 'pixi.js';
import { Live2DModel } from 'pixi-live2d-display/cubism4';
(window as any).PIXI = PIXI; // pixi-live2d-display używa globalnego tickera
const app = new PIXI.Application({ view: canvas, backgroundAlpha: 0, autoStart: true, resolution: devicePixelRatio });
app.ticker.maxFPS = 30; // tanio
const model = await Live2DModel.from('/live2d/wise-one/wise-one.model3.json');
app.stage.addChild(model);
| Efekt | Jak |
|---|---|
| Mruganie, oddech | automatycznie, gdy model3.json ma grupę EyeBlink i parametr ParamBreath |
| Śledzenie kursora | model.focus(x, y) na pointermove (ParamAngleX/Y, ParamEyeBallX/Y) |
| Idle | model.motion('Idle') |
| Mina | model.expression('surprised') |
| Lip-sync | AnalyserNode → RMS co klatkę → coreModel.setParameterValueById('ParamMouthOpenY', v) w beforeModelUpdate |
| Pauza | document.visibilitychange → app.ticker.stop()/start() |
Luneta (Tauri): komponent src/components/Live2DView.tsx; model i Core z katalogu danych
(convertFileSrc / asset protocol) — dopisać zakres w tauri.conf.json (assetProtocol.scope) i CSP
(script-src dla Core). Brak Core lub modelu → statyczny obraz (splash), bez błędu. Nakładka nad grą
tylko informacyjna — kliknięcia przechodzą do gry. Animacja tylko przy widocznym oknie, FPS ograniczony
(ENGINEERING-RULES §36).
ariku.pl: model i Core jako pliki statyczne; ta sama inicjalizacja, autoInteract tylko na hover,
prefers-reduced-motion → bez Idle.
Test: najpierw darmowy model przykładowy (Hiyori z Cubism SDK Samples), potem Wise One: renderuje się, śledzi kursor, mruga, przy ukrytym oknie FPS = 0.
24. Licencje — ważne
- Cubism Core (
live2dcubismcore.min.js) jest zamknięty (licencja Live2D Proprietary Software). Nigdy do publicznego repo — Luneta jest na MIT. Ładujemy go z ariku.pl albo z dysku użytkownika. - Cubism SDK for Web (Framework) ma własną licencję; przy publikacji komercyjnej powyżej progu przychodów Live2D wymaga umowy — sprawdź aktualne warunki przed wydaniem.
- Edytor: trial PRO 42 dni; plików
.cmo3zapisanych w PRO nie da się w pełni edytować w FREE, jeśli przekraczają limity FREE. - Obrazy z ChatGPT — zgodnie z warunkami OpenAI; postać jest nasza.
25. Jak to przebiegało u nas (dziennik Wise One v1)
| Kiedy | Gdzie | Co |
|---|---|---|
| przed 2026-10-17 | ChatGPT | obraz bazowy Wise One (E1) zamrożony; ~20 edycji 1:1 (oczy, usta, brwi, miny, uszy, części zasłonięte) |
| ariku-pc (Linux, Intel Arc/XPU) | See-through w ComfyUI (ciało + głowa, 1024), czyszczenie, mimika, gaze.json, upscale ×3, wise-one-v1-3x.psd |
|
| wnioski: 1280 w See-through pada w VAE na XPU; edycja „tors bez rąk” (edit-14) wyszła słabo; grzywka została jednym blokiem | ||
| 2026-10-17 | felix-pc (Windows) | instalacja Cubism Editor 5.3, aktywacja triala PRO; UI po japońsku → przełączone na English (restart) |
| 2026-10-17 | felix-pc | okno „nowa wersja” — kliknięcie 開く zamknęło edytor; od tej pory zawsze Cancel |
| 2026-10-17 | felix-pc | próba riggingu przez asystenta (computer use) — okno Javy wymagało osobnej zgody; decyzja: rig robi właściciel sam, asystent pisze poradnik |
| 2026-10-17 | wiki | ten poradnik |
Co warto zrobić inaczej od początku (lekcje):
- Zaplanować warstwy przed bazą — np. grzywka na 3–5 pasm już w obrazie bazowym, ręce opuszczone.
- Robić edycje części zasłoniętych od razu, a nie dopiero przy czyszczeniu.
- Testować runtime na Hiyori, zanim rig Wise One będzie gotowy — błędy integracji wychodzą wcześniej.
- Trial PRO odpalać dopiero, gdy PSD jest gotowy — 42 dni szybko mijają.
26. Znane braki v1 i plan v2
- Grzywka i boczne włosy to jeden blok — fizyka „sztywniejsza”. v2: pasma osobno.
- Postać tylko od pasa w górę. v2: pełna postać.
- Tors bez rąk (pod rękawami) słabej jakości — nie podnosić rąk za wysoko. v2: lepsza edycja.
- Brak animacji
Tap. v2: znak pokoju po kliknięciu.
27. Checklista końcowa
- PSD zaimportowany,
~variantsobecna - siatki (gęściej oczy/usta/grzywka)
-
ParamAngleX/Y/Z,ParamBodyAngleX,ParamBreath -
ParamEyeLOpen/ROpen,ParamEyeBallX/Y(clipping tęczówek) -
ParamMouthOpenY,ParamMouthForm - (opcja) brwi,
ParamCheek,ParamEarFlat, fizyka włosów - miny
.exp3.json, animacjaIdle - grupy EyeBlink / LipSync
- eksport do
C:\wise-one\runtime\, test na Hiyori → test Wise One - Cubism Core poza publicznym repo