diffusion-prompt-embedder 0.2.0__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- diffusion_prompt_embedder-0.3.0/.github/workflows/publish.yml +29 -0
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/.vscode/settings.json +4 -4
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/PKG-INFO +1 -1
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/README.zh-CN.md +119 -119
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/pyproject.toml +104 -104
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/src/diffusion_prompt_embedder/__init__.py +1 -1
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/src/diffusion_prompt_embedder/clip/__init__.py +13 -13
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/src/diffusion_prompt_embedder/clip/tokenization.py +123 -123
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/src/diffusion_prompt_embedder/core/__init__.py +23 -23
- diffusion_prompt_embedder-0.3.0/src/diffusion_prompt_embedder/core/embedding.py +102 -0
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/src/diffusion_prompt_embedder/core/parser.py +178 -178
- diffusion_prompt_embedder-0.3.0/src/diffusion_prompt_embedder/core/sd15/__init__.py +7 -0
- diffusion_prompt_embedder-0.3.0/src/diffusion_prompt_embedder/core/sd15/get_embeddings_sd15.py +124 -0
- diffusion_prompt_embedder-0.3.0/src/diffusion_prompt_embedder/core/sd15/get_embeddings_sd15_batch.py +114 -0
- diffusion_prompt_embedder-0.3.0/tests/test_clip_skip_layout.py +106 -0
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/tests/test_prompt_parser.py +236 -235
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/uv.lock +491 -491
- diffusion_prompt_embedder-0.2.0/src/diffusion_prompt_embedder/core/embedding.py +0 -309
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/.gitignore +0 -0
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/.python-version +0 -0
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/README.md +0 -0
- {diffusion_prompt_embedder-0.2.0 → diffusion_prompt_embedder-0.3.0}/src/diffusion_prompt_embedder/py.typed +0 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v4
|
|
13
|
+
- uses: astral-sh/setup-uv@v5
|
|
14
|
+
with:
|
|
15
|
+
enable-cache: true
|
|
16
|
+
- run: uv sync
|
|
17
|
+
- run: uv run ruff check .
|
|
18
|
+
- run: uv run pytest
|
|
19
|
+
|
|
20
|
+
publish:
|
|
21
|
+
needs: test
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
permissions:
|
|
24
|
+
id-token: write # PyPI Trusted Publishing (OIDC), no token secret needed
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
- uses: astral-sh/setup-uv@v5
|
|
28
|
+
- run: uv build
|
|
29
|
+
- run: uv publish --trusted-publishing always
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
{
|
|
2
|
-
"python.testing.pytestArgs": [
|
|
3
|
-
"src"
|
|
4
|
-
]
|
|
1
|
+
{
|
|
2
|
+
"python.testing.pytestArgs": [
|
|
3
|
+
"src"
|
|
4
|
+
]
|
|
5
5
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: diffusion-prompt-embedder
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: A Python library for parsing and processing prompts with support for embedding and tokenization.
|
|
5
5
|
Project-URL: Homepage, https://github.com/jannchie/diffusion-prompt-embedder
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/jannchie/diffusion-prompt-embedder/issues
|
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
# Diffusion Prompt Embedder
|
|
2
|
-
|
|
3
|
-
[](https://pypi.org/project/diffusion-prompt-embedder/)
|
|
4
|
-
[](https://pypi.org/project/diffusion-prompt-embedder/)
|
|
5
|
-
[](https://opensource.org/licenses/MIT)
|
|
6
|
-
[](https://github.com/jannchie/diffusion-prompt-embedder)
|
|
7
|
-
|
|
8
|
-
一个专门用于解析和处理带有权重的提示文本的 Python 库,支持嵌入生成和标记化,为 Stable Diffusion 等 AI 模型提供增强的文本处理能力。它兼容 SD Web UI 的权重提示,但不包括调度部分。
|
|
9
|
-
|
|
10
|
-
## 特性
|
|
11
|
-
|
|
12
|
-
- 💬 **提示解析**: 解析带有权重标记的文本提示(例如 `a (cat:1.5) in the garden`)
|
|
13
|
-
- 🔢 **权重管理**: 支持正向权重 `(text)` 和负向权重 `[text]` 语法
|
|
14
|
-
- 📚 **CLIP 集成**: 无缝集成 CLIP 文本模型进行嵌入生成
|
|
15
|
-
- 🔄 **批处理支持**: 高效处理多个提示的批处理
|
|
16
|
-
- 🪄 **长文本处理**: 支持超出 CLIP 标准上下文长度的长提示
|
|
17
|
-
|
|
18
|
-
## 安装
|
|
19
|
-
|
|
20
|
-
使用 pip 安装基础库:
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
pip install diffusion-prompt-embedder
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## 使用示例
|
|
27
|
-
|
|
28
|
-
### 解析带有权重的提示
|
|
29
|
-
|
|
30
|
-
```python
|
|
31
|
-
from diffusion_prompt_embedder import parse_prompt_attention
|
|
32
|
-
|
|
33
|
-
# 基本解析
|
|
34
|
-
result = parse_prompt_attention("a (cat:1.5) in the garden")
|
|
35
|
-
print(result) # [['a ', 1.0], ['cat', 1.5], [' in the garden', 1.0]]
|
|
36
|
-
|
|
37
|
-
# 使用方括号降低权重
|
|
38
|
-
result = parse_prompt_attention("a [cat] in the garden")
|
|
39
|
-
print(result) # [['a ', 1.0], ['cat', 0.9090909090909091], [' in the garden', 1.0]]
|
|
40
|
-
|
|
41
|
-
# 复杂提示示例
|
|
42
|
-
result = parse_prompt_attention("a (((house:1.3)) [on] a (hill:0.5), sun, (((sky))).")
|
|
43
|
-
print(result)
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### 生成 CLIP 嵌入
|
|
47
|
-
|
|
48
|
-
```python
|
|
49
|
-
import torch
|
|
50
|
-
from transformers import CLIPTokenizer, CLIPTextModel
|
|
51
|
-
from prompt_parser import get_embeddings_sd15
|
|
52
|
-
|
|
53
|
-
# 初始化 CLIP 模型
|
|
54
|
-
tokenizer = CLIPTokenizer.from_pretrained("openai/clip-vit-large-patch14")
|
|
55
|
-
text_encoder = CLIPTextModel.from_pretrained(
|
|
56
|
-
"openai/clip-vit-large-patch14",
|
|
57
|
-
torch_dtype=torch.float16
|
|
58
|
-
).to("cuda")
|
|
59
|
-
|
|
60
|
-
# 生成嵌入
|
|
61
|
-
prompt_embeds, neg_prompt_embeds = get_embeddings_sd15(
|
|
62
|
-
tokenizer=tokenizer,
|
|
63
|
-
text_encoder=text_encoder,
|
|
64
|
-
prompt="a (white:1.2) cat",
|
|
65
|
-
neg_prompt="blur, bad quality",
|
|
66
|
-
clip_skip=1 # 可选:跳过 CLIP 模型中的层
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
# 批处理多个提示
|
|
70
|
-
from prompt_parser import get_embeddings_sd_15_batch
|
|
71
|
-
|
|
72
|
-
batch_embeds = get_embeddings_sd_15_batch(
|
|
73
|
-
tokenizer=tokenizer,
|
|
74
|
-
text_encoder=text_encoder,
|
|
75
|
-
prompts=["a (white:1.2) cat", "a (blue:1.4) dog", "a red bird"]
|
|
76
|
-
)
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## 提示语法
|
|
80
|
-
|
|
81
|
-
### 基本权重语法
|
|
82
|
-
|
|
83
|
-
- `(text)` - 将提示的权重提升 1.1 倍
|
|
84
|
-
- `(text:1.5)` - 将提示的权重设置为 1.5
|
|
85
|
-
- `[text]` - 将提示的权重降低为原来的 1/1.1
|
|
86
|
-
- `\( \[ \) \]` - 使用反斜杠转义括号字符
|
|
87
|
-
|
|
88
|
-
### BREAK 语法
|
|
89
|
-
|
|
90
|
-
使用 `BREAK` 关键字在提示中创建断点:
|
|
91
|
-
|
|
92
|
-
```python
|
|
93
|
-
result = parse_prompt_attention("text1 BREAK text2")
|
|
94
|
-
# 结果: [["text1", 1.0], ["BREAK", -1], ["text2", 1.0]]
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## 开发
|
|
98
|
-
|
|
99
|
-
克隆仓库并安装开发依赖:
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
git clone https://github.com/jannchie/diffusion-prompt-parser.git
|
|
103
|
-
cd diffusion-prompt-parser
|
|
104
|
-
pip install -e ".[dev]"
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
运行测试:
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
pytest
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
## 许可证
|
|
114
|
-
|
|
115
|
-
[MIT](https://opensource.org/licenses/MIT)
|
|
116
|
-
|
|
117
|
-
## 作者
|
|
118
|
-
|
|
119
|
-
- Jianqi Pan ([@jannchie](https://github.com/jannchie))
|
|
1
|
+
# Diffusion Prompt Embedder
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/diffusion-prompt-embedder/)
|
|
4
|
+
[](https://pypi.org/project/diffusion-prompt-embedder/)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
[](https://github.com/jannchie/diffusion-prompt-embedder)
|
|
7
|
+
|
|
8
|
+
一个专门用于解析和处理带有权重的提示文本的 Python 库,支持嵌入生成和标记化,为 Stable Diffusion 等 AI 模型提供增强的文本处理能力。它兼容 SD Web UI 的权重提示,但不包括调度部分。
|
|
9
|
+
|
|
10
|
+
## 特性
|
|
11
|
+
|
|
12
|
+
- 💬 **提示解析**: 解析带有权重标记的文本提示(例如 `a (cat:1.5) in the garden`)
|
|
13
|
+
- 🔢 **权重管理**: 支持正向权重 `(text)` 和负向权重 `[text]` 语法
|
|
14
|
+
- 📚 **CLIP 集成**: 无缝集成 CLIP 文本模型进行嵌入生成
|
|
15
|
+
- 🔄 **批处理支持**: 高效处理多个提示的批处理
|
|
16
|
+
- 🪄 **长文本处理**: 支持超出 CLIP 标准上下文长度的长提示
|
|
17
|
+
|
|
18
|
+
## 安装
|
|
19
|
+
|
|
20
|
+
使用 pip 安装基础库:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pip install diffusion-prompt-embedder
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 使用示例
|
|
27
|
+
|
|
28
|
+
### 解析带有权重的提示
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
from diffusion_prompt_embedder import parse_prompt_attention
|
|
32
|
+
|
|
33
|
+
# 基本解析
|
|
34
|
+
result = parse_prompt_attention("a (cat:1.5) in the garden")
|
|
35
|
+
print(result) # [['a ', 1.0], ['cat', 1.5], [' in the garden', 1.0]]
|
|
36
|
+
|
|
37
|
+
# 使用方括号降低权重
|
|
38
|
+
result = parse_prompt_attention("a [cat] in the garden")
|
|
39
|
+
print(result) # [['a ', 1.0], ['cat', 0.9090909090909091], [' in the garden', 1.0]]
|
|
40
|
+
|
|
41
|
+
# 复杂提示示例
|
|
42
|
+
result = parse_prompt_attention("a (((house:1.3)) [on] a (hill:0.5), sun, (((sky))).")
|
|
43
|
+
print(result)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 生成 CLIP 嵌入
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
import torch
|
|
50
|
+
from transformers import CLIPTokenizer, CLIPTextModel
|
|
51
|
+
from prompt_parser import get_embeddings_sd15
|
|
52
|
+
|
|
53
|
+
# 初始化 CLIP 模型
|
|
54
|
+
tokenizer = CLIPTokenizer.from_pretrained("openai/clip-vit-large-patch14")
|
|
55
|
+
text_encoder = CLIPTextModel.from_pretrained(
|
|
56
|
+
"openai/clip-vit-large-patch14",
|
|
57
|
+
torch_dtype=torch.float16
|
|
58
|
+
).to("cuda")
|
|
59
|
+
|
|
60
|
+
# 生成嵌入
|
|
61
|
+
prompt_embeds, neg_prompt_embeds = get_embeddings_sd15(
|
|
62
|
+
tokenizer=tokenizer,
|
|
63
|
+
text_encoder=text_encoder,
|
|
64
|
+
prompt="a (white:1.2) cat",
|
|
65
|
+
neg_prompt="blur, bad quality",
|
|
66
|
+
clip_skip=1 # 可选:跳过 CLIP 模型中的层
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
# 批处理多个提示
|
|
70
|
+
from prompt_parser import get_embeddings_sd_15_batch
|
|
71
|
+
|
|
72
|
+
batch_embeds = get_embeddings_sd_15_batch(
|
|
73
|
+
tokenizer=tokenizer,
|
|
74
|
+
text_encoder=text_encoder,
|
|
75
|
+
prompts=["a (white:1.2) cat", "a (blue:1.4) dog", "a red bird"]
|
|
76
|
+
)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 提示语法
|
|
80
|
+
|
|
81
|
+
### 基本权重语法
|
|
82
|
+
|
|
83
|
+
- `(text)` - 将提示的权重提升 1.1 倍
|
|
84
|
+
- `(text:1.5)` - 将提示的权重设置为 1.5
|
|
85
|
+
- `[text]` - 将提示的权重降低为原来的 1/1.1
|
|
86
|
+
- `\( \[ \) \]` - 使用反斜杠转义括号字符
|
|
87
|
+
|
|
88
|
+
### BREAK 语法
|
|
89
|
+
|
|
90
|
+
使用 `BREAK` 关键字在提示中创建断点:
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
result = parse_prompt_attention("text1 BREAK text2")
|
|
94
|
+
# 结果: [["text1", 1.0], ["BREAK", -1], ["text2", 1.0]]
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 开发
|
|
98
|
+
|
|
99
|
+
克隆仓库并安装开发依赖:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
git clone https://github.com/jannchie/diffusion-prompt-parser.git
|
|
103
|
+
cd diffusion-prompt-parser
|
|
104
|
+
pip install -e ".[dev]"
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
运行测试:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
pytest
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## 许可证
|
|
114
|
+
|
|
115
|
+
[MIT](https://opensource.org/licenses/MIT)
|
|
116
|
+
|
|
117
|
+
## 作者
|
|
118
|
+
|
|
119
|
+
- Jianqi Pan ([@jannchie](https://github.com/jannchie))
|
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
[project]
|
|
2
|
-
name = "diffusion-prompt-embedder"
|
|
3
|
-
version = "0.
|
|
4
|
-
description = "A Python library for parsing and processing prompts with support for embedding and tokenization."
|
|
5
|
-
readme = "README.md"
|
|
6
|
-
authors = [{ name = "Jianqi Pan", email = "jannchie@gmail.com" }]
|
|
7
|
-
requires-python = ">=3.10"
|
|
8
|
-
license = { text = "MIT" }
|
|
9
|
-
keywords = [
|
|
10
|
-
"nlp",
|
|
11
|
-
"prompt",
|
|
12
|
-
"tokenization",
|
|
13
|
-
"embedding",
|
|
14
|
-
"ai",
|
|
15
|
-
"stable diffusion",
|
|
16
|
-
]
|
|
17
|
-
classifiers = [
|
|
18
|
-
"Development Status :: 4 - Beta",
|
|
19
|
-
"Intended Audience :: Developers",
|
|
20
|
-
"License :: OSI Approved :: MIT License",
|
|
21
|
-
"Programming Language :: Python :: 3",
|
|
22
|
-
"Programming Language :: Python :: 3.10",
|
|
23
|
-
"Programming Language :: Python :: 3.11",
|
|
24
|
-
"Programming Language :: Python :: 3.12",
|
|
25
|
-
"Programming Language :: Python :: 3.13",
|
|
26
|
-
"Programming Language :: Python :: 3.14",
|
|
27
|
-
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
28
|
-
]
|
|
29
|
-
dependencies = []
|
|
30
|
-
|
|
31
|
-
[project.urls]
|
|
32
|
-
"Homepage" = "https://github.com/jannchie/diffusion-prompt-embedder"
|
|
33
|
-
"Bug Tracker" = "https://github.com/jannchie/diffusion-prompt-embedder/issues"
|
|
34
|
-
"Documentation" = "https://github.com/jannchie/diffusion-prompt-embedder#readme"
|
|
35
|
-
|
|
36
|
-
[build-system]
|
|
37
|
-
requires = ["hatchling"]
|
|
38
|
-
build-backend = "hatchling.build"
|
|
39
|
-
|
|
40
|
-
[tool.hatch.build.targets.wheel]
|
|
41
|
-
packages = ["src/diffusion_prompt_embedder"]
|
|
42
|
-
|
|
43
|
-
[tool.ruff]
|
|
44
|
-
line-length = 160
|
|
45
|
-
select = ["ALL"]
|
|
46
|
-
|
|
47
|
-
ignore = [
|
|
48
|
-
"PGH",
|
|
49
|
-
"RUF003",
|
|
50
|
-
"BLE001",
|
|
51
|
-
"ERA001",
|
|
52
|
-
"FIX002",
|
|
53
|
-
"TD002",
|
|
54
|
-
"TD003",
|
|
55
|
-
"D",
|
|
56
|
-
"PLR2004",
|
|
57
|
-
"INP001",
|
|
58
|
-
"N812",
|
|
59
|
-
"FBT003",
|
|
60
|
-
"S311",
|
|
61
|
-
"ANN401",
|
|
62
|
-
"S105",
|
|
63
|
-
]
|
|
64
|
-
|
|
65
|
-
[tool.ruff.per-file-ignores]
|
|
66
|
-
"tests/**/*.py" = ["S101"]
|
|
67
|
-
|
|
68
|
-
[project.optional-dependencies]
|
|
69
|
-
torch = ["torch>=2.0.0"]
|
|
70
|
-
transformers = ["transformers>=4.51.3"]
|
|
71
|
-
all = ["torch>=2.0.0", "transformers>=4.51.3"]
|
|
72
|
-
dev = [
|
|
73
|
-
"pytest>=8.3.5",
|
|
74
|
-
"pytest-cov>=6.1.1",
|
|
75
|
-
"torch>=2.0.0",
|
|
76
|
-
"transformers>=4.51.3",
|
|
77
|
-
]
|
|
78
|
-
|
|
79
|
-
[dependency-groups]
|
|
80
|
-
dev = [
|
|
81
|
-
"pytest>=8.3.5",
|
|
82
|
-
"pytest-cov>=6.1.1",
|
|
83
|
-
"ruff>=0.11.8",
|
|
84
|
-
"torch>=2.0.0",
|
|
85
|
-
"transformers>=4.51.3",
|
|
86
|
-
]
|
|
87
|
-
|
|
88
|
-
[tool.pytest.ini_options]
|
|
89
|
-
addopts = "--cov=diffusion_prompt_embedder --cov-report=term --cov-report=xml --tb=short"
|
|
90
|
-
testpaths = ["tests"]
|
|
91
|
-
|
|
92
|
-
[tool.coverage.run]
|
|
93
|
-
source = ["diffusion_prompt_embedder"]
|
|
94
|
-
omit = ["*/__pycache__/*", "*/tests/*"]
|
|
95
|
-
|
|
96
|
-
[tool.coverage.report]
|
|
97
|
-
exclude_lines = [
|
|
98
|
-
"pragma: no cover",
|
|
99
|
-
"def __repr__",
|
|
100
|
-
"raise NotImplementedError",
|
|
101
|
-
"if __name__ == .__main__.:",
|
|
102
|
-
"pass",
|
|
103
|
-
"raise ImportError",
|
|
104
|
-
]
|
|
1
|
+
[project]
|
|
2
|
+
name = "diffusion-prompt-embedder"
|
|
3
|
+
version = "0.3.0"
|
|
4
|
+
description = "A Python library for parsing and processing prompts with support for embedding and tokenization."
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
authors = [{ name = "Jianqi Pan", email = "jannchie@gmail.com" }]
|
|
7
|
+
requires-python = ">=3.10"
|
|
8
|
+
license = { text = "MIT" }
|
|
9
|
+
keywords = [
|
|
10
|
+
"nlp",
|
|
11
|
+
"prompt",
|
|
12
|
+
"tokenization",
|
|
13
|
+
"embedding",
|
|
14
|
+
"ai",
|
|
15
|
+
"stable diffusion",
|
|
16
|
+
]
|
|
17
|
+
classifiers = [
|
|
18
|
+
"Development Status :: 4 - Beta",
|
|
19
|
+
"Intended Audience :: Developers",
|
|
20
|
+
"License :: OSI Approved :: MIT License",
|
|
21
|
+
"Programming Language :: Python :: 3",
|
|
22
|
+
"Programming Language :: Python :: 3.10",
|
|
23
|
+
"Programming Language :: Python :: 3.11",
|
|
24
|
+
"Programming Language :: Python :: 3.12",
|
|
25
|
+
"Programming Language :: Python :: 3.13",
|
|
26
|
+
"Programming Language :: Python :: 3.14",
|
|
27
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
28
|
+
]
|
|
29
|
+
dependencies = []
|
|
30
|
+
|
|
31
|
+
[project.urls]
|
|
32
|
+
"Homepage" = "https://github.com/jannchie/diffusion-prompt-embedder"
|
|
33
|
+
"Bug Tracker" = "https://github.com/jannchie/diffusion-prompt-embedder/issues"
|
|
34
|
+
"Documentation" = "https://github.com/jannchie/diffusion-prompt-embedder#readme"
|
|
35
|
+
|
|
36
|
+
[build-system]
|
|
37
|
+
requires = ["hatchling"]
|
|
38
|
+
build-backend = "hatchling.build"
|
|
39
|
+
|
|
40
|
+
[tool.hatch.build.targets.wheel]
|
|
41
|
+
packages = ["src/diffusion_prompt_embedder"]
|
|
42
|
+
|
|
43
|
+
[tool.ruff]
|
|
44
|
+
line-length = 160
|
|
45
|
+
select = ["ALL"]
|
|
46
|
+
|
|
47
|
+
ignore = [
|
|
48
|
+
"PGH",
|
|
49
|
+
"RUF003",
|
|
50
|
+
"BLE001",
|
|
51
|
+
"ERA001",
|
|
52
|
+
"FIX002",
|
|
53
|
+
"TD002",
|
|
54
|
+
"TD003",
|
|
55
|
+
"D",
|
|
56
|
+
"PLR2004",
|
|
57
|
+
"INP001",
|
|
58
|
+
"N812",
|
|
59
|
+
"FBT003",
|
|
60
|
+
"S311",
|
|
61
|
+
"ANN401",
|
|
62
|
+
"S105",
|
|
63
|
+
]
|
|
64
|
+
|
|
65
|
+
[tool.ruff.per-file-ignores]
|
|
66
|
+
"tests/**/*.py" = ["S101"]
|
|
67
|
+
|
|
68
|
+
[project.optional-dependencies]
|
|
69
|
+
torch = ["torch>=2.0.0"]
|
|
70
|
+
transformers = ["transformers>=4.51.3"]
|
|
71
|
+
all = ["torch>=2.0.0", "transformers>=4.51.3"]
|
|
72
|
+
dev = [
|
|
73
|
+
"pytest>=8.3.5",
|
|
74
|
+
"pytest-cov>=6.1.1",
|
|
75
|
+
"torch>=2.0.0",
|
|
76
|
+
"transformers>=4.51.3",
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
[dependency-groups]
|
|
80
|
+
dev = [
|
|
81
|
+
"pytest>=8.3.5",
|
|
82
|
+
"pytest-cov>=6.1.1",
|
|
83
|
+
"ruff>=0.11.8",
|
|
84
|
+
"torch>=2.0.0",
|
|
85
|
+
"transformers>=4.51.3",
|
|
86
|
+
]
|
|
87
|
+
|
|
88
|
+
[tool.pytest.ini_options]
|
|
89
|
+
addopts = "--cov=diffusion_prompt_embedder --cov-report=term --cov-report=xml --tb=short"
|
|
90
|
+
testpaths = ["tests"]
|
|
91
|
+
|
|
92
|
+
[tool.coverage.run]
|
|
93
|
+
source = ["diffusion_prompt_embedder"]
|
|
94
|
+
omit = ["*/__pycache__/*", "*/tests/*"]
|
|
95
|
+
|
|
96
|
+
[tool.coverage.report]
|
|
97
|
+
exclude_lines = [
|
|
98
|
+
"pragma: no cover",
|
|
99
|
+
"def __repr__",
|
|
100
|
+
"raise NotImplementedError",
|
|
101
|
+
"if __name__ == .__main__.:",
|
|
102
|
+
"pass",
|
|
103
|
+
"raise ImportError",
|
|
104
|
+
]
|
|
@@ -7,8 +7,8 @@ tokenizing prompts, and generating embeddings for use with Stable Diffusion mode
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
-
from diffusion_prompt_embedder.core.embedding import get_embeddings_sd15, get_embeddings_sd15_batch
|
|
11
10
|
from diffusion_prompt_embedder.core.parser import parse_prompt_attention
|
|
11
|
+
from diffusion_prompt_embedder.core.sd15 import get_embeddings_sd15, get_embeddings_sd15_batch
|
|
12
12
|
|
|
13
13
|
__all__ = [
|
|
14
14
|
"get_embeddings_sd15",
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
"""
|
|
2
|
-
CLIP model functionality for embedding generation.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from diffusion_prompt_embedder.clip.tokenization import (
|
|
6
|
-
get_prompts_tokens_with_weights,
|
|
7
|
-
group_tokens_and_weights,
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
__all__ = [
|
|
11
|
-
"get_prompts_tokens_with_weights",
|
|
12
|
-
"group_tokens_and_weights",
|
|
13
|
-
]
|
|
1
|
+
"""
|
|
2
|
+
CLIP model functionality for embedding generation.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from diffusion_prompt_embedder.clip.tokenization import (
|
|
6
|
+
get_prompts_tokens_with_weights,
|
|
7
|
+
group_tokens_and_weights,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
"get_prompts_tokens_with_weights",
|
|
12
|
+
"group_tokens_and_weights",
|
|
13
|
+
]
|