18 KiB
Вид и каталог
Договорённость на срез после событий/сцены и одежды, не текущий код.
Сцена и тосты: events.md. Портреты: portrait-models.md,
portrait-prompt-craft.md. Вещи и правила: inventory.md.
Экран: near-term.md. Сессия (гость): session.md.
Протокол: protocol.md.
Игрок смотрит именованную сущность — и может попросить картинку. Каталог core перестаёт
быть «достаточным минимумом»: одежда, комнаты и правила связаны так, чтобы и генератор людей,
и генератор кадра видели одно и то же. Кадр локации больше не запрещён: это не портрет человека
без тела, а отдельный субъект.
Срез отвечает на вопросы «что можно нарисовать», «почему в промпте худи, а не только рубашка» и «какие ещё две ручки дресс-кода отбирают вещи». LLM, ControlNet и бумажной куклы нет.
Что увидит игрок
На карточке человека кнопка портрета как сейчас. На панели выбранного узла карты — «создать
картинку» кабинета, двора, коридора, если у места или его fill есть что сказать генератору.
В списке одежды, ноши и предметов локации — то же у вещи с непустым prompt. Гость смотрящей
школы жмёт те же кнопки, что хозяин: как POST .../portrait, не как pausing-notice.
В «Правилах» две новые оси на роль (ученики / сотрудники): аксессуары и обувь. Как форма и цвет — с завтрашнего рабочего утра.
Новая школа и новый набор одевают шире: худи, пиджак, кеды рядом со старой рубашкой. Живых людей молча не переодеваем.
На какие вопросы отвечает
- Какой HTTP-субъект кадра, если это не человек: узел карты и тип вещи.
- Как kind
scene/thingстыкуется с уже собранным портретом, не ломая инварианты 1, 3, 4. - Какие дефы ванили получают прозу и fill, чтобы кабинет не рисовался пустым стулом.
- Как две новые политики одежды фильтруют тот же
Appropriateness, без нового вида поведения.
Чего нет
- LLM-текста, ControlNet, позы в UI, автогенерации всем узлам утром.
- Спрайтов-слоёв и бумажной куклы: по-прежнему PNG по запросу, слои на карточке — текст и цвет.
- Картинок у часов, журнала, комбобоксов, тоста без сущности.
- Группового портрета класса с лицами конкретных учеников.
- Магазинов, одевания с карточки, новых стран, отдельного пака variety.
- Черт «любит худи» и экшена
Inspect. - Лифта живых
portraitSettingsи живого гардероба.
Что меняется в уже принятом
| Было | Стало | Почему |
|---|---|---|
Kind scene запрещён (events.md) |
Узел карты — отдельный субъект кадра | «Просматриваемое» уже есть на панели локации |
Картинка только у человека и notice с personId |
Плюс узел и вещь с непустым вкладом | Иначе кабинет и куртка только текстом |
| Одежда в промпте из локали карточки | Слой одежды берёт английский prompt с ThingDef |
RU UI не должен кормить Krea русским существительным |
| Ванильный гардероб — минимум для генератора | Закрытый расширенный список + цвета | Иначе новые правила не из чего выбирать |
| Стул и большинство комнат молчат в кадре | Ключевые Room/Thing говорят; Chair по-прежнему пустой |
Бюджет сцены; не каждый fill |
| Правила: форма × цвет (и речь сбоку) | Плюс аксессуары и обувь | Две оси, которые уже есть слоями |
«Портреты одежды не этот срез» (inventory.md) |
PNG вещи по кнопке, не спрайт на слое | Просмотр, не кукла |
| Гость генерирует портрет человека, не notice | Гость генерирует и локацию, и вещь | Смотреть чужую школу иначе слепое |
Протокол: новые HTTP маршруты узла и вещи. Версию сокета не бампим. Сейв: PNG рядом с
портретами; у правил одежды два новых поля с подъёмом free. Живые portraitSettings не
переписываем: нет kind scene/thing — fallback из опций.
Этап A — каталог
Школа целая без арта кабинета: люди разнообразнее, портрет человека уже видит худи и доску.
Гардероб
Закрытый список новых ThingDef в core (слои как в срезе 7, не новые роли):
| Def | Слой | Зачем |
|---|---|---|
Hoodie |
OverTop | Неформальный верх |
Cardigan |
OverTop | Теплее свитера, спокойнее худи |
Vest |
OverTop | Жилет, формальность выше |
Blazer |
OverTop | Пиджак; снимается отдельно от брюк |
Polo |
Top | Между футболкой и рубашкой |
Blouse |
Top | Женский верх, формальность |
Turtleneck |
Top | Водолазка |
Tights |
Socks | Колготки, sex: female |
Leggings |
Bottom | Неформальный низ, женский |
Sweatpants |
Bottom | Спортивные штаны не-PE |
Sneakers |
Shoes | Кеды, низкая формальность |
SchoolShoes |
Shoes | Школьные туфли, тег school |
Cap |
Head | Кепка, не шапка от мороза |
Headband |
Head | Ободок |
Raincoat |
Outer | Плащ; не шуба |
PeTrackPants |
Bottom | PE-низ полной длины рядом с шортами |
Новые ColorDef: Navy (neutral, school), Brown (neutral), Burgundy (neutral),
Pink (bright), Yellow (bright). Существующие вещи могут получить Navy/Brown в
colors, где это уместно (брюки, пиджак), без смены палитры на радугу.
На каждой носимой вещи, включая уже существующие TShirt / Shirt / …, заполняется
английский блок prompt (тот же вид, что у доски). Пустой — вещь в портрете человека
по-прежнему собирается из подписи; цель ванили — непустой блок, чтобы locale карточки не
текла в Swarm. Длина фрагмента как у сцены: ≤ 120 символов, иначе ошибка загрузки.
Генератор одежды включает новые def в те же броски слоёв (optionalApparelChance и выбор
низа/верха/обуви). Детерминизм: тот же сид + карта + страна → тот же ростер; состав одежды
на новой школе может отличаться от старого золотого отпечатка — фикстуру обновляет эта
фаза. Живой people.json не дополняем худи задним числом; новый набор (create / yearly
intake) — да.
Комнаты, fill, правила
Непустой prompt у ванильных мест, которые игрок реально открывает: Classroom (уже есть),
Library, ComputerLab, GymHall, Cafeteria, MedicalOffice, PrincipalsOffice,
TeachersRoom, SecretaryOffice, UtilityRoom, меняльные, SchoolYard, EntranceHall,
Corridor. Restroom — короткая проза умывальной, не кабинки крупным планом. Stairwell,
этажи и корпуса без текста молчат (кнопки не будет).
Новые fill-вещи (слоты на def комнаты и/или дефолтной карте, не свободная геометрия):
| Def | Куда |
|---|---|
PottedPlant |
класс, библиотека, кабинет директора |
WallPoster |
класс |
NoticeBoard |
холл |
GymMat |
зал |
Chair, StudentDesk, шкафчик без прозы — молчат, как сейчас. Связность: fill с текстом
попадает в сборщик сцены человека (фаза 66 уже спрашивает fill) и позже в кадр узла.
Две оси на DressRulePair, те же роли ученики/сотрудники, вступление с завтра:
| Ось | Значения | Смысл |
|---|---|---|
| Аксессуары | free / none |
none — слой Accessory в школе неуместен (ремень, шарф). Шапка от холода не аксессуар |
| Обувь | free / uniform |
uniform — обувь с тегом цвета school и формальностью не ниже обычной; кеды не в школу (PE — свой режим) |
Дефолт обеих — free, чтобы живая школа без полей вела себя как сегодня. Неизвестный код —
400, как у формы/цвета. Речь не трогаем. Новых ApparelIssue достаточно, чтобы утренний
dresser снял/заменил; ходьбу и магазины не открываем.
После этапа портрет человека уже богаче; клик по кабинету ещё может не рисовать.
Этап B — кадр с панели
Школа целая: кнопка на том, что уже открыто глазом.
Субъект
Три субъекта, не четвёртый kind портрета человека в том же URL:
| Субъект | Ключ | PNG | Сборка промпта |
|---|---|---|---|
| Человек | как сейчас | saves/{id}.portraits/ |
внешность + одежда + сцена узла |
| Узел карты | id узла | saves/{id}.images/node.{safeId}.png |
место + fill + погода, если улица; без лиц карточки |
| Вещь | defName + цвет, если есть |
saves/{id}.images/thing.{def}.{color|none}.png |
блок вещи + цвет + износ, если смотрим надетое; без человека |
HTTP (имена уточнит фаза, смысл нет):
GET/POST.../nodes/{nodeId}/imageи.../image/promptGET/POST.../things/{defName}/image?color=и.../image/prompt
Неизвестный узел / def — 404. Пустой вклад (нет ни одного фрагмента) — 400 cannot-generate,
Swarm не зовём. Swarm как у портрета: 503 / 502 / 504. Гость — 201, не 403.
В шаблоне swarmui.json у пресетов появляются shot kind scene и thing (проза кадра без
человека). Живая копия без них не лифтится: сборщик подставляет fallback из
SimulationOptions (строки по умолчанию, не константы в билдере).
Кадр локации не портретирует присутствующих поимённо. Если в узле кто-то есть, допустим один общий фрагмент из опций («pupils at desks») — не список имён и не их одежда.
Вещь на карте — тип fill, без нового instance id в сейве. Вещь на человеке в промпт кладёт цвет и полосу износа; ключ кэша PNG — def+цвет, не personId (перегенерация обновляет файл).
Кнопка
Панель локации, строка одежды/ноши, строка предмета в локации: кнопка только если GET prompt
(или эквивалентная проверка вклада) не пустой. «Показать промпт» — тот же текст, что уйдёт в
Swarm. Открытие панели не генерирует. Строки через t(...).
Notice generateImage не меняем: по-прежнему человек и хозяин.
После этапа клик по кабинету или белой футболке даёт PNG.
Где живёт код
Нового проекта нет.
| Что | Куда |
|---|---|
Новые Thing/Color, prompt на одежде и комнатах, слоты fill |
HSchool.Content + JSONC core |
| Генератор гардероба, золотой ростер | HSchool.People |
| Уместность аксессуаров и обуви | HSchool.Content.Appropriateness + dresser в Simulation / People |
| HTTP картинки узла и вещи, PNG, fallback shot | HSchool.Server (сервис портретов / работник спрашивает карту) |
| Маршруты | docs/protocol.md (+ клиент api.ts); сокет не трогаем |
| Кнопки на панели и карточке | src/HSchool.Client/src/ui |
Kind scene/thing в шаблоне |
swarmui.json |
Инвариант 4: Simulation по-прежнему не знает Swarm. Сборщик кадра узла — тот же работник, что спрашивает комнату для портрета.
Советы, которые стоит принять сразу
- Не вешать картинку локации на кадр присутствия 2 Гц: PNG по HTTP, как портрет.
- Не давать вещи instance id «чтобы кэш был уникальнее». Def+цвет дешевле смены
people.json. - Не лифтить живой гардероб «всем по худи». Разнообразие — create и набор.
- Не рисовать корпус без
prompt: этаж в дереве остаётся навигацией. - Не складывать
sceneвPortraitKindчеловека: иначеkind=sceneна/people/.../portrait. - Гость жжёт GPU на картинке кабинета — это уже так на лице; очередь Swarm общая.
Заведомо не сейчас
- LLM, ControlNet, редактор позы, автоген утра.
- Бумажная кукла, иконки слоёв, арт на каждом ряду дерева сразу (только выбранный узел).
- Журнал оценок как картинка, погода у часов как PNG.
- Групповое фото класса, лица с карточек на кадре кабинета.
- Магазин, стирка, игрок одевает, новые
CountryDef. - Черты вкуса к одежде,
Inspectкак действие ИИ. - Лифт
portraitSettings, возврат SDXL.
Зафиксировано этим разговором
| Тема | Решение |
|---|---|
| Форма | Один срез 16, не два и не side-work |
| Просматриваемое | Человек, узел карты, надетое/несомое, fill локации |
Kind scene |
Да, без человека в сборке |
| Каталог | Закрытый список в core, не пак |
| Связность | prompt, fill, теги, правила — без новых глаголов ИИ |
| Правила | Аксессуары free/none, обувь free/uniform, с завтра |
| Гость | Как портрет человека, не как notice |
| Живые школы | Без лифта лиц и гардероба; правила без полей → free |
| Кэш вещи | def + цвет, не экземпляр |
| Стоп | После A школа в разнообразии; после B — кнопка на панели |
| Протокол | HTTP в коммите 87; сокет не +1 |
| Ваниль/пак | core |