Modèle Live2D à partir d'un seul dessin
Ce kit transforme un dessin d'un personnage en pied en un modèle Live2D qu'une application comme AIRI ou Open-LLM-VTuber peut charger. Les scripts font le travail. Votre rôle est d'exécuter les étapes dans l'ordre, d'examiner le résultat de chacune et de corriger ce qui ne va pas avant que l'étape suivante ne s'appuie dessus. Un défaut que vous laissez passer tôt (un calque mal placé) se manifeste plus tard sous une forme beaucoup plus difficile à tracer (une jambe derrière un manteau).
Tout se fait avec une seule commande, exécutée depuis le projet :
python <ce_dossier>/live2d.py <étape> <nom> ...
<nom> est le nom du dossier du personnage. live2d.py choisit le Python nécessaire à chaque étape et affiche
la commande qu'il exécute. Lisez README.md dans ce dossier une fois avant votre premier personnage : il contient
les téléchargements, le fichier de paramètres, chaque étape avec sa commande, et le tableau des corrections de calques. Ce fichier
est votre guide pour bien progresser.
Il existe aussi une interface graphique pour les humains (live2d.py gui : les mêmes étapes sous forme de boutons dans une page) ; un agent doit utiliser les commandes.
Avant toute chose
- Exécutez
live2d.py check. Il indique ce qui est installé et ce qui manque pour quelle étape. Si quelque chose manque, dites à l'utilisateur quoi et d'où cela vient (README, « Ce dont vous avez besoin »). Les téléchargements pèsent plusieurs gigaoctets : demandez avant d'en lancer un. Dans un projet où le kit n'a pas encore été utilisé (check indique qu'il n'y a pas delive2d-kit.json), exécutez d'abordlive2d.py initdepuis le dossier racine du projet. Il crée le fichier de paramètres, un fichier d'apparence et le pointeur de cette compétence, et ne modifie rien de ce qui existe déjà.init --like <autre_projet>copie les chemins des outils depuis un projet qui les a déjà. - Exécutez
live2d.py status <nom>. Il coche les étapes effectuées et donne le nom de la prochaine commande. Utilisez-le à chaque fois que vous reprenez un personnage, plutôt que de deviner à partir des fichiers. - Demandez à l'utilisateur avant une étape qui utilise la carte graphique (draw, cutout, upscale, split). Ces
étapes ont besoin de la carte pour elles seules, et l'utilisateur peut être en train d'exécuter quelque chose dessus.
splitprend environ 10 minutes par passage sur une carte libre, et peut prendre des heures si quoi que ce soit d'autre en occupe une partie : dites-le, et exécutez-le en arrière-plan. draw --runpodcoûte de l'argent. Utilisez-le uniquement lorsque l'utilisateur le demande.- Démarrez et arrêtez uniquement ce que vous avez démarré.
live2d.py comfy statusindique si ComfyUI est en cours d'exécution et qui l'a démarré : ce projet, ou un autre dossier (dans ce cas, c'est celui d'un autre : utilisez-le, mais ne l'arrêtez pas).comfy stoparrête uniquement celui quecomfy startde ce projet a démarré. Arrêtez le vôtre une fois les étapes de dessin, de découpage et de mise à l'échelle terminées.
Les étapes et ce qu'il faut vérifier après chacune
| Étape | Commande | C'est correct quand... |
|---|---|---|
| Dessiner | comfy start, puis draw <tour> --character <nom> --seeds ... | L'utilisateur en choisit un. Montrez-lui la planche contact. Ne choisissez pas à sa place sauf s'il le demande |
| Choisir | pick <nom> <image> | Le dessin correspond à « Un dessin qui se rigge » dans le README. Si ce n'est pas le cas (bras sur le corps, jambes serrées, un accessoire dans la main), dites ce qui va mal se passer avant de continuer |
| Découpage, mise à l'échelle | cutout <nom>, upscale <nom>, comfy stop | full/cutout.png montre tout le personnage et aucun arrière-plan. Un dessin provenant de draw a sa propre transparence : pick a déjà fait le découpage, donc cutout ne fait rien et seul upscale est nécessaire |
| Séparation | split <nom> body | Il affiche ses calques. Attendez-vous à environ 17 : cheveux, visage, yeux, sourcils, nez, bouche, cou, vêtements, bras, jambes, chaussures |
| Vérifier les calques | layers check <nom> | Le nombre est de quelques milliers de pixels de contour fin. Regardez l'image qu'il sauvegarde. Un bloc de rouge uni est un calque qui recouvre ce qu'il ne devrait pas |
| Passage de la tête | split <nom> head, layers scale <nom> 2, layers head ..., layers under <nom> neck face | layers check à nouveau : le nombre ne doit pas augmenter brusquement. Le calque de son visage doit s'aligner avec le visage de son dessin |
| Parties | parts closed-eyes <nom>, parts mouth <nom> | Ses calques incluent maintenant eye_close et mouth_open. Quelle bouche ouverte et quel rougissement elle a sont une question de goût de l'utilisateur : faites parts mouth-sheet <nom> et parts blush-sheet <nom>, montrez-lui les deux images, et laissez-le choisir un numéro (le README, « Bouches et rougissements »). Si la bouche est trop grande, trop petite, trop haute, trop basse ou inclinée, --size, --down, --right et --turn la corrigent, d'abord sur mouth-sheet pour les montrer ; le rougissement accepte --size, --in, --down et --turn de la même manière. parts mouth-oh <nom> lui donne une bouche en « O » pour les expressions effrayées et surprises. Si sa bouche fermée est trop fine ou trop peu visible, parts mouth-line <nom> --try montre un redessin, parts mouth-line <nom> le crée, puis refaites parts mouth <nom> |
| Construction | build <nom> | Lisez ce qu'il affiche (ci-dessous) |
| Visualisation | view, puis vérifiez les planches (ci-dessous) | La liste dans le README, « Essayer son modèle » |
La description du personnage vient du fichier d'apparence du projet (check indique où il se trouve ; le
README, « Apparences et styles », a son format). Écrivez son apparence là-dedans, ou modifiez-la là-dedans, avant de
dessiner : c'est l'endroit unique qui décrit à quoi elle ressemble, afin que le tour suivant et l'agent suivant dessinent
le même personnage. Une apparence comprend seulement ses cheveux, ses yeux, sa corpulence et ses vêtements. Le kit ajoute le cadrage et
la pose elle-même, et une apparence qui les répète, ou qui demande une autre pose, va à l'encontre du rig.
draw ... --show affiche le prompt complet sans dessiner : lisez-le avant d'utiliser la carte graphique pour un tour. --look "..." est pour un usage unique.
Après la séparation, regardez une fois chaque image de calque dans <characters>/<nom>/layers/full/parts/. Vous
cherchez trois choses : un calque qui contient deux éléments qui doivent bouger séparément (le devant d'un manteau et l'intérieur de son dos), un calque dans le mauvais ordre, et une paire (bras, jambes, yeux) qui est ressortie comme une seule forme. Le README, « Corriger les calques », explique quoi faire pour chacun. Mettez la raison d'un paramètre dans son
live2d.json sous "why" : la personne suivante ne peut pas voir ce que vous avez vu.
Lire ce que build affiche
head: her head turned -9.9 degrees ...: à quel point il a redressé sa tête. « No pair of eyes or brows » signifie qu'un calque d'œil n'a pas été séparé en gauche et droite : corrigez d'abord ce calque.head turn: 13_face_base as face; 16_accessory as glasses; ...: ce qu'il a pris pour chaque partie de la tête. Une partie prise pour la mauvaise chose bouge mal : des lunettes qui ne sont pas répertoriées comme lunettes dériveront de ses yeux.body: her feet at ..., knees ..., hips ..., neck ...; 2 arms that bend, 2 legs that bend; ...: 0 bras ou 0 jambes signifie que cette paire est une seule forme dans ses calques. Feet at 0.000 signifie un pixel errant en bas d'un calque.hair: 6 sections that swing each by itself (...): comment ses cheveux ont été divisés. Une section pour l'avant et une pour l'arrière signifie que ses cheveux sont étroits, ou que leur calque est en morceaux : ce n'est pas un défaut.in the texture at the head pass's own size: face, eyelash, ...: les parties de la tête qui sont entrées dans sa texture en net. Aucune ligne de ce type signifie qu'elle n'a pas de copies nettes :layers sharp <nom>les crée à partir de son PSD de tête conservé.changed since the head passnomme les calques de tête édités après celui-ci, qui sont utilisés à la taille de son cadre : c'est correct, pas un défaut.
Vérifier son modèle sans regarder l'écran
Démarrez le visualiseur (live2d.py view, en arrière-plan) et ouvrez
http://127.0.0.1:8777/live2d/ dans un outil de navigateur. La page a window.sheets, qui dessine
des images légendées des poses tenues, des trames de mouvement et des expressions et les sauvegarde sous forme de fichiers que vous pouvez
lire. Il relit les pixels du rendu, donc il est correct même lorsque la page est cachée. Une
capture d'écran d'une page cachée ne l'est pas : elle montre des images obsolètes.
const u = "/live2d/models/akane-full/model/model.model3.json";
await sheets.poses([
["face", u, /face/i, 2.6, [["rest", {}], ["turn", {ParamAngleX: 30, ParamEyeBallX: 1}],
["half shut", {ParamEyeLOpen: 0.5, ParamEyeROpen: 0.5}], ["tilt", {ParamAngleZ: -30}]]],
["body", u, [0.15, 0, 0.85, 1], 0, [["rest", {}], ["sway", {ParamBodyAngleX: 10}],
["arms", {ParamArmLA: 10, ParamArmLB: -10}], ["knee", {ParamLegLB: 10}]]],
], 200, 300);
await sheets.save("akane-check"); // -> <out>/live2d/checks/akane-check.png
await sheets.expressions(u, ["(none)", "happy", "tired", "blushing", "angry", "scared"], /face/i, 1.6, 133, 170);
await sheets.save("akane-expressions");
await sheets.motion(u, "TapHead", /face/i, 1.6, 133, 170, 6, 13);
await sheets.save("akane-taphead");
sheets.done();
Un cadre est [x0, y0, x1, y1] en parts de la boîte du modèle, ou un motif pour le nom d'un élément dessinable
(/face/i, /neck/i) avec un zoom. Passez un fond vert ("#30c060" comme dernier argument de
poses) lorsque vous cherchez des espaces vides : un espace vide montre du vert.
Regardez attentivement les images. Zoomez sur l'endroit où un défaut pourrait se trouver (le menton, la taille, un œil) plutôt que de juger à partir d'une vignette du personnage entier : la plupart des défauts trouvés jusqu'à présent faisaient quelques pixels de large. Vérifiez les deux extrémités de chaque mouvement, et deux mouvements ensemble (une rotation avec un regard, un soulèvement avec une flexion), car c'est là que les parties se séparent les unes des autres.
Lorsque vous montrez un résultat à l'utilisateur, envoyez-lui l'image et dites clairement ce que vous avez vérifié et ce que vous n'avez pas vérifié. Le visualiseur n'est pas l'application : dites-le si vous ne l'avez pas vue dans l'application.
Quand quelque chose semble anormal
- Trouvez de quelle partie il s'agit. Maintenez la pose avec les curseurs, ou créez une planche zoomée dessus.
- Décidez où se trouve le défaut. Il est dans ses calques si l'image de la partie est fausse, coupée court, dans le mauvais ordre, ou porte quelque chose qui appartient à une autre partie. Il est dans le rig si ses calques sont corrects et qu'elle bouge mal.
- Cherchez-le dans
references/problems.md. Il répertorie ce qui a déjà mal fonctionné, pourquoi, et la correction. - Les défauts de calques sont corrigés avec des commandes
layersou sonlive2d.json, puisbuildà nouveau. - Les défauts de rig que tous les personnages auraient sont corrigés dans
scripts/rig.py, où chaque nombre et tableau a un commentaire expliquant pourquoi il est ce qu'il est. Ajoutez votre raison lorsque vous en changez un. Un défaut qu'un seul personnage a appartient à sonlive2d.json, lu parrig.py. - Construisez, rechargez la page, refaites la même planche et comparez. Le rechargement est important : la page garde le modèle qu'elle a chargé, donc une planche faite sans rechargement le montre tel qu'il était avant la construction.
Soyez prudent avec une correction qui touche plus que ce que vous vouliez. Avant de modifier un calque pour tous les personnages, vérifiez si les autres avaient le problème : une correction a ici peint des rayures sombres dans des cheveux qui n'avaient rien de mal.
Changer sa façon de bouger, ou ce qu'elle peut montrer
Le README, « Changer sa façon de bouger », associe chaque chose à son nom dans scripts/rig.py.
Les expressions sont EXPRESSIONS, les réactions aux clics sont TAPS, et les mouvements d'émotion qu'une application joue
sont EMOTIONS et BORROWED. Gardez les noms identiques pour chaque personnage, afin que les paramètres
et les prompts de l'application soient écrits une seule fois.
Jusqu'où bouger les choses est une question de goût de l'utilisateur. La directive constante du premier utilisateur de ce kit : le mouvement de la tête sert à regarder les choses, donc les traits glissent un peu et les iris font l'essentiel du regard ; le mouvement du corps est subtil et garde ses pieds au sol. Montrez une image et laissez-les décider.
Pour finir
- Dites à l'utilisateur où se trouve son modèle :
<out>/live2d/<nom>-full.zipest ce qu'une application importe. - Gardez son dessin, son découpage, son dessin mis à l'échelle et tout ce qui se trouve dans
layers/full/dans le contrôle de version. Tout ce qui se trouve dans<out>peut être refait. - Si vous avez appris quelque chose dont une exécution future aura besoin (un nouveau type de défaut et sa correction), ajoutez une ligne à
references/problems.md. - Arrêtez le visualiseur et ComfyUI si vous les avez démarrés.