Files

233 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ComfyUI → Obsidian Prompt Note
Кастомная нода для ComfyUI, которая после генерации **автоматически сохраняет
готовое изображение и позитивный промт в отдельную заметку Obsidian**.
A ComfyUI custom node that, after each generation, **automatically saves the
finished image and the positive prompt into a dedicated Obsidian note**.
---
## 🇷🇺 Русский
### Что делает нода
Нода **`Save Image + Obsidian Note`** (категория **Obsidian**) для каждого
изображения:
1. Сохраняет PNG в стандартную папку `output` ComfyUI (с обычной нумерацией и
вшитыми метаданными workflow — как штатная нода `Save Image`).
2. Копирует этот PNG в папку для заметок (по умолчанию `Comfy-Promt` внутри
вашего хранилища Obsidian).
3. Создаёт рядом заметку `.md` **с тем же именем, что у изображения, но без
расширения** (например, `ComfyUI_00042_.md`). Внутри:
- встроенное изображение `![[ComfyUI_00042_.png]]`;
- позитивный промт в **блоке кода** — чтобы его можно было скопировать одним
кликом.
Пример содержимого заметки:
````markdown
![[ComfyUI_00042_.png]]
```
a cinematic portrait of a fox, golden hour, 85mm, highly detailed
```
````
### Установка
1. Скопируйте папку `comfyui-obsidian-promt` в каталог `custom_nodes` вашего
ComfyUI.
- ComfyUI Desktop / portable: `...\ComfyUI\custom_nodes\`
- В этой системе: `C:\Users\dimir\Documents\ComfyUI\custom_nodes\`
Либо клонируйте репозиторий прямо туда:
```bash
cd C:\Users\dimir\Documents\ComfyUI\custom_nodes
git clone http://192.168.1.171:3000/dimon/comfyui-obsidian-promt.git
```
2. **Настройте путь сохранения** (см. раздел ниже) — иначе заметки будут падать
в чужую папку.
3. **Полностью перезапустите ComfyUI.** Нода появится в меню добавления нод в
категории **Obsidian** под именем **Save Image + Obsidian Note**.
Дополнительные зависимости не нужны: `numpy`, `Pillow` и `folder_paths` уже
входят в любую сборку ComfyUI.
### Как использовать
Добавьте ноду **Save Image + Obsidian Note** в конец workflow (вместо или рядом
со штатной `Save Image`) и подключите `images` к выходу `VAE Decode`.
Текст промта нода может получать двумя способами — выбирается переключателем
**`prompt_source`**:
| Режим | Что подключать | Откуда берётся текст |
|-------|----------------|----------------------|
| `string` (по умолчанию) | вход `positive_prompt` (тип **STRING**) | строка ровно как вы её ввели |
| `conditioning` | вход `positive_conditioning` (тип **CONDITIONING**) | текст прослеживается по графу workflow до ноды `CLIP Text Encode` и читается её поле text |
**Режим `string`** — подключите строковую ноду с текстом (например `String`/`Text`
из comfyui-custom-scripts или KJNodes). Удобно, если промт формируется
динамически (wildcards / dynamic prompts): берите строку уже после раскрытия,
тогда в заметку попадёт финальный текст.
**Режим `conditioning`** — подключите тот же выход `CLIP Text Encode`, что идёт в
`KSampler`. Отдельная строковая нода не нужна.
> ⚠️ **Важно про режим `conditioning`.** Из CONDITIONING (это числовые
> эмбеддинги) исходный текст восстановить невозможно — кодирование одностороннее.
> Поэтому нода идёт по графу workflow назад от подключённого входа до ноды
> `CLIP Text Encode` и читает её текстовое поле. Для обычных статических промтов
> это точно. Промежуточные ноды (`Conditioning Combine/Concat` и т. п.)
> проходятся насквозь, тексты склеиваются. Если же текст подставляется в
> `CLIP Text Encode` нестандартным способом (некоторые wildcard-/BNK-ноды), из
> графа может прочитаться шаблон или ничего — тогда в заметку попадёт пометка
> `[промт не найден: ...]`. В таких случаях используйте режим `string`.
Опциональный вход `filename_prefix` (по умолчанию `ComfyUI`) задаёт префикс имени
файла — как у штатной `Save Image`.
### Как изменить папку для сохранения
Откройте файл `__init__.py` и найдите вверху блок
**`НАСТРОЙКА ПУТЕЙ / PATH CONFIGURATION`**. Там две строки:
```python
VAULT_DIR = r"C:\Users\dimir\Documents\ObsidianTask"
OBSIDIAN_SUBFOLDER = "Comfy-Promt"
```
- **`VAULT_DIR`** — полный путь к хранилищу Obsidian (или к любой другой папке).
На Windows используйте префикс `r"..."` и обратные слэши.
- **`OBSIDIAN_SUBFOLDER`** — имя подпапки внутри `VAULT_DIR`, куда складываются
`.md` и копии `.png`. Папка создаётся автоматически. Чтобы писать прямо в
`VAULT_DIR`, поставьте пустую строку `""`.
Примеры:
```python
VAULT_DIR = r"D:\MyVault" # другой диск
VAULT_DIR = r"\\NAS\share\Obsidian" # сетевая папка
VAULT_DIR = "/home/user/Obsidian" # Linux / macOS
OBSIDIAN_SUBFOLDER = "" # писать прямо в корень vault
```
После изменения **сохраните файл и перезапустите ComfyUI.**
---
## 🇬🇧 English
### What the node does
The **`Save Image + Obsidian Note`** node (category **Obsidian**) does the
following for every image:
1. Saves the PNG to ComfyUI's standard `output` folder (normal numbering, with
the workflow metadata embedded — just like the built-in `Save Image` node).
2. Copies that PNG into the notes folder (by default `Comfy-Promt` inside your
Obsidian vault).
3. Creates a `.md` note next to it **with the same name as the image but without
the extension** (e.g. `ComfyUI_00042_.md`). Inside:
- the embedded image `![[ComfyUI_00042_.png]]`;
- the positive prompt inside a **code block**, so you can copy it in one click.
Example note content:
````markdown
![[ComfyUI_00042_.png]]
```
a cinematic portrait of a fox, golden hour, 85mm, highly detailed
```
````
### Installation
1. Copy the `comfyui-obsidian-promt` folder into your ComfyUI `custom_nodes`
directory.
- ComfyUI Desktop / portable: `...\ComfyUI\custom_nodes\`
Or clone the repository directly there:
```bash
cd /path/to/ComfyUI/custom_nodes
git clone http://192.168.1.171:3000/dimon/comfyui-obsidian-promt.git
```
2. **Configure the save path** (see the section below) — otherwise notes will end
up in the wrong folder.
3. **Fully restart ComfyUI.** The node appears in the add-node menu under the
**Obsidian** category as **Save Image + Obsidian Note**.
No extra dependencies are required: `numpy`, `Pillow` and `folder_paths` already
ship with every ComfyUI build.
### How to use
Add the **Save Image + Obsidian Note** node at the end of your workflow (instead
of or alongside the built-in `Save Image`) and connect `images` to the
`VAE Decode` output.
The node can obtain the prompt text in two ways, selected with the
**`prompt_source`** switch:
| Mode | What to connect | Where the text comes from |
|------|-----------------|---------------------------|
| `string` (default) | the `positive_prompt` input (**STRING**) | the string exactly as you typed it |
| `conditioning` | the `positive_conditioning` input (**CONDITIONING**) | the text is traced through the workflow graph back to the `CLIP Text Encode` node and read from its text field |
**`string` mode** — connect a string/text node (e.g. `String`/`Text` from
comfyui-custom-scripts or KJNodes). Best when the prompt is built dynamically
(wildcards / dynamic prompts): tap the string *after* it has been expanded so the
final text lands in the note.
**`conditioning` mode** — connect the same `CLIP Text Encode` output that feeds
your `KSampler`. No separate string node needed.
> ⚠️ **Important about `conditioning` mode.** The original text cannot be
> recovered from a CONDITIONING tensor (encoding is one-way). Instead the node
> walks the workflow graph backwards from the connected input to the
> `CLIP Text Encode` node and reads its text field. This is exact for ordinary
> static prompts. Intermediate nodes (`Conditioning Combine/Concat`, etc.) are
> traversed and their texts are concatenated. If the text is fed into
> `CLIP Text Encode` in a non-standard way (some wildcard/BNK nodes), the graph
> may only contain a template or nothing — the note will then contain a
> `[prompt not found: ...]` marker. Use `string` mode in those cases.
The optional `filename_prefix` input (default `ComfyUI`) sets the filename prefix,
just like the built-in `Save Image`.
### How to change the save folder
Open `__init__.py` and find the **`НАСТРОЙКА ПУТЕЙ / PATH CONFIGURATION`** block
near the top. It contains two lines:
```python
VAULT_DIR = r"C:\Users\dimir\Documents\ObsidianTask"
OBSIDIAN_SUBFOLDER = "Comfy-Promt"
```
- **`VAULT_DIR`** — full path to the Obsidian vault (or any other folder). On
Windows use an `r"..."` prefix and backslashes.
- **`OBSIDIAN_SUBFOLDER`** — subfolder name inside `VAULT_DIR` where the `.md`
notes and `.png` copies go. It is created automatically. Set it to an empty
string `""` to write directly into `VAULT_DIR`.
Examples:
```python
VAULT_DIR = r"D:\MyVault" # different drive
VAULT_DIR = r"\\NAS\share\Obsidian" # network share
VAULT_DIR = "/home/user/Obsidian" # Linux / macOS
OBSIDIAN_SUBFOLDER = "" # write into the vault root
```
After editing, **save the file and restart ComfyUI.**
---
## License
MIT