File size: 6,613 Bytes
fb1ae50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# NOTES — саммари сессии (для продолжения)

## Цель

Заменить персону в видео на «дилера» (4 фото блондинки в чёрном платье) через
SCAIL-2 пайплайн, без ComfyUI-сервера — прямым Python-скриптом.

## Что сделано и работает ✅

1. **`generate.py`** — self-contained скрипт: ComfyUI ноды импортируются напрямую,
   без API/сервера/GUI. Модели → промпты → маски → `SCAILAutoExtend.generate()` → mp4.
2. **Мультиреференс работает нативно**: `reference_image` батчем `[N,H,W,C]` —
   первый = основной, остальные = доп. виды. WanAnimatePlus для этого НЕ нужен.
3. **Критичные параметры найдены** (из workflow автора, файл
   `ComfyUI/custom_nodes/scail-auto-extend/SCAIL Auto Extend.json`):
   `ModelSamplingSD3 shift=5` + `euler` + `simple` scheduler + `6 steps` +
   `lightx2v LoRA @ 0.8` + пустой negative. Без shift — мыло.
4. **SAM3-маски с кэшем** (`masks.py`): pose_video_mask + reference_image_mask,
   single-person (max_objects=1), кэш по хэшу входов в `mask_cache/`.
5. **Результат (animation mode, без масок и с масками)**: дилер перенесён
   (блондинка, чёрное платье), движения следуют видео, зелёный фон сохранён.
   81 кадр за ~1 мин на 6 шагах.
6. Ollama остановлен. GPU 2–6 — чужая тренировка, не трогаем.

## Что НЕ работает / открытые проблемы ❌

1. **Позиция персоны**: в исходнике она слева, в выходе — по центру.
   Маска (синий силуэт слева) идеальна, но НЕ управляет позицией.
   Гипотеза: pose mask — про «какие пиксели какой персоне» (multi-person),
   а layout модель берёт из референсов (центрированные портреты → центр).
2. **Replacement mode с нашими входами — мусор**: гигантское лицо дилера
   на весь кадр + брюнетка-двойник. Причины:
   - **Баг референсов**: портретные фото 3024×4032 центр-кропятся в ландшафт
     832×480 → остаётся полоса «подбородок–грудь», голова отрезана
     (`load_reference_images` в generate.py). Надо: letterbox/pad вместо crop
     или портретное разрешение.
   - Возможно, replacement mode ждёт полноростовый реф, а не хедшот.
3. **Маски не чинят позицию в animation mode** (проверено: result3 — всё равно центр).

## План действий (next steps)

### Ветка А: crop-and-composite (приоритет)
`composite.py` уже написан, не подключён. Идея:
1. Из SAM3-маски → union bbox персоны (`person_bbox` уже есть)
2. Кроп видео вокруг персоны с margin → портрет (напр. 576×832)
3. Генерация дилера в кропе (центрирование не мешает — кроп и так на персоне;
   заодно портрет = пропорции рефов дилера = голова не режется;
   персона ~340px ширины вместо 130px → лицо качественнее)
4. `composite_back` — вклейка в исходные кадры (с feather-маской)

### Ветка Б: идея пользователя — первый кадр через 4B edit-модель
Пользователь ранее делал так: брал 1-й кадр видео, прогонял через маленькую
4B-модель с редактированием (промпт «замени персону на персону из изображения»),
получал первый фрейм с нужной идентичностью. Дальше это можно использовать
как стартовый кадр/реф для видео-пайплайна. Кандидаты: Qwen-Image-Edit,
FLUX.2-klein-4b (уже лежит в diffusion_models: `flux-2-klein-4b-fp8.safetensors`!).
Обсудить на следующей сессии: стыковка с SCAIL-2 (edited first frame →
reference или previous_frames).

### Ветка В (отложено): WanAnimatePlus
`prefix_frames` (до 5 доп. рефов поверх нативных) + `transition_video`
(бесшовная склейка 21-кадровыми хвостами). Требует установки
ComfyUI-WanVideoWrapper + ComfyUI-WanAnimatePlus. Пока хватает нативного.

## Полезные факты

- SCAIL-2 = Wan 2.1 14B, pose кодируется на ПОЛОВИННОМ разрешении.
- Ширина/высота — кратны 32 (иначе circular-pad артефакты).
- `SCAILAutoExtend`: чанки 81 кадр, overlap 5, color transfer Reinhard LAB
  между чанками (борьба с дрифтом цвета).
- Маски в SCAIL-2 — цветные: animation mode = pose-маска на ЧЁРНОМ фоне,
  ref-маска на БЕЛОМ; replacement — наоборот. 28-канальный поток.
- Ссылки на демо-видео в README WanAnimatePlus протухли (user-attachments).
- Загрузка на HF: `hf upload AiArtLab/video . --repo-type model` (auth: recoilme).

## Текущие артефакты

- `dealer_test2.mp4` — animation без масок (центр, иначе хорошо)
- `dealer_test3.mp4` — animation с масками (центр, маска не влияет на позицию)
- `dealer_repl.mp4` — replacement mode (мусор, см. выше)
- `mask_cache/` — 2 набора масок (animation + replacement варианты)
- `dealer/` — 4 фото дилера (портрет 3024×4032, EXIF ок)
- `drive.mp4` — тестовое видео (женщина в красном корсете, зелёный экран,
  81 кадр, 1280×720, 16 fps, персона слева)