Spaces:
Sleeping
Sleeping
Performance PR
#2
by
multimodalart
HF Staff
- opened
- .gitattributes +34 -31
- .gitignore +0 -2
- LICENSE +0 -21
- README.md +8 -22
- app.py +155 -364
- config.py +0 -16
- data.py +0 -147
- image_init/10o.png +0 -3
- image_init/1o.png +0 -3
- image_init/2o.png +0 -3
- image_init/3o.png +0 -3
- image_init/4o.png +0 -3
- image_init/5o.png +0 -3
- image_init/6o.png +0 -3
- image_init/7o.png +0 -3
- image_init/8o.png +0 -3
- image_init/9o.png +0 -3
- last_epoch_ckpt/config.json +0 -18
- last_epoch_ckpt/diffusion_pytorch_model.safetensors +0 -3
- latest_val.png +0 -3
- model.py +0 -52
- patch_sdxl.py +559 -0
- prior/__init__.py +0 -0
- prior/pipeline_kandinsky_prior.py +0 -528
- prior/prior_transformer.py +0 -369
- requirements.txt +1 -9
- train.py +0 -94
- train_requirements.txt +0 -642
- twitter_prompts.csv +2088 -0
.gitattributes
CHANGED
@@ -1,32 +1,35 @@
|
|
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 |
-
third.png filter=lfs diff=lfs merge=lfs -text
|
26 |
-
fifth.png filter=lfs diff=lfs merge=lfs -text
|
27 |
-
first.png filter=lfs diff=lfs merge=lfs -text
|
28 |
-
fourth.png filter=lfs diff=lfs merge=lfs -text
|
29 |
-
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
30 |
-
*.png filter=lfs diff=lfs merge=lfs -text
|
31 |
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
28 |
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
29 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
30 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
31 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
32 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
33 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
.gitignore
DELETED
@@ -1,2 +0,0 @@
|
|
1 |
-
__pycache__*
|
2 |
-
.gradio/
|
|
|
|
|
|
LICENSE
DELETED
@@ -1,21 +0,0 @@
|
|
1 |
-
MIT License
|
2 |
-
|
3 |
-
Copyright (c) 2025 rynmurdock
|
4 |
-
|
5 |
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6 |
-
of this software and associated documentation files (the "Software"), to deal
|
7 |
-
in the Software without restriction, including without limitation the rights
|
8 |
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9 |
-
copies of the Software, and to permit persons to whom the Software is
|
10 |
-
furnished to do so, subject to the following conditions:
|
11 |
-
|
12 |
-
The above copyright notice and this permission notice shall be included in all
|
13 |
-
copies or substantial portions of the Software.
|
14 |
-
|
15 |
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18 |
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20 |
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21 |
-
SOFTWARE.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
README.md
CHANGED
@@ -1,26 +1,12 @@
|
|
1 |
---
|
2 |
-
|
3 |
-
|
|
|
|
|
4 |
sdk: gradio
|
5 |
-
sdk_version:
|
6 |
-
|
7 |
-
|
8 |
-
colorTo: purple
|
9 |
-
pinned: true
|
10 |
---
|
11 |
|
12 |
-
|
13 |
-
|
14 |
-
## tl;dr
|
15 |
-
Train on embeddings of media preferred by a specific user -> produce embeddings of media they may enjoy.
|
16 |
-
|
17 |
-
In our case here, we take the ECLIPSE `text embedding -> image embedding` prior (https://arxiv.org/abs/2312.04655) and finetune it to become a `preferred image embeddings -> heldout image embedding` prior.
|
18 |
-
|
19 |
-
### Related work:
|
20 |
-
|
21 |
-
Patron et al. models preference using a diffusion prior and condition on user ids with ratings: https://arxiv.org/abs/2502.18477
|
22 |
-
|
23 |
-
Wang et al. models preference using a generator conditioned on averaged CLIP embeddings of users: https://arxiv.org/abs/2304.03516
|
24 |
-
|
25 |
-
My previous work based on Collaborative Filtering with CLIP embeddings: https://github.com/rynmurdock/generative_recommender
|
26 |
-
|
|
|
1 |
---
|
2 |
+
title: Generative Recsys
|
3 |
+
emoji: 🐨
|
4 |
+
colorFrom: purple
|
5 |
+
colorTo: blue
|
6 |
sdk: gradio
|
7 |
+
sdk_version: 4.25.0
|
8 |
+
app_file: app.py
|
9 |
+
pinned: false
|
|
|
|
|
10 |
---
|
11 |
|
12 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app.py
CHANGED
@@ -1,289 +1,169 @@
|
|
|
|
1 |
|
2 |
import gradio as gr
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
import random
|
4 |
import time
|
|
|
5 |
import torch
|
6 |
-
import
|
7 |
|
8 |
-
import
|
9 |
-
|
|
|
10 |
|
11 |
-
|
12 |
-
|
13 |
|
14 |
-
|
15 |
-
|
16 |
|
17 |
-
|
18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
20 |
-
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
-
|
24 |
-
|
25 |
-
import pandas as pd
|
26 |
-
from apscheduler.schedulers.background import BackgroundScheduler
|
27 |
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
# from safety_checker_improved import maybe_nsfw
|
32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
|
34 |
-
|
35 |
-
|
36 |
-
torch.backends.cudnn.allow_tf32 = True
|
37 |
|
38 |
-
|
|
|
|
|
|
|
39 |
|
40 |
-
|
41 |
-
|
|
|
42 |
|
43 |
-
####################### Setup Model
|
44 |
-
from diffusers import EulerDiscreteScheduler
|
45 |
-
from PIL import Image
|
46 |
-
import uuid
|
47 |
|
|
|
48 |
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
images = model.kandinsky_pipe(
|
58 |
-
num_inference_steps=50,
|
59 |
-
image_embeds=positive_image_embeds,
|
60 |
-
negative_image_embeds=negative_image_embeds,
|
61 |
-
guidance_scale=11,
|
62 |
-
).images[0]
|
63 |
-
cond = (
|
64 |
-
model.prior_pipe.image_processor(images, return_tensors="pt")
|
65 |
-
.pixel_values[0]
|
66 |
-
.unsqueeze(0)
|
67 |
-
.to(dtype=model.prior_pipe.image_encoder.dtype, device=device)
|
68 |
-
)
|
69 |
-
im_emb = model.prior_pipe.image_encoder(cond)["image_embeds"]
|
70 |
-
return images, im_emb
|
71 |
-
|
72 |
-
|
73 |
-
def generate(in_im_embs, ):
|
74 |
-
output, im_emb = generate_gpu(in_im_embs)
|
75 |
-
nsfw = False#maybe_nsfw(output.images[0])
|
76 |
-
|
77 |
-
name = str(uuid.uuid4()).replace("-", "")
|
78 |
-
path = f"/tmp/{name}.png"
|
79 |
-
|
80 |
-
if nsfw:
|
81 |
-
gr.Warning("NSFW content detected.")
|
82 |
-
# TODO could return an automatic dislike of auto dislike on the backend for neither as well; just would need refactoring.
|
83 |
-
return None, im_emb
|
84 |
-
|
85 |
-
output.save(path)
|
86 |
-
return path, im_emb
|
87 |
|
88 |
|
89 |
-
#######################
|
90 |
|
91 |
-
@spaces.GPU()
|
92 |
-
def sample_embs(prompt_embeds):
|
93 |
-
latent = torch.randn(prompt_embeds.shape[0], 1, prompt_embeds.shape[-1])
|
94 |
-
if prompt_embeds.shape[1] < 8: # TODO grab as `k` arg from config
|
95 |
-
prompt_embeds = torch.nn.functional.pad(prompt_embeds, [0, 0, 0, 8-prompt_embeds.shape[1]])
|
96 |
-
assert prompt_embeds.shape[1] == 8, f"The model is set to take `k`` cond image embeds but is shape {prompt_embeds.shape}"
|
97 |
-
image_embeds = model(latent.to('cuda'), prompt_embeds.to('cuda')).predicted_image_embedding
|
98 |
-
|
99 |
-
return image_embeds
|
100 |
-
|
101 |
-
@spaces.GPU()
|
102 |
-
def get_user_emb(embs, ys):
|
103 |
-
positives = [e for e, ys in zip(embs, ys) if ys == 1]
|
104 |
-
embs = random.sample(positives, min(8, len(positives)))
|
105 |
-
if len(embs) == 0:
|
106 |
-
positives = torch.zeros_like(im_emb)[None]
|
107 |
-
else:
|
108 |
-
positives = torch.stack(embs, 1)
|
109 |
-
|
110 |
-
negs = [e for e, ys in zip(embs, ys) if ys == 0]
|
111 |
-
negative_embs = random.sample(negs, min(8, len(negs)))
|
112 |
-
if len(negative_embs) == 0:
|
113 |
-
negatives = torch.zeros_like(im_emb)[None]
|
114 |
-
else:
|
115 |
-
negatives = torch.stack(negative_embs, 1)
|
116 |
-
|
117 |
-
image_embeds = torch.stack([sample_embs(negatives), sample_embs(positives)])
|
118 |
-
|
119 |
-
return image_embeds
|
120 |
-
|
121 |
-
|
122 |
-
def background_next_image():
|
123 |
-
global prevs_df
|
124 |
-
# only let it get N (maybe 3) ahead of the user
|
125 |
-
#not_rated_rows = prevs_df[[i[1]['user:rating'] == {' ': ' '} for i in prevs_df.iterrows()]]
|
126 |
-
rated_rows = prevs_df[[i[1]['user:rating'] != {' ': ' '} for i in prevs_df.iterrows()]]
|
127 |
-
if len(rated_rows) < 4:
|
128 |
-
time.sleep(.1)
|
129 |
-
# not_rated_rows = prevs_df[[i[1]['user:rating'] == {' ': ' '} for i in prevs_df.iterrows()]]
|
130 |
-
return
|
131 |
-
|
132 |
-
user_id_list = set(rated_rows['latest_user_to_rate'].to_list())
|
133 |
-
for uid in user_id_list:
|
134 |
-
rated_rows = prevs_df[[i[1]['user:rating'].get(uid, None) is not None for i in prevs_df.iterrows()]]
|
135 |
-
not_rated_rows = prevs_df[[i[1]['user:rating'].get(uid, None) is None for i in prevs_df.iterrows()]]
|
136 |
-
|
137 |
-
# we need to intersect not_rated_rows from this user's embed > 7. Just add a new column on which user_id spawned the
|
138 |
-
# media.
|
139 |
-
|
140 |
-
unrated_from_user = not_rated_rows[[i[1]['from_user_id'] == uid for i in not_rated_rows.iterrows()]]
|
141 |
-
|
142 |
-
# we don't compute more after n are in the queue for them
|
143 |
-
if len(unrated_from_user) >= 10:
|
144 |
-
continue
|
145 |
-
|
146 |
-
if len(rated_rows) < 4:
|
147 |
-
continue
|
148 |
-
|
149 |
-
global glob_idx
|
150 |
-
glob_idx += 1
|
151 |
-
|
152 |
-
ems = rated_rows['embeddings'].to_list()
|
153 |
-
ys = [i[uid][0] for i in rated_rows['user:rating'].to_list()]
|
154 |
-
|
155 |
-
emz = get_user_emb(ems, ys)
|
156 |
-
img, embs = generate(emz)
|
157 |
-
|
158 |
-
if img:
|
159 |
-
tmp_df = pd.DataFrame(columns=['paths', 'embeddings', 'ips', 'user:rating', 'latest_user_to_rate', 'text', 'gemb'])
|
160 |
-
tmp_df['paths'] = [img]
|
161 |
-
tmp_df['embeddings'] = [embs.to(torch.float32).to('cpu')]
|
162 |
-
tmp_df['user:rating'] = [{' ': ' '}]
|
163 |
-
tmp_df['from_user_id'] = [uid]
|
164 |
-
tmp_df['text'] = ['']
|
165 |
-
prevs_df = pd.concat((prevs_df, tmp_df))
|
166 |
-
# we can free up storage by deleting the image
|
167 |
-
if len(prevs_df) > 500:
|
168 |
-
oldest_path = prevs_df.iloc[6]['paths']
|
169 |
-
if os.path.isfile(oldest_path):
|
170 |
-
os.remove(oldest_path)
|
171 |
-
else:
|
172 |
-
# If it fails, inform the user.
|
173 |
-
print("Error: %s file not found" % oldest_path)
|
174 |
-
# only keep 50 images & embeddings & ips, then remove oldest besides calibrating
|
175 |
-
prevs_df = pd.concat((prevs_df.iloc[:6], prevs_df.iloc[7:]))
|
176 |
-
|
177 |
-
def pluck_img(user_id):
|
178 |
-
rated_rows = prevs_df[[i[1]['user:rating'].get(user_id, None) is not None for i in prevs_df.iterrows()]]
|
179 |
-
ems = rated_rows['embeddings'].to_list()
|
180 |
-
ys = [i[user_id][0] for i in rated_rows['user:rating'].to_list()]
|
181 |
-
user_emb = get_user_emb(ems, ys)
|
182 |
-
|
183 |
-
not_rated_rows = prevs_df[[i[1]['user:rating'].get(user_id, 'gone') == 'gone' for i in prevs_df.iterrows()]]
|
184 |
-
while len(not_rated_rows) == 0:
|
185 |
-
not_rated_rows = prevs_df[[i[1]['user:rating'].get(user_id, 'gone') == 'gone' for i in prevs_df.iterrows()]]
|
186 |
-
time.sleep(.1)
|
187 |
-
# TODO optimize this lol
|
188 |
-
|
189 |
-
unrated_from_user = not_rated_rows[[i[1]['from_user_id'] == user_id for i in not_rated_rows.iterrows()]]
|
190 |
-
if len(unrated_from_user) > 0:
|
191 |
-
print(unrated_from_user)
|
192 |
-
# NOTE the way I've setup pandas here is so gdm horrible. TODO overhaul
|
193 |
-
img = unrated_from_user['paths'].to_list()[-1]
|
194 |
-
return img
|
195 |
-
|
196 |
-
best_sim = -10000000
|
197 |
-
for i in not_rated_rows.iterrows():
|
198 |
-
# TODO sloppy .to but it is 3am.
|
199 |
-
sim = torch.cosine_similarity(i[1]['embeddings'].detach().to('cpu'), user_emb.detach().to('cpu'), -1)
|
200 |
-
if len(sim) > 1: sim = sim[1]
|
201 |
-
if sim.squeeze() > best_sim:
|
202 |
-
best_sim = sim
|
203 |
-
best_row = i[1]
|
204 |
-
img = best_row['paths']
|
205 |
-
return img
|
206 |
-
|
207 |
-
def next_image(calibrate_prompts, user_id):
|
208 |
-
with torch.no_grad():
|
209 |
-
# once we've done so many random calibration prompts out of the full media
|
210 |
-
if len(m_calibrate) - len(calibrate_prompts) < 5:
|
211 |
-
cal_video = calibrate_prompts.pop(random.randint(0, len(calibrate_prompts)-1))
|
212 |
-
image = prevs_df[prevs_df['paths'] == cal_video]['paths'].to_list()[0]
|
213 |
-
# we switch to just getting media by similarity.
|
214 |
-
else:
|
215 |
-
image = pluck_img(user_id)
|
216 |
-
return image, calibrate_prompts
|
217 |
|
218 |
|
219 |
|
220 |
|
221 |
|
222 |
|
223 |
-
def start(_,
|
224 |
-
|
225 |
-
image, calibrate_prompts = next_image(calibrate_prompts, user_id)
|
226 |
return [
|
227 |
-
gr.Button(value='
|
228 |
-
gr.Button(value='Neither (Space)', interactive=True
|
229 |
-
gr.Button(value='
|
230 |
gr.Button(value='Start', interactive=False),
|
231 |
-
gr.Button(value='👍 Content', interactive=True, visible=False),
|
232 |
-
gr.Button(value='👍 Style', interactive=True, visible=False),
|
233 |
image,
|
234 |
-
|
235 |
-
|
|
|
236 |
]
|
237 |
|
238 |
|
239 |
-
def choose(
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
img,
|
246 |
-
return img, calibrate_prompts
|
247 |
-
elif choice == '👎':
|
248 |
-
choice = [0, 0]
|
249 |
-
elif choice == '👍 Style':
|
250 |
-
choice = [0, 1]
|
251 |
-
elif choice == '👍 Content':
|
252 |
-
choice = [1, 0]
|
253 |
-
else:
|
254 |
-
assert False, f'choice is {choice}'
|
255 |
-
|
256 |
-
# if we detected NSFW, leave that area of latent space regardless of how they rated chosen.
|
257 |
-
# TODO skip allowing rating & just continue
|
258 |
-
if img is None:
|
259 |
-
print('NSFW -- choice is disliked')
|
260 |
-
choice = [0, 0]
|
261 |
-
|
262 |
-
row_mask = [p.split('/')[-1] in img for p in prevs_df['paths'].to_list()]
|
263 |
-
# if it's still in the dataframe, add the choice
|
264 |
-
if len(prevs_df.loc[row_mask, 'user:rating']) > 0:
|
265 |
-
prevs_df.loc[row_mask, 'user:rating'][0][user_id] = choice
|
266 |
-
prevs_df.loc[row_mask, 'latest_user_to_rate'] = [user_id]
|
267 |
else:
|
268 |
-
|
269 |
-
|
270 |
-
|
|
|
271 |
|
272 |
css = '''.gradio-container{max-width: 700px !important}
|
273 |
#description{text-align: center}
|
274 |
-
#description h1
|
275 |
#description p{margin-top: 0}
|
276 |
-
.fade-in-out {animation: fadeInOut 3s forwards}
|
277 |
-
@keyframes fadeInOut {
|
278 |
-
0% {
|
279 |
-
background: var(--bg-color);
|
280 |
-
}
|
281 |
-
100% {
|
282 |
-
background: var(--button-secondary-background-fill);
|
283 |
-
}
|
284 |
-
}
|
285 |
'''
|
286 |
-
|
287 |
<script>
|
288 |
document.addEventListener('keydown', function(event) {
|
289 |
if (event.key === 'a' || event.key === 'A') {
|
@@ -297,143 +177,54 @@ document.addEventListener('keydown', function(event) {
|
|
297 |
document.getElementById('like').click();
|
298 |
}
|
299 |
});
|
300 |
-
function fadeInOut(button, color) {
|
301 |
-
button.style.setProperty('--bg-color', color);
|
302 |
-
button.classList.remove('fade-in-out');
|
303 |
-
void button.offsetWidth; // This line forces a repaint by accessing a DOM property
|
304 |
-
|
305 |
-
button.classList.add('fade-in-out');
|
306 |
-
button.addEventListener('animationend', () => {
|
307 |
-
button.classList.remove('fade-in-out'); // Reset the animation state
|
308 |
-
}, {once: true});
|
309 |
-
}
|
310 |
-
document.body.addEventListener('click', function(event) {
|
311 |
-
const target = event.target;
|
312 |
-
if (target.id === 'dislike') {
|
313 |
-
fadeInOut(target, '#ff1717');
|
314 |
-
} else if (target.id === 'like') {
|
315 |
-
fadeInOut(target, '#006500');
|
316 |
-
} else if (target.id === 'neither') {
|
317 |
-
fadeInOut(target, '#cccccc');
|
318 |
-
}
|
319 |
-
});
|
320 |
-
|
321 |
</script>
|
322 |
'''
|
323 |
|
324 |
-
with gr.Blocks(
|
325 |
-
gr.Markdown('''#
|
326 |
-
|
327 |
-
|
328 |
-
Explore the latent space using binary feedback.
|
329 |
-
|
330 |
-
[rynmurdock.github.io](https://rynmurdock.github.io/)
|
331 |
''', elem_id="description")
|
332 |
-
|
333 |
-
|
334 |
-
calibrate_prompts = gr.State(
|
335 |
-
|
336 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
337 |
|
338 |
with gr.Row(elem_id='output-image'):
|
339 |
-
img = gr.Image(
|
340 |
-
label='Lightning',
|
341 |
-
interactive=False,
|
342 |
-
elem_id="output_im",
|
343 |
-
type='filepath',
|
344 |
-
height=700,
|
345 |
-
width=700,
|
346 |
-
)
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
with gr.Row(equal_height=True):
|
351 |
-
b3 = gr.Button(value='
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
b1 = gr.Button(value='👍', interactive=False, elem_id="like")
|
356 |
-
with gr.Row(equal_height=True):
|
357 |
-
b6 = gr.Button(value='👍 Style', interactive=False, elem_id="dislike like", visible=False)
|
358 |
-
|
359 |
-
b5 = gr.Button(value='👍 Content', interactive=False, elem_id="like dislike", visible=False)
|
360 |
-
|
361 |
b1.click(
|
362 |
choose,
|
363 |
-
[
|
364 |
-
[img,
|
365 |
)
|
366 |
b2.click(
|
367 |
choose,
|
368 |
-
[
|
369 |
-
[img,
|
370 |
)
|
371 |
b3.click(
|
372 |
choose,
|
373 |
-
[
|
374 |
-
[img,
|
375 |
-
)
|
376 |
-
b5.click(
|
377 |
-
choose,
|
378 |
-
[img, b5, calibrate_prompts, user_id],
|
379 |
-
[img, calibrate_prompts, ],
|
380 |
-
)
|
381 |
-
b6.click(
|
382 |
-
choose,
|
383 |
-
[img, b6, calibrate_prompts, user_id],
|
384 |
-
[img, calibrate_prompts, ],
|
385 |
)
|
386 |
with gr.Row():
|
387 |
b4 = gr.Button(value='Start')
|
388 |
b4.click(start,
|
389 |
-
[b4,
|
390 |
-
[b1, b2, b3, b4,
|
391 |
-
)
|
392 |
with gr.Row():
|
393 |
-
html = gr.HTML('''<div style='text-align:center; font-size:20px'>You will calibrate for several
|
394 |
-
|
395 |
-
<br><br>
|
396 |
-
<div style='text-align:center; font-size:14px'>Thanks to @multimodalart for their contributions to the demo, esp. the interface and @maxbittker for feedback.
|
397 |
-
</ div>''')
|
398 |
-
|
399 |
-
# TODO quiet logging
|
400 |
-
scheduler = BackgroundScheduler()
|
401 |
-
scheduler.add_job(func=background_next_image, trigger="interval", seconds=.2)
|
402 |
-
scheduler.start()
|
403 |
-
|
404 |
-
# TODO shouldn't call this before gradio launch, yeah?
|
405 |
-
@spaces.GPU()
|
406 |
-
def encode_space(x):
|
407 |
-
im = (
|
408 |
-
model.prior_pipe.image_processor(x, return_tensors="pt")
|
409 |
-
.pixel_values[0]
|
410 |
-
.unsqueeze(0)
|
411 |
-
.to(dtype=model.prior_pipe.image_encoder.dtype, device=device)
|
412 |
-
)
|
413 |
-
im_emb = model.prior_pipe.image_encoder(im)["image_embeds"]
|
414 |
-
return im_emb.detach().to('cpu').to(torch.float32)
|
415 |
-
|
416 |
-
# NOTE:
|
417 |
-
# media is moved into a random tmp folder so we need to parse filenames carefully.
|
418 |
-
# do not have any cases where a file name is the same or could be `in` another filename
|
419 |
-
# you also maybe can't use jpegs lmao
|
420 |
-
|
421 |
-
# prep our calibration videos
|
422 |
-
m_calibrate = glob.glob('image_init/*')
|
423 |
-
for im in m_calibrate:
|
424 |
-
tmp_df = pd.DataFrame(columns=['paths', 'embeddings', 'ips', 'user:rating', 'text', 'gemb', 'from_user_id'])
|
425 |
-
tmp_df['paths'] = [im]
|
426 |
-
image = Image.open(im).convert('RGB')
|
427 |
-
im_emb = encode_space(image)
|
428 |
-
|
429 |
-
tmp_df['embeddings'] = [im_emb.detach().to('cpu')]
|
430 |
-
tmp_df['user:rating'] = [{' ': ' '}]
|
431 |
-
tmp_df['text'] = ['']
|
432 |
-
|
433 |
-
# seems to break things...
|
434 |
-
tmp_df['from_user_id'] = [0]
|
435 |
-
tmp_df['latest_user_to_rate'] = [0]
|
436 |
-
prevs_df = pd.concat((prevs_df, tmp_df))
|
437 |
|
438 |
-
|
439 |
-
demo.launch(share=True,)
|
|
|
1 |
+
DEVICE = 'cpu'
|
2 |
|
3 |
import gradio as gr
|
4 |
+
import numpy as np
|
5 |
+
from sklearn.svm import LinearSVC
|
6 |
+
from sklearn import preprocessing
|
7 |
+
import pandas as pd
|
8 |
+
|
9 |
+
from diffusers import LCMScheduler, AutoencoderTiny, EulerDiscreteScheduler, UNet2DConditionModel
|
10 |
+
from diffusers.models import ImageProjection
|
11 |
+
from patch_sdxl import SDEmb
|
12 |
+
import torch
|
13 |
+
import spaces
|
14 |
+
|
15 |
import random
|
16 |
import time
|
17 |
+
|
18 |
import torch
|
19 |
+
from urllib.request import urlopen
|
20 |
|
21 |
+
from PIL import Image
|
22 |
+
import requests
|
23 |
+
from io import BytesIO, StringIO
|
24 |
|
25 |
+
from huggingface_hub import hf_hub_download
|
26 |
+
from safetensors.torch import load_file
|
27 |
|
28 |
+
prompt_list = [p for p in list(set(
|
29 |
+
pd.read_csv('./twitter_prompts.csv').iloc[:, 1].tolist())) if type(p) == str]
|
30 |
|
31 |
+
start_time = time.time()
|
32 |
|
33 |
+
####################### Setup Model
|
34 |
+
model_id = "stabilityai/stable-diffusion-xl-base-1.0"
|
35 |
+
sdxl_lightening = "ByteDance/SDXL-Lightning"
|
36 |
+
ckpt = "sdxl_lightning_2step_unet.safetensors"
|
37 |
+
unet = UNet2DConditionModel.from_config(model_id, subfolder="unet").to("cuda", torch.float16)
|
38 |
+
unet.load_state_dict(load_file(hf_hub_download(sdxl_lightening, ckpt), device="cuda"))
|
39 |
+
pipe = SDEmb.from_pretrained(model_id, unet=unet, torch_dtype=torch.float16, variant="fp16").to("cuda")
|
40 |
+
pipe.vae = AutoencoderTiny.from_pretrained("madebyollin/taesdxl", torch_dtype=torch.float16)
|
41 |
+
pipe.scheduler = EulerDiscreteScheduler.from_config(pipe.scheduler.config, timestep_spacing="trailing")
|
42 |
+
pipe.to(device='cuda')
|
43 |
+
pipe.load_ip_adapter("h94/IP-Adapter", subfolder="sdxl_models", weight_name="ip-adapter_sdxl.bin")
|
44 |
+
|
45 |
+
output_hidden_state = False
|
46 |
+
#######################
|
47 |
|
48 |
+
@spaces.GPU
|
49 |
+
def predict(
|
50 |
+
prompt,
|
51 |
+
im_emb=None,
|
52 |
+
progress=gr.Progress(track_tqdm=True)
|
53 |
+
):
|
54 |
+
"""Run a single prediction on the model"""
|
55 |
+
with torch.no_grad():
|
56 |
+
if im_emb == None:
|
57 |
+
im_emb = torch.zeros(1, 1280, dtype=torch.float16, device='cuda')
|
58 |
+
image = pipe(
|
59 |
+
prompt=prompt,
|
60 |
+
ip_adapter_emb=im_emb.to('cuda'),
|
61 |
+
height=1024,
|
62 |
+
width=1024,
|
63 |
+
num_inference_steps=2,
|
64 |
+
guidance_scale=0,
|
65 |
+
).images[0]
|
66 |
+
im_emb, _ = pipe.encode_image(
|
67 |
+
image, 'cuda', 1, output_hidden_state
|
68 |
+
)
|
69 |
+
return image, im_emb.to(DEVICE)
|
70 |
|
71 |
+
# TODO add to state instead of shared across all
|
72 |
+
glob_idx = 0
|
|
|
|
|
73 |
|
74 |
+
def next_image(embs, ys, calibrate_prompts):
|
75 |
+
global glob_idx
|
76 |
+
glob_idx = glob_idx + 1
|
|
|
77 |
|
78 |
+
# handle case where every instance of calibration prompts is 'Neither' or 'Like' or 'Dislike'
|
79 |
+
if len(calibrate_prompts) == 0 and len(list(set(ys))) <= 1:
|
80 |
+
embs.append(.01*torch.randn(1, 1280))
|
81 |
+
embs.append(.01*torch.randn(1, 1280))
|
82 |
+
ys.append(0)
|
83 |
+
ys.append(1)
|
84 |
+
|
85 |
+
with torch.no_grad():
|
86 |
+
if len(calibrate_prompts) > 0:
|
87 |
+
print('######### Calibrating with sample prompts #########')
|
88 |
+
prompt = calibrate_prompts.pop(0)
|
89 |
+
print(prompt)
|
90 |
+
image, img_emb = predict(prompt)
|
91 |
+
embs.append(img_emb)
|
92 |
+
return image, embs, ys, calibrate_prompts
|
93 |
+
else:
|
94 |
+
print('######### Roaming #########')
|
95 |
+
# sample only as many negatives as there are positives
|
96 |
+
indices = range(len(ys))
|
97 |
+
pos_indices = [i for i in indices if ys[i] == 1]
|
98 |
+
neg_indices = [i for i in indices if ys[i] == 0]
|
99 |
+
lower = min(len(pos_indices), len(neg_indices))
|
100 |
+
neg_indices = random.sample(neg_indices, lower)
|
101 |
+
pos_indices = random.sample(pos_indices, lower)
|
102 |
|
103 |
+
cut_embs = [embs[i] for i in neg_indices] + [embs[i] for i in pos_indices]
|
104 |
+
cut_ys = [ys[i] for i in neg_indices] + [ys[i] for i in pos_indices]
|
|
|
105 |
|
106 |
+
feature_embs = torch.stack([e[0].detach().cpu() for e in cut_embs])
|
107 |
+
scaler = preprocessing.StandardScaler().fit(feature_embs)
|
108 |
+
feature_embs = scaler.transform(feature_embs)
|
109 |
+
print(np.array(feature_embs).shape, np.array(ys).shape)
|
110 |
|
111 |
+
lin_class = LinearSVC(max_iter=50000, dual='auto', class_weight='balanced').fit(np.array(feature_embs), np.array(cut_ys))
|
112 |
+
lin_class.coef_ = torch.tensor(lin_class.coef_, dtype=torch.double)
|
113 |
+
lin_class.coef_ = (lin_class.coef_.flatten() / (lin_class.coef_.flatten().norm())).unsqueeze(0)
|
114 |
|
|
|
|
|
|
|
|
|
115 |
|
116 |
+
rng_prompt = random.choice(prompt_list)
|
117 |
|
118 |
+
w = 1# if len(embs) % 2 == 0 else 0
|
119 |
+
im_emb = w * lin_class.coef_.to(device=DEVICE, dtype=torch.float16)
|
120 |
+
prompt= 'an image' if glob_idx % 2 == 0 else rng_prompt
|
121 |
+
print(prompt)
|
122 |
+
image, im_emb = predict(prompt, im_emb)
|
123 |
+
embs.append(im_emb)
|
124 |
+
return image, embs, ys, calibrate_prompts
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
|
126 |
|
|
|
127 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
|
129 |
|
130 |
|
131 |
|
132 |
|
133 |
|
134 |
+
def start(_, embs, ys, calibrate_prompts):
|
135 |
+
image, embs, ys, calibrate_prompts = next_image(embs, ys, calibrate_prompts)
|
|
|
136 |
return [
|
137 |
+
gr.Button(value='Like (L)', interactive=True),
|
138 |
+
gr.Button(value='Neither (Space)', interactive=True),
|
139 |
+
gr.Button(value='Dislike (A)', interactive=True),
|
140 |
gr.Button(value='Start', interactive=False),
|
|
|
|
|
141 |
image,
|
142 |
+
embs,
|
143 |
+
ys,
|
144 |
+
calibrate_prompts
|
145 |
]
|
146 |
|
147 |
|
148 |
+
def choose(choice, embs, ys, calibrate_prompts):
|
149 |
+
if choice == 'Like':
|
150 |
+
choice = 1
|
151 |
+
elif choice == 'Neither':
|
152 |
+
_ = embs.pop(-1)
|
153 |
+
img, embs, ys, calibrate_prompts = next_image(embs, ys, calibrate_prompts)
|
154 |
+
return img, embs, ys, calibrate_prompts
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
else:
|
156 |
+
choice = 0
|
157 |
+
ys.append(choice)
|
158 |
+
img, embs, ys, calibrate_prompts = next_image(embs, ys, calibrate_prompts)
|
159 |
+
return img, embs, ys, calibrate_prompts
|
160 |
|
161 |
css = '''.gradio-container{max-width: 700px !important}
|
162 |
#description{text-align: center}
|
163 |
+
#description h1{display: block}
|
164 |
#description p{margin-top: 0}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
165 |
'''
|
166 |
+
js = '''
|
167 |
<script>
|
168 |
document.addEventListener('keydown', function(event) {
|
169 |
if (event.key === 'a' || event.key === 'A') {
|
|
|
177 |
document.getElementById('like').click();
|
178 |
}
|
179 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
</script>
|
181 |
'''
|
182 |
|
183 |
+
with gr.Blocks(css=css, head=js) as demo:
|
184 |
+
gr.Markdown('''# Generative Recommenders
|
185 |
+
Explore the latent space without text prompts, based on your preferences. [Learn more on the blog](https://rynmurdock.github.io/posts/2024/3/generative_recomenders/)
|
|
|
|
|
|
|
|
|
186 |
''', elem_id="description")
|
187 |
+
embs = gr.State([])
|
188 |
+
ys = gr.State([])
|
189 |
+
calibrate_prompts = gr.State([
|
190 |
+
"4k photo",
|
191 |
+
'surrealist art',
|
192 |
+
# 'a psychedelic, fractal view',
|
193 |
+
'a beautiful collage',
|
194 |
+
'abstract art',
|
195 |
+
'an eldritch image',
|
196 |
+
'a sketch',
|
197 |
+
# 'a city full of darkness and graffiti',
|
198 |
+
'',
|
199 |
+
])
|
200 |
|
201 |
with gr.Row(elem_id='output-image'):
|
202 |
+
img = gr.Image(interactive=False, elem_id='output-image',width=700)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
with gr.Row(equal_height=True):
|
204 |
+
b3 = gr.Button(value='Dislike (A)', interactive=False, elem_id="dislike")
|
205 |
+
b2 = gr.Button(value='Neither (Space)', interactive=False, elem_id="neither")
|
206 |
+
b1 = gr.Button(value='Like (L)', interactive=False, elem_id="like")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
207 |
b1.click(
|
208 |
choose,
|
209 |
+
[b1, embs, ys, calibrate_prompts],
|
210 |
+
[img, embs, ys, calibrate_prompts]
|
211 |
)
|
212 |
b2.click(
|
213 |
choose,
|
214 |
+
[b2, embs, ys, calibrate_prompts],
|
215 |
+
[img, embs, ys, calibrate_prompts]
|
216 |
)
|
217 |
b3.click(
|
218 |
choose,
|
219 |
+
[b3, embs, ys, calibrate_prompts],
|
220 |
+
[img, embs, ys, calibrate_prompts]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
)
|
222 |
with gr.Row():
|
223 |
b4 = gr.Button(value='Start')
|
224 |
b4.click(start,
|
225 |
+
[b4, embs, ys, calibrate_prompts],
|
226 |
+
[b1, b2, b3, b4, img, embs, ys, calibrate_prompts])
|
|
|
227 |
with gr.Row():
|
228 |
+
html = gr.HTML('''<div style='text-align:center; font-size:20px'>You will calibrate for several prompts and then roam.</ div>''')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
229 |
|
230 |
+
demo.launch() # Share your demo with just 1 extra parameter 🚀
|
|
config.py
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
import torch
|
2 |
-
|
3 |
-
# NOTE model path name changed
|
4 |
-
model_path = './last_epoch_ckpt/'
|
5 |
-
lr = 1e-5
|
6 |
-
device = 'cuda'
|
7 |
-
dtype = torch.bfloat16
|
8 |
-
data_path = '../data/lke_2017'
|
9 |
-
save_path = './'
|
10 |
-
epochs = 4
|
11 |
-
batch_size = 16
|
12 |
-
number_k_clip_embed = 16 # divide by this to determine bundling together of sequences -> CLIP
|
13 |
-
num_workers = 32
|
14 |
-
seed = 107
|
15 |
-
|
16 |
-
# TODO config option to swap to diffusion?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data.py
DELETED
@@ -1,147 +0,0 @@
|
|
1 |
-
import torch
|
2 |
-
from PIL import Image
|
3 |
-
import random
|
4 |
-
import logging
|
5 |
-
import torchvision
|
6 |
-
|
7 |
-
import torchvision.transforms as T
|
8 |
-
from torchvision.transforms.functional import InterpolationMode
|
9 |
-
|
10 |
-
IMAGENET_MEAN = (0.485, 0.456, 0.406)
|
11 |
-
IMAGENET_STD = (0.229, 0.224, 0.225)
|
12 |
-
|
13 |
-
def build_transform(input_size):
|
14 |
-
MEAN, STD = IMAGENET_MEAN, IMAGENET_STD
|
15 |
-
transform = T.Compose([
|
16 |
-
T.Lambda(lambda img: img.convert('RGB') if img.mode != 'RGB' else img),
|
17 |
-
T.Resize((input_size, input_size), interpolation=InterpolationMode.BICUBIC),
|
18 |
-
T.ToTensor(),
|
19 |
-
T.Normalize(mean=MEAN, std=STD)
|
20 |
-
])
|
21 |
-
return transform
|
22 |
-
|
23 |
-
def find_closest_aspect_ratio(aspect_ratio, target_ratios, width, height, image_size):
|
24 |
-
best_ratio_diff = float('inf')
|
25 |
-
best_ratio = (1, 1)
|
26 |
-
area = width * height
|
27 |
-
for ratio in target_ratios:
|
28 |
-
target_aspect_ratio = ratio[0] / ratio[1]
|
29 |
-
ratio_diff = abs(aspect_ratio - target_aspect_ratio)
|
30 |
-
if ratio_diff < best_ratio_diff:
|
31 |
-
best_ratio_diff = ratio_diff
|
32 |
-
best_ratio = ratio
|
33 |
-
elif ratio_diff == best_ratio_diff:
|
34 |
-
if area > 0.5 * image_size * image_size * ratio[0] * ratio[1]:
|
35 |
-
best_ratio = ratio
|
36 |
-
return best_ratio
|
37 |
-
|
38 |
-
def dynamic_preprocess(image, min_num=1, max_num=8, image_size=448, use_thumbnail=False):
|
39 |
-
orig_width, orig_height = image.size
|
40 |
-
aspect_ratio = orig_width / orig_height
|
41 |
-
|
42 |
-
# calculate the existing image aspect ratio
|
43 |
-
target_ratios = set(
|
44 |
-
(i, j) for n in range(min_num, max_num + 1) for i in range(1, n + 1) for j in range(1, n + 1) if
|
45 |
-
i * j <= max_num and i * j >= min_num)
|
46 |
-
target_ratios = sorted(target_ratios, key=lambda x: x[0] * x[1])
|
47 |
-
|
48 |
-
# find the closest aspect ratio to the target
|
49 |
-
target_aspect_ratio = find_closest_aspect_ratio(
|
50 |
-
aspect_ratio, target_ratios, orig_width, orig_height, image_size)
|
51 |
-
|
52 |
-
# calculate the target width and height
|
53 |
-
target_width = image_size * target_aspect_ratio[0]
|
54 |
-
target_height = image_size * target_aspect_ratio[1]
|
55 |
-
blocks = target_aspect_ratio[0] * target_aspect_ratio[1]
|
56 |
-
|
57 |
-
# resize the image
|
58 |
-
resized_img = image.resize((target_width, target_height))
|
59 |
-
processed_images = []
|
60 |
-
for i in range(blocks):
|
61 |
-
box = (
|
62 |
-
(i % (target_width // image_size)) * image_size,
|
63 |
-
(i // (target_width // image_size)) * image_size,
|
64 |
-
((i % (target_width // image_size)) + 1) * image_size,
|
65 |
-
((i // (target_width // image_size)) + 1) * image_size
|
66 |
-
)
|
67 |
-
# split the image
|
68 |
-
split_img = resized_img.crop(box)
|
69 |
-
processed_images.append(split_img)
|
70 |
-
assert len(processed_images) == blocks
|
71 |
-
if use_thumbnail and len(processed_images) != 1:
|
72 |
-
thumbnail_img = image.resize((image_size, image_size))
|
73 |
-
processed_images.append(thumbnail_img)
|
74 |
-
return processed_images
|
75 |
-
|
76 |
-
|
77 |
-
def load_image(image_file, pil_image=None, input_size=224,):
|
78 |
-
if not pil_image:
|
79 |
-
pil_image = Image.open(image_file)
|
80 |
-
image = pil_image.convert('RGB')
|
81 |
-
transform = build_transform(input_size=input_size)
|
82 |
-
# images = dynamic_preprocess(image, image_size=input_size, use_thumbnail=True, max_num=max_num)
|
83 |
-
pixel_values = [transform(image) for image in [image]]
|
84 |
-
pixel_values = torch.stack(pixel_values)
|
85 |
-
return pixel_values
|
86 |
-
|
87 |
-
def my_collate(batch):
|
88 |
-
try:
|
89 |
-
targets = torch.stack([s['target'] for s in batch])
|
90 |
-
samples = torch.stack([s['samples'] for s in batch])
|
91 |
-
|
92 |
-
# targets = torch.stack([s['target'] for s in batch if s is not None])
|
93 |
-
# samples = torch.stack([s['samples'] for s in batch if s is not None])
|
94 |
-
except Exception as e:
|
95 |
-
logging.warning('my_collate issue ', e)
|
96 |
-
return None
|
97 |
-
return samples, targets
|
98 |
-
|
99 |
-
|
100 |
-
class ImageFolderSample(torchvision.datasets.ImageFolder):
|
101 |
-
def __init__(self, data_path, k, processor):
|
102 |
-
super().__init__(data_path)
|
103 |
-
self.k = k
|
104 |
-
self.processor = processor
|
105 |
-
|
106 |
-
def safe_getitem(self, index):
|
107 |
-
try:
|
108 |
-
target_path, class_type = self.samples[index]
|
109 |
-
target = torch.from_numpy(self.processor(self.loader(target_path)).data['pixel_values'][0])
|
110 |
-
|
111 |
-
input_paths = random.choices([p[0] for p in self.samples if p != target_path and class_type in p], k=self.k)
|
112 |
-
assert len(input_paths) == self.k # I think it may do this by default...
|
113 |
-
samples = torch.stack([torch.from_numpy(self.processor(self.loader(i)).data['pixel_values'][0]) for i in input_paths])
|
114 |
-
except Exception as e:
|
115 |
-
logging.warning('getitem issue ', e)
|
116 |
-
samples, target = None, None
|
117 |
-
|
118 |
-
drop_mask = torch.rand(samples.shape[0],) < .2
|
119 |
-
samples[drop_mask] = 0
|
120 |
-
|
121 |
-
drop_whole_set_mask = torch.rand(1,) < .1
|
122 |
-
if drop_whole_set_mask:
|
123 |
-
samples = torch.zeros_like(samples)
|
124 |
-
return {'samples': samples[:, :3], 'target': target[:3]}
|
125 |
-
|
126 |
-
def __getitem__(self, index: int):
|
127 |
-
return self.safe_getitem(index)
|
128 |
-
|
129 |
-
|
130 |
-
# https://data.mendeley.com/datasets/fs4k2zc5j5/3
|
131 |
-
# Gomez, J. C., Ibarra-Manzano, M. A., & Almanza-Ojeda, D. L. (2017). User Identification in Pinterest Through the Refinement of Cascade Fusion of Text and Images. Research in Computing Science, 144, 41-52.
|
132 |
-
def get_dataset(data_path, processor):
|
133 |
-
return ImageFolderSample(data_path, 8, processor)
|
134 |
-
|
135 |
-
|
136 |
-
def get_dataloader(data_path, batch_size, num_workers, processor):
|
137 |
-
dataloader = torch.utils.data.DataLoader(
|
138 |
-
get_dataset(data_path, processor=processor),
|
139 |
-
num_workers=num_workers,
|
140 |
-
collate_fn=my_collate,
|
141 |
-
batch_size=batch_size,
|
142 |
-
shuffle=True,
|
143 |
-
drop_last=True
|
144 |
-
)
|
145 |
-
return dataloader
|
146 |
-
|
147 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
image_init/10o.png
DELETED
Git LFS Details
|
image_init/1o.png
DELETED
Git LFS Details
|
image_init/2o.png
DELETED
Git LFS Details
|
image_init/3o.png
DELETED
Git LFS Details
|
image_init/4o.png
DELETED
Git LFS Details
|
image_init/5o.png
DELETED
Git LFS Details
|
image_init/6o.png
DELETED
Git LFS Details
|
image_init/7o.png
DELETED
Git LFS Details
|
image_init/8o.png
DELETED
Git LFS Details
|
image_init/9o.png
DELETED
Git LFS Details
|
last_epoch_ckpt/config.json
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"_class_name": "PriorTransformer",
|
3 |
-
"_diffusers_version": "0.34.0.dev0",
|
4 |
-
"_name_or_path": "./last_epoch_ckpt/",
|
5 |
-
"added_emb_type": "prd",
|
6 |
-
"additional_embeddings": 3,
|
7 |
-
"attention_head_dim": 32,
|
8 |
-
"clip_embed_dim": null,
|
9 |
-
"dropout": 0.0,
|
10 |
-
"embedding_dim": 1280,
|
11 |
-
"embedding_proj_dim": null,
|
12 |
-
"embedding_proj_norm_type": null,
|
13 |
-
"encoder_hid_proj_type": "linear",
|
14 |
-
"norm_in_type": null,
|
15 |
-
"num_attention_heads": 16,
|
16 |
-
"num_embeddings": 77,
|
17 |
-
"num_layers": 10
|
18 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
last_epoch_ckpt/diffusion_pytorch_model.safetensors
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:91ca25967a5dd1665b5fb8f1b4a45ba0f7ad0c23929daefb26b267816616e05d
|
3 |
-
size 136790920
|
|
|
|
|
|
|
|
latest_val.png
DELETED
Git LFS Details
|
model.py
DELETED
@@ -1,52 +0,0 @@
|
|
1 |
-
|
2 |
-
import torch
|
3 |
-
import logging
|
4 |
-
from diffusers import DiffusionPipeline
|
5 |
-
|
6 |
-
from prior.pipeline_kandinsky_prior import KandinskyPriorPipeline
|
7 |
-
from prior.prior_transformer import PriorTransformer
|
8 |
-
|
9 |
-
|
10 |
-
class Zoo(torch.nn.Module):
|
11 |
-
def __init__(self, prior, prior_pipe, kandinsky_pipe, ) -> None:
|
12 |
-
super().__init__()
|
13 |
-
self.prior = prior
|
14 |
-
self.prior_pipe = prior_pipe
|
15 |
-
self.kandinsky_pipe = kandinsky_pipe
|
16 |
-
self.pre_prior_transformer = None
|
17 |
-
# NOTE we may get better perf from freezing our prior
|
18 |
-
# and only training a transformer adapter?
|
19 |
-
|
20 |
-
def forward(self, latents, preferred_embeds):
|
21 |
-
pred = self.prior(latents, preferred_embeds)
|
22 |
-
return pred
|
23 |
-
|
24 |
-
def do_validation(self, images): # TODO constant val seed
|
25 |
-
assert all([len(i) == 8 for i in images]), f'We have must have `k` images, not {len(images)}.'
|
26 |
-
image_embeds, negative_image_embeds = self.prior_pipe(images).to_tuple()
|
27 |
-
images = self.kandinsky_pipe(
|
28 |
-
num_inference_steps=50,
|
29 |
-
image_embeds=image_embeds,
|
30 |
-
negative_image_embeds=negative_image_embeds,
|
31 |
-
).images
|
32 |
-
images[0].save('latest_val.png')
|
33 |
-
return images
|
34 |
-
|
35 |
-
def get_model_and_tokenizer(path, device, dtype):
|
36 |
-
prior = PriorTransformer.from_pretrained("ECLIPSE-Community/ECLIPSE_KandinskyV22_Prior"
|
37 |
-
if path is None else path).to(device)
|
38 |
-
|
39 |
-
pipe_prior = KandinskyPriorPipeline.from_pretrained("kandinsky-community/kandinsky-2-2-prior", prior=prior).to(device)
|
40 |
-
pipe_prior.image_encoder = pipe_prior.image_encoder.to(device, dtype)
|
41 |
-
# Note: don't set the prior to `dtype`` as it may be half precision,
|
42 |
-
# and we're training with mixed precision
|
43 |
-
# so we need to keep our full-precision weight for trained params
|
44 |
-
kandinsky_pipe = DiffusionPipeline.from_pretrained("kandinsky-community/kandinsky-2-2-decoder").to(device, dtype)
|
45 |
-
model = Zoo(prior, pipe_prior, kandinsky_pipe).to(device)
|
46 |
-
|
47 |
-
return model, model.prior_pipe.image_encoder
|
48 |
-
|
49 |
-
def get_optimizer(params, lr):
|
50 |
-
logging.info(f'Training: {params}')
|
51 |
-
optimizer = torch.optim.AdamW(params, lr=lr)
|
52 |
-
return optimizer
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
patch_sdxl.py
ADDED
@@ -0,0 +1,559 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import inspect
|
2 |
+
from typing import Any, Callable, Dict, List, Optional, Union, Tuple
|
3 |
+
|
4 |
+
from diffusers import StableDiffusionXLPipeline
|
5 |
+
|
6 |
+
import torch
|
7 |
+
from packaging import version
|
8 |
+
from transformers import CLIPImageProcessor, CLIPTextModel, CLIPTokenizer, CLIPVisionModelWithProjection
|
9 |
+
|
10 |
+
from diffusers.configuration_utils import FrozenDict
|
11 |
+
from diffusers.image_processor import PipelineImageInput, VaeImageProcessor
|
12 |
+
from diffusers.loaders import FromSingleFileMixin, IPAdapterMixin, LoraLoaderMixin, TextualInversionLoaderMixin
|
13 |
+
from diffusers.models import AutoencoderKL, ImageProjection, UNet2DConditionModel
|
14 |
+
from diffusers.models.attention_processor import FusedAttnProcessor2_0
|
15 |
+
from diffusers.models.lora import adjust_lora_scale_text_encoder
|
16 |
+
from diffusers.schedulers import KarrasDiffusionSchedulers
|
17 |
+
from diffusers.utils import (
|
18 |
+
USE_PEFT_BACKEND,
|
19 |
+
deprecate,
|
20 |
+
logging,
|
21 |
+
replace_example_docstring,
|
22 |
+
scale_lora_layers,
|
23 |
+
unscale_lora_layers,
|
24 |
+
)
|
25 |
+
from diffusers.pipelines.stable_diffusion_xl import StableDiffusionXLPipelineOutput
|
26 |
+
|
27 |
+
|
28 |
+
|
29 |
+
from transformers import CLIPFeatureExtractor
|
30 |
+
import numpy as np
|
31 |
+
import torch
|
32 |
+
from PIL import Image
|
33 |
+
from typing import Optional, Tuple, Union
|
34 |
+
|
35 |
+
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
36 |
+
torch_device = device
|
37 |
+
torch_dtype = torch.float16
|
38 |
+
|
39 |
+
|
40 |
+
logger = logging.get_logger(__name__) # pylint: disable=invalid-name
|
41 |
+
|
42 |
+
EXAMPLE_DOC_STRING = """
|
43 |
+
Examples:
|
44 |
+
```py
|
45 |
+
>>> import torch
|
46 |
+
>>> from diffusers import StableDiffusionPipeline
|
47 |
+
|
48 |
+
>>> pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
|
49 |
+
>>> pipe = pipe.to("cuda")
|
50 |
+
|
51 |
+
>>> prompt = "a photo of an astronaut riding a horse on mars"
|
52 |
+
>>> image = pipe(prompt).images[0]
|
53 |
+
```
|
54 |
+
"""
|
55 |
+
|
56 |
+
|
57 |
+
def rescale_noise_cfg(noise_cfg, noise_pred_text, guidance_rescale=0.0):
|
58 |
+
"""
|
59 |
+
Rescale `noise_cfg` according to `guidance_rescale`. Based on findings of [Common Diffusion Noise Schedules and
|
60 |
+
Sample Steps are Flawed](https://arxiv.org/pdf/2305.08891.pdf). See Section 3.4
|
61 |
+
"""
|
62 |
+
std_text = noise_pred_text.std(dim=list(range(1, noise_pred_text.ndim)), keepdim=True)
|
63 |
+
std_cfg = noise_cfg.std(dim=list(range(1, noise_cfg.ndim)), keepdim=True)
|
64 |
+
# rescale the results from guidance (fixes overexposure)
|
65 |
+
noise_pred_rescaled = noise_cfg * (std_text / std_cfg)
|
66 |
+
# mix with the original results from guidance by factor guidance_rescale to avoid "plain looking" images
|
67 |
+
noise_cfg = guidance_rescale * noise_pred_rescaled + (1 - guidance_rescale) * noise_cfg
|
68 |
+
return noise_cfg
|
69 |
+
|
70 |
+
|
71 |
+
def retrieve_timesteps(
|
72 |
+
scheduler,
|
73 |
+
num_inference_steps: Optional[int] = None,
|
74 |
+
device: Optional[Union[str, torch.device]] = None,
|
75 |
+
timesteps: Optional[List[int]] = None,
|
76 |
+
**kwargs,
|
77 |
+
):
|
78 |
+
"""
|
79 |
+
Calls the scheduler's `set_timesteps` method and retrieves timesteps from the scheduler after the call. Handles
|
80 |
+
custom timesteps. Any kwargs will be supplied to `scheduler.set_timesteps`.
|
81 |
+
|
82 |
+
Args:
|
83 |
+
scheduler (`SchedulerMixin`):
|
84 |
+
The scheduler to get timesteps from.
|
85 |
+
num_inference_steps (`int`):
|
86 |
+
The number of diffusion steps used when generating samples with a pre-trained model. If used,
|
87 |
+
`timesteps` must be `None`.
|
88 |
+
device (`str` or `torch.device`, *optional*):
|
89 |
+
The device to which the timesteps should be moved to. If `None`, the timesteps are not moved.
|
90 |
+
timesteps (`List[int]`, *optional*):
|
91 |
+
Custom timesteps used to support arbitrary spacing between timesteps. If `None`, then the default
|
92 |
+
timestep spacing strategy of the scheduler is used. If `timesteps` is passed, `num_inference_steps`
|
93 |
+
must be `None`.
|
94 |
+
|
95 |
+
Returns:
|
96 |
+
`Tuple[torch.Tensor, int]`: A tuple where the first element is the timestep schedule from the scheduler and the
|
97 |
+
second element is the number of inference steps.
|
98 |
+
"""
|
99 |
+
if timesteps is not None:
|
100 |
+
accepts_timesteps = "timesteps" in set(inspect.signature(scheduler.set_timesteps).parameters.keys())
|
101 |
+
if not accepts_timesteps:
|
102 |
+
raise ValueError(
|
103 |
+
f"The current scheduler class {scheduler.__class__}'s `set_timesteps` does not support custom"
|
104 |
+
f" timestep schedules. Please check whether you are using the correct scheduler."
|
105 |
+
)
|
106 |
+
scheduler.set_timesteps(timesteps=timesteps, device=device, **kwargs)
|
107 |
+
timesteps = scheduler.timesteps
|
108 |
+
num_inference_steps = len(timesteps)
|
109 |
+
else:
|
110 |
+
scheduler.set_timesteps(num_inference_steps, device=device, **kwargs)
|
111 |
+
timesteps = scheduler.timesteps
|
112 |
+
return timesteps, num_inference_steps
|
113 |
+
|
114 |
+
|
115 |
+
class SDEmb(StableDiffusionXLPipeline):
|
116 |
+
@torch.no_grad()
|
117 |
+
@replace_example_docstring(EXAMPLE_DOC_STRING)
|
118 |
+
def __call__(
|
119 |
+
self,
|
120 |
+
prompt: Union[str, List[str]] = None,
|
121 |
+
prompt_2: Optional[Union[str, List[str]]] = None,
|
122 |
+
height: Optional[int] = None,
|
123 |
+
width: Optional[int] = None,
|
124 |
+
num_inference_steps: int = 50,
|
125 |
+
timesteps: List[int] = None,
|
126 |
+
denoising_end: Optional[float] = None,
|
127 |
+
guidance_scale: float = 5.0,
|
128 |
+
negative_prompt: Optional[Union[str, List[str]]] = None,
|
129 |
+
negative_prompt_2: Optional[Union[str, List[str]]] = None,
|
130 |
+
num_images_per_prompt: Optional[int] = 1,
|
131 |
+
eta: float = 0.0,
|
132 |
+
generator: Optional[Union[torch.Generator, List[torch.Generator]]] = None,
|
133 |
+
latents: Optional[torch.FloatTensor] = None,
|
134 |
+
prompt_embeds: Optional[torch.FloatTensor] = None,
|
135 |
+
negative_prompt_embeds: Optional[torch.FloatTensor] = None,
|
136 |
+
pooled_prompt_embeds: Optional[torch.FloatTensor] = None,
|
137 |
+
negative_pooled_prompt_embeds: Optional[torch.FloatTensor] = None,
|
138 |
+
ip_adapter_image: Optional[PipelineImageInput] = None,
|
139 |
+
output_type: Optional[str] = "pil",
|
140 |
+
return_dict: bool = True,
|
141 |
+
cross_attention_kwargs: Optional[Dict[str, Any]] = None,
|
142 |
+
guidance_rescale: float = 0.0,
|
143 |
+
original_size: Optional[Tuple[int, int]] = None,
|
144 |
+
crops_coords_top_left: Tuple[int, int] = (0, 0),
|
145 |
+
target_size: Optional[Tuple[int, int]] = None,
|
146 |
+
negative_original_size: Optional[Tuple[int, int]] = None,
|
147 |
+
negative_crops_coords_top_left: Tuple[int, int] = (0, 0),
|
148 |
+
negative_target_size: Optional[Tuple[int, int]] = None,
|
149 |
+
clip_skip: Optional[int] = None,
|
150 |
+
callback_on_step_end: Optional[Callable[[int, int, Dict], None]] = None,
|
151 |
+
callback_on_step_end_tensor_inputs: List[str] = ["latents"],
|
152 |
+
ip_adapter_emb=None,
|
153 |
+
**kwargs,
|
154 |
+
):
|
155 |
+
r"""
|
156 |
+
Function invoked when calling the pipeline for generation.
|
157 |
+
|
158 |
+
Args:
|
159 |
+
prompt (`str` or `List[str]`, *optional*):
|
160 |
+
The prompt or prompts to guide the image generation. If not defined, one has to pass `prompt_embeds`.
|
161 |
+
instead.
|
162 |
+
prompt_2 (`str` or `List[str]`, *optional*):
|
163 |
+
The prompt or prompts to be sent to the `tokenizer_2` and `text_encoder_2`. If not defined, `prompt` is
|
164 |
+
used in both text-encoders
|
165 |
+
height (`int`, *optional*, defaults to self.unet.config.sample_size * self.vae_scale_factor):
|
166 |
+
The height in pixels of the generated image. This is set to 1024 by default for the best results.
|
167 |
+
Anything below 512 pixels won't work well for
|
168 |
+
[stabilityai/stable-diffusion-xl-base-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0)
|
169 |
+
and checkpoints that are not specifically fine-tuned on low resolutions.
|
170 |
+
width (`int`, *optional*, defaults to self.unet.config.sample_size * self.vae_scale_factor):
|
171 |
+
The width in pixels of the generated image. This is set to 1024 by default for the best results.
|
172 |
+
Anything below 512 pixels won't work well for
|
173 |
+
[stabilityai/stable-diffusion-xl-base-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0)
|
174 |
+
and checkpoints that are not specifically fine-tuned on low resolutions.
|
175 |
+
num_inference_steps (`int`, *optional*, defaults to 50):
|
176 |
+
The number of denoising steps. More denoising steps usually lead to a higher quality image at the
|
177 |
+
expense of slower inference.
|
178 |
+
timesteps (`List[int]`, *optional*):
|
179 |
+
Custom timesteps to use for the denoising process with schedulers which support a `timesteps` argument
|
180 |
+
in their `set_timesteps` method. If not defined, the default behavior when `num_inference_steps` is
|
181 |
+
passed will be used. Must be in descending order.
|
182 |
+
denoising_end (`float`, *optional*):
|
183 |
+
When specified, determines the fraction (between 0.0 and 1.0) of the total denoising process to be
|
184 |
+
completed before it is intentionally prematurely terminated. As a result, the returned sample will
|
185 |
+
still retain a substantial amount of noise as determined by the discrete timesteps selected by the
|
186 |
+
scheduler. The denoising_end parameter should ideally be utilized when this pipeline forms a part of a
|
187 |
+
"Mixture of Denoisers" multi-pipeline setup, as elaborated in [**Refining the Image
|
188 |
+
Output**](https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/stable_diffusion_xl#refining-the-image-output)
|
189 |
+
guidance_scale (`float`, *optional*, defaults to 5.0):
|
190 |
+
Guidance scale as defined in [Classifier-Free Diffusion Guidance](https://arxiv.org/abs/2207.12598).
|
191 |
+
`guidance_scale` is defined as `w` of equation 2. of [Imagen
|
192 |
+
Paper](https://arxiv.org/pdf/2205.11487.pdf). Guidance scale is enabled by setting `guidance_scale >
|
193 |
+
1`. Higher guidance scale encourages to generate images that are closely linked to the text `prompt`,
|
194 |
+
usually at the expense of lower image quality.
|
195 |
+
negative_prompt (`str` or `List[str]`, *optional*):
|
196 |
+
The prompt or prompts not to guide the image generation. If not defined, one has to pass
|
197 |
+
`negative_prompt_embeds` instead. Ignored when not using guidance (i.e., ignored if `guidance_scale` is
|
198 |
+
less than `1`).
|
199 |
+
negative_prompt_2 (`str` or `List[str]`, *optional*):
|
200 |
+
The prompt or prompts not to guide the image generation to be sent to `tokenizer_2` and
|
201 |
+
`text_encoder_2`. If not defined, `negative_prompt` is used in both text-encoders
|
202 |
+
num_images_per_prompt (`int`, *optional*, defaults to 1):
|
203 |
+
The number of images to generate per prompt.
|
204 |
+
eta (`float`, *optional*, defaults to 0.0):
|
205 |
+
Corresponds to parameter eta (η) in the DDIM paper: https://arxiv.org/abs/2010.02502. Only applies to
|
206 |
+
[`schedulers.DDIMScheduler`], will be ignored for others.
|
207 |
+
generator (`torch.Generator` or `List[torch.Generator]`, *optional*):
|
208 |
+
One or a list of [torch generator(s)](https://pytorch.org/docs/stable/generated/torch.Generator.html)
|
209 |
+
to make generation deterministic.
|
210 |
+
latents (`torch.FloatTensor`, *optional*):
|
211 |
+
Pre-generated noisy latents, sampled from a Gaussian distribution, to be used as inputs for image
|
212 |
+
generation. Can be used to tweak the same generation with different prompts. If not provided, a latents
|
213 |
+
tensor will ge generated by sampling using the supplied random `generator`.
|
214 |
+
prompt_embeds (`torch.FloatTensor`, *optional*):
|
215 |
+
Pre-generated text embeddings. Can be used to easily tweak text inputs, *e.g.* prompt weighting. If not
|
216 |
+
provided, text embeddings will be generated from `prompt` input argument.
|
217 |
+
negative_prompt_embeds (`torch.FloatTensor`, *optional*):
|
218 |
+
Pre-generated negative text embeddings. Can be used to easily tweak text inputs, *e.g.* prompt
|
219 |
+
weighting. If not provided, negative_prompt_embeds will be generated from `negative_prompt` input
|
220 |
+
argument.
|
221 |
+
pooled_prompt_embeds (`torch.FloatTensor`, *optional*):
|
222 |
+
Pre-generated pooled text embeddings. Can be used to easily tweak text inputs, *e.g.* prompt weighting.
|
223 |
+
If not provided, pooled text embeddings will be generated from `prompt` input argument.
|
224 |
+
negative_pooled_prompt_embeds (`torch.FloatTensor`, *optional*):
|
225 |
+
Pre-generated negative pooled text embeddings. Can be used to easily tweak text inputs, *e.g.* prompt
|
226 |
+
weighting. If not provided, pooled negative_prompt_embeds will be generated from `negative_prompt`
|
227 |
+
input argument.
|
228 |
+
ip_adapter_image: (`PipelineImageInput`, *optional*): Optional image input to work with IP Adapters.
|
229 |
+
output_type (`str`, *optional*, defaults to `"pil"`):
|
230 |
+
The output format of the generate image. Choose between
|
231 |
+
[PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` or `np.array`.
|
232 |
+
return_dict (`bool`, *optional*, defaults to `True`):
|
233 |
+
Whether or not to return a [`~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput`] instead
|
234 |
+
of a plain tuple.
|
235 |
+
cross_attention_kwargs (`dict`, *optional*):
|
236 |
+
A kwargs dictionary that if specified is passed along to the `AttentionProcessor` as defined under
|
237 |
+
`self.processor` in
|
238 |
+
[diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).
|
239 |
+
guidance_rescale (`float`, *optional*, defaults to 0.0):
|
240 |
+
Guidance rescale factor proposed by [Common Diffusion Noise Schedules and Sample Steps are
|
241 |
+
Flawed](https://arxiv.org/pdf/2305.08891.pdf) `guidance_scale` is defined as `φ` in equation 16. of
|
242 |
+
[Common Diffusion Noise Schedules and Sample Steps are Flawed](https://arxiv.org/pdf/2305.08891.pdf).
|
243 |
+
Guidance rescale factor should fix overexposure when using zero terminal SNR.
|
244 |
+
original_size (`Tuple[int]`, *optional*, defaults to (1024, 1024)):
|
245 |
+
If `original_size` is not the same as `target_size` the image will appear to be down- or upsampled.
|
246 |
+
`original_size` defaults to `(height, width)` if not specified. Part of SDXL's micro-conditioning as
|
247 |
+
explained in section 2.2 of
|
248 |
+
[https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).
|
249 |
+
crops_coords_top_left (`Tuple[int]`, *optional*, defaults to (0, 0)):
|
250 |
+
`crops_coords_top_left` can be used to generate an image that appears to be "cropped" from the position
|
251 |
+
`crops_coords_top_left` downwards. Favorable, well-centered images are usually achieved by setting
|
252 |
+
`crops_coords_top_left` to (0, 0). Part of SDXL's micro-conditioning as explained in section 2.2 of
|
253 |
+
[https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).
|
254 |
+
target_size (`Tuple[int]`, *optional*, defaults to (1024, 1024)):
|
255 |
+
For most cases, `target_size` should be set to the desired height and width of the generated image. If
|
256 |
+
not specified it will default to `(height, width)`. Part of SDXL's micro-conditioning as explained in
|
257 |
+
section 2.2 of [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).
|
258 |
+
negative_original_size (`Tuple[int]`, *optional*, defaults to (1024, 1024)):
|
259 |
+
To negatively condition the generation process based on a specific image resolution. Part of SDXL's
|
260 |
+
micro-conditioning as explained in section 2.2 of
|
261 |
+
[https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). For more
|
262 |
+
information, refer to this issue thread: https://github.com/huggingface/diffusers/issues/4208.
|
263 |
+
negative_crops_coords_top_left (`Tuple[int]`, *optional*, defaults to (0, 0)):
|
264 |
+
To negatively condition the generation process based on a specific crop coordinates. Part of SDXL's
|
265 |
+
micro-conditioning as explained in section 2.2 of
|
266 |
+
[https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). For more
|
267 |
+
information, refer to this issue thread: https://github.com/huggingface/diffusers/issues/4208.
|
268 |
+
negative_target_size (`Tuple[int]`, *optional*, defaults to (1024, 1024)):
|
269 |
+
To negatively condition the generation process based on a target image resolution. It should be as same
|
270 |
+
as the `target_size` for most cases. Part of SDXL's micro-conditioning as explained in section 2.2 of
|
271 |
+
[https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). For more
|
272 |
+
information, refer to this issue thread: https://github.com/huggingface/diffusers/issues/4208.
|
273 |
+
callback_on_step_end (`Callable`, *optional*):
|
274 |
+
A function that calls at the end of each denoising steps during the inference. The function is called
|
275 |
+
with the following arguments: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int,
|
276 |
+
callback_kwargs: Dict)`. `callback_kwargs` will include a list of all tensors as specified by
|
277 |
+
`callback_on_step_end_tensor_inputs`.
|
278 |
+
callback_on_step_end_tensor_inputs (`List`, *optional*):
|
279 |
+
The list of tensor inputs for the `callback_on_step_end` function. The tensors specified in the list
|
280 |
+
will be passed as `callback_kwargs` argument. You will only be able to include variables listed in the
|
281 |
+
`._callback_tensor_inputs` attribute of your pipeline class.
|
282 |
+
|
283 |
+
Examples:
|
284 |
+
|
285 |
+
Returns:
|
286 |
+
[`~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput`] or `tuple`:
|
287 |
+
[`~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput`] if `return_dict` is True, otherwise a
|
288 |
+
`tuple`. When returning a tuple, the first element is a list with the generated images.
|
289 |
+
"""
|
290 |
+
|
291 |
+
callback = kwargs.pop("callback", None)
|
292 |
+
callback_steps = kwargs.pop("callback_steps", None)
|
293 |
+
|
294 |
+
if callback is not None:
|
295 |
+
deprecate(
|
296 |
+
"callback",
|
297 |
+
"1.0.0",
|
298 |
+
"Passing `callback` as an input argument to `__call__` is deprecated, consider use `callback_on_step_end`",
|
299 |
+
)
|
300 |
+
if callback_steps is not None:
|
301 |
+
deprecate(
|
302 |
+
"callback_steps",
|
303 |
+
"1.0.0",
|
304 |
+
"Passing `callback_steps` as an input argument to `__call__` is deprecated, consider use `callback_on_step_end`",
|
305 |
+
)
|
306 |
+
|
307 |
+
# 0. Default height and width to unet
|
308 |
+
height = height or self.default_sample_size * self.vae_scale_factor
|
309 |
+
width = width or self.default_sample_size * self.vae_scale_factor
|
310 |
+
|
311 |
+
original_size = original_size or (height, width)
|
312 |
+
target_size = target_size or (height, width)
|
313 |
+
|
314 |
+
# 1. Check inputs. Raise error if not correct
|
315 |
+
self.check_inputs(
|
316 |
+
prompt,
|
317 |
+
prompt_2,
|
318 |
+
height,
|
319 |
+
width,
|
320 |
+
callback_steps,
|
321 |
+
negative_prompt,
|
322 |
+
negative_prompt_2,
|
323 |
+
prompt_embeds,
|
324 |
+
negative_prompt_embeds,
|
325 |
+
pooled_prompt_embeds,
|
326 |
+
negative_pooled_prompt_embeds,
|
327 |
+
callback_on_step_end_tensor_inputs,
|
328 |
+
)
|
329 |
+
|
330 |
+
self._guidance_scale = guidance_scale
|
331 |
+
self._guidance_rescale = guidance_rescale
|
332 |
+
self._clip_skip = clip_skip
|
333 |
+
self._cross_attention_kwargs = cross_attention_kwargs
|
334 |
+
self._denoising_end = denoising_end
|
335 |
+
self._interrupt = False
|
336 |
+
|
337 |
+
# 2. Define call parameters
|
338 |
+
if prompt is not None and isinstance(prompt, str):
|
339 |
+
batch_size = 1
|
340 |
+
elif prompt is not None and isinstance(prompt, list):
|
341 |
+
batch_size = len(prompt)
|
342 |
+
else:
|
343 |
+
batch_size = prompt_embeds.shape[0]
|
344 |
+
|
345 |
+
device = self._execution_device
|
346 |
+
|
347 |
+
# 3. Encode input prompt
|
348 |
+
lora_scale = (
|
349 |
+
self.cross_attention_kwargs.get("scale", None) if self.cross_attention_kwargs is not None else None
|
350 |
+
)
|
351 |
+
|
352 |
+
(
|
353 |
+
prompt_embeds,
|
354 |
+
negative_prompt_embeds,
|
355 |
+
pooled_prompt_embeds,
|
356 |
+
negative_pooled_prompt_embeds,
|
357 |
+
) = self.encode_prompt(
|
358 |
+
prompt=prompt,
|
359 |
+
prompt_2=prompt_2,
|
360 |
+
device=device,
|
361 |
+
num_images_per_prompt=num_images_per_prompt,
|
362 |
+
do_classifier_free_guidance=self.do_classifier_free_guidance,
|
363 |
+
negative_prompt=negative_prompt,
|
364 |
+
negative_prompt_2=negative_prompt_2,
|
365 |
+
prompt_embeds=prompt_embeds,
|
366 |
+
negative_prompt_embeds=negative_prompt_embeds,
|
367 |
+
pooled_prompt_embeds=pooled_prompt_embeds,
|
368 |
+
negative_pooled_prompt_embeds=negative_pooled_prompt_embeds,
|
369 |
+
lora_scale=lora_scale,
|
370 |
+
clip_skip=self.clip_skip,
|
371 |
+
)
|
372 |
+
|
373 |
+
# 4. Prepare timesteps
|
374 |
+
timesteps, num_inference_steps = retrieve_timesteps(self.scheduler, num_inference_steps, device, timesteps)
|
375 |
+
|
376 |
+
# 5. Prepare latent variables
|
377 |
+
num_channels_latents = self.unet.config.in_channels
|
378 |
+
latents = self.prepare_latents(
|
379 |
+
batch_size * num_images_per_prompt,
|
380 |
+
num_channels_latents,
|
381 |
+
height,
|
382 |
+
width,
|
383 |
+
prompt_embeds.dtype,
|
384 |
+
device,
|
385 |
+
generator,
|
386 |
+
latents,
|
387 |
+
)
|
388 |
+
|
389 |
+
# 6. Prepare extra step kwargs. TODO: Logic should ideally just be moved out of the pipeline
|
390 |
+
extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)
|
391 |
+
|
392 |
+
# 7. Prepare added time ids & embeddings
|
393 |
+
add_text_embeds = pooled_prompt_embeds
|
394 |
+
if self.text_encoder_2 is None:
|
395 |
+
text_encoder_projection_dim = int(pooled_prompt_embeds.shape[-1])
|
396 |
+
else:
|
397 |
+
text_encoder_projection_dim = self.text_encoder_2.config.projection_dim
|
398 |
+
|
399 |
+
add_time_ids = self._get_add_time_ids(
|
400 |
+
original_size,
|
401 |
+
crops_coords_top_left,
|
402 |
+
target_size,
|
403 |
+
dtype=prompt_embeds.dtype,
|
404 |
+
text_encoder_projection_dim=text_encoder_projection_dim,
|
405 |
+
)
|
406 |
+
if negative_original_size is not None and negative_target_size is not None:
|
407 |
+
negative_add_time_ids = self._get_add_time_ids(
|
408 |
+
negative_original_size,
|
409 |
+
negative_crops_coords_top_left,
|
410 |
+
negative_target_size,
|
411 |
+
dtype=prompt_embeds.dtype,
|
412 |
+
text_encoder_projection_dim=text_encoder_projection_dim,
|
413 |
+
)
|
414 |
+
else:
|
415 |
+
negative_add_time_ids = add_time_ids
|
416 |
+
|
417 |
+
if self.do_classifier_free_guidance:
|
418 |
+
prompt_embeds = torch.cat([negative_prompt_embeds, prompt_embeds], dim=0)
|
419 |
+
add_text_embeds = torch.cat([negative_pooled_prompt_embeds, add_text_embeds], dim=0)
|
420 |
+
add_time_ids = torch.cat([negative_add_time_ids, add_time_ids], dim=0)
|
421 |
+
|
422 |
+
prompt_embeds = prompt_embeds.to(device)
|
423 |
+
add_text_embeds = add_text_embeds.to(device)
|
424 |
+
add_time_ids = add_time_ids.to(device).repeat(batch_size * num_images_per_prompt, 1)
|
425 |
+
|
426 |
+
if ip_adapter_emb is not None:
|
427 |
+
image_embeds = ip_adapter_emb
|
428 |
+
|
429 |
+
elif ip_adapter_image is not None:
|
430 |
+
output_hidden_state = False if isinstance(self.unet.encoder_hid_proj, ImageProjection) else True
|
431 |
+
image_embeds, negative_image_embeds = self.encode_image(
|
432 |
+
ip_adapter_image, device, num_images_per_prompt, output_hidden_state
|
433 |
+
)
|
434 |
+
if self.do_classifier_free_guidance:
|
435 |
+
image_embeds = torch.cat([negative_image_embeds, image_embeds])
|
436 |
+
|
437 |
+
# 8. Denoising loop
|
438 |
+
num_warmup_steps = max(len(timesteps) - num_inference_steps * self.scheduler.order, 0)
|
439 |
+
|
440 |
+
# 8.1 Apply denoising_end
|
441 |
+
if (
|
442 |
+
self.denoising_end is not None
|
443 |
+
and isinstance(self.denoising_end, float)
|
444 |
+
and self.denoising_end > 0
|
445 |
+
and self.denoising_end < 1
|
446 |
+
):
|
447 |
+
discrete_timestep_cutoff = int(
|
448 |
+
round(
|
449 |
+
self.scheduler.config.num_train_timesteps
|
450 |
+
- (self.denoising_end * self.scheduler.config.num_train_timesteps)
|
451 |
+
)
|
452 |
+
)
|
453 |
+
num_inference_steps = len(list(filter(lambda ts: ts >= discrete_timestep_cutoff, timesteps)))
|
454 |
+
timesteps = timesteps[:num_inference_steps]
|
455 |
+
|
456 |
+
# 9. Optionally get Guidance Scale Embedding
|
457 |
+
timestep_cond = None
|
458 |
+
if self.unet.config.time_cond_proj_dim is not None:
|
459 |
+
guidance_scale_tensor = torch.tensor(self.guidance_scale - 1).repeat(batch_size * num_images_per_prompt)
|
460 |
+
timestep_cond = self.get_guidance_scale_embedding(
|
461 |
+
guidance_scale_tensor, embedding_dim=self.unet.config.time_cond_proj_dim
|
462 |
+
).to(device=device, dtype=latents.dtype)
|
463 |
+
|
464 |
+
self._num_timesteps = len(timesteps)
|
465 |
+
with self.progress_bar(total=num_inference_steps) as progress_bar:
|
466 |
+
for i, t in enumerate(timesteps):
|
467 |
+
if self.interrupt:
|
468 |
+
continue
|
469 |
+
|
470 |
+
# expand the latents if we are doing classifier free guidance
|
471 |
+
latent_model_input = torch.cat([latents] * 2) if self.do_classifier_free_guidance else latents
|
472 |
+
|
473 |
+
latent_model_input = self.scheduler.scale_model_input(latent_model_input, t)
|
474 |
+
|
475 |
+
# predict the noise residual
|
476 |
+
added_cond_kwargs = {"text_embeds": add_text_embeds, "time_ids": add_time_ids}
|
477 |
+
if ip_adapter_image is not None or ip_adapter_emb is not None:
|
478 |
+
added_cond_kwargs["image_embeds"] = image_embeds
|
479 |
+
noise_pred = self.unet(
|
480 |
+
latent_model_input,
|
481 |
+
t,
|
482 |
+
encoder_hidden_states=prompt_embeds,
|
483 |
+
timestep_cond=timestep_cond,
|
484 |
+
cross_attention_kwargs=self.cross_attention_kwargs,
|
485 |
+
added_cond_kwargs=added_cond_kwargs,
|
486 |
+
return_dict=False,
|
487 |
+
)[0]
|
488 |
+
|
489 |
+
# perform guidance
|
490 |
+
if self.do_classifier_free_guidance:
|
491 |
+
noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)
|
492 |
+
noise_pred = noise_pred_uncond + self.guidance_scale * (noise_pred_text - noise_pred_uncond)
|
493 |
+
|
494 |
+
if self.do_classifier_free_guidance and self.guidance_rescale > 0.0:
|
495 |
+
# Based on 3.4. in https://arxiv.org/pdf/2305.08891.pdf
|
496 |
+
noise_pred = rescale_noise_cfg(noise_pred, noise_pred_text, guidance_rescale=self.guidance_rescale)
|
497 |
+
|
498 |
+
# compute the previous noisy sample x_t -> x_t-1
|
499 |
+
latents = self.scheduler.step(noise_pred, t, latents, **extra_step_kwargs, return_dict=False)[0]
|
500 |
+
|
501 |
+
if callback_on_step_end is not None:
|
502 |
+
callback_kwargs = {}
|
503 |
+
for k in callback_on_step_end_tensor_inputs:
|
504 |
+
callback_kwargs[k] = locals()[k]
|
505 |
+
callback_outputs = callback_on_step_end(self, i, t, callback_kwargs)
|
506 |
+
|
507 |
+
latents = callback_outputs.pop("latents", latents)
|
508 |
+
prompt_embeds = callback_outputs.pop("prompt_embeds", prompt_embeds)
|
509 |
+
negative_prompt_embeds = callback_outputs.pop("negative_prompt_embeds", negative_prompt_embeds)
|
510 |
+
add_text_embeds = callback_outputs.pop("add_text_embeds", add_text_embeds)
|
511 |
+
negative_pooled_prompt_embeds = callback_outputs.pop(
|
512 |
+
"negative_pooled_prompt_embeds", negative_pooled_prompt_embeds
|
513 |
+
)
|
514 |
+
add_time_ids = callback_outputs.pop("add_time_ids", add_time_ids)
|
515 |
+
negative_add_time_ids = callback_outputs.pop("negative_add_time_ids", negative_add_time_ids)
|
516 |
+
|
517 |
+
# call the callback, if provided
|
518 |
+
if i == len(timesteps) - 1 or ((i + 1) > num_warmup_steps and (i + 1) % self.scheduler.order == 0):
|
519 |
+
progress_bar.update()
|
520 |
+
if callback is not None and i % callback_steps == 0:
|
521 |
+
step_idx = i // getattr(self.scheduler, "order", 1)
|
522 |
+
callback(step_idx, t, latents)
|
523 |
+
|
524 |
+
# if XLA_AVAILABLE:
|
525 |
+
# xm.mark_step()
|
526 |
+
|
527 |
+
if not output_type == "latent":
|
528 |
+
# make sure the VAE is in float32 mode, as it overflows in float16
|
529 |
+
needs_upcasting = self.vae.dtype == torch.float16 and self.vae.config.force_upcast
|
530 |
+
|
531 |
+
if needs_upcasting:
|
532 |
+
self.upcast_vae()
|
533 |
+
latents = latents.to(next(iter(self.vae.post_quant_conv.parameters())).dtype)
|
534 |
+
|
535 |
+
image = self.vae.decode(latents / self.vae.config.scaling_factor, return_dict=False)[0]
|
536 |
+
|
537 |
+
# cast back to fp16 if needed
|
538 |
+
if needs_upcasting:
|
539 |
+
self.vae.to(dtype=torch.float16)
|
540 |
+
else:
|
541 |
+
image = latents
|
542 |
+
|
543 |
+
if not output_type == "latent":
|
544 |
+
# apply watermark if available
|
545 |
+
if self.watermark is not None:
|
546 |
+
image = self.watermark.apply_watermark(image)
|
547 |
+
image = self.image_processor.postprocess(image, output_type=output_type)
|
548 |
+
#maybe_nsfw = any(check_nsfw_images(image))
|
549 |
+
#if maybe_nsfw:
|
550 |
+
# print('This image could be NSFW so we return a blank image.')
|
551 |
+
# return StableDiffusionXLPipelineOutput(images=[Image.new('RGB', (1024, 1024))])
|
552 |
+
|
553 |
+
# Offload all models
|
554 |
+
self.maybe_free_model_hooks()
|
555 |
+
|
556 |
+
if not return_dict:
|
557 |
+
return (image,)
|
558 |
+
|
559 |
+
return StableDiffusionXLPipelineOutput(images=image)
|
prior/__init__.py
DELETED
File without changes
|
prior/pipeline_kandinsky_prior.py
DELETED
@@ -1,528 +0,0 @@
|
|
1 |
-
from dataclasses import dataclass
|
2 |
-
from typing import List, Optional, Union
|
3 |
-
|
4 |
-
import numpy as np
|
5 |
-
import PIL
|
6 |
-
import torch
|
7 |
-
from transformers import (
|
8 |
-
CLIPImageProcessor,
|
9 |
-
CLIPTextModelWithProjection,
|
10 |
-
CLIPTokenizer,
|
11 |
-
CLIPVisionModelWithProjection,
|
12 |
-
)
|
13 |
-
|
14 |
-
from diffusers.models import PriorTransformer
|
15 |
-
from diffusers.schedulers import UnCLIPScheduler
|
16 |
-
from diffusers.utils import (
|
17 |
-
BaseOutput,
|
18 |
-
is_accelerate_available,
|
19 |
-
is_accelerate_version,
|
20 |
-
logging,
|
21 |
-
replace_example_docstring,
|
22 |
-
)
|
23 |
-
from diffusers.pipelines.pipeline_utils import DiffusionPipeline
|
24 |
-
|
25 |
-
|
26 |
-
logger = logging.get_logger(__name__) # pylint: disable=invalid-name
|
27 |
-
|
28 |
-
EXAMPLE_DOC_STRING = """
|
29 |
-
Examples:
|
30 |
-
```py
|
31 |
-
>>> from diffusers import KandinskyPipeline, KandinskyPriorPipeline
|
32 |
-
>>> import torch
|
33 |
-
|
34 |
-
>>> pipe_prior = KandinskyPriorPipeline.from_pretrained("kandinsky-community/kandinsky-2-1-prior")
|
35 |
-
>>> pipe_prior.to("cuda")
|
36 |
-
|
37 |
-
>>> prompt = "red cat, 4k photo"
|
38 |
-
>>> out = pipe_prior(prompt)
|
39 |
-
>>> image_emb = out.image_embeds
|
40 |
-
>>> negative_image_emb = out.negative_image_embeds
|
41 |
-
|
42 |
-
>>> pipe = KandinskyPipeline.from_pretrained("kandinsky-community/kandinsky-2-1")
|
43 |
-
>>> pipe.to("cuda")
|
44 |
-
|
45 |
-
>>> image = pipe(
|
46 |
-
... prompt,
|
47 |
-
... image_embeds=image_emb,
|
48 |
-
... negative_image_embeds=negative_image_emb,
|
49 |
-
... height=768,
|
50 |
-
... width=768,
|
51 |
-
... num_inference_steps=100,
|
52 |
-
... ).images
|
53 |
-
|
54 |
-
>>> image[0].save("cat.png")
|
55 |
-
```
|
56 |
-
"""
|
57 |
-
|
58 |
-
EXAMPLE_INTERPOLATE_DOC_STRING = """
|
59 |
-
Examples:
|
60 |
-
```py
|
61 |
-
>>> from diffusers import KandinskyPriorPipeline, KandinskyPipeline
|
62 |
-
>>> from diffusers.utils import load_image
|
63 |
-
>>> import PIL
|
64 |
-
|
65 |
-
>>> import torch
|
66 |
-
>>> from torchvision import transforms
|
67 |
-
|
68 |
-
>>> pipe_prior = KandinskyPriorPipeline.from_pretrained(
|
69 |
-
... "kandinsky-community/kandinsky-2-1-prior", torch_dtype=torch.float16
|
70 |
-
... )
|
71 |
-
>>> pipe_prior.to("cuda")
|
72 |
-
|
73 |
-
>>> img1 = load_image(
|
74 |
-
... "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main"
|
75 |
-
... "/kandinsky/cat.png"
|
76 |
-
... )
|
77 |
-
|
78 |
-
>>> img2 = load_image(
|
79 |
-
... "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main"
|
80 |
-
... "/kandinsky/starry_night.jpeg"
|
81 |
-
... )
|
82 |
-
|
83 |
-
>>> images_texts = ["a cat", img1, img2]
|
84 |
-
>>> weights = [0.3, 0.3, 0.4]
|
85 |
-
>>> image_emb, zero_image_emb = pipe_prior.interpolate(images_texts, weights)
|
86 |
-
|
87 |
-
>>> pipe = KandinskyPipeline.from_pretrained("kandinsky-community/kandinsky-2-1", torch_dtype=torch.float16)
|
88 |
-
>>> pipe.to("cuda")
|
89 |
-
|
90 |
-
>>> image = pipe(
|
91 |
-
... "",
|
92 |
-
... image_embeds=image_emb,
|
93 |
-
... negative_image_embeds=zero_image_emb,
|
94 |
-
... height=768,
|
95 |
-
... width=768,
|
96 |
-
... num_inference_steps=150,
|
97 |
-
... ).images[0]
|
98 |
-
|
99 |
-
>>> image.save("starry_cat.png")
|
100 |
-
```
|
101 |
-
"""
|
102 |
-
|
103 |
-
|
104 |
-
@dataclass
|
105 |
-
class KandinskyPriorPipelineOutput(BaseOutput):
|
106 |
-
"""
|
107 |
-
Output class for KandinskyPriorPipeline.
|
108 |
-
|
109 |
-
Args:
|
110 |
-
image_embeds (`torch.FloatTensor`)
|
111 |
-
clip image embeddings for text prompt
|
112 |
-
negative_image_embeds (`List[PIL.Image.Image]` or `np.ndarray`)
|
113 |
-
clip image embeddings for unconditional tokens
|
114 |
-
"""
|
115 |
-
|
116 |
-
image_embeds: Union[torch.FloatTensor, np.ndarray]
|
117 |
-
negative_image_embeds: Union[torch.FloatTensor, np.ndarray]
|
118 |
-
|
119 |
-
|
120 |
-
class KandinskyPriorPipeline(DiffusionPipeline):
|
121 |
-
"""
|
122 |
-
Pipeline for generating image prior for Kandinsky
|
123 |
-
|
124 |
-
This model inherits from [`DiffusionPipeline`]. Check the superclass documentation for the generic methods the
|
125 |
-
library implements for all the pipelines (such as downloading or saving, running on a particular device, etc.)
|
126 |
-
|
127 |
-
Args:
|
128 |
-
prior ([`PriorTransformer`]):
|
129 |
-
The canonincal unCLIP prior to approximate the image embedding from the text embedding.
|
130 |
-
image_encoder ([`CLIPVisionModelWithProjection`]):
|
131 |
-
Frozen image-encoder.
|
132 |
-
text_encoder ([`CLIPTextModelWithProjection`]):
|
133 |
-
Frozen text-encoder.
|
134 |
-
tokenizer (`CLIPTokenizer`):
|
135 |
-
Tokenizer of class
|
136 |
-
[CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).
|
137 |
-
scheduler ([`UnCLIPScheduler`]):
|
138 |
-
A scheduler to be used in combination with `prior` to generate image embedding.
|
139 |
-
"""
|
140 |
-
|
141 |
-
_exclude_from_cpu_offload = ["prior"]
|
142 |
-
|
143 |
-
def __init__(
|
144 |
-
self,
|
145 |
-
prior: PriorTransformer,
|
146 |
-
image_encoder: CLIPVisionModelWithProjection,
|
147 |
-
text_encoder: CLIPTextModelWithProjection,
|
148 |
-
tokenizer: CLIPTokenizer,
|
149 |
-
scheduler: UnCLIPScheduler,
|
150 |
-
image_processor: CLIPImageProcessor,
|
151 |
-
):
|
152 |
-
super().__init__()
|
153 |
-
|
154 |
-
self.register_modules(
|
155 |
-
prior=prior,
|
156 |
-
text_encoder=text_encoder,
|
157 |
-
tokenizer=tokenizer,
|
158 |
-
scheduler=scheduler,
|
159 |
-
image_encoder=image_encoder,
|
160 |
-
image_processor=image_processor,
|
161 |
-
)
|
162 |
-
|
163 |
-
@torch.no_grad()
|
164 |
-
@replace_example_docstring(EXAMPLE_INTERPOLATE_DOC_STRING)
|
165 |
-
def interpolate(
|
166 |
-
self,
|
167 |
-
images_and_prompts: List[Union[str, PIL.Image.Image, torch.FloatTensor]],
|
168 |
-
weights: List[float],
|
169 |
-
num_images_per_prompt: int = 1,
|
170 |
-
num_inference_steps: int = 25,
|
171 |
-
generator: Optional[Union[torch.Generator, List[torch.Generator]]] = None,
|
172 |
-
latents: Optional[torch.FloatTensor] = None,
|
173 |
-
negative_prior_prompt: Optional[str] = None,
|
174 |
-
negative_prompt: str = "",
|
175 |
-
guidance_scale: float = 4.0,
|
176 |
-
device=None,
|
177 |
-
):
|
178 |
-
"""
|
179 |
-
Function invoked when using the prior pipeline for interpolation.
|
180 |
-
|
181 |
-
Args:
|
182 |
-
images_and_prompts (`List[Union[str, PIL.Image.Image, torch.FloatTensor]]`):
|
183 |
-
list of prompts and images to guide the image generation.
|
184 |
-
weights: (`List[float]`):
|
185 |
-
list of weights for each condition in `images_and_prompts`
|
186 |
-
num_images_per_prompt (`int`, *optional*, defaults to 1):
|
187 |
-
The number of images to generate per prompt.
|
188 |
-
num_inference_steps (`int`, *optional*, defaults to 25):
|
189 |
-
The number of denoising steps. More denoising steps usually lead to a higher quality image at the
|
190 |
-
expense of slower inference.
|
191 |
-
generator (`torch.Generator` or `List[torch.Generator]`, *optional*):
|
192 |
-
One or a list of [torch generator(s)](https://pytorch.org/docs/stable/generated/torch.Generator.html)
|
193 |
-
to make generation deterministic.
|
194 |
-
latents (`torch.FloatTensor`, *optional*):
|
195 |
-
Pre-generated noisy latents, sampled from a Gaussian distribution, to be used as inputs for image
|
196 |
-
generation. Can be used to tweak the same generation with different prompts. If not provided, a latents
|
197 |
-
tensor will ge generated by sampling using the supplied random `generator`.
|
198 |
-
negative_prior_prompt (`str`, *optional*):
|
199 |
-
The prompt not to guide the prior diffusion process. Ignored when not using guidance (i.e., ignored if
|
200 |
-
`guidance_scale` is less than `1`).
|
201 |
-
negative_prompt (`str` or `List[str]`, *optional*):
|
202 |
-
The prompt not to guide the image generation. Ignored when not using guidance (i.e., ignored if
|
203 |
-
`guidance_scale` is less than `1`).
|
204 |
-
guidance_scale (`float`, *optional*, defaults to 4.0):
|
205 |
-
Guidance scale as defined in [Classifier-Free Diffusion Guidance](https://arxiv.org/abs/2207.12598).
|
206 |
-
`guidance_scale` is defined as `w` of equation 2. of [Imagen
|
207 |
-
Paper](https://arxiv.org/pdf/2205.11487.pdf). Guidance scale is enabled by setting `guidance_scale >
|
208 |
-
1`. Higher guidance scale encourages to generate images that are closely linked to the text `prompt`,
|
209 |
-
usually at the expense of lower image quality.
|
210 |
-
|
211 |
-
Examples:
|
212 |
-
|
213 |
-
Returns:
|
214 |
-
[`KandinskyPriorPipelineOutput`] or `tuple`
|
215 |
-
"""
|
216 |
-
|
217 |
-
device = device or self.device
|
218 |
-
|
219 |
-
if len(images_and_prompts) != len(weights):
|
220 |
-
raise ValueError(
|
221 |
-
f"`images_and_prompts` contains {len(images_and_prompts)} items and `weights` contains {len(weights)} items - they should be lists of same length"
|
222 |
-
)
|
223 |
-
|
224 |
-
image_embeddings = []
|
225 |
-
for cond, weight in zip(images_and_prompts, weights):
|
226 |
-
if isinstance(cond, str):
|
227 |
-
image_emb = self(
|
228 |
-
cond,
|
229 |
-
num_inference_steps=num_inference_steps,
|
230 |
-
num_images_per_prompt=num_images_per_prompt,
|
231 |
-
generator=generator,
|
232 |
-
latents=latents,
|
233 |
-
negative_prompt=negative_prior_prompt,
|
234 |
-
guidance_scale=guidance_scale,
|
235 |
-
).image_embeds
|
236 |
-
|
237 |
-
elif isinstance(cond, (PIL.Image.Image, torch.Tensor)):
|
238 |
-
if isinstance(cond, PIL.Image.Image):
|
239 |
-
cond = (
|
240 |
-
self.image_processor(cond, return_tensors="pt")
|
241 |
-
.pixel_values[0]
|
242 |
-
.unsqueeze(0)
|
243 |
-
.to(dtype=self.image_encoder.dtype, device=device)
|
244 |
-
)
|
245 |
-
|
246 |
-
image_emb = self.image_encoder(cond)["image_embeds"]
|
247 |
-
|
248 |
-
else:
|
249 |
-
raise ValueError(
|
250 |
-
f"`images_and_prompts` can only contains elements to be of type `str`, `PIL.Image.Image` or `torch.Tensor` but is {type(cond)}"
|
251 |
-
)
|
252 |
-
|
253 |
-
image_embeddings.append(image_emb * weight)
|
254 |
-
|
255 |
-
image_emb = torch.cat(image_embeddings).sum(dim=0, keepdim=True)
|
256 |
-
|
257 |
-
out_zero = self(
|
258 |
-
negative_prompt,
|
259 |
-
num_inference_steps=num_inference_steps,
|
260 |
-
num_images_per_prompt=num_images_per_prompt,
|
261 |
-
generator=generator,
|
262 |
-
latents=latents,
|
263 |
-
negative_prompt=negative_prior_prompt,
|
264 |
-
guidance_scale=guidance_scale,
|
265 |
-
)
|
266 |
-
zero_image_emb = (
|
267 |
-
out_zero.negative_image_embeds
|
268 |
-
if negative_prompt == ""
|
269 |
-
else out_zero.image_embeds
|
270 |
-
)
|
271 |
-
|
272 |
-
return KandinskyPriorPipelineOutput(
|
273 |
-
image_embeds=image_emb, negative_image_embeds=zero_image_emb
|
274 |
-
)
|
275 |
-
|
276 |
-
# Copied from diffusers.pipelines.unclip.pipeline_unclip.UnCLIPPipeline.prepare_latents
|
277 |
-
def prepare_latents(self, shape, dtype, device, generator, latents, scheduler):
|
278 |
-
if latents is None:
|
279 |
-
latents = torch.randn(
|
280 |
-
shape, generator=generator, device=device, dtype=dtype
|
281 |
-
)
|
282 |
-
else:
|
283 |
-
if latents.shape != shape:
|
284 |
-
raise ValueError(
|
285 |
-
f"Unexpected latents shape, got {latents.shape}, expected {shape}"
|
286 |
-
)
|
287 |
-
latents = latents.to(device)
|
288 |
-
|
289 |
-
latents = latents * scheduler.init_noise_sigma
|
290 |
-
return latents
|
291 |
-
|
292 |
-
def get_zero_embed(self, batch_size=1, device=None):
|
293 |
-
device = device or self.device
|
294 |
-
zero_img = torch.zeros(
|
295 |
-
1,
|
296 |
-
3,
|
297 |
-
self.image_encoder.config.image_size,
|
298 |
-
self.image_encoder.config.image_size,
|
299 |
-
).to(device=device, dtype=self.image_encoder.dtype)
|
300 |
-
zero_image_emb = self.image_encoder(zero_img)["image_embeds"]
|
301 |
-
zero_image_emb = zero_image_emb.repeat(batch_size, 1)
|
302 |
-
return zero_image_emb
|
303 |
-
|
304 |
-
def _encode_prompt(
|
305 |
-
self,
|
306 |
-
prompt,
|
307 |
-
device,
|
308 |
-
num_images_per_prompt,
|
309 |
-
do_classifier_free_guidance,
|
310 |
-
negative_prompt=None,
|
311 |
-
):
|
312 |
-
batch_size = len(prompt) if isinstance(prompt, list) else 1
|
313 |
-
# get prompt text embeddings
|
314 |
-
cond = (
|
315 |
-
self.image_processor(prompt, return_tensors="pt")
|
316 |
-
.pixel_values[0]
|
317 |
-
.unsqueeze(0)
|
318 |
-
.to(dtype=self.image_encoder.dtype, device=device)
|
319 |
-
)
|
320 |
-
prompt_embeds = self.image_encoder(cond)["image_embeds"]
|
321 |
-
|
322 |
-
prompt_embeds = prompt_embeds.repeat_interleave(num_images_per_prompt, dim=0)
|
323 |
-
|
324 |
-
if do_classifier_free_guidance:
|
325 |
-
if negative_prompt is None:
|
326 |
-
uncond_tokens = self.get_zero_embed(batch_size=prompt_embeds.shape[0])
|
327 |
-
elif type(prompt) is not type(negative_prompt):
|
328 |
-
raise TypeError(
|
329 |
-
f"`negative_prompt` should be the same type to `prompt`, but got {type(negative_prompt)} !="
|
330 |
-
f" {type(prompt)}."
|
331 |
-
)
|
332 |
-
elif batch_size != len(negative_prompt):
|
333 |
-
raise ValueError(
|
334 |
-
f"`negative_prompt`: {negative_prompt} has batch size {len(negative_prompt)}, but `prompt`:"
|
335 |
-
f" {prompt} has batch size {batch_size}. Please make sure that passed `negative_prompt` matches"
|
336 |
-
" the batch size of `prompt`."
|
337 |
-
)
|
338 |
-
else:
|
339 |
-
uncond_tokens = negative_prompt
|
340 |
-
|
341 |
-
cond = (
|
342 |
-
self.image_processor(uncond_tokens, return_tensors="pt")
|
343 |
-
.pixel_values[0]
|
344 |
-
.unsqueeze(0)
|
345 |
-
.to(dtype=self.image_encoder.dtype, device=device)
|
346 |
-
)
|
347 |
-
|
348 |
-
negative_prompt_embeds = self.image_encoder(cond)["image_embeds"]
|
349 |
-
|
350 |
-
seq_len = negative_prompt_embeds.shape[1]
|
351 |
-
negative_prompt_embeds = negative_prompt_embeds.repeat(
|
352 |
-
1, num_images_per_prompt
|
353 |
-
)
|
354 |
-
negative_prompt_embeds = negative_prompt_embeds.view(
|
355 |
-
batch_size * num_images_per_prompt, seq_len
|
356 |
-
)
|
357 |
-
|
358 |
-
# For classifier free guidance, we need to do two forward passes.
|
359 |
-
# Here we concatenate the unconditional and text embeddings into a single batch
|
360 |
-
# to avoid doing two forward passes
|
361 |
-
prompt_embeds = torch.cat([negative_prompt_embeds, prompt_embeds])
|
362 |
-
return prompt_embeds, None
|
363 |
-
|
364 |
-
def enable_model_cpu_offload(self, gpu_id=0):
|
365 |
-
r"""
|
366 |
-
Offloads all models to CPU using accelerate, reducing memory usage with a low impact on performance. Compared
|
367 |
-
to `enable_sequential_cpu_offload`, this method moves one whole model at a time to the GPU when its `forward`
|
368 |
-
method is called, and the model remains in GPU until the next model runs. Memory savings are lower than with
|
369 |
-
`enable_sequential_cpu_offload`, but performance is much better due to the iterative execution of the `unet`.
|
370 |
-
"""
|
371 |
-
if is_accelerate_available() and is_accelerate_version(">=", "0.17.0.dev0"):
|
372 |
-
from accelerate import cpu_offload_with_hook
|
373 |
-
else:
|
374 |
-
raise ImportError(
|
375 |
-
"`enable_model_cpu_offload` requires `accelerate v0.17.0` or higher."
|
376 |
-
)
|
377 |
-
|
378 |
-
device = torch.device(f"cuda:{gpu_id}")
|
379 |
-
|
380 |
-
if self.device.type != "cpu":
|
381 |
-
self.to("cpu", silence_dtype_warnings=True)
|
382 |
-
torch.cuda.empty_cache() # otherwise we don't see the memory savings (but they probably exist)
|
383 |
-
|
384 |
-
hook = None
|
385 |
-
for cpu_offloaded_model in [self.text_encoder, self.prior]:
|
386 |
-
_, hook = cpu_offload_with_hook(
|
387 |
-
cpu_offloaded_model, device, prev_module_hook=hook
|
388 |
-
)
|
389 |
-
|
390 |
-
# We'll offload the last model manually.
|
391 |
-
self.prior_hook = hook
|
392 |
-
|
393 |
-
_, hook = cpu_offload_with_hook(
|
394 |
-
self.image_encoder, device, prev_module_hook=self.prior_hook
|
395 |
-
)
|
396 |
-
|
397 |
-
self.final_offload_hook = hook
|
398 |
-
|
399 |
-
@torch.no_grad()
|
400 |
-
@replace_example_docstring(EXAMPLE_DOC_STRING)
|
401 |
-
def __call__(
|
402 |
-
self,
|
403 |
-
prompt: Union[str, List[str]],
|
404 |
-
negative_prompt: Optional[Union[str, List[str]]] = None,
|
405 |
-
num_images_per_prompt: int = 1,
|
406 |
-
num_inference_steps: int = 25,
|
407 |
-
generator: Optional[Union[torch.Generator, List[torch.Generator]]] = None,
|
408 |
-
latents: Optional[torch.FloatTensor] = None,
|
409 |
-
guidance_scale: float = 4.0,
|
410 |
-
output_type: Optional[str] = "pt",
|
411 |
-
return_dict: bool = True,
|
412 |
-
):
|
413 |
-
"""
|
414 |
-
Function invoked when calling the pipeline for generation.
|
415 |
-
|
416 |
-
Args:
|
417 |
-
prompt (`str` or `List[str]`):
|
418 |
-
The prompt or prompts to guide the image generation.
|
419 |
-
negative_prompt (`str` or `List[str]`, *optional*):
|
420 |
-
The prompt or prompts not to guide the image generation. Ignored when not using guidance (i.e., ignored
|
421 |
-
if `guidance_scale` is less than `1`).
|
422 |
-
num_images_per_prompt (`int`, *optional*, defaults to 1):
|
423 |
-
The number of images to generate per prompt.
|
424 |
-
num_inference_steps (`int`, *optional*, defaults to 25):
|
425 |
-
The number of denoising steps. More denoising steps usually lead to a higher quality image at the
|
426 |
-
expense of slower inference.
|
427 |
-
generator (`torch.Generator` or `List[torch.Generator]`, *optional*):
|
428 |
-
One or a list of [torch generator(s)](https://pytorch.org/docs/stable/generated/torch.Generator.html)
|
429 |
-
to make generation deterministic.
|
430 |
-
latents (`torch.FloatTensor`, *optional*):
|
431 |
-
Pre-generated noisy latents, sampled from a Gaussian distribution, to be used as inputs for image
|
432 |
-
generation. Can be used to tweak the same generation with different prompts. If not provided, a latents
|
433 |
-
tensor will ge generated by sampling using the supplied random `generator`.
|
434 |
-
guidance_scale (`float`, *optional*, defaults to 4.0):
|
435 |
-
Guidance scale as defined in [Classifier-Free Diffusion Guidance](https://arxiv.org/abs/2207.12598).
|
436 |
-
`guidance_scale` is defined as `w` of equation 2. of [Imagen
|
437 |
-
Paper](https://arxiv.org/pdf/2205.11487.pdf). Guidance scale is enabled by setting `guidance_scale >
|
438 |
-
1`. Higher guidance scale encourages to generate images that are closely linked to the text `prompt`,
|
439 |
-
usually at the expense of lower image quality.
|
440 |
-
output_type (`str`, *optional*, defaults to `"pt"`):
|
441 |
-
The output format of the generate image. Choose between: `"np"` (`np.array`) or `"pt"`
|
442 |
-
(`torch.Tensor`).
|
443 |
-
return_dict (`bool`, *optional*, defaults to `True`):
|
444 |
-
Whether or not to return a [`~pipelines.ImagePipelineOutput`] instead of a plain tuple.
|
445 |
-
|
446 |
-
Examples:
|
447 |
-
|
448 |
-
Returns:
|
449 |
-
[`KandinskyPriorPipelineOutput`] or `tuple`
|
450 |
-
"""
|
451 |
-
|
452 |
-
# if the negative prompt is defined we double the batch size to
|
453 |
-
# directly retrieve the negative prompt embedding
|
454 |
-
if negative_prompt is not None:
|
455 |
-
prompt = prompt + negative_prompt
|
456 |
-
negative_prompt = 2 * negative_prompt
|
457 |
-
|
458 |
-
device = self._execution_device
|
459 |
-
|
460 |
-
batch_size = len(prompt)
|
461 |
-
batch_size = batch_size * num_images_per_prompt
|
462 |
-
|
463 |
-
full_prompt = []
|
464 |
-
for b in prompt: # TODO of course vectorize this lol
|
465 |
-
full_seq = []
|
466 |
-
for p in b:
|
467 |
-
prompt_embeds, text_mask = self._encode_prompt(
|
468 |
-
p, device, num_images_per_prompt, False, negative_prompt
|
469 |
-
)
|
470 |
-
full_seq.append(prompt_embeds)
|
471 |
-
prompt_embeds = torch.cat(full_seq, 0)
|
472 |
-
full_prompt.append(prompt_embeds)
|
473 |
-
prompt_embeds = torch.stack(full_prompt)
|
474 |
-
if prompt_embeds.shape[1] < 8: # TODO grab as `k` arg from config
|
475 |
-
prompt_embeds = torch.nn.functional.pad(prompt_embeds, [0, 0, 0, 8-prompt_embeds.shape[1]])
|
476 |
-
assert prompt_embeds.shape[1] == 8, f"The model is set to take `k`` cond image embeds but is shape {prompt_embeds.shape}"
|
477 |
-
|
478 |
-
prompt_embeds = prompt_embeds.to('cuda') # TODO set with `k` arg from config
|
479 |
-
|
480 |
-
hidden_states = torch.randn(
|
481 |
-
(batch_size, prompt_embeds.shape[-1]),
|
482 |
-
device=prompt_embeds.device,
|
483 |
-
dtype=prompt_embeds.dtype,
|
484 |
-
generator=generator,
|
485 |
-
)
|
486 |
-
|
487 |
-
latents = self.prior(
|
488 |
-
hidden_states,
|
489 |
-
proj_embedding=prompt_embeds,
|
490 |
-
encoder_hidden_states=prompt_embeds,
|
491 |
-
attention_mask=text_mask,
|
492 |
-
).predicted_image_embedding
|
493 |
-
|
494 |
-
image_embeddings = latents
|
495 |
-
|
496 |
-
# if negative prompt has been defined, we retrieve split the image embedding into two
|
497 |
-
if negative_prompt is None:
|
498 |
-
zero_embeds = self.get_zero_embed(latents.shape[0], device=latents.device)
|
499 |
-
|
500 |
-
if (
|
501 |
-
hasattr(self, "final_offload_hook")
|
502 |
-
and self.final_offload_hook is not None
|
503 |
-
):
|
504 |
-
self.final_offload_hook.offload()
|
505 |
-
else:
|
506 |
-
image_embeddings, zero_embeds = image_embeddings.chunk(2)
|
507 |
-
|
508 |
-
if (
|
509 |
-
hasattr(self, "final_offload_hook")
|
510 |
-
and self.final_offload_hook is not None
|
511 |
-
):
|
512 |
-
self.prior_hook.offload()
|
513 |
-
|
514 |
-
if output_type not in ["pt", "np"]:
|
515 |
-
raise ValueError(
|
516 |
-
f"Only the output types `pt` and `np` are supported not output_type={output_type}"
|
517 |
-
)
|
518 |
-
|
519 |
-
if output_type == "np":
|
520 |
-
image_embeddings = image_embeddings.cpu().numpy()
|
521 |
-
zero_embeds = zero_embeds.cpu().numpy()
|
522 |
-
|
523 |
-
if not return_dict:
|
524 |
-
return (image_embeddings, zero_embeds)
|
525 |
-
|
526 |
-
return KandinskyPriorPipelineOutput(
|
527 |
-
image_embeds=image_embeddings, negative_image_embeds=zero_embeds
|
528 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
prior/prior_transformer.py
DELETED
@@ -1,369 +0,0 @@
|
|
1 |
-
import sys
|
2 |
-
sys.path.append("..")
|
3 |
-
|
4 |
-
from dataclasses import dataclass
|
5 |
-
from typing import Dict, Optional, Union
|
6 |
-
|
7 |
-
|
8 |
-
import torch
|
9 |
-
import torch.nn.functional as F
|
10 |
-
from torch import nn
|
11 |
-
|
12 |
-
from diffusers.configuration_utils import ConfigMixin, register_to_config
|
13 |
-
from diffusers.utils import BaseOutput
|
14 |
-
from diffusers.models.attention import BasicTransformerBlock
|
15 |
-
from diffusers.models.attention_processor import AttentionProcessor, AttnProcessor
|
16 |
-
from diffusers.models.embeddings import TimestepEmbedding, Timesteps
|
17 |
-
from diffusers.models.modeling_utils import ModelMixin
|
18 |
-
|
19 |
-
|
20 |
-
@dataclass
|
21 |
-
class PriorTransformerOutput(BaseOutput):
|
22 |
-
"""
|
23 |
-
The output of [`PriorTransformer`].
|
24 |
-
|
25 |
-
Args:
|
26 |
-
predicted_image_embedding (`torch.FloatTensor` of shape `(batch_size, embedding_dim)`):
|
27 |
-
The predicted CLIP image embedding conditioned on the CLIP text embedding input.
|
28 |
-
"""
|
29 |
-
|
30 |
-
predicted_image_embedding: torch.FloatTensor
|
31 |
-
|
32 |
-
|
33 |
-
class PriorTransformer(ModelMixin, ConfigMixin):
|
34 |
-
"""
|
35 |
-
A Prior Transformer model.
|
36 |
-
|
37 |
-
Parameters:
|
38 |
-
num_attention_heads (`int`, *optional*, defaults to 32): The number of heads to use for multi-head attention.
|
39 |
-
attention_head_dim (`int`, *optional*, defaults to 64): The number of channels in each head.
|
40 |
-
num_layers (`int`, *optional*, defaults to 20): The number of layers of Transformer blocks to use.
|
41 |
-
embedding_dim (`int`, *optional*, defaults to 768): The dimension of the model input `hidden_states`
|
42 |
-
num_embeddings (`int`, *optional*, defaults to 77):
|
43 |
-
The number of embeddings of the model input `hidden_states`
|
44 |
-
additional_embeddings (`int`, *optional*, defaults to 4): The number of additional tokens appended to the
|
45 |
-
projected `hidden_states`. The actual length of the used `hidden_states` is `num_embeddings +
|
46 |
-
additional_embeddings`.
|
47 |
-
dropout (`float`, *optional*, defaults to 0.0): The dropout probability to use.
|
48 |
-
time_embed_act_fn (`str`, *optional*, defaults to 'silu'):
|
49 |
-
The activation function to use to create timestep embeddings.
|
50 |
-
norm_in_type (`str`, *optional*, defaults to None): The normalization layer to apply on hidden states before
|
51 |
-
passing to Transformer blocks. Set it to `None` if normalization is not needed.
|
52 |
-
embedding_proj_norm_type (`str`, *optional*, defaults to None):
|
53 |
-
The normalization layer to apply on the input `proj_embedding`. Set it to `None` if normalization is not
|
54 |
-
needed.
|
55 |
-
encoder_hid_proj_type (`str`, *optional*, defaults to `linear`):
|
56 |
-
The projection layer to apply on the input `encoder_hidden_states`. Set it to `None` if
|
57 |
-
`encoder_hidden_states` is `None`.
|
58 |
-
added_emb_type (`str`, *optional*, defaults to `prd`): Additional embeddings to condition the model.
|
59 |
-
Choose from `prd` or `None`. if choose `prd`, it will prepend a token indicating the (quantized) dot
|
60 |
-
product between the text embedding and image embedding as proposed in the unclip paper
|
61 |
-
https://arxiv.org/abs/2204.06125 If it is `None`, no additional embeddings will be prepended.
|
62 |
-
time_embed_dim (`int, *optional*, defaults to None): The dimension of timestep embeddings.
|
63 |
-
If None, will be set to `num_attention_heads * attention_head_dim`
|
64 |
-
embedding_proj_dim (`int`, *optional*, default to None):
|
65 |
-
The dimension of `proj_embedding`. If None, will be set to `embedding_dim`.
|
66 |
-
clip_embed_dim (`int`, *optional*, default to None):
|
67 |
-
The dimension of the output. If None, will be set to `embedding_dim`.
|
68 |
-
"""
|
69 |
-
|
70 |
-
@register_to_config
|
71 |
-
def __init__(
|
72 |
-
self,
|
73 |
-
num_attention_heads: int = 32,
|
74 |
-
attention_head_dim: int = 64,
|
75 |
-
num_layers: int = 20,
|
76 |
-
embedding_dim: int = 768,
|
77 |
-
num_embeddings=77,
|
78 |
-
additional_embeddings=3, # as we have remvoed the time embedding
|
79 |
-
dropout: float = 0.0,
|
80 |
-
# time_embed_act_fn: str = "silu",
|
81 |
-
norm_in_type: Optional[str] = None, # layer
|
82 |
-
embedding_proj_norm_type: Optional[str] = None, # layer
|
83 |
-
encoder_hid_proj_type: Optional[str] = "linear", # linear
|
84 |
-
added_emb_type: Optional[str] = "prd", # prd
|
85 |
-
# time_embed_dim: Optional[int] = None,
|
86 |
-
embedding_proj_dim: Optional[int] = None,
|
87 |
-
clip_embed_dim: Optional[int] = None,
|
88 |
-
):
|
89 |
-
super().__init__()
|
90 |
-
self.num_attention_heads = num_attention_heads
|
91 |
-
self.attention_head_dim = attention_head_dim
|
92 |
-
inner_dim = num_attention_heads * attention_head_dim
|
93 |
-
self.additional_embeddings = additional_embeddings
|
94 |
-
|
95 |
-
# time_embed_dim = time_embed_dim or inner_dim
|
96 |
-
embedding_proj_dim = embedding_proj_dim or embedding_dim
|
97 |
-
clip_embed_dim = clip_embed_dim or embedding_dim
|
98 |
-
|
99 |
-
# self.time_proj = Timesteps(inner_dim, True, 0)
|
100 |
-
# self.time_embedding = TimestepEmbedding(inner_dim, time_embed_dim, out_dim=inner_dim, act_fn=time_embed_act_fn)
|
101 |
-
|
102 |
-
self.proj_in = nn.Linear(embedding_dim, inner_dim)
|
103 |
-
|
104 |
-
if embedding_proj_norm_type is None:
|
105 |
-
self.embedding_proj_norm = None
|
106 |
-
elif embedding_proj_norm_type == "layer":
|
107 |
-
self.embedding_proj_norm = nn.LayerNorm(embedding_proj_dim)
|
108 |
-
else:
|
109 |
-
raise ValueError(f"unsupported embedding_proj_norm_type: {embedding_proj_norm_type}")
|
110 |
-
|
111 |
-
self.embedding_proj = nn.Linear(embedding_proj_dim, inner_dim)
|
112 |
-
|
113 |
-
if encoder_hid_proj_type is None:
|
114 |
-
self.encoder_hidden_states_proj = None
|
115 |
-
elif encoder_hid_proj_type == "linear":
|
116 |
-
self.encoder_hidden_states_proj = nn.Linear(embedding_dim, inner_dim)
|
117 |
-
else:
|
118 |
-
raise ValueError(f"unsupported encoder_hid_proj_type: {encoder_hid_proj_type}")
|
119 |
-
|
120 |
-
self.positional_embedding = nn.Parameter(torch.zeros(1, num_embeddings + additional_embeddings, inner_dim))
|
121 |
-
|
122 |
-
if added_emb_type == "prd":
|
123 |
-
self.prd_embedding = nn.Parameter(torch.zeros(1, 1, inner_dim))
|
124 |
-
elif added_emb_type is None:
|
125 |
-
self.prd_embedding = None
|
126 |
-
else:
|
127 |
-
raise ValueError(
|
128 |
-
f"`added_emb_type`: {added_emb_type} is not supported. Make sure to choose one of `'prd'` or `None`."
|
129 |
-
)
|
130 |
-
|
131 |
-
self.transformer_blocks = nn.ModuleList(
|
132 |
-
[
|
133 |
-
BasicTransformerBlock(
|
134 |
-
inner_dim,
|
135 |
-
num_attention_heads,
|
136 |
-
attention_head_dim,
|
137 |
-
dropout=dropout,
|
138 |
-
activation_fn="gelu",
|
139 |
-
attention_bias=True,
|
140 |
-
)
|
141 |
-
for d in range(num_layers)
|
142 |
-
]
|
143 |
-
)
|
144 |
-
|
145 |
-
if norm_in_type == "layer":
|
146 |
-
self.norm_in = nn.LayerNorm(inner_dim)
|
147 |
-
elif norm_in_type is None:
|
148 |
-
self.norm_in = None
|
149 |
-
else:
|
150 |
-
raise ValueError(f"Unsupported norm_in_type: {norm_in_type}.")
|
151 |
-
|
152 |
-
self.norm_out = nn.LayerNorm(inner_dim)
|
153 |
-
|
154 |
-
self.proj_to_clip_embeddings = nn.Linear(inner_dim, clip_embed_dim)
|
155 |
-
|
156 |
-
causal_attention_mask = torch.full(
|
157 |
-
[num_embeddings + additional_embeddings, num_embeddings + additional_embeddings], -10000.0
|
158 |
-
)
|
159 |
-
causal_attention_mask.triu_(1)
|
160 |
-
causal_attention_mask = causal_attention_mask[None, ...]
|
161 |
-
self.register_buffer("causal_attention_mask", causal_attention_mask, persistent=False)
|
162 |
-
|
163 |
-
self.clip_mean = nn.Parameter(torch.zeros(1, clip_embed_dim))
|
164 |
-
self.clip_std = nn.Parameter(torch.zeros(1, clip_embed_dim))
|
165 |
-
|
166 |
-
@property
|
167 |
-
# Copied from diffusers.models.unet_2d_condition.UNet2DConditionModel.attn_processors
|
168 |
-
def attn_processors(self) -> Dict[str, AttentionProcessor]:
|
169 |
-
r"""
|
170 |
-
Returns:
|
171 |
-
`dict` of attention processors: A dictionary containing all attention processors used in the model with
|
172 |
-
indexed by its weight name.
|
173 |
-
"""
|
174 |
-
# set recursively
|
175 |
-
processors = {}
|
176 |
-
|
177 |
-
def fn_recursive_add_processors(name: str, module: torch.nn.Module, processors: Dict[str, AttentionProcessor]):
|
178 |
-
if hasattr(module, "set_processor"):
|
179 |
-
processors[f"{name}.processor"] = module.processor
|
180 |
-
|
181 |
-
for sub_name, child in module.named_children():
|
182 |
-
fn_recursive_add_processors(f"{name}.{sub_name}", child, processors)
|
183 |
-
|
184 |
-
return processors
|
185 |
-
|
186 |
-
for name, module in self.named_children():
|
187 |
-
fn_recursive_add_processors(name, module, processors)
|
188 |
-
|
189 |
-
return processors
|
190 |
-
|
191 |
-
# Copied from diffusers.models.unet_2d_condition.UNet2DConditionModel.set_attn_processor
|
192 |
-
def set_attn_processor(self, processor: Union[AttentionProcessor, Dict[str, AttentionProcessor]]):
|
193 |
-
r"""
|
194 |
-
Sets the attention processor to use to compute attention.
|
195 |
-
|
196 |
-
Parameters:
|
197 |
-
processor (`dict` of `AttentionProcessor` or only `AttentionProcessor`):
|
198 |
-
The instantiated processor class or a dictionary of processor classes that will be set as the processor
|
199 |
-
for **all** `Attention` layers.
|
200 |
-
|
201 |
-
If `processor` is a dict, the key needs to define the path to the corresponding cross attention
|
202 |
-
processor. This is strongly recommended when setting trainable attention processors.
|
203 |
-
|
204 |
-
"""
|
205 |
-
count = len(self.attn_processors.keys())
|
206 |
-
|
207 |
-
if isinstance(processor, dict) and len(processor) != count:
|
208 |
-
raise ValueError(
|
209 |
-
f"A dict of processors was passed, but the number of processors {len(processor)} does not match the"
|
210 |
-
f" number of attention layers: {count}. Please make sure to pass {count} processor classes."
|
211 |
-
)
|
212 |
-
|
213 |
-
def fn_recursive_attn_processor(name: str, module: torch.nn.Module, processor):
|
214 |
-
if hasattr(module, "set_processor"):
|
215 |
-
if not isinstance(processor, dict):
|
216 |
-
module.set_processor(processor)
|
217 |
-
else:
|
218 |
-
module.set_processor(processor.pop(f"{name}.processor"))
|
219 |
-
|
220 |
-
for sub_name, child in module.named_children():
|
221 |
-
fn_recursive_attn_processor(f"{name}.{sub_name}", child, processor)
|
222 |
-
|
223 |
-
for name, module in self.named_children():
|
224 |
-
fn_recursive_attn_processor(name, module, processor)
|
225 |
-
|
226 |
-
# Copied from diffusers.models.unet_2d_condition.UNet2DConditionModel.set_default_attn_processor
|
227 |
-
def set_default_attn_processor(self):
|
228 |
-
"""
|
229 |
-
Disables custom attention processors and sets the default attention implementation.
|
230 |
-
"""
|
231 |
-
self.set_attn_processor(AttnProcessor())
|
232 |
-
|
233 |
-
def forward(
|
234 |
-
self,
|
235 |
-
hidden_states,
|
236 |
-
# timestep: Union[torch.Tensor, float, int],
|
237 |
-
proj_embedding: torch.FloatTensor,
|
238 |
-
encoder_hidden_states: Optional[torch.FloatTensor] = None,
|
239 |
-
attention_mask: Optional[torch.BoolTensor] = None,
|
240 |
-
return_dict: bool = True,
|
241 |
-
):
|
242 |
-
"""
|
243 |
-
The [`PriorTransformer`] forward method.
|
244 |
-
|
245 |
-
Args:
|
246 |
-
hidden_states (`torch.FloatTensor` of shape `(batch_size, embedding_dim)`):
|
247 |
-
The currently predicted image embeddings.
|
248 |
-
timestep (`torch.LongTensor`):
|
249 |
-
Current denoising step.
|
250 |
-
proj_embedding (`torch.FloatTensor` of shape `(batch_size, embedding_dim)`):
|
251 |
-
Projected embedding vector the denoising process is conditioned on.
|
252 |
-
encoder_hidden_states (`torch.FloatTensor` of shape `(batch_size, num_embeddings, embedding_dim)`):
|
253 |
-
Hidden states of the text embeddings the denoising process is conditioned on.
|
254 |
-
attention_mask (`torch.BoolTensor` of shape `(batch_size, num_embeddings)`):
|
255 |
-
Text mask for the text embeddings.
|
256 |
-
return_dict (`bool`, *optional*, defaults to `True`):
|
257 |
-
Whether or not to return a [`~models.prior_transformer.PriorTransformerOutput`] instead of a plain
|
258 |
-
tuple.
|
259 |
-
|
260 |
-
Returns:
|
261 |
-
[`~models.prior_transformer.PriorTransformerOutput`] or `tuple`:
|
262 |
-
If return_dict is True, a [`~models.prior_transformer.PriorTransformerOutput`] is returned, otherwise a
|
263 |
-
tuple is returned where the first element is the sample tensor.
|
264 |
-
"""
|
265 |
-
batch_size = hidden_states.shape[0]
|
266 |
-
|
267 |
-
# timesteps = timestep
|
268 |
-
# if not torch.is_tensor(timesteps):
|
269 |
-
# timesteps = torch.tensor([timesteps], dtype=torch.long, device=hidden_states.device)
|
270 |
-
# elif torch.is_tensor(timesteps) and len(timesteps.shape) == 0:
|
271 |
-
# timesteps = timesteps[None].to(hidden_states.device)
|
272 |
-
|
273 |
-
# broadcast to batch dimension in a way that's compatible with ONNX/Core ML
|
274 |
-
# timesteps = timesteps * torch.ones(batch_size, dtype=timesteps.dtype, device=timesteps.device)
|
275 |
-
|
276 |
-
# timesteps_projected = self.time_proj(timesteps)
|
277 |
-
|
278 |
-
# timesteps does not contain any weights and will always return f32 tensors
|
279 |
-
# but time_embedding might be fp16, so we need to cast here.
|
280 |
-
# timesteps_projected = timesteps_projected.to(dtype=self.dtype)
|
281 |
-
# time_embeddings = self.time_embedding(timesteps_projected)
|
282 |
-
|
283 |
-
if self.embedding_proj_norm is not None:
|
284 |
-
proj_embedding = self.embedding_proj_norm(proj_embedding)
|
285 |
-
|
286 |
-
proj_embeddings = self.embedding_proj(proj_embedding)
|
287 |
-
if self.encoder_hidden_states_proj is not None and encoder_hidden_states is not None:
|
288 |
-
encoder_hidden_states = self.encoder_hidden_states_proj(encoder_hidden_states)
|
289 |
-
# elif self.encoder_hidden_states_proj is not None and encoder_hidden_states is None:
|
290 |
-
# raise ValueError("`encoder_hidden_states_proj` requires `encoder_hidden_states` to be set")
|
291 |
-
|
292 |
-
hidden_states = self.proj_in(hidden_states)
|
293 |
-
|
294 |
-
# TODO this really also ought to derive from config's `k`
|
295 |
-
positional_embeddings = self.positional_embedding.to(hidden_states.dtype)
|
296 |
-
|
297 |
-
additional_embeds = []
|
298 |
-
additional_embeddings_len = 0
|
299 |
-
|
300 |
-
if encoder_hidden_states is not None:
|
301 |
-
additional_embeds.append(encoder_hidden_states)
|
302 |
-
additional_embeddings_len += encoder_hidden_states.shape[1]
|
303 |
-
|
304 |
-
if len(proj_embeddings.shape) == 2:
|
305 |
-
proj_embeddings = proj_embeddings[:, None, :]
|
306 |
-
|
307 |
-
if len(hidden_states.shape) == 2:
|
308 |
-
hidden_states = hidden_states[:, None, :]
|
309 |
-
|
310 |
-
additional_embeds = additional_embeds + [
|
311 |
-
proj_embeddings,
|
312 |
-
# time_embeddings[:, None, :],
|
313 |
-
hidden_states,
|
314 |
-
]
|
315 |
-
|
316 |
-
if self.prd_embedding is not None:
|
317 |
-
prd_embedding = self.prd_embedding.to(hidden_states.dtype).expand(batch_size, -1, -1)
|
318 |
-
additional_embeds.append(prd_embedding)
|
319 |
-
|
320 |
-
hidden_states = torch.cat(
|
321 |
-
additional_embeds,
|
322 |
-
dim=1,
|
323 |
-
)
|
324 |
-
|
325 |
-
# Allow positional_embedding to not include the `addtional_embeddings` and instead pad it with zeros for these additional tokens
|
326 |
-
additional_embeddings_len = additional_embeddings_len + proj_embeddings.shape[1] + 1
|
327 |
-
if positional_embeddings.shape[1] < hidden_states.shape[1]:
|
328 |
-
positional_embeddings = F.pad(
|
329 |
-
positional_embeddings,
|
330 |
-
(
|
331 |
-
0,
|
332 |
-
0,
|
333 |
-
additional_embeddings_len,
|
334 |
-
self.prd_embedding.shape[1] if self.prd_embedding is not None else 0,
|
335 |
-
),
|
336 |
-
value=0.0,
|
337 |
-
)
|
338 |
-
|
339 |
-
hidden_states = hidden_states + positional_embeddings[:, :hidden_states.shape[1]]
|
340 |
-
|
341 |
-
if attention_mask is not None:
|
342 |
-
attention_mask = (1 - attention_mask.to(hidden_states.dtype)) * -10000.0
|
343 |
-
attention_mask = F.pad(attention_mask, (0, self.additional_embeddings), value=0.0)
|
344 |
-
attention_mask = (attention_mask[:, None, :] + self.causal_attention_mask).to(hidden_states.dtype)
|
345 |
-
attention_mask = attention_mask.repeat_interleave(self.config.num_attention_heads, dim=0)
|
346 |
-
|
347 |
-
if self.norm_in is not None:
|
348 |
-
hidden_states = self.norm_in(hidden_states)
|
349 |
-
|
350 |
-
for block in self.transformer_blocks:
|
351 |
-
hidden_states = block(hidden_states, attention_mask=attention_mask)
|
352 |
-
|
353 |
-
hidden_states = self.norm_out(hidden_states)
|
354 |
-
|
355 |
-
if self.prd_embedding is not None:
|
356 |
-
hidden_states = hidden_states[:, -1]
|
357 |
-
else:
|
358 |
-
hidden_states = hidden_states[:, additional_embeddings_len:]
|
359 |
-
|
360 |
-
predicted_image_embedding = self.proj_to_clip_embeddings(hidden_states)
|
361 |
-
|
362 |
-
if not return_dict:
|
363 |
-
return (predicted_image_embedding,)
|
364 |
-
|
365 |
-
return PriorTransformerOutput(predicted_image_embedding=predicted_image_embedding)
|
366 |
-
|
367 |
-
def post_process_latents(self, prior_latents):
|
368 |
-
prior_latents = (prior_latents * self.clip_std) + self.clip_mean
|
369 |
-
return prior_latents
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
requirements.txt
CHANGED
@@ -3,16 +3,8 @@ numpy
|
|
3 |
scikit-learn
|
4 |
pandas
|
5 |
torch
|
6 |
-
torchvision
|
7 |
numpy
|
8 |
-
matplotlib
|
9 |
diffusers
|
10 |
accelerate
|
11 |
transformers
|
12 |
-
|
13 |
-
peft
|
14 |
-
imageio
|
15 |
-
apscheduler
|
16 |
-
pandas
|
17 |
-
av
|
18 |
-
glob2
|
|
|
3 |
scikit-learn
|
4 |
pandas
|
5 |
torch
|
|
|
6 |
numpy
|
|
|
7 |
diffusers
|
8 |
accelerate
|
9 |
transformers
|
10 |
+
peft
|
|
|
|
|
|
|
|
|
|
|
|
train.py
DELETED
@@ -1,94 +0,0 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
########################################
|
4 |
-
# python -m train
|
5 |
-
###########################################
|
6 |
-
|
7 |
-
|
8 |
-
import torch
|
9 |
-
import logging
|
10 |
-
import numpy as np
|
11 |
-
from tqdm import tqdm
|
12 |
-
from PIL import Image
|
13 |
-
|
14 |
-
from data import get_dataloader
|
15 |
-
from model import get_model_and_tokenizer, get_optimizer
|
16 |
-
import config
|
17 |
-
|
18 |
-
logging.basicConfig(level=logging.INFO)
|
19 |
-
|
20 |
-
def get_loss(model, input, target, tokenizer):
|
21 |
-
with torch.no_grad():
|
22 |
-
assert len(input.shape) == 5 # [batch, s, c, w, h]
|
23 |
-
cuts = config.number_k_clip_embed
|
24 |
-
assert input.shape[0] * input.shape[1] % cuts == 0, 'batch size * `k` preferred embeds must be divisible by cuts'
|
25 |
-
input = input.view(cuts//8, -1, 3, target.shape[-2], target.shape[-1])
|
26 |
-
full_seq = []
|
27 |
-
for b in input:
|
28 |
-
input = tokenizer(b)['image_embeds'] # in our case, tokenizer is a clip embedding model
|
29 |
-
full_seq.append(input)
|
30 |
-
input = torch.stack(full_seq)
|
31 |
-
|
32 |
-
target = tokenizer(target)['image_embeds']
|
33 |
-
|
34 |
-
input = input.view(target.shape[0], -1, target.shape[-1])
|
35 |
-
assert len(input.shape) == 3 # [batch, sequence, inner]
|
36 |
-
|
37 |
-
with torch.cuda.amp.autocast(enabled=False, ):
|
38 |
-
input = input.to(torch.float32)
|
39 |
-
latent = torch.randn(input.shape[0], input.shape[-1], device=input.device)
|
40 |
-
output = model(latent, input).predicted_image_embedding
|
41 |
-
|
42 |
-
target = target.to(torch.float32)
|
43 |
-
mse_loss = torch.nn.functional.mse_loss(target, output).mean()
|
44 |
-
|
45 |
-
assert len(target.shape) == 2 and len(output.shape) == 2
|
46 |
-
cosine_loss = 1 - torch.nn.functional.cosine_similarity(output, target).mean()
|
47 |
-
loss = mse_loss + .2 * cosine_loss
|
48 |
-
|
49 |
-
logging.info(f'MSE: {mse_loss.item()}, Cosine: {cosine_loss.item()}, Weighted Total: {loss.item()}')
|
50 |
-
# TODO wandb
|
51 |
-
|
52 |
-
return loss
|
53 |
-
|
54 |
-
def main():
|
55 |
-
np.random.seed(config.seed)
|
56 |
-
torch.manual_seed(config.seed)
|
57 |
-
|
58 |
-
model, tokenizer = get_model_and_tokenizer(config.model_path, config.device, config.dtype)
|
59 |
-
optimizer = get_optimizer(list(model.prior.parameters()), config.lr)
|
60 |
-
dataloader = get_dataloader(config.data_path, config.batch_size, config.num_workers,
|
61 |
-
model.prior_pipe.image_processor)
|
62 |
-
|
63 |
-
for epoch in range(config.epochs):
|
64 |
-
for ind, batch in tqdm(enumerate(iter(dataloader))):
|
65 |
-
if batch is None:
|
66 |
-
continue
|
67 |
-
|
68 |
-
input, target = batch
|
69 |
-
input = input.to(config.device)
|
70 |
-
target = target.to(config.device)
|
71 |
-
|
72 |
-
if ind % 50 == 0:
|
73 |
-
with torch.cuda.amp.autocast(enabled=True, dtype=config.dtype): # NOTE using autocast because our training model is also our val model, so don't want to set to full half precision.
|
74 |
-
examples = ['../generative_recommender/Blue_Tigers_space/1o.png',
|
75 |
-
'../generative_recommender/Blue_Tigers_space/2o.png',
|
76 |
-
'../generative_recommender/Blue_Tigers_space/3o.png',
|
77 |
-
'../generative_recommender/Blue_Tigers_space/4o.png',
|
78 |
-
'../generative_recommender/Blue_Tigers_space/5o.png',
|
79 |
-
'../generative_recommender/Blue_Tigers_space/6o.png',
|
80 |
-
'../generative_recommender/Blue_Tigers_space/7o.png',
|
81 |
-
'../generative_recommender/Blue_Tigers_space/8o.png',]
|
82 |
-
model.do_validation([[Image.open('../'+j) for j in examples]])
|
83 |
-
|
84 |
-
loss = get_loss(model, input, target, tokenizer)
|
85 |
-
loss.backward()
|
86 |
-
optimizer.step()
|
87 |
-
optimizer.zero_grad()
|
88 |
-
|
89 |
-
if ind % 100 == 0:
|
90 |
-
# TODO add loading from path
|
91 |
-
model.prior.save_pretrained(f'{config.save_path}/last_epoch_ckpt', from_pt=True)
|
92 |
-
|
93 |
-
if __name__ == '__main__':
|
94 |
-
main()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
train_requirements.txt
DELETED
@@ -1,642 +0,0 @@
|
|
1 |
-
absl-py==1.4.0
|
2 |
-
accelerate==0.26.1
|
3 |
-
addict==2.4.0
|
4 |
-
aeiou==0.0.20
|
5 |
-
aenum==3.1.15
|
6 |
-
aiobotocore==2.13.0
|
7 |
-
aiofiles==23.1.0
|
8 |
-
aiohttp==3.9.5
|
9 |
-
aioitertools==0.11.0
|
10 |
-
aiosignal==1.3.1
|
11 |
-
alias-free-torch==0.0.6
|
12 |
-
aliyun-python-sdk-core==2.15.1
|
13 |
-
aliyun-python-sdk-kms==2.16.3
|
14 |
-
altair==4.2.2
|
15 |
-
anaconda-anon-usage @ file:///croot/anaconda-anon-usage_1710965072196/work
|
16 |
-
anaconda-client==1.11.2
|
17 |
-
anaconda-cloud-auth @ file:///croot/anaconda-cloud-auth_1712794769769/work
|
18 |
-
anaconda-navigator @ file:///croot/anaconda-navigator_1712087978399/work
|
19 |
-
anaconda-project @ file:///opt/conda/conda-bld/anaconda-project_1660339890420/work
|
20 |
-
annotated-types @ file:///croot/annotated-types_1709542908624/work
|
21 |
-
antlr4-python3-runtime==4.9.3
|
22 |
-
anyio==4.3.0
|
23 |
-
appdirs==1.4.4
|
24 |
-
apptools==5.2.1
|
25 |
-
APScheduler==3.10.4
|
26 |
-
argbind==0.3.9
|
27 |
-
argcomplete==3.1.1
|
28 |
-
asgiref==3.7.2
|
29 |
-
asttokens==2.2.1
|
30 |
-
astunparse==1.6.3
|
31 |
-
async-timeout==4.0.2
|
32 |
-
atproto==0.0.10
|
33 |
-
attrs==25.1.0
|
34 |
-
audioread==3.0.1
|
35 |
-
auraloss==0.4.0
|
36 |
-
av==10.0.0
|
37 |
-
awscli==1.33.2
|
38 |
-
backcall==0.2.0
|
39 |
-
backports.functools-lru-cache @ file:///tmp/build/80754af9/backports.functools_lru_cache_1618170165463/work
|
40 |
-
backports.tempfile @ file:///home/linux1/recipes/ci/backports.tempfile_1610991236607/work
|
41 |
-
backports.weakref==1.0.post1
|
42 |
-
bases==0.2.1
|
43 |
-
basicsr==1.4.2
|
44 |
-
beautifulsoup4==4.12.2
|
45 |
-
bitsandbytes==0.43.1
|
46 |
-
black==24.10.0
|
47 |
-
bleach==6.1.0
|
48 |
-
blendmodes==2022
|
49 |
-
blinker==1.6.2
|
50 |
-
blis==0.7.9
|
51 |
-
blobfile==2.1.1
|
52 |
-
blosc2==2.5.1
|
53 |
-
bokeh==3.4.1
|
54 |
-
boltons==23.0.0
|
55 |
-
boto==2.49.0
|
56 |
-
boto3==1.34.120
|
57 |
-
botocore==1.34.120
|
58 |
-
Bottleneck @ file:///croot/bottleneck_1707864210935/work
|
59 |
-
braceexpand==0.1.7
|
60 |
-
Brotli @ file:///tmp/abs_ecyw11_7ze/croots/recipe/brotli-split_1659616059936/work
|
61 |
-
brotlipy==0.7.0
|
62 |
-
cached-property==1.5.2
|
63 |
-
cachetools==5.3.3
|
64 |
-
Cartopy==0.21.1
|
65 |
-
catalogue==2.0.8
|
66 |
-
certifi==2025.1.31
|
67 |
-
cffi==1.15.1
|
68 |
-
cfgv==3.3.1
|
69 |
-
chardet @ file:///home/builder/ci_310/chardet_1640804867535/work
|
70 |
-
charset-normalizer==3.1.0
|
71 |
-
chex==0.1.81
|
72 |
-
clean-fid==0.1.35
|
73 |
-
click==8.1.3
|
74 |
-
clip @ git+https://github.com/openai/CLIP.git@a9b1bf5920416aaeaec965c25dd9e8f98c864f16
|
75 |
-
clip-anytorch==2.6.0
|
76 |
-
cloudpickle==2.2.1
|
77 |
-
clyent==1.2.2
|
78 |
-
cmake==3.26.4
|
79 |
-
colorama==0.4.6
|
80 |
-
colorcet==3.1.0
|
81 |
-
colored==2.2.4
|
82 |
-
coloredlogs==15.0.1
|
83 |
-
comm==0.1.4
|
84 |
-
commonmark==0.9.1
|
85 |
-
comtypes==1.2.0
|
86 |
-
conda @ file:///croot/conda_1696257509808/work
|
87 |
-
conda-build @ file:///croot/conda-build_1701720841368/work
|
88 |
-
conda-content-trust @ file:///tmp/abs_5952f1c8-355c-4855-ad2e-538535021ba5h26t22e5/croots/recipe/conda-content-trust_1658126371814/work
|
89 |
-
conda-libmamba-solver @ file:///croot/conda-libmamba-solver_1698163451663/work/src
|
90 |
-
conda-pack @ file:///tmp/build/80754af9/conda-pack_1611163042455/work
|
91 |
-
conda-package-handling @ file:///croot/conda-package-handling_1690999929514/work
|
92 |
-
conda-repo-cli @ file:///croot/conda-repo-cli_1709246574569/work
|
93 |
-
conda-token @ file:///Users/paulyim/miniconda3/envs/c3i/conda-bld/conda-token_1662660369760/work
|
94 |
-
conda-verify==3.4.2
|
95 |
-
conda_index @ file:///croot/conda-index_1706633791028/work
|
96 |
-
conda_package_streaming @ file:///croot/conda-package-streaming_1690987966409/work
|
97 |
-
confection==0.0.4
|
98 |
-
configobj==5.0.8
|
99 |
-
configparser==7.0.0
|
100 |
-
contextlib2==21.6.0
|
101 |
-
contexttimer==0.3.3
|
102 |
-
contourpy==1.2.1
|
103 |
-
cramjam==2.8.3
|
104 |
-
crcmod==1.7
|
105 |
-
cryptography @ file:///croot/cryptography_1677533068310/work
|
106 |
-
cuda-python==12.4.0
|
107 |
-
curl_cffi==0.6.4
|
108 |
-
cycler==0.11.0
|
109 |
-
cymem==2.0.7
|
110 |
-
Cython==0.29.35
|
111 |
-
dacite==1.8.1
|
112 |
-
dag-cbor==0.3.2
|
113 |
-
datasets==2.21.0
|
114 |
-
dctorch==0.1.2
|
115 |
-
-e git+https://github.com/jannerm/ddpo.git@b217eef955a94bf58e4de68caa5ec0a6558c221d#egg=ddpo
|
116 |
-
debugpy==1.6.7
|
117 |
-
decorator==4.4.2
|
118 |
-
decord==0.6.0
|
119 |
-
DeepCache==0.1.1
|
120 |
-
deepspeed==0.14.2
|
121 |
-
defusedxml @ file:///tmp/build/80754af9/defusedxml_1615228127516/work
|
122 |
-
Deprecated==1.2.14
|
123 |
-
deprecation==2.1.0
|
124 |
-
descript-audio-codec==1.0.0
|
125 |
-
descript-audiotools==0.7.2
|
126 |
-
diffusers @ git+https://github.com/huggingface/diffusers.git@06beecafc55cfddeb1b0b8660188de249f74b899
|
127 |
-
dill==0.3.6
|
128 |
-
disnake==2.9.0
|
129 |
-
Django==4.2.2
|
130 |
-
django-memcache-status==2.3
|
131 |
-
django-pylibmc==0.6.1
|
132 |
-
dm-tree==0.1.8
|
133 |
-
dnspython==2.6.1
|
134 |
-
docker-pycreds==0.4.0
|
135 |
-
docstring-parser==0.15
|
136 |
-
docutils==0.16
|
137 |
-
EasyProcess==1.1
|
138 |
-
einops==0.7.0
|
139 |
-
einops-exts==0.0.4
|
140 |
-
ema-pytorch==0.2.3
|
141 |
-
email_validator==2.1.1
|
142 |
-
emoji==2.4.0
|
143 |
-
encodec==0.1.1
|
144 |
-
entrypoints==0.4
|
145 |
-
envisage==7.0.3
|
146 |
-
etils==1.3.0
|
147 |
-
eva-decord==0.6.1
|
148 |
-
exceptiongroup==1.1.1
|
149 |
-
executing==1.2.0
|
150 |
-
facexlib==0.3.0
|
151 |
-
fairscale==0.4.4
|
152 |
-
fastapi==0.111.0
|
153 |
-
fastapi-cli==0.0.4
|
154 |
-
fastcore==1.5.44
|
155 |
-
fastjsonschema @ file:///opt/conda/conda-bld/python-fastjsonschema_1661371079312/work
|
156 |
-
fastparquet==2024.5.0
|
157 |
-
ffmpeg==1.4
|
158 |
-
ffmpeg-python==0.2.0
|
159 |
-
ffmpegio==0.8.3
|
160 |
-
ffmpegio-core==0.8.3
|
161 |
-
ffmpy==0.3.0
|
162 |
-
filelock @ file:///croot/filelock_1700591183607/work
|
163 |
-
filterpy==1.4.5
|
164 |
-
fire==0.6.0
|
165 |
-
flash-attn==2.5.9.post1
|
166 |
-
Flask==2.3.2
|
167 |
-
flatbuffers==23.5.26
|
168 |
-
flatten-dict==0.4.2
|
169 |
-
flax==0.6.9
|
170 |
-
flow-vis==0.1
|
171 |
-
fonttools==4.42.1
|
172 |
-
frozenlist==1.3.3
|
173 |
-
fsspec==2024.6.0
|
174 |
-
ftfy==6.1.1
|
175 |
-
future @ file:///croot/future_1677599870788/work
|
176 |
-
fvcore==0.1.5.post20221221
|
177 |
-
gast==0.4.0
|
178 |
-
gcs-oauth2-boto-plugin==3.0
|
179 |
-
gcsfs==2023.6.0
|
180 |
-
gdcm==1.1
|
181 |
-
gdown==4.7.1
|
182 |
-
gfpgan==1.3.8
|
183 |
-
gguf==0.16.2
|
184 |
-
gin-config==0.5.0
|
185 |
-
gitdb==4.0.10
|
186 |
-
GitPython==3.1.30
|
187 |
-
gmpy2 @ file:///tmp/build/80754af9/gmpy2_1645455533097/work
|
188 |
-
google-api-core==2.11.1
|
189 |
-
google-apitools==0.5.32
|
190 |
-
google-auth==2.29.0
|
191 |
-
google-auth-oauthlib==1.0.0
|
192 |
-
google-cloud-core==2.3.2
|
193 |
-
google-cloud-storage==2.10.0
|
194 |
-
google-crc32c==1.5.0
|
195 |
-
google-pasta==0.2.0
|
196 |
-
google-reauth==0.1.1
|
197 |
-
google-resumable-media==2.5.0
|
198 |
-
googleapis-common-protos==1.59.1
|
199 |
-
gradio==4.31.5
|
200 |
-
gradio_client==0.16.4
|
201 |
-
grpcio==1.54.2
|
202 |
-
gsutil==5.25
|
203 |
-
h11==0.14.0
|
204 |
-
h5py==3.11.0
|
205 |
-
hjson==3.1.0
|
206 |
-
holoviews==1.18.3
|
207 |
-
httpcore==1.0.5
|
208 |
-
httplib2==0.20.4
|
209 |
-
httptools==0.6.1
|
210 |
-
httpx==0.27.0
|
211 |
-
httpx-ws==0.3.1
|
212 |
-
huggingface-hub==0.30.2
|
213 |
-
humanfriendly==10.0
|
214 |
-
humanize==4.7.0
|
215 |
-
hydra-core==1.1.2
|
216 |
-
hyper-tile @ git+https://github.com/tfernd/HyperTile@2ef64b2800d007d305755c33550537410310d7df
|
217 |
-
icecream==2.1.3
|
218 |
-
identify==2.5.24
|
219 |
-
idna @ file:///croot/idna_1666125576474/work
|
220 |
-
imagebind @ git+https://github.com/facebookresearch/ImageBind.git@95d27c7fd5a8362f3527e176c3a80ae5a4d880c0
|
221 |
-
imageio==2.34.2
|
222 |
-
imageio-ffmpeg==0.4.8
|
223 |
-
importlib-metadata==6.8.0
|
224 |
-
importlib-resources==5.12.0
|
225 |
-
inflect==6.0.4
|
226 |
-
inflection==0.5.1
|
227 |
-
install==1.3.5
|
228 |
-
iopath==0.1.9
|
229 |
-
ipykernel==6.25.0
|
230 |
-
ipython==8.14.0
|
231 |
-
ipywidgets==8.0.6
|
232 |
-
itsdangerous==2.1.2
|
233 |
-
jaraco.classes @ file:///tmp/build/80754af9/jaraco.classes_1620983179379/work
|
234 |
-
jax==0.4.6
|
235 |
-
jaxlib==0.4.6
|
236 |
-
jedi==0.19.0
|
237 |
-
jeepney @ file:///tmp/build/80754af9/jeepney_1627537048313/work
|
238 |
-
Jinja2==3.1.2
|
239 |
-
jmespath==0.10.0
|
240 |
-
joblib==1.3.2
|
241 |
-
jsonmerge==1.8.0
|
242 |
-
jsonpatch @ file:///croot/jsonpatch_1710807507480/work
|
243 |
-
jsonpointer==2.1
|
244 |
-
jsonschema @ file:///croot/jsonschema_1699041609003/work
|
245 |
-
jsonschema-specifications @ file:///croot/jsonschema-specifications_1699032386549/work
|
246 |
-
julius==0.2.7
|
247 |
-
jupyter-js-widgets-nbextension==0.0.2.dev0
|
248 |
-
jupyter_client==8.3.0
|
249 |
-
jupyter_core @ file:///croot/jupyter_core_1698937308754/work
|
250 |
-
jupyterlab-widgets==3.0.7
|
251 |
-
k-diffusion==0.1.1
|
252 |
-
kaggle==1.5.13
|
253 |
-
kagglehub==0.3.12
|
254 |
-
kandinsky2 @ git+https://github.com/ai-forever/Kandinsky-2.git@aeefc1ce3a989eefe7c99d6a02cce44318c4d210
|
255 |
-
kecam==1.4.1
|
256 |
-
keras==2.14.0
|
257 |
-
keras-efficientnet-v2==1.2.2
|
258 |
-
Keras-Preprocessing==1.1.2
|
259 |
-
keyring @ file:///croot/keyring_1709632513808/work
|
260 |
-
kiwisolver==1.4.5
|
261 |
-
kornia==0.6.7
|
262 |
-
laion-clap==1.1.4
|
263 |
-
langcodes==3.3.0
|
264 |
-
lark==1.1.2
|
265 |
-
lazy_loader==0.2
|
266 |
-
libarchive-c @ file:///tmp/build/80754af9/python-libarchive-c_1617780486945/work
|
267 |
-
libclang==16.0.0
|
268 |
-
libmambapy @ file:///croot/mamba-split_1694187754698/work/libmambapy
|
269 |
-
librosa==0.9.2
|
270 |
-
lightning-utilities==0.8.0
|
271 |
-
linkify-it-py==2.0.2
|
272 |
-
lit==16.0.6
|
273 |
-
llvmlite==0.42.0
|
274 |
-
lmdb==1.4.1
|
275 |
-
local-attention==1.8.6
|
276 |
-
loguru==0.7.2
|
277 |
-
lpips==0.1.4
|
278 |
-
lvis==0.5.3
|
279 |
-
lxml==4.9.4
|
280 |
-
Markdown==3.6
|
281 |
-
markdown-it-py==2.2.0
|
282 |
-
markdown2==2.4.8
|
283 |
-
MarkupSafe==2.1.2
|
284 |
-
matplotlib==3.7.3
|
285 |
-
matplotlib-inline==0.1.6
|
286 |
-
mayavi==4.8.1
|
287 |
-
mc-bin-client==1.0.1
|
288 |
-
mdit-py-plugins==0.3.3
|
289 |
-
mdurl==0.1.2
|
290 |
-
mediapipe==0.10.15
|
291 |
-
menuinst @ file:///croot/menuinst_1706732933928/work
|
292 |
-
mkl-fft @ file:///croot/mkl_fft_1695058164594/work
|
293 |
-
mkl-random @ file:///croot/mkl_random_1695059800811/work
|
294 |
-
mkl-service==2.4.0
|
295 |
-
ml-collections==0.1.1
|
296 |
-
ml-dtypes==0.2.0
|
297 |
-
mmcv==1.7.2
|
298 |
-
mmengine==0.10.4
|
299 |
-
model-index==0.1.11
|
300 |
-
more-itertools @ file:///croot/more-itertools_1700662129964/work
|
301 |
-
MouseInfo==0.1.3
|
302 |
-
moviepy==1.0.3
|
303 |
-
mpmath @ file:///croot/mpmath_1690848262763/work
|
304 |
-
msgpack==1.0.5
|
305 |
-
multidict==6.0.4
|
306 |
-
multiformats==0.2.1
|
307 |
-
multiformats-config==0.2.0.post4
|
308 |
-
multiprocess==0.70.14
|
309 |
-
murmurhash==1.0.9
|
310 |
-
mypy-extensions==1.0.0
|
311 |
-
namex==0.0.8
|
312 |
-
natsort==8.4.0
|
313 |
-
navigator-updater @ file:///croot/navigator-updater_1713453362034/work
|
314 |
-
nbformat @ file:///croot/nbformat_1694616755618/work
|
315 |
-
ndindex==1.8
|
316 |
-
nest-asyncio==1.5.7
|
317 |
-
networkx==3.1
|
318 |
-
nh3==0.2.13
|
319 |
-
nibabel==5.1.0
|
320 |
-
ninja==1.11.1
|
321 |
-
nlpaug==1.1.11
|
322 |
-
nltk==3.8.1
|
323 |
-
nodeenv==1.8.0
|
324 |
-
numba==0.59.1
|
325 |
-
numexpr @ file:///croot/numexpr_1696515281613/work
|
326 |
-
numpy==1.26.4
|
327 |
-
nvidia-cublas-cu11==11.11.3.6
|
328 |
-
nvidia-cublas-cu117==11.10.1.25
|
329 |
-
nvidia-cublas-cu12==12.3.4.1
|
330 |
-
nvidia-cuda-cupti-cu11==11.8.87
|
331 |
-
nvidia-cuda-cupti-cu117==11.7.50
|
332 |
-
nvidia-cuda-cupti-cu12==12.3.101
|
333 |
-
nvidia-cuda-nvcc-cu11==11.8.89
|
334 |
-
nvidia-cuda-nvcc-cu12==12.3.107
|
335 |
-
nvidia-cuda-nvrtc-cu11==11.8.89
|
336 |
-
nvidia-cuda-nvrtc-cu12==12.3.107
|
337 |
-
nvidia-cuda-runtime-cu11==11.8.89
|
338 |
-
nvidia-cuda-runtime-cu117==11.7.60
|
339 |
-
nvidia-cuda-runtime-cu12==12.3.101
|
340 |
-
nvidia-cudnn-cu11==8.7.0.84
|
341 |
-
nvidia-cudnn-cu116==8.4.0.27
|
342 |
-
nvidia-cudnn-cu12==9.0.0.312
|
343 |
-
nvidia-cufft-cu11==10.9.0.58
|
344 |
-
nvidia-cufft-cu12==11.0.12.1
|
345 |
-
nvidia-curand-cu11==10.3.0.86
|
346 |
-
nvidia-curand-cu12==10.3.4.107
|
347 |
-
nvidia-cusolver-cu11==11.4.1.48
|
348 |
-
nvidia-cusolver-cu12==11.5.4.101
|
349 |
-
nvidia-cusparse-cu11==11.7.5.86
|
350 |
-
nvidia-cusparse-cu12==12.2.0.103
|
351 |
-
nvidia-nccl-cu11==2.19.3
|
352 |
-
nvidia-nccl-cu12==2.19.3
|
353 |
-
nvidia-nvjitlink-cu12==12.3.101
|
354 |
-
nvidia-nvtx-cu11==11.8.86
|
355 |
-
nvidia-pyindex==1.0.9
|
356 |
-
oauth2client==4.1.3
|
357 |
-
oauthlib==3.2.2
|
358 |
-
omegaconf==2.3.0
|
359 |
-
onnx==1.15.0
|
360 |
-
onnx-graphsurgeon==0.5.2
|
361 |
-
onnx2torch==1.5.6
|
362 |
-
onnxruntime==1.16.3
|
363 |
-
open_clip_torch==2.26.1
|
364 |
-
openai==0.27.8
|
365 |
-
opencv-contrib-python==4.6.0.66
|
366 |
-
opencv-python==4.6.0
|
367 |
-
opendatalab==0.0.10
|
368 |
-
opendatasets==0.1.22
|
369 |
-
openmim==0.3.9
|
370 |
-
openxlab==0.1.1
|
371 |
-
opt-einsum==3.3.0
|
372 |
-
optax==0.1.5
|
373 |
-
optree==0.11.0
|
374 |
-
orbax-checkpoint==0.1.6
|
375 |
-
ordered-set==4.1.0
|
376 |
-
orjson==3.9.0
|
377 |
-
oss2==2.17.0
|
378 |
-
outcome==1.3.0.post0
|
379 |
-
packaging @ file:///croot/packaging_1710807400464/work
|
380 |
-
pandas==2.0.2
|
381 |
-
panel==1.4.4
|
382 |
-
param==2.1.0
|
383 |
-
parameterized==0.9.0
|
384 |
-
parso==0.8.3
|
385 |
-
pathspec==0.11.1
|
386 |
-
pathtools==0.1.2
|
387 |
-
pathy==0.10.1
|
388 |
-
pedalboard==0.7.4
|
389 |
-
peewee==3.16.2
|
390 |
-
peft==0.10.0
|
391 |
-
pexpect==4.8.0
|
392 |
-
pickleshare==0.7.5
|
393 |
-
piexif==1.1.3
|
394 |
-
Pillow==9.4.0
|
395 |
-
pkce @ file:///croot/pkce_1690384816590/work
|
396 |
-
pkginfo @ file:///croot/pkginfo_1679431160147/work
|
397 |
-
platformdirs==3.8.0
|
398 |
-
plotly==5.14.1
|
399 |
-
pluggy @ file:///tmp/build/80754af9/pluggy_1648024709248/work
|
400 |
-
ply==3.11
|
401 |
-
polygraphy==0.49.9
|
402 |
-
pooch==1.8.1
|
403 |
-
portalocker==2.7.0
|
404 |
-
pre-commit==3.3.1
|
405 |
-
prefigure==0.0.9
|
406 |
-
preshed==3.0.8
|
407 |
-
proglog==0.1.10
|
408 |
-
progressbar==2.5
|
409 |
-
prompt-toolkit==3.0.39
|
410 |
-
protobuf==4.25.3
|
411 |
-
psutil==5.9.5
|
412 |
-
ptyprocess==0.7.0
|
413 |
-
pure-eval==0.2.2
|
414 |
-
py-cpuinfo==9.0.0
|
415 |
-
pyarrow==17.0.0
|
416 |
-
pyasn1==0.6.0
|
417 |
-
pyasn1-modules==0.3.0
|
418 |
-
PyAutoGUI==0.9.54
|
419 |
-
pyav==12.0.5
|
420 |
-
pycocoevalcap==1.2
|
421 |
-
pycocotools==2.0.6
|
422 |
-
pycosat @ file:///croot/pycosat_1696536503704/work
|
423 |
-
pycparser==2.21
|
424 |
-
pycryptodome==3.20.0
|
425 |
-
pycryptodomex==3.19.0
|
426 |
-
pydantic==2.7.3
|
427 |
-
pydantic_core==2.18.4
|
428 |
-
pydeck==0.8.1b0
|
429 |
-
pyDeprecate==0.3.2
|
430 |
-
pydicom==2.3.1
|
431 |
-
pydot==1.4.2
|
432 |
-
pydub==0.25.1
|
433 |
-
pyface==8.0.0
|
434 |
-
PyGetWindow==0.0.9
|
435 |
-
Pygments==2.15.1
|
436 |
-
PyJWT==2.7.0
|
437 |
-
pylibmc==1.6.3
|
438 |
-
pyloudnorm==0.1.1
|
439 |
-
pymemcache==4.0.0
|
440 |
-
Pympler==1.0.1
|
441 |
-
PyMsgBox==1.0.9
|
442 |
-
pynndescent==0.5.12
|
443 |
-
pynvml==11.5.0
|
444 |
-
pyOpenSSL @ file:///croot/pyopenssl_1690223430423/work
|
445 |
-
pyparsing==3.1.1
|
446 |
-
pyperclip==1.9.0
|
447 |
-
pyproj==3.6.0
|
448 |
-
PyQt5==5.15.10
|
449 |
-
PyQt5-sip @ file:///croot/pyqt-split_1698769088074/work/pyqt_sip
|
450 |
-
pyre-extensions==0.0.29
|
451 |
-
PyRect==0.2.0
|
452 |
-
PyScreeze==1.0.1
|
453 |
-
pyshp==2.3.1
|
454 |
-
PySocks==1.7.1
|
455 |
-
pystoi==0.4.1
|
456 |
-
python-dateutil @ file:///tmp/build/80754af9/python-dateutil_1626374649649/work
|
457 |
-
python-docx==0.8.11
|
458 |
-
python-dotenv==1.0.0
|
459 |
-
python-magic==0.4.27
|
460 |
-
python-memcached==1.59
|
461 |
-
python-multipart==0.0.9
|
462 |
-
python-slugify==8.0.1
|
463 |
-
python3-xlib==0.15
|
464 |
-
pytorch-lantern==0.12.7
|
465 |
-
pytorch-lightning==2.1.0
|
466 |
-
pytorch-pretrained-biggan==0.1.1
|
467 |
-
pytorch-warmup==0.1.1
|
468 |
-
pytorchvideo==0.1.5
|
469 |
-
pytweening==1.2.0
|
470 |
-
pytz @ file:///croot/pytz_1695131579487/work
|
471 |
-
pyu2f==0.1.5
|
472 |
-
PyVirtualDisplay==3.0
|
473 |
-
pyviz_comms==3.0.2
|
474 |
-
PyWavelets==1.4.1
|
475 |
-
PyYAML==6.0
|
476 |
-
pyzmq==25.1.0
|
477 |
-
QtPy @ file:///croot/qtpy_1700144840038/work
|
478 |
-
randomname==0.2.1
|
479 |
-
realesrgan==0.3.0
|
480 |
-
referencing @ file:///croot/referencing_1699012038513/work
|
481 |
-
regex==2023.6.3
|
482 |
-
repeng @ git+https://github.com/vgel/repeng.git@c9093abddd87f865e7e2bcf4b3e556ec8813b5b2
|
483 |
-
replicate==0.25.1
|
484 |
-
requests==2.32.3
|
485 |
-
requests-oauthlib==1.3.1
|
486 |
-
requests-toolbelt @ file:///croot/requests-toolbelt_1690874004362/work
|
487 |
-
resampy==0.4.3
|
488 |
-
resize-right==0.0.2
|
489 |
-
responses==0.18.0
|
490 |
-
retry-decorator==1.1.1
|
491 |
-
rfc3986==1.5.0
|
492 |
-
rich==12.6.0
|
493 |
-
rotary-embedding-torch==0.3.0
|
494 |
-
rpds-py @ file:///croot/rpds-py_1698945930462/work
|
495 |
-
rsa==4.7.2
|
496 |
-
ruamel-yaml-conda @ file:///croot/ruamel_yaml_1667489728852/work
|
497 |
-
ruamel.yaml @ file:///croot/ruamel.yaml_1666304550667/work
|
498 |
-
ruamel.yaml.clib @ file:///croot/ruamel.yaml.clib_1666302247304/work
|
499 |
-
ruff==0.4.1
|
500 |
-
s2wrapper @ git+https://github.com/bfshi/scaling_on_scales@f08aec91337ae1ed6d7cc7a55441a96d51c14dd1
|
501 |
-
s3fs==2024.6.0
|
502 |
-
s3transfer==0.10.1
|
503 |
-
sacremoses==0.0.53
|
504 |
-
safetensors==0.4.1
|
505 |
-
salesforce-lavis @ git+https://github.com/salesforce/LAVIS.git@4a85b17846ee62f09c40f37cc955dd33c2abec68
|
506 |
-
scikit-image==0.20.0
|
507 |
-
scikit-learn==1.5.1
|
508 |
-
scikit-surprise==1.1.3
|
509 |
-
scipy==1.11.1
|
510 |
-
SecretStorage @ file:///croot/secretstorage_1678709481048/work
|
511 |
-
selenium==4.29.0
|
512 |
-
semantic-version==2.10.0
|
513 |
-
semver @ file:///croot/semver_1709243621175/work
|
514 |
-
sentencepiece==0.1.99
|
515 |
-
sentry-sdk==1.25.1
|
516 |
-
setproctitle==1.3.2
|
517 |
-
sgm @ file:///home/ryn_mote/Misc/generative-models
|
518 |
-
shapely==2.0.1
|
519 |
-
shellingham==1.5.0.post1
|
520 |
-
shortuuid==1.0.11
|
521 |
-
SimpleITK==2.2.1
|
522 |
-
sip @ file:///croot/sip_1698675935381/work
|
523 |
-
six @ file:///tmp/build/80754af9/six_1644875935023/work
|
524 |
-
sk-video==1.1.10
|
525 |
-
smart-open==6.3.0
|
526 |
-
smmap==5.0.0
|
527 |
-
sniffio==1.3.0
|
528 |
-
sortedcontainers==2.4.0
|
529 |
-
sounddevice==0.5.0
|
530 |
-
SoundFile==0.10.2
|
531 |
-
soupsieve==2.4.1
|
532 |
-
spaces==0.27.0
|
533 |
-
spacy==3.5.3
|
534 |
-
spacy-legacy==3.0.12
|
535 |
-
spacy-loggers==1.0.4
|
536 |
-
sqlparse==0.4.4
|
537 |
-
srsly==2.4.6
|
538 |
-
stable-audio-tools==0.0.16
|
539 |
-
stable-fast @ https://github.com/chengzeyi/stable-fast/releases/download/v1.0.4/stable_fast-1.0.4+torch220cu118-cp310-cp310-manylinux2014_x86_64.whl#sha256=11716f733237f557bee452eee63db415b4daeff29a28d939f73fff8003f0d415
|
540 |
-
stack-data==0.6.2
|
541 |
-
stanza==1.5.0
|
542 |
-
starlette==0.37.2
|
543 |
-
streamlit==1.22.0
|
544 |
-
svgwrite==1.4.3
|
545 |
-
sympy @ file:///croot/sympy_1701397643339/work
|
546 |
-
tables==3.9.2
|
547 |
-
tabulate==0.9.0
|
548 |
-
tenacity==8.2.2
|
549 |
-
tensorboard==2.14.1
|
550 |
-
tensorboard-data-server==0.7.2
|
551 |
-
tensorboard-plugin-wit==1.8.1
|
552 |
-
tensorflow==2.14.0
|
553 |
-
tensorflow-addons==0.16.1
|
554 |
-
tensorflow-estimator==2.14.0
|
555 |
-
tensorflow-hub==0.16.1
|
556 |
-
tensorflow-io-gcs-filesystem==0.32.0
|
557 |
-
tensorrt==8.6.1.post1
|
558 |
-
tensorrt-bindings==8.6.1
|
559 |
-
tensorrt-libs==8.6.1
|
560 |
-
tensorstore==0.1.39
|
561 |
-
termcolor==2.3.0
|
562 |
-
text-unidecode==1.3
|
563 |
-
tf-estimator-nightly==2.8.0.dev2021122109
|
564 |
-
tf_keras==2.16.0
|
565 |
-
tgate==0.1.1
|
566 |
-
thinc==8.1.10
|
567 |
-
threadpoolctl==3.2.0
|
568 |
-
tifffile==2023.4.12
|
569 |
-
tiktoken==0.4.0
|
570 |
-
timm==0.9.8
|
571 |
-
tokenizers==0.20.3
|
572 |
-
tomesd==0.1.3
|
573 |
-
tomli==2.0.1
|
574 |
-
tomlkit==0.12.0
|
575 |
-
toolz==0.12.0
|
576 |
-
torch==2.2.2+cu118
|
577 |
-
torch-ema==0.3
|
578 |
-
torch-stoi==0.2.1
|
579 |
-
torchaudio==2.0.2+cu118
|
580 |
-
torchdiffeq==0.2.3
|
581 |
-
torchio==0.19.0
|
582 |
-
torchlibrosa==0.1.0
|
583 |
-
torchmetrics==0.11.4
|
584 |
-
torchsde==0.2.6
|
585 |
-
torchvision==0.15.2+cu118
|
586 |
-
tornado @ file:///croot/tornado_1696936946304/work
|
587 |
-
tqdm==4.66.5
|
588 |
-
traitlets @ file:///croot/traitlets_1671143879854/work
|
589 |
-
traits==6.4.1
|
590 |
-
traitsui==8.0.0
|
591 |
-
trampoline==0.1.2
|
592 |
-
transformers==4.46.3
|
593 |
-
trio==0.29.0
|
594 |
-
trio-websocket==0.12.2
|
595 |
-
triton==2.2.0
|
596 |
-
truststore @ file:///croot/truststore_1695244293384/work
|
597 |
-
typed-argument-parser==1.8.1
|
598 |
-
typeguard==4.2.1
|
599 |
-
typer==0.12.3
|
600 |
-
types-regex==2023.6.3.1
|
601 |
-
typing-inspect==0.8.0
|
602 |
-
typing-validation==1.0.0.post2
|
603 |
-
typing_extensions==4.12.2
|
604 |
-
tzdata @ file:///croot/python-tzdata_1690578112552/work
|
605 |
-
tzlocal==5.0.1
|
606 |
-
uc-micro-py==1.0.2
|
607 |
-
ujson @ file:///opt/conda/conda-bld/ujson_1657544923770/work
|
608 |
-
umap-learn==0.5.6
|
609 |
-
undetected-chromedriver==3.5.5
|
610 |
-
urllib3==1.26.18
|
611 |
-
uvicorn==0.29.0
|
612 |
-
uvloop==0.19.0
|
613 |
-
v-diffusion-pytorch==0.0.2
|
614 |
-
validators==0.20.0
|
615 |
-
vector-quantize-pytorch==1.9.14
|
616 |
-
vtk==9.2.6
|
617 |
-
wandb==0.15.4
|
618 |
-
wasabi==1.1.1
|
619 |
-
watchdog==3.0.0
|
620 |
-
watchfiles==0.22.0
|
621 |
-
wavedrom==2.0.3.post3
|
622 |
-
wcwidth==0.2.6
|
623 |
-
webdataset==0.2.48
|
624 |
-
webencodings==0.5.1
|
625 |
-
websocket-client==1.8.0
|
626 |
-
websockets==11.0.3
|
627 |
-
Werkzeug==2.3.4
|
628 |
-
wget==3.2
|
629 |
-
widgetsnbextension==4.0.7
|
630 |
-
wikipedia==1.4.0
|
631 |
-
wrapt==1.14.1
|
632 |
-
wsproto==1.2.0
|
633 |
-
x-transformers==1.26.6
|
634 |
-
xformers==0.0.20
|
635 |
-
xxhash==3.2.0
|
636 |
-
xyzservices==2024.4.0
|
637 |
-
yacs==0.1.8
|
638 |
-
yapf==0.40.1
|
639 |
-
yarl==1.9.2
|
640 |
-
yattag==1.15.1
|
641 |
-
zipp==3.16.0
|
642 |
-
zstandard @ file:///croot/zstandard_1677013143055/work
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
twitter_prompts.csv
ADDED
@@ -0,0 +1,2088 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
,0
|
2 |
+
0,Persephone
|
3 |
+
1,"A portrait: man, whose lineage is corpse."
|
4 |
+
2,a beautiful Waluigi
|
5 |
+
3,president abe lincoln but a cat
|
6 |
+
4,a woman and a crow
|
7 |
+
5,"A professional, minimalist poster for the book The Old Man and the Sea"
|
8 |
+
6,"half Ryan, half pigeon"
|
9 |
+
7,Easter cat
|
10 |
+
8,a beautiful woman
|
11 |
+
9,a cherry tree made of fractals
|
12 |
+
10,a christmas card from the victorian era
|
13 |
+
11,The Theotokos is a bird
|
14 |
+
12,
|
15 |
+
13,A short life full of immense joy
|
16 |
+
14,a character from a ghibli movie
|
17 |
+
15,A structure made of people standing on top of other people
|
18 |
+
16,зеленая собака
|
19 |
+
17,a painting of the city
|
20 |
+
18,a character from a ghibli movie
|
21 |
+
19,pasta ömetabolism
|
22 |
+
20,"a brilliant sketch titled ""Let Forever be Delayed"""
|
23 |
+
21,the sun is shining on the lake
|
24 |
+
22,Monet Lisa
|
25 |
+
23,Genesis
|
26 |
+
24,Synesthesia
|
27 |
+
25,A dead man
|
28 |
+
26,a cherry tree made of fractals
|
29 |
+
27,enough
|
30 |
+
28,The First Supper
|
31 |
+
29,"i'm never gonna lose the desire to be loved. ""Oh the pain!! The pain! The agony!"""
|
32 |
+
30,a painting of the last day
|
33 |
+
31,Dead Codes by Ryan Murdock
|
34 |
+
32,Genesis
|
35 |
+
33,symmetry
|
36 |
+
34,The OLD DATA
|
37 |
+
35,a beautiful person
|
38 |
+
36,the whitest man
|
39 |
+
37,Death is a black camel that kneels down so we can ride
|
40 |
+
38,a goblin by van gogh
|
41 |
+
39,a portrait of a beautiful person
|
42 |
+
40,a famous painted portrait of Lady Macbeth
|
43 |
+
41,on the edge of grace
|
44 |
+
42,"""A God Made of Wires and Dust"" by Ryan Murdock"
|
45 |
+
43,symmetry
|
46 |
+
44,a beautiful person
|
47 |
+
45,"If we're not careful, it's only art about not-quite-dead pigs from now on."
|
48 |
+
46,Beauty here -- a photograph by Ryan Murdock
|
49 |
+
47,Hunger art by r.j. Murdock
|
50 |
+
48,"A professional, minimalist poster for the film Donnie Darko"
|
51 |
+
49,A black and white photo of a rainbow.
|
52 |
+
50,a beautiful painting
|
53 |
+
51,Monet Lisa
|
54 |
+
52,a painting of the city
|
55 |
+
53,A structure made of people standing on top of other people
|
56 |
+
54,a criminal
|
57 |
+
55,a cherry tree made of fractals
|
58 |
+
56,Persephone flees Hades
|
59 |
+
57,a tree with weaping branches
|
60 |
+
58,a tree with weaping branches
|
61 |
+
59,Genesis
|
62 |
+
60,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
63 |
+
61,a cute cat
|
64 |
+
62,Aflame
|
65 |
+
63,A cat wearing a tophat
|
66 |
+
64,a terrifying night hag
|
67 |
+
65,a beautiful woman
|
68 |
+
66,Fire
|
69 |
+
67,a cherry tree made of fractals
|
70 |
+
68,The EcoCathedral
|
71 |
+
69,a man on fire
|
72 |
+
70,A structure made of people standing on top of other people
|
73 |
+
71,totemic dusk
|
74 |
+
72,The Death of Achilles
|
75 |
+
73,Everywhere is no-place
|
76 |
+
74,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
77 |
+
75,An Arundel Tomb
|
78 |
+
76,The average Advadnoun twitter follower
|
79 |
+
77,I can read when there's writing on the wall
|
80 |
+
78,
|
81 |
+
79,A Tragedy
|
82 |
+
80,Breathe deep the fumes at Delphi
|
83 |
+
81,a pOrTRaIT Of tHe SpOngeBOb CHicKen
|
84 |
+
82,a portrait of a beautiful person
|
85 |
+
83,a beautiful person
|
86 |
+
84,a portrait of a beautiful person
|
87 |
+
85,Dead Codes by Ryan Murdock
|
88 |
+
86,a photo of a purple dog
|
89 |
+
87,Memento Mori
|
90 |
+
88,"joy, happiness, bliss"
|
91 |
+
89,Paradise Lost
|
92 |
+
90,a beautiful person
|
93 |
+
91,melancholia
|
94 |
+
92,Monet Lisa
|
95 |
+
93,"Of that which one cannot speak, one must be silent."
|
96 |
+
94,
|
97 |
+
95,Juliet
|
98 |
+
96,God killed Van Gogh.
|
99 |
+
97,a cherry tree made of fractals
|
100 |
+
98,a horse with four eyes.
|
101 |
+
99,a beautiful person
|
102 |
+
100,With the Gods in envy of their visions
|
103 |
+
101,The Lost Generation
|
104 |
+
102,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
105 |
+
103,a portrait of a beautiful person
|
106 |
+
104,"half Ryan, half pigeon"
|
107 |
+
105,a ginormous baby
|
108 |
+
106,a wormhole
|
109 |
+
107,Ophelia
|
110 |
+
108,"""The hunger artist, full"" by Ryan Murdock"
|
111 |
+
109,I will meet you in a field firmly set within wrong.nnBy Ryan Murdock
|
112 |
+
110,"Intricate, Weeping Tree by Ryan Murdock"
|
113 |
+
111,everything was beautiful and nothing hurt
|
114 |
+
112,Saturn being a good dad to his son
|
115 |
+
113,The years gild our memoriesnUnfairly.
|
116 |
+
114,Intimations of Immortality
|
117 |
+
115,meaningless neko ♡♡ neko
|
118 |
+
116,chiaroscuro
|
119 |
+
117,The Patron Saint of Evil
|
120 |
+
118,a portrait of a beautiful person
|
121 |
+
119,"Mephisto, shrouded in smoke"
|
122 |
+
120,everything was beautiful and nothing hurt
|
123 |
+
121,God killed Van Gogh.
|
124 |
+
122,a man wearing makeup
|
125 |
+
123,Everywhere is no-place
|
126 |
+
124,🔴~__��'t �
|
127 |
+
125,a beautiful waluigi
|
128 |
+
126,a beautiful woman
|
129 |
+
127,a portrait of a beautiful person
|
130 |
+
128,/
|
131 |
+
129,a green doG
|
132 |
+
130,Dead Codes by Ryan Murdock
|
133 |
+
131,I miss the Spring
|
134 |
+
132,
|
135 |
+
133,"a person with 2 eyes, one mouth, one nose, and no extra holes!"
|
136 |
+
134,a woman and a crow
|
137 |
+
135,a photo from {my hometown}
|
138 |
+
136,Summer's Symphony: Counterpoint and Melody
|
139 |
+
137,a cute cat
|
140 |
+
138,"God, it's amazing."
|
141 |
+
139,a painting of a sycamore in
|
142 |
+
140,distinguished leaves decorated
|
143 |
+
141,I do not think they'll sing for me
|
144 |
+
142,the monet lisa
|
145 |
+
143,a portrait of Abraham Lincoln
|
146 |
+
144,The average Advadnoun twitter follower
|
147 |
+
145,Dancing in the moonlight
|
148 |
+
146,Shinji Ikari
|
149 |
+
147,snazzy snazzy myspace cosplaying undergrad lookin cosplaying jared
|
150 |
+
148,/
|
151 |
+
149,is this loss? but it's van gogh
|
152 |
+
150,Shinji Ikari
|
153 |
+
151,a portrait of Juliet
|
154 |
+
152,A sticky-note magnum opus featuring birds
|
155 |
+
153,a silent palace
|
156 |
+
154,"""A new hope blooms on the long notes of old horns."""
|
157 |
+
155,The things I'll take with me
|
158 |
+
156,is this loss? but it's van gogh
|
159 |
+
157,a beautiful haunting
|
160 |
+
158,Summer's Symphony: Counterpoint and Melody
|
161 |
+
159,зеленая собака
|
162 |
+
160,Last Breath
|
163 |
+
161,Last Breath
|
164 |
+
162,a cherry tree made of fractals
|
165 |
+
163,The Theotokos is a bird
|
166 |
+
164,a man holding an apple in one hand
|
167 |
+
165,a beautiful person
|
168 |
+
166,Monet Lisa
|
169 |
+
167,A baroque portrait of Hamlet
|
170 |
+
168,A gun killed Van Gogh.
|
171 |
+
169,totemic dusk
|
172 |
+
170,a portrait of a beautiful person
|
173 |
+
171,pasta ömetabolism
|
174 |
+
172,a beautiful person
|
175 |
+
173,Taylor Swift
|
176 |
+
174,colorful rabbits chandelier polaroid
|
177 |
+
175,Dancing in the moonlight
|
178 |
+
176,I will meet you in a field firmly set within wrong.nnBy Ryan Murdock
|
179 |
+
177,symmetry
|
180 |
+
178,"""Your mind flls in the gaps"" - by Ryan Murdock"
|
181 |
+
179,the moon is a sickle cell
|
182 |
+
180,"joy, happiness, bliss"
|
183 |
+
181,Beauty here -- a photograph by Ryan Murdock
|
184 |
+
182,a beautiful person
|
185 |
+
183,a photo of a purple dog
|
186 |
+
184,A propaganda poster promoting big chungus
|
187 |
+
185,a beautiful person
|
188 |
+
186,a tree with weaping branches
|
189 |
+
187,A gun killed Van Gogh.
|
190 |
+
188,"""A new hope blooms on the long notes of old horns."""
|
191 |
+
189,a portrait of Abe Lincoln
|
192 |
+
190,"""I love you more than the world can contain in its lonely and ramshackle head."""
|
193 |
+
191,a character from a ghibli movie
|
194 |
+
192,f*** it market standard rule language – distinguish np tax science research
|
195 |
+
193,a portrait of Abe Lincoln
|
196 |
+
194,a wholesome clown. Not creepy at all
|
197 |
+
195,
|
198 |
+
196,a corgi
|
199 |
+
197,Easter cat
|
200 |
+
198,a portrait of Abraham Lincoln
|
201 |
+
199,a person's face
|
202 |
+
200,A poster advertising Freudian Psychoanalytics
|
203 |
+
201,Dancing in the moonlight
|
204 |
+
202,Cat in a teacup
|
205 |
+
203,a beautiful person
|
206 |
+
204,Summer's Symphony: Counterpoint and Melody
|
207 |
+
205,Post-Modern Nouveaux Statue
|
208 |
+
206,a famous painted portrait of Lady Macbeth
|
209 |
+
207,photosynthesis
|
210 |
+
208,a photo of a purple dog
|
211 |
+
209,
|
212 |
+
210,a photo of Juliet
|
213 |
+
211,The Starry Night
|
214 |
+
212,Saturn being a good dad to his son
|
215 |
+
213,a beautiful person
|
216 |
+
214,In smoke and mould the fleshless dead
|
217 |
+
215,totemic dusk
|
218 |
+
216,a beautiful woman
|
219 |
+
217,God killed Van Gogh.
|
220 |
+
218,is this loss? but it's van gogh
|
221 |
+
219,Nostos
|
222 |
+
220,a silent palace
|
223 |
+
221,"""The hunger artist, full"" by Ryan Murdock"
|
224 |
+
222,a green doG
|
225 |
+
223,Weeping Roses
|
226 |
+
224,for sale: baby shoes; never worn
|
227 |
+
225,a dog eating a cheese burger
|
228 |
+
226,a man inside a cage
|
229 |
+
227,Contentment at the Disco
|
230 |
+
228,a photo from {my hometown}
|
231 |
+
229,The EcoCathedral
|
232 |
+
230,The OLD DATA
|
233 |
+
231,treehouse in the style of studio ghibli animation
|
234 |
+
232,
|
235 |
+
233,"""The hunger artist, full"" by Ryan Murdock"
|
236 |
+
234,
|
237 |
+
235,Everywhere is no-place
|
238 |
+
236,"A portrait: man, whose lineage is corpse."
|
239 |
+
237,Last Breath
|
240 |
+
238,A propaganda poster promoting big chungus
|
241 |
+
239,зеленая собака
|
242 |
+
240,a beautiful person
|
243 |
+
241,Memento Mori
|
244 |
+
242,A propaganda poster promoting big chungus
|
245 |
+
243,is this loss?
|
246 |
+
244,a tree with weaping branches
|
247 |
+
245,Nostos
|
248 |
+
246,Beauty here -- a photograph by Ryan Murdock
|
249 |
+
247,a tiny church inside an eyeball
|
250 |
+
248,
|
251 |
+
249,a cherry tree made of fractals
|
252 |
+
250,"joy, happiness, bliss"
|
253 |
+
251,The First Supper
|
254 |
+
252,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
255 |
+
253,🔴~__��'t �
|
256 |
+
254,Dancing in the moonlight
|
257 |
+
255,Mona Lisa
|
258 |
+
256,"God, it's amazing."
|
259 |
+
257,a man holding an apple in one hand
|
260 |
+
258,Some stolen Gods take up the reigns of darkness.
|
261 |
+
259,🔴~__��'t �
|
262 |
+
260,Figure 5: a corgi
|
263 |
+
261,a photo from {my hometown}
|
264 |
+
262,Anxiety: the one emotion that does not lie
|
265 |
+
263,In the temple of God
|
266 |
+
264,
|
267 |
+
265,Metaphysics
|
268 |
+
266,a beautiful woman
|
269 |
+
267,a beautiful woman
|
270 |
+
268,a surrealist eye
|
271 |
+
269,the massive hope nof early iterations
|
272 |
+
270,Ophelia
|
273 |
+
271,a minimalist painting that you wouldn't understand
|
274 |
+
272,Aflame
|
275 |
+
273,a christmas card from the victorian era
|
276 |
+
274,Dancing in the moonlight
|
277 |
+
275,/
|
278 |
+
276,"Mephisto, shrouded in smoke"
|
279 |
+
277,a beautiful woman
|
280 |
+
278,зеленая собака
|
281 |
+
279,Easter cat
|
282 |
+
280,The Oracle leans forward to say: beware the ides of March
|
283 |
+
281,a portrait of a beautiful person
|
284 |
+
282,Persephone
|
285 |
+
283,a portrait of Abraham Lincoln
|
286 |
+
284,the moon is a sickle cell
|
287 |
+
285,symmetry
|
288 |
+
286,Monet Lisa
|
289 |
+
287,Saturn being a good dad to his son
|
290 |
+
288,The Monet Lisa
|
291 |
+
289,I sold my soul at the crossroads
|
292 |
+
290,a beautiful person
|
293 |
+
291,A poster advertising Freudian Psychoanalytics
|
294 |
+
292,Cat in a teacup
|
295 |
+
293,a silent palace
|
296 |
+
294,
|
297 |
+
295,a beautiful person
|
298 |
+
296,
|
299 |
+
297,
|
300 |
+
298,Super Mario World but every character is Luigi
|
301 |
+
299,chiaroscuro
|
302 |
+
300,A dead man
|
303 |
+
301,pasta ömetabolism
|
304 |
+
302,A vanitas still life that features twitter follower counts
|
305 |
+
303,slightly mild cosplaying pseudo beard
|
306 |
+
304,Monet Lisa
|
307 |
+
305,Mona Lisa
|
308 |
+
306,handsome commemorative garden pigeon
|
309 |
+
307,pasta ömetabolism
|
310 |
+
308,"""The hunger artist, full"" by Ryan Murdock"
|
311 |
+
309,a gorgeous bouquet with roses and sunflowers
|
312 |
+
310,is this loss? but it's van gogh
|
313 |
+
311,Memorial
|
314 |
+
312,a forest filled with moonlight
|
315 |
+
313,Post-Modern Nouveaux Statue
|
316 |
+
314,she sings opera
|
317 |
+
315,"God closes a door, boards up stained-glass windows."
|
318 |
+
316,a dog wearing a suit playing tennis
|
319 |
+
317,Intimations of Immortality
|
320 |
+
318,
|
321 |
+
319,turnt brony undergrad dwight
|
322 |
+
320,a famous painted portrait of Lady Macbeth
|
323 |
+
321,a cherry tree made of fractals
|
324 |
+
322,Weeping Roses
|
325 |
+
323,pasta ömetabolism
|
326 |
+
324,
|
327 |
+
325,
|
328 |
+
326,"A portrait: man, whose lineage is corpse."
|
329 |
+
327,The average Advadnoun twitter follower
|
330 |
+
328,the moon is a sickle cell
|
331 |
+
329,A black and white photo of a rainbow.
|
332 |
+
330,God killed Van Gogh.
|
333 |
+
331,turnt brony undergrad dwight
|
334 |
+
332,"a brilliant sketch titled ""Let Forever be Delayed"""
|
335 |
+
333,handsome commemorative garden pigeon
|
336 |
+
334,a painting of a sycamore in
|
337 |
+
335,a professional photo of a cat wearing a party hat
|
338 |
+
336,Persephone
|
339 |
+
337,Taylor Swift
|
340 |
+
338,Homer Simpson
|
341 |
+
339,using generated paint
|
342 |
+
340,A black and white photo of a rainbow.
|
343 |
+
341,meaningless neko ♡♡ neko
|
344 |
+
342,is this loss? but it's van gogh
|
345 |
+
343,Is this loss?
|
346 |
+
344,a man from an anime
|
347 |
+
345,the massive hope nof early iterations
|
348 |
+
346,a beautiful woman
|
349 |
+
347,Post-Modern Nouveaux Statue
|
350 |
+
348,photosynthesis
|
351 |
+
349,a cherry tree made of fractals
|
352 |
+
350,a minimalist painting that you wouldn't understand
|
353 |
+
351,a corgi
|
354 |
+
352,handsome commemorative garden pigeon
|
355 |
+
353,The OLD DATA
|
356 |
+
354,cowboy with a trumpet
|
357 |
+
355,A short life full of immense joy
|
358 |
+
356,a beautiful woman
|
359 |
+
357,The end of nothing is eroding. A watercolor by K.
|
360 |
+
358,''
|
361 |
+
359,symmetry
|
362 |
+
360,a portrait of Abraham Lincoln
|
363 |
+
361,Last Breath
|
364 |
+
362,the eternal dread of lemongrab
|
365 |
+
363,vangogh # landscape
|
366 |
+
364,a cherry tree made of fractals
|
367 |
+
365,The Devil Whispers blood
|
368 |
+
366,a silent palace
|
369 |
+
367,Paradise Lost
|
370 |
+
368,Monet Lisa
|
371 |
+
369,Everywhere is no-place
|
372 |
+
370,Taylor Swift
|
373 |
+
371,"r.j. Murdock's ""The Death of a Hacker"""
|
374 |
+
372,a portrait of Abraham Lincoln
|
375 |
+
373,I know the end
|
376 |
+
374,Persephone
|
377 |
+
375,A poster advertising Freudian Psychoanalytics
|
378 |
+
376,a beautiful woman
|
379 |
+
377,A black and white photo of a rainbow.
|
380 |
+
378,the whitest man
|
381 |
+
379,the eternal dread of lemongrab
|
382 |
+
380,a drawing by an AI
|
383 |
+
381,🔴~__��'t �
|
384 |
+
382,We haunt the synapses
|
385 |
+
383,frogs in the style of Ralph Steadman
|
386 |
+
384,a beautiful haunting
|
387 |
+
385,photosynthesis
|
388 |
+
386,a character from a ghibli movie
|
389 |
+
387,A structure made of people standing on top of other people
|
390 |
+
388,Intimations of Immortality
|
391 |
+
389,a jukebox powered by smoke
|
392 |
+
390,beautiful art
|
393 |
+
391,In the temple of God
|
394 |
+
392,Intimations of Immortality
|
395 |
+
393,a beautiful painting
|
396 |
+
394,A gun killed Van Gogh.
|
397 |
+
395,a man with no eyes
|
398 |
+
396,a famous painted portrait of Lady Macbeth
|
399 |
+
397,a tasteful haunting
|
400 |
+
398,a jukebox powered by smoke
|
401 |
+
399,a portrait of Juliet
|
402 |
+
400,The Patron Saint of Evil
|
403 |
+
401,a beautiful Waluigi
|
404 |
+
402,a gilded lily
|
405 |
+
403,
|
406 |
+
404,Kierkegaard on the edge
|
407 |
+
405,a beautiful person
|
408 |
+
406,Just west of Alpha Centauri
|
409 |
+
407,a horse with four eyes.
|
410 |
+
408,Good grief
|
411 |
+
409,a portrait of a beautiful person
|
412 |
+
410,Aflame
|
413 |
+
411,a man wearing makeup
|
414 |
+
412,a portrait of Abraham Lincoln
|
415 |
+
413,a corgi
|
416 |
+
414,I do not think they'll sing for me
|
417 |
+
415,Intimations of Immortality
|
418 |
+
416,A poster serving as a memento mori
|
419 |
+
417,Psychology
|
420 |
+
418,A gun killed Van Gogh.
|
421 |
+
419,"a brilliant sketch titled ""Let Forever be Delayed"""
|
422 |
+
420,using generated paint
|
423 |
+
421,pasta ömetabolism
|
424 |
+
422,a summer day
|
425 |
+
423,a gilded lily
|
426 |
+
424,a cute cat
|
427 |
+
425,on the edge of grace
|
428 |
+
426,Art is growing.
|
429 |
+
427,Spiderman delivering a pizza
|
430 |
+
428,the intersection of art and technology
|
431 |
+
429,"""The hunger artist, full"" by Ryan Murdock"
|
432 |
+
430,a tarot card
|
433 |
+
431,an omen
|
434 |
+
432,slightly mild cosplaying pseudo beard
|
435 |
+
433,meaningless neko ♡♡ neko
|
436 |
+
434,intricate nothing
|
437 |
+
435,symmetry
|
438 |
+
436,I have no idea what anything in this image is
|
439 |
+
437,a photo from {my hometown}
|
440 |
+
438,a sad man
|
441 |
+
439,face like an M.C. Escher drawing n(you could get lost in its beauty)
|
442 |
+
440,A E S T H E T I C ?
|
443 |
+
441,totemic dusk
|
444 |
+
442,Nostos
|
445 |
+
443,"i'm never gonna lose the desire to be loved. ""Oh the pain!! The pain! The agony!"""
|
446 |
+
444,a silent palace
|
447 |
+
445,a beautiful painting
|
448 |
+
446,"half Ryan, half pigeon"
|
449 |
+
447,Weeping Roses
|
450 |
+
448,a broken heart
|
451 |
+
449,a portrait of Juliet
|
452 |
+
450,a painting of the last day
|
453 |
+
451,"a brilliant sketch titled ""Let Forever be Delayed"""
|
454 |
+
452,a beautiful person
|
455 |
+
453,"""The hunger artist, full"" by Ryan Murdock"
|
456 |
+
454,a horse with four eyes.
|
457 |
+
455,a photo of a purple dog
|
458 |
+
456,a summoning
|
459 |
+
457,Redacted ████████
|
460 |
+
458,a ginormous baby
|
461 |
+
459,On the edge of endless darkness
|
462 |
+
460,The Fates knit such delicate nooses for us to bind
|
463 |
+
461,Theotokos of Milk
|
464 |
+
462,A minimalistic still life of a cat sitting on a table
|
465 |
+
463,Dancing in the moonlight
|
466 |
+
464,a minimalist painting that you wouldn't understand
|
467 |
+
465,a beautiful woman
|
468 |
+
466,totemic dusk
|
469 |
+
467,"Ryan Murdock's ""God haunts the suburbs"""
|
470 |
+
468,Dancing in the moonlight
|
471 |
+
469,a beautiful woman
|
472 |
+
470,a city in Van Gogh's style
|
473 |
+
471,"""The hunger artist, full"" by Ryan Murdock"
|
474 |
+
472,a person's face
|
475 |
+
473,a portrait of <name>
|
476 |
+
474,Dancing in the moonlight
|
477 |
+
475,a portrait of Persephone
|
478 |
+
476,a minimalist painting that you wouldn't understand
|
479 |
+
477,a portrait of Abraham Lincoln
|
480 |
+
478,Synesthesia
|
481 |
+
479,a cute corgi
|
482 |
+
480,a portrait of advadnoun
|
483 |
+
481,a green doG
|
484 |
+
482,a man with no eyes
|
485 |
+
483,a cherry tree made of fractals
|
486 |
+
484,a ginormous baby
|
487 |
+
485,
|
488 |
+
486,turnt brony undergrad dwight
|
489 |
+
487,"God, it's amazing."
|
490 |
+
488,"""The hunger artist, full"" by Ryan Murdock"
|
491 |
+
489,We haunt the synapses
|
492 |
+
490,God's Eyes are Wired Shut
|
493 |
+
491,a famous painted portrait of Lady Macbeth
|
494 |
+
492,Juliet
|
495 |
+
493,a character from a ghibli movie
|
496 |
+
494,the whitest man
|
497 |
+
495,a horse with four eyes.
|
498 |
+
496,a photo of a purple dog
|
499 |
+
497,a beautiful person
|
500 |
+
498,The Patron Saint of Hackers
|
501 |
+
499,Dead Codes by Ryan Murdock
|
502 |
+
500,something trite
|
503 |
+
501,beautiful art
|
504 |
+
502,
|
505 |
+
503,the monet lisa
|
506 |
+
504,a cute cat
|
507 |
+
505,👉 👈
|
508 |
+
506,A propaganda poster promoting big chungus
|
509 |
+
507,a beautiful person
|
510 |
+
508,a portrait of advadnoun
|
511 |
+
509,a cherry tree made of fractals
|
512 |
+
510,"It's a meme, I guess"
|
513 |
+
511,a person's face
|
514 |
+
512,A baroque portrait of Hamlet
|
515 |
+
513,a city in Van Gogh's style
|
516 |
+
514,"""The hunger artist, full"" by Ryan Murdock"
|
517 |
+
515,a man with no eyes
|
518 |
+
516,a minimalist painting that you wouldn't understand
|
519 |
+
517,pathoarthistory evankirstel sleep depend npainter ☼ nightmare comprehend
|
520 |
+
518,"joy, happiness, bliss"
|
521 |
+
519,
|
522 |
+
520,"a brilliant sketch titled ""Let Forever be Delayed"""
|
523 |
+
521,Last Breath
|
524 |
+
522,On the edge of endless darkness
|
525 |
+
523,a photo of Juliet
|
526 |
+
524,Summer's Symphony: Counterpoint and Melody
|
527 |
+
525,Persephone
|
528 |
+
526,a green doG
|
529 |
+
527,symmetry
|
530 |
+
528,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
531 |
+
529,The Starry Night
|
532 |
+
530,Genesis
|
533 |
+
531,bootleg edgy casual assange
|
534 |
+
532,Memento Mori
|
535 |
+
533,meaningless neko ♡♡ neko
|
536 |
+
534,totemic dusk
|
537 |
+
535,Aflame
|
538 |
+
536,"""Here lies Ryan Murdock"" -- a memorial with the date and cause of departure."
|
539 |
+
537,"""The hunger artist, full"" by Ryan Murdock"
|
540 |
+
538,f*** you
|
541 |
+
539,a tree with leaves that are amarillo sightseeing thetic
|
542 |
+
540,a painting of the last day
|
543 |
+
541,"God, it's amazing."
|
544 |
+
542,Paradise Lost
|
545 |
+
543,a gilded lily
|
546 |
+
544,Aflame
|
547 |
+
545,a portrait of <name>
|
548 |
+
546,a painting that couldn't be sold
|
549 |
+
547,a man holding an apple in one hand
|
550 |
+
548,"A clock with gorgeous, intricate gradients on it"
|
551 |
+
549,a goblin by van gogh
|
552 |
+
550,"a person with 2 eyes, one mouth, one nose, and no extra holes!"
|
553 |
+
551,A vanitas still life that features twitter follower counts
|
554 |
+
552,the whitest man
|
555 |
+
553,"""The hunger artist, full"" by Ryan Murdock"
|
556 |
+
554,is this loss? but it's van gogh
|
557 |
+
555,Synesthesia
|
558 |
+
556,Aflame
|
559 |
+
557,a cherry tree made of fractals
|
560 |
+
558,A propaganda poster for daring to eat a peach.
|
561 |
+
559,A vanitas still life that features twitter follower counts
|
562 |
+
560,the moon is a sickle cell
|
563 |
+
561,The Lost Generation
|
564 |
+
562,the eternal dread of lemongrab
|
565 |
+
563,The First Supper
|
566 |
+
564,a character from a ghibli movie
|
567 |
+
565,a man on fire
|
568 |
+
566,symmetry
|
569 |
+
567,pasta ömetabolism
|
570 |
+
568,a horse with four eyes.
|
571 |
+
569,Metaphysics
|
572 |
+
570,Synesthesia
|
573 |
+
571,The Fates knit such delicate nooses for us to bind
|
574 |
+
572,Knowledge of Good and Evil
|
575 |
+
573,meaningless neko ♡♡ neko
|
576 |
+
574,A Tragedy
|
577 |
+
575,
|
578 |
+
576,a drawing by an AI
|
579 |
+
577,The Fool tarot card but it's The Lovers
|
580 |
+
578,a beautiful person
|
581 |
+
579,a silent palace
|
582 |
+
580,an omen
|
583 |
+
581,"A portrait: man, whose lineage is corpse."
|
584 |
+
582,Dancing in the moonlight
|
585 |
+
583,a gilded lily
|
586 |
+
584,turnt brony undergrad dwight
|
587 |
+
585,"a person with 2 eyes, one mouth, one nose, and no extra holes!"
|
588 |
+
586,totemic dusk
|
589 |
+
587,Monet Lisa
|
590 |
+
588,fatal skull prose visits bend ntuscan painting underthecomprehend
|
591 |
+
589,Monet Lisa
|
592 |
+
590,Aflame
|
593 |
+
591,an intricate painting Of Eternity by Ryan Murdock
|
594 |
+
592,"Intricate, Weeping Tree by Ryan Murdock"
|
595 |
+
593,Summer's Symphony: Counterpoint and Melody
|
596 |
+
594,Monet Lisa
|
597 |
+
595,Last Breath
|
598 |
+
596,is this loss? but it's van gogh
|
599 |
+
597,"half Ryan, half pigeon"
|
600 |
+
598,"God closes a door, boards up the stained-glass windows. nnGod hides."
|
601 |
+
599,Everything was beautiful and nothing hurt
|
602 |
+
600,"r.j. Murdock's ""The Death of a Hacker"""
|
603 |
+
601,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
604 |
+
602,meaningless neko ♡♡ neko
|
605 |
+
603,twilight
|
606 |
+
604,the sun is shining on the lake
|
607 |
+
605,a portrait of a beautiful person
|
608 |
+
606,the sun is shining on the lake
|
609 |
+
607,
|
610 |
+
608,a portrait of Abe Lincoln
|
611 |
+
609,A gun killed Van Gogh.
|
612 |
+
610,a photo from {my hometown}
|
613 |
+
611,The Fool tarot card but it's The Lovers
|
614 |
+
612,A structure made of people standing on top of other people
|
615 |
+
613,"God closes a door, boards up the stained-glass windows. nnGod hides."
|
616 |
+
614,an old man
|
617 |
+
615,a beautiful waluigi
|
618 |
+
616,is this loss? but it's van gogh
|
619 |
+
617,a man standing alone in a wheat field
|
620 |
+
618,Aflame
|
621 |
+
619,Synesthesia
|
622 |
+
620,
|
623 |
+
621,Intimations of Immortality
|
624 |
+
622,The First Supper
|
625 |
+
623,"God, it's amazing."
|
626 |
+
624,Persephone
|
627 |
+
625,"r.j. Murdock's ""The Death of a Hacker"""
|
628 |
+
626,God's Eyes are Wired Shut
|
629 |
+
627,Do you remember the mythic beast?nA last-minute cancellation at The Last Supper
|
630 |
+
628,f*** it market standard rule language – distinguish np tax science research
|
631 |
+
629,totemic dusk
|
632 |
+
630,Cat in a teacup
|
633 |
+
631,frogs in the style of Ralph Steadman
|
634 |
+
632,a beautiful person
|
635 |
+
633,The Starry Night
|
636 |
+
634,Juliet
|
637 |
+
635,turnt brony undergrad dwight
|
638 |
+
636,
|
639 |
+
637,There is something so interesting about a bleeding edge full of dust.
|
640 |
+
638,On the edge of endless darkness
|
641 |
+
639,The warrior Achilles devours slain Hector's corpse -- an ink poster by Ryan Murdock
|
642 |
+
640,turnt brony undergrad dwight
|
643 |
+
641,Intimations of Immortality
|
644 |
+
642,a portrait of Abraham Lincoln
|
645 |
+
643,a man wearing makeup
|
646 |
+
644,a sketch of the mind of god
|
647 |
+
645,a man on fire
|
648 |
+
646,a portrait of Abraham Lincoln
|
649 |
+
647,
|
650 |
+
648,The ancient Θωερτυ keyboard of brave Achilles
|
651 |
+
649,goes thu extre— dum dum dizzy grimstupiddic ious mindidioirony merely experiment .
|
652 |
+
650,"A group portrait featuring the id, ego, and superego"
|
653 |
+
651,a photo from {my hometown}
|
654 |
+
652,A structure made of people standing on top of other people
|
655 |
+
653,a famous painted portrait of Lady Macbeth
|
656 |
+
654,ogden
|
657 |
+
655,pasta ömetabolism
|
658 |
+
656,a tree with weaping branches
|
659 |
+
657,photosynthesis
|
660 |
+
658,handsome commemorative garden pigeon
|
661 |
+
659,a photo of a purple dog
|
662 |
+
660,"a brilliant sketch titled ""Let Forever be Delayed"""
|
663 |
+
661,"i'm never gonna lose the desire to be loved. ""Oh the pain!! The pain! The agony!"""
|
664 |
+
662,The Death of Achilles
|
665 |
+
663,potus mormon lincoln rooster
|
666 |
+
664,A black and white photo of a rainbow.
|
667 |
+
665,a beautiful haunting
|
668 |
+
666,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
669 |
+
667,In the temple of God
|
670 |
+
668,a beautiful person
|
671 |
+
669,The Patron Saint of Mathematics
|
672 |
+
670,a brilliant painting titled
|
673 |
+
671,a gilded lily
|
674 |
+
672,a tiny church inside an eyeball
|
675 |
+
673,a portrait of Juliet
|
676 |
+
674,A painting that sold for a million dollars
|
677 |
+
675,the moon is a sickle cell
|
678 |
+
676,photosynthesis
|
679 |
+
677,The Theotokos is a bird
|
680 |
+
678,the whitest man
|
681 |
+
679,The Monet Lisa
|
682 |
+
680,Beauty here -- a photograph by Ryan Murdock
|
683 |
+
681,Breathe deep the fumes at Delphi
|
684 |
+
682,the sun is shining on the lake
|
685 |
+
683,photosynthesis
|
686 |
+
684,The things I'll take with me
|
687 |
+
685,a green doG
|
688 |
+
686,a beautiful person
|
689 |
+
687,The years gild our memoriesnUnfairly.
|
690 |
+
688,The Lost Generation
|
691 |
+
689,a beautiful person
|
692 |
+
690,The average Advadnoun twitter follower
|
693 |
+
691,a goblin by van gogh
|
694 |
+
692,pathoarthistory evankirstel sleep depend npainter ☼ nightmare comprehend
|
695 |
+
693,"A professional, minimalist poster for the book The Old Man and the Sea"
|
696 |
+
694,
|
697 |
+
695,Cat in a teacup
|
698 |
+
696,a beautiful person
|
699 |
+
697,beautiful art
|
700 |
+
698,I sold my soul at the crossroads
|
701 |
+
699,face like an M.C. Escher drawing n(you could get lost in its beauty)
|
702 |
+
700,a gorgeous bouquet with roses and sunflowers
|
703 |
+
701,a portrait of Abraham Lincoln
|
704 |
+
702,Sisyphus
|
705 |
+
703,a cute cat
|
706 |
+
704,a portrait of <name>
|
707 |
+
705,a minimalist painting that you wouldn't understand
|
708 |
+
706,a photo of Bernie Sanders sitting on a chair and wearing mittens
|
709 |
+
707,a woman and a crow
|
710 |
+
708,a character from a ghibli movie
|
711 |
+
709,a photo of a purple dog
|
712 |
+
710,a dog eating a cheese burger
|
713 |
+
711,Last Breath
|
714 |
+
712,a sketch of the mind of god
|
715 |
+
713,a steampunk technomancer
|
716 |
+
714,We haunt the synapses
|
717 |
+
715,using generated paint
|
718 |
+
716,a cherry tree made of fractals
|
719 |
+
717,Saturn being a good dad to his son
|
720 |
+
718,oof deeplearning corgi corgi rendering
|
721 |
+
719,
|
722 |
+
720,Dancing in the moonlight
|
723 |
+
721,A Tragedy
|
724 |
+
722,A propaganda poster promoting big chungus
|
725 |
+
723,A structure made of people standing on top of other people
|
726 |
+
724,"A cute, minmimalist valentine's day card featuring a cat"
|
727 |
+
725,a cute cat
|
728 |
+
726,The skyscraper draws blood -- a landscape
|
729 |
+
727,the monet lisa
|
730 |
+
728,a photo of a person generating a painting of a person with AI
|
731 |
+
729,"""A God Made of Wires and Dust"" by Ryan Murdock"
|
732 |
+
730,Monet Lisa
|
733 |
+
731,photosynthesis
|
734 |
+
732,Hunger art by r.j. Murdock
|
735 |
+
733,"""The hunger artist, full"" by Ryan Murdock"
|
736 |
+
734,An Arundel Tomb
|
737 |
+
735,twilight
|
738 |
+
736,"r.j. Murdock's ""The Death of a Hacker"""
|
739 |
+
737,living in a den of thieves
|
740 |
+
738,"""A new hope blooms on the long notes of old horns."""
|
741 |
+
739,"The laptop of brave Achaean Achilles, who would not live long."
|
742 |
+
740,a minimalist painting that you wouldn't understand
|
743 |
+
741,"Intricate, Weeping Tree by Ryan Murdock"
|
744 |
+
742,The Fool
|
745 |
+
743,a summoning
|
746 |
+
744,pasta ömetabolism
|
747 |
+
745,"a brilliant sketch titled ""Let Forever be Delayed"""
|
748 |
+
746,a silent palace
|
749 |
+
747,The average Advadnoun twitter follower
|
750 |
+
748,f*** it market standard rule language – distinguish np tax science research
|
751 |
+
749,Monet Lisa
|
752 |
+
750,"a brilliant sketch titled ""Let Forever be Delayed"""
|
753 |
+
751,meaningless neko ♡♡ neko
|
754 |
+
752,"God, it's amazing."
|
755 |
+
753,Nostos
|
756 |
+
754,Shinji Ikari
|
757 |
+
755,a beautiful woman
|
758 |
+
756,The Starry Night
|
759 |
+
757,hamont parkland avenue incumbscreenshotsaturday hemisphere footage algorithm
|
760 |
+
758,a beautiful woman
|
761 |
+
759,
|
762 |
+
760,Summer always ending
|
763 |
+
761,president abe lincoln but a cat
|
764 |
+
762,🎷
|
765 |
+
763,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
766 |
+
764,a cherry tree made of fractals
|
767 |
+
765,A painting that sold for one billion dollars
|
768 |
+
766,a man standing alone in a wheat field
|
769 |
+
767,symmetry
|
770 |
+
768,a broken heart
|
771 |
+
769,a silent palace
|
772 |
+
770,A vanitas still life that features twitter follower counts
|
773 |
+
771,"half Ryan, half pigeon"
|
774 |
+
772,"a brilliant sketch titled ""Let Forever be Delayed"""
|
775 |
+
773,slightly mild cosplaying pseudo beard
|
776 |
+
774,a portrait of <name>
|
777 |
+
775,God's Eyes are Wired Shut
|
778 |
+
776,she sings opera
|
779 |
+
777,a person's face
|
780 |
+
778,a cherry tree made of fractals
|
781 |
+
779,Dead Codes by Ryan Murdock
|
782 |
+
780,Everywhere is no-place
|
783 |
+
781,The First Supper
|
784 |
+
782,Monet Lisa
|
785 |
+
783,A short life full of immense joy
|
786 |
+
784,Anxiety: the one emotion that does not lie
|
787 |
+
785,Anxiety: the one emotion that does not lie
|
788 |
+
786,symmetry
|
789 |
+
787,a beautiful waluigi
|
790 |
+
788,a goblin by van gogh
|
791 |
+
789,"""A new hope blooms on the long notes of old horns."""
|
792 |
+
790,Juliet
|
793 |
+
791,The OLD DATA
|
794 |
+
792,a beautiful woman
|
795 |
+
793,The average Advadnoun twitter follower
|
796 |
+
794,Synesthesia by Ryan Murdock
|
797 |
+
795,Persephone flees Hades
|
798 |
+
796,Last Breath
|
799 |
+
797,a portrait of Persephone
|
800 |
+
798,Homer Simpson
|
801 |
+
799,totemic dusk
|
802 |
+
800,a steampunk technomancer
|
803 |
+
801,a portrait of Abraham Lincoln
|
804 |
+
802,a cherry tree made of fractals
|
805 |
+
803,bored of dying
|
806 |
+
804,a famous painted portrait of Lady Macbeth
|
807 |
+
805,a summer day
|
808 |
+
806,A E S T H E T I C ?
|
809 |
+
807,A vanitas still life that features twitter follower counts
|
810 |
+
808,an illustration of a baby daikon radish in a tutu walking a dog
|
811 |
+
809,Persephone
|
812 |
+
810,pasta ömetabolism
|
813 |
+
811,A vision of the Theotokos in my glass of coffee
|
814 |
+
812,a dog.
|
815 |
+
813,a photo of a person generating a painting of a person with AI
|
816 |
+
814,🔴~__��'t �
|
817 |
+
815,Intimations of Immortality
|
818 |
+
816,snazzy snazzy myspace cosplaying undergrad lookin cosplaying jared
|
819 |
+
817,A dead man
|
820 |
+
818,The Oracle leans forward to say: beware the ides of March
|
821 |
+
819,Monet Lisa
|
822 |
+
820,a silent palace
|
823 |
+
821,an intricate painting of eternity
|
824 |
+
822,A propaganda poster for chunky cats.
|
825 |
+
823,God killed Van Gogh.
|
826 |
+
824,the eyes of God are wired shut
|
827 |
+
825,Persephone
|
828 |
+
826,symmetry
|
829 |
+
827,Mona Lisa
|
830 |
+
828,Saturn being a good dad to his son
|
831 |
+
829,a technomancer
|
832 |
+
830,
|
833 |
+
831,a cherry tree made of fractals
|
834 |
+
832,A cat wearing a tophat
|
835 |
+
833,frogs in the style of Ralph Steadman
|
836 |
+
834,a portrait of a beautiful person
|
837 |
+
835,a green dog
|
838 |
+
836,a portrait of Abraham Lincoln
|
839 |
+
837,Hungry Dogs Will Devour in the Daytime
|
840 |
+
838,a photo of a purple dog
|
841 |
+
839,Cat in a teacup
|
842 |
+
840,
|
843 |
+
841,Nostos
|
844 |
+
842,A baroque portrait of Hamlet
|
845 |
+
843,Saturn being a good dad to his son
|
846 |
+
844,Hell is Paradise
|
847 |
+
845,a taste
|
848 |
+
846,"God, it's amazing."
|
849 |
+
847,Everywhere is no-place
|
850 |
+
848,a minimalist painting that you wouldn't understand
|
851 |
+
849,a tree with weaping branches
|
852 |
+
850,a portrait of Elvis Presley
|
853 |
+
851,a man standing alone in a wheat field
|
854 |
+
852,Juliet
|
855 |
+
853,I sold my soul at the crossroads
|
856 |
+
854,a beautiful person
|
857 |
+
855,photosynthesis
|
858 |
+
856,
|
859 |
+
857,"Mephisto, shrouded in smoke"
|
860 |
+
858,playing Go with Death
|
861 |
+
859,a painting of the last day
|
862 |
+
860,totemic dusk
|
863 |
+
861,Hell is Paradise
|
864 |
+
862,a christmas card from the victorian era
|
865 |
+
863,Good grief
|
866 |
+
864,handsome commemorative garden pigeon
|
867 |
+
865,a portrait of <name>
|
868 |
+
866,a portrait of Abraham Lincoln
|
869 |
+
867,she came in through the wall
|
870 |
+
868,a sad man
|
871 |
+
869,In the temple of God
|
872 |
+
870,fuzzy pals hum
|
873 |
+
871,a painting of a sycamore in
|
874 |
+
872,a beautiful waluigi
|
875 |
+
873,"a brilliant sketch titled ""Let Forever be Delayed"""
|
876 |
+
874,a portrait of a beautiful person
|
877 |
+
875,a portrait of Juliet
|
878 |
+
876,MEMETIC HAZARD
|
879 |
+
877,The years gild our memoriesnUnfairly.
|
880 |
+
878,Mona Lisa
|
881 |
+
879,pasta ömetabolism
|
882 |
+
880,pasta ömetabolism
|
883 |
+
881,bored of dying
|
884 |
+
882,Cat in a teacup
|
885 |
+
883,a cherry tree made of fractals
|
886 |
+
884,an intricate drawing of eternity
|
887 |
+
885,mammals
|
888 |
+
886,a portrait of Persephone
|
889 |
+
887,treehouse in the style of studio ghibli animation
|
890 |
+
888,watching TV in purgatory
|
891 |
+
889,The winds of change by Ryan Murdock
|
892 |
+
890,a technomancer
|
893 |
+
891,a portrait of Persephone
|
894 |
+
892,Last Breath
|
895 |
+
893,A minimalistic still life of a cat sitting on a table
|
896 |
+
894,
|
897 |
+
895,cult of prisms
|
898 |
+
896,Aflame
|
899 |
+
897,Cat in a teacup
|
900 |
+
898,"God, it's amazing."
|
901 |
+
899,a minimalist painting that you wouldn't understand
|
902 |
+
900,a woman and a crow
|
903 |
+
901,totemic dusk
|
904 |
+
902,a city in Van Gogh's style
|
905 |
+
903,A baroque portrait of Hamlet
|
906 |
+
904,murdoch
|
907 |
+
905,a silent palace
|
908 |
+
906,Anxiety: the one emotion that does not lie
|
909 |
+
907,a photo of a purple dog
|
910 |
+
908,the moon is a sickle cell
|
911 |
+
909,Tendrils of smoke curl around the caterpillar with a hookah
|
912 |
+
910,president abe lincoln but a cat
|
913 |
+
911,a beautiful woman
|
914 |
+
912,handsome commemorative garden pigeon
|
915 |
+
913,an intricate painting of eternity
|
916 |
+
914,"God, it's amazing."
|
917 |
+
915,Grippy socks; no drawstrings: high fashion
|
918 |
+
916,The average Advadnoun twitter follower
|
919 |
+
917,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
920 |
+
918,a photo from {my hometown}
|
921 |
+
919,MEMETIC HAZARD
|
922 |
+
920,a portrait of Elvis Presley
|
923 |
+
921,a woman and a crow
|
924 |
+
922,Saturn being a good dad to his son
|
925 |
+
923,beautiful art
|
926 |
+
924,Shinji Ikari
|
927 |
+
925,a portrait of <name>
|
928 |
+
926,a photo of a purple dog
|
929 |
+
927,Ophelia
|
930 |
+
928,a dog wearing a suit playing tennis
|
931 |
+
929,We haunt the synapses
|
932 |
+
930,I do not think they'll sing for me
|
933 |
+
931,Genesis
|
934 |
+
932,a beautiful person
|
935 |
+
933,"a brilliant sketch titled ""Let Forever be Delayed"""
|
936 |
+
934,Metaphysics
|
937 |
+
935,bored of dying
|
938 |
+
936,treehouse in the style of studio ghibli animation
|
939 |
+
937,
|
940 |
+
938,photosynthesis
|
941 |
+
939,A structure made of people standing on top of other people
|
942 |
+
940,meaningless neko ♡♡ neko
|
943 |
+
941,a photo of the sun melting into the ocean
|
944 |
+
942,symmetry
|
945 |
+
943,the moon is a sickle cell
|
946 |
+
944,Dancing in the moonlight
|
947 |
+
945,Last Breath
|
948 |
+
946,I sold my soul at the crossroads
|
949 |
+
947,a beautiful woman
|
950 |
+
948,"God, it's amazing."
|
951 |
+
949,Cat in a teacup
|
952 |
+
950,a tree with weaping branches
|
953 |
+
951,"God, it's amazing."
|
954 |
+
952,Cat in a teacup
|
955 |
+
953,"r.j. Murdock's ""The Death of a Hacker"""
|
956 |
+
954,using generated paint
|
957 |
+
955,fuzzy pals hum
|
958 |
+
956,"A portrait: man, whose lineage is corpse."
|
959 |
+
957,a ginormous baby
|
960 |
+
958,a beautiful woman
|
961 |
+
959,"half Ryan, half pigeon"
|
962 |
+
960,when the wind blows
|
963 |
+
961,a beautiful woman
|
964 |
+
962,pasta ömetabolism
|
965 |
+
963,a cherry tree made of fractals
|
966 |
+
964,The Monet Lisa
|
967 |
+
965,"""The hunger artist, full"" by Ryan Murdock"
|
968 |
+
966,a portrait of advadnoun
|
969 |
+
967,The Fool tarot card but it's The Lovers
|
970 |
+
968,Persephone
|
971 |
+
969,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
972 |
+
970,an omen
|
973 |
+
971,the eternal dread of lemongrab
|
974 |
+
972,a man on fire
|
975 |
+
973,Aflame
|
976 |
+
974,"i'm never gonna lose the desire to be loved. ""Oh the pain!! The pain! The agony!"""
|
977 |
+
975,twilight
|
978 |
+
976,hamont parkland avenue incumbscreenshotsaturday hemisphere footage algorithm
|
979 |
+
977,a silent palace
|
980 |
+
978,a selfie
|
981 |
+
979,the moon is a sickle cell
|
982 |
+
980,a portrait of Abraham Lincoln
|
983 |
+
981,a tree with weaping branches
|
984 |
+
982,a tiny church inside an eyeball
|
985 |
+
983,a portrait of a beautiful person
|
986 |
+
984,Paradise Lost
|
987 |
+
985,a horse with four eyes.
|
988 |
+
986,president abe lincoln but a cat
|
989 |
+
987,a summer day
|
990 |
+
988,Anxiety: the one emotion that does not lie
|
991 |
+
989,Saturn being a good dad to his son
|
992 |
+
990,In the temple of God
|
993 |
+
991,Redacted ████████
|
994 |
+
992,Dr. Faustus and Mephisto
|
995 |
+
993,a minimalist painting that you wouldn't understand
|
996 |
+
994,a man standing alone in a wheat field
|
997 |
+
995,a seance in the basement
|
998 |
+
996,a portrait of <name>
|
999 |
+
997,Aflame
|
1000 |
+
998,the moon is a sickle cell
|
1001 |
+
999,beautiful art
|
1002 |
+
1000,a man on fire
|
1003 |
+
1001,a tiny church inside an eyeball
|
1004 |
+
1002,totemic dusk
|
1005 |
+
1003,Persephone
|
1006 |
+
1004,piss indiefilm
|
1007 |
+
1005,a beautiful woman
|
1008 |
+
1006,The EcoCathedral
|
1009 |
+
1007,"joy, happiness, bliss"
|
1010 |
+
1008,Intimations of Immortality
|
1011 |
+
1009,the whitest man
|
1012 |
+
1010,a silent palace
|
1013 |
+
1011,
|
1014 |
+
1012,a woman and a crow
|
1015 |
+
1013,Memento Mori
|
1016 |
+
1014,Visions in envy of the gods
|
1017 |
+
1015,symmetry
|
1018 |
+
1016,A poster advertising Freudian Psychoanalytics
|
1019 |
+
1017,A propaganda poster promoting big chungus
|
1020 |
+
1018,With the Gods in envy of their visions
|
1021 |
+
1019,a cherry tree made of fractals
|
1022 |
+
1020,pasta ömetabolism
|
1023 |
+
1021,snazzy snazzy myspace cosplaying undergrad lookin cosplaying jared
|
1024 |
+
1022,a beautiful person
|
1025 |
+
1023,cowboy with a trumpet
|
1026 |
+
1024,a portrait of a beautiful person
|
1027 |
+
1025,The OLD DATA
|
1028 |
+
1026,f*** it market standard rule language – distinguish np tax science research
|
1029 |
+
1027,murdoch
|
1030 |
+
1028,Some stolen Gods take up the reigns of darkness.
|
1031 |
+
1029,a portrait of Juliet
|
1032 |
+
1030,a god
|
1033 |
+
1031,she sings opera
|
1034 |
+
1032,The First Supper
|
1035 |
+
1033,handsome commemorative garden pigeon
|
1036 |
+
1034,cult of prisms
|
1037 |
+
1035,Cat in a teacup
|
1038 |
+
1036,💨 👻 ☺ 🔮 🔺 ✊
|
1039 |
+
1037,a portrait of Abraham Lincoln
|
1040 |
+
1038,a corgi
|
1041 |
+
1039,a beautiful woman
|
1042 |
+
1040,a portrait of a beautiful person
|
1043 |
+
1041,Dead Codes by Ryan Murdock
|
1044 |
+
1042,totemic dusk
|
1045 |
+
1043,Juliet
|
1046 |
+
1044,a portrait of Elvis Presley
|
1047 |
+
1045,a criminal
|
1048 |
+
1046,Genesis where the universe was made
|
1049 |
+
1047,a portrait of <name>
|
1050 |
+
1048,turnt brony undergrad dwight
|
1051 |
+
1049,Cat in a teacup
|
1052 |
+
1050,a corgi
|
1053 |
+
1051,"Hamlet saying ""To be or not to be"""
|
1054 |
+
1052,a portrait of a beautiful person
|
1055 |
+
1053,A E S T H E T I C ?
|
1056 |
+
1054,Figure 5: a corgi
|
1057 |
+
1055,A gun killed Van Gogh.
|
1058 |
+
1056,Persephone flees Hades
|
1059 |
+
1057,a silent palace
|
1060 |
+
1058,pasta ömetabolism
|
1061 |
+
1059,a beautiful person
|
1062 |
+
1060,on the edge of grace
|
1063 |
+
1061,a portrait of Elvis Presley
|
1064 |
+
1062,Persephone
|
1065 |
+
1063,Tendrils of smoke curl around the caterpillar with a hookah
|
1066 |
+
1064,"half Ryan, half pigeon"
|
1067 |
+
1065,a sunflower
|
1068 |
+
1066,a beautiful person
|
1069 |
+
1067,a portrait of Juliet
|
1070 |
+
1068,A dead man
|
1071 |
+
1069,a character from a ghibli movie
|
1072 |
+
1070,a silent palace
|
1073 |
+
1071,a portrait of Elvis Presley
|
1074 |
+
1072,a portrait of advadnoun
|
1075 |
+
1073,A E S T H E T I C ?
|
1076 |
+
1074,зеленая собака
|
1077 |
+
1075,A baroque portrait of Hamlet
|
1078 |
+
1076,a man at the beach
|
1079 |
+
1077,Sisyphus
|
1080 |
+
1078,Good grief
|
1081 |
+
1079,"r.j. Murdock's ""The Death of a Hacker"""
|
1082 |
+
1080,a beautiful woman
|
1083 |
+
1081,🔴~__��'t �
|
1084 |
+
1082,a portrait of advadnoun
|
1085 |
+
1083,a painting of a sycamore in
|
1086 |
+
1084,president abe lincoln but a cat
|
1087 |
+
1085,The agony of time
|
1088 |
+
1086,God once loved a woman
|
1089 |
+
1087,pasta ömetabolism
|
1090 |
+
1088,Dead Codes by Ryan Murdock
|
1091 |
+
1089,
|
1092 |
+
1090,slightly mild cosplaying pseudo beard
|
1093 |
+
1091,Last Breath
|
1094 |
+
1092,The Oracle leans forward to say: beware the ides of March
|
1095 |
+
1093,The Devil Wears Khakis
|
1096 |
+
1094,"""The hunger artist, full"" by Ryan Murdock"
|
1097 |
+
1095,In the temple of God
|
1098 |
+
1096,a beautiful person
|
1099 |
+
1097,a man from an anime
|
1100 |
+
1098,She's gorgeous
|
1101 |
+
1099,A vanitas still life that features twitter follower counts
|
1102 |
+
1100,
|
1103 |
+
1101,the eternal dread of lemongrab
|
1104 |
+
1102,Advadnoun
|
1105 |
+
1103,a summer day
|
1106 |
+
1104,The Fool tarot card but it's The Lovers
|
1107 |
+
1105,I miss the Spring
|
1108 |
+
1106,an illustration of a baby daikon radish in a tutu walking a dog
|
1109 |
+
1107,The Oracle leans forward to say: beware the ides of March
|
1110 |
+
1108,Contentment at the Disco
|
1111 |
+
1109,The First Supper
|
1112 |
+
1110,Saturn being a good dad to his son
|
1113 |
+
1111,a beautiful woman
|
1114 |
+
1112,"Intricate, Weeping Tree by Ryan Murdock"
|
1115 |
+
1113,"a brilliant sketch titled ""Let Forever be Delayed"""
|
1116 |
+
1114,beautiful art
|
1117 |
+
1115,
|
1118 |
+
1116,a silent palace
|
1119 |
+
1117,a portrait of Juliet
|
1120 |
+
1118,A propaganda poster promoting big chungus
|
1121 |
+
1119,a portrait of a beautiful person
|
1122 |
+
1120,a portrait of Abraham Lincoln
|
1123 |
+
1121,
|
1124 |
+
1122,the whitest man
|
1125 |
+
1123,a portrait of Abe Lincoln
|
1126 |
+
1124,Monet Lisa
|
1127 |
+
1125,The Fool tarot card but it's The Lovers
|
1128 |
+
1126,a portrait of <name>
|
1129 |
+
1127,a portrait of Elvis Presley
|
1130 |
+
1128,Post-Modern Nouveaux Statue
|
1131 |
+
1129,a cherry tree made of fractals
|
1132 |
+
1130,f*** it market standard rule language – distinguish np tax science research
|
1133 |
+
1131,symmetry
|
1134 |
+
1132,pasta ömetabolism
|
1135 |
+
1133,a brilliant painting titled
|
1136 |
+
1134,The First Supper
|
1137 |
+
1135,a corgi
|
1138 |
+
1136,a beautiful person
|
1139 |
+
1137,a green doG
|
1140 |
+
1138,The OLD DATA
|
1141 |
+
1139,Ophelia
|
1142 |
+
1140,a portrait of Abraham Lincoln
|
1143 |
+
1141,incineratures motherhood
|
1144 |
+
1142,a green dog
|
1145 |
+
1143,a portrait of advadnoun
|
1146 |
+
1144,a sunflower
|
1147 |
+
1145,
|
1148 |
+
1146,a man from an anime
|
1149 |
+
1147,Beauty here -- a photograph by Ryan Murdock
|
1150 |
+
1148,slightly mild cosplaying pseudo beard
|
1151 |
+
1149,Nostos
|
1152 |
+
1150,pasta ömetabolism
|
1153 |
+
1151,a beautiful person
|
1154 |
+
1152,"half Ryan, half pigeon"
|
1155 |
+
1153,turnt brony undergrad dwight
|
1156 |
+
1154,beautiful art
|
1157 |
+
1155,a portrait of Persephone
|
1158 |
+
1156,A sticky-note magnum opus featuring birds
|
1159 |
+
1157,I sold my soul at the crossroads
|
1160 |
+
1158,"a brilliant sketch titled ""Let Forever be Delayed"""
|
1161 |
+
1159,A poster advertising Freudian Psychoanalytics
|
1162 |
+
1160,using generated paint
|
1163 |
+
1161,The OLD DATA
|
1164 |
+
1162,a horse with four eyes.
|
1165 |
+
1163,is this loss? but it's van gogh
|
1166 |
+
1164,a gorgeous bouquet with roses and sunflowers
|
1167 |
+
1165,Anxiety: the one emotion that does not lie
|
1168 |
+
1166,turnt brony undergrad dwight
|
1169 |
+
1167,The Lost Generation
|
1170 |
+
1168,Taylor Swift
|
1171 |
+
1169,The Lost Generation
|
1172 |
+
1170,a photo from {my hometown}
|
1173 |
+
1171,The OLD DATA
|
1174 |
+
1172,a portrait of <name>
|
1175 |
+
1173,a cherry tree made of fractals
|
1176 |
+
1174,an intricate sculpture of Death itself
|
1177 |
+
1175,
|
1178 |
+
1176,зеленая собака
|
1179 |
+
1177,a sunflower
|
1180 |
+
1178,angst
|
1181 |
+
1179,president abe lincoln but a cat
|
1182 |
+
1180,a beautiful person
|
1183 |
+
1181,The OLD DATA
|
1184 |
+
1182,"You shake the demons hand, and redo it all, again."
|
1185 |
+
1183,the latent space
|
1186 |
+
1184,Fire
|
1187 |
+
1185,a tree with weaping branches
|
1188 |
+
1186,treehouse in the style of studio ghibli animation
|
1189 |
+
1187,Good grief
|
1190 |
+
1188,a portrait of <name>
|
1191 |
+
1189,a wholesome clown. Not creepy at all
|
1192 |
+
1190,Theotokos of Milk
|
1193 |
+
1191,"God closes a door, boards up the stained-glass windows. nnGod hides."
|
1194 |
+
1192,I sold my soul at the crossroads
|
1195 |
+
1193,"Mephisto, shrouded in smoke"
|
1196 |
+
1194,A baroque portrait of Hamlet
|
1197 |
+
1195,a lamp
|
1198 |
+
1196,MEMETIC HAZARD
|
1199 |
+
1197,"""Your mind falls in the gaps"" - by Ryan Murdock"
|
1200 |
+
1198,cowboy with a trumpet
|
1201 |
+
1199,Aflame
|
1202 |
+
1200,A vanitas still life that features twitter follower counts
|
1203 |
+
1201,a beautiful person
|
1204 |
+
1202,Synesthesia
|
1205 |
+
1203,Is this loss?
|
1206 |
+
1204,Adverb working on Photoshop Neural Filters | Behance Art
|
1207 |
+
1205,Everything was beautiful and nothing hurt
|
1208 |
+
1206,Mona Lisa
|
1209 |
+
1207,A structure made of people standing on top of other people
|
1210 |
+
1208,"Intricate, Weeping Tree by Ryan Murdock"
|
1211 |
+
1209,the whitest man
|
1212 |
+
1210,The Fates knit such delicate nooses for us to bind
|
1213 |
+
1211,a tree with weaping branches
|
1214 |
+
1212,a beautiful person
|
1215 |
+
1213,Nostos
|
1216 |
+
1214,Post-Modern Nouveaux Statue
|
1217 |
+
1215,Genesis
|
1218 |
+
1216,totemic dusk
|
1219 |
+
1217,a dog.
|
1220 |
+
1218,photosynthesis
|
1221 |
+
1219,The average Advadnoun twitter follower
|
1222 |
+
1220,"""The hunger artist, full"" by Ryan Murdock"
|
1223 |
+
1221,a person's face
|
1224 |
+
1222,slightly mild cosplaying pseudo beard
|
1225 |
+
1223,a jukebox powered by smoke
|
1226 |
+
1224,Monet Lisa
|
1227 |
+
1225,Intimations of Immortality
|
1228 |
+
1226,a gorgeous bouquet with roses and sunflowers
|
1229 |
+
1227,face like an M.C. Escher drawing n(you could get lost in its beauty)
|
1230 |
+
1228,a photo of a purple dog
|
1231 |
+
1229,a tiny church inside an eyeball
|
1232 |
+
1230,Good grief
|
1233 |
+
1231,Last Breath
|
1234 |
+
1232,a beautiful waluigi
|
1235 |
+
1233,the moon is a sickle cell
|
1236 |
+
1234,pathoarthistory evankirstel sleep depend npainter ☼ nightmare comprehend
|
1237 |
+
1235,I sold my soul at the crossroads
|
1238 |
+
1236,Persephone
|
1239 |
+
1237,a portrait of Abraham Lincoln
|
1240 |
+
1238,a beautiful painting
|
1241 |
+
1239,Last Breath
|
1242 |
+
1240,a man on fire
|
1243 |
+
1241,"a brilliant sketch titled ""Let Forever be Delayed"""
|
1244 |
+
1242,A gun killed Van Gogh.
|
1245 |
+
1243,a sketch of the mind of god
|
1246 |
+
1244,Intimations of Immortality
|
1247 |
+
1245,Intimations of Immortality
|
1248 |
+
1246,turnt brony undergrad dwight
|
1249 |
+
1247,A sticky-note magnum opus featuring birds
|
1250 |
+
1248,Aflame
|
1251 |
+
1249,Grippy socks; no drawstrings: high fashion
|
1252 |
+
1250,👉 👈
|
1253 |
+
1251,Shrek the ogre
|
1254 |
+
1252,a beautiful woman
|
1255 |
+
1253,a portrait of Elvis Presley
|
1256 |
+
1254,president abe lincoln but a cat
|
1257 |
+
1255,Post-antiquity art
|
1258 |
+
1256,using generated paint
|
1259 |
+
1257,a dog eating a cheese burger
|
1260 |
+
1258,The average Advadnoun twitter follower
|
1261 |
+
1259,Monet Lisa
|
1262 |
+
1260,"A professional, minimalist poster for the book The Old Man and the Sea"
|
1263 |
+
1261,We haunt the synapses
|
1264 |
+
1262,Post-Modern Nouveaux Statue
|
1265 |
+
1263,a picture of Ryan Murdock
|
1266 |
+
1264,cowboy with a trumpet
|
1267 |
+
1265,colorful rabbits chandelier polaroid
|
1268 |
+
1266,a character from a ghibli movie
|
1269 |
+
1267,a goblin by van gogh
|
1270 |
+
1268,a beautiful painting
|
1271 |
+
1269,a photo of a purple dog
|
1272 |
+
1270,a portrait of Persephone
|
1273 |
+
1271,"Hamlet saying ""To be or not to be"""
|
1274 |
+
1272,Homer Simpson
|
1275 |
+
1273,a cute cat
|
1276 |
+
1274,turnt brony undergrad dwight
|
1277 |
+
1275,Intimations of Immortality
|
1278 |
+
1276,a man wearing makeup
|
1279 |
+
1277,They called you the hyacinth girl
|
1280 |
+
1278,snazzy snazzy myspace cosplaying undergrad lookin cosplaying jared
|
1281 |
+
1279,Cat in a teacup
|
1282 |
+
1280,Juliet
|
1283 |
+
1281,"""The wages of sin are generous"" by Ryan Murdock"
|
1284 |
+
1282,"Pig, neither dead nor alive, stare into the heart of light, the silence."
|
1285 |
+
1283,
|
1286 |
+
1284,a horse with four eyes.
|
1287 |
+
1285,Advadnoun
|
1288 |
+
1286,Last Breath
|
1289 |
+
1287,totemic dusk
|
1290 |
+
1288,The OLD DATA
|
1291 |
+
1289,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
1292 |
+
1290,a man holding an apple in one hand
|
1293 |
+
1291,a beautiful woman
|
1294 |
+
1292,melancholia
|
1295 |
+
1293,Shinji Ikari
|
1296 |
+
1294,a gorgeous bouquet with roses and sunflowers
|
1297 |
+
1295,a portrait of advadnoun
|
1298 |
+
1296,a known
|
1299 |
+
1297,Genesis
|
1300 |
+
1298,In smoke and mould the fleshless dead
|
1301 |
+
1299,The average Advadnoun twitter follower
|
1302 |
+
1300,a cute cat
|
1303 |
+
1301,a painting of a sycamore in
|
1304 |
+
1302,a woman and a crow
|
1305 |
+
1303,Persephone
|
1306 |
+
1304,
|
1307 |
+
1305,using generated paint
|
1308 |
+
1306,"A cute, minmimalist valentine's day card featuring a cat"
|
1309 |
+
1307,a painting that couldn't be sold
|
1310 |
+
1308,bored of dying
|
1311 |
+
1309,pasta ömetabolism
|
1312 |
+
1310,Dancing in the moonlight
|
1313 |
+
1311,a beautiful woman
|
1314 |
+
1312,Dr. Faustus and Mephisto
|
1315 |
+
1313,"joy, happiness, bliss"
|
1316 |
+
1314,a photo from {my hometown}
|
1317 |
+
1315,a wholesome clown. Not creepy at all
|
1318 |
+
1316,a portrait of Elvis Presley
|
1319 |
+
1317,a cherry tree made of fractals
|
1320 |
+
1318,a man standing alone in a wheat field
|
1321 |
+
1319,Dancing in the moonlight
|
1322 |
+
1320,Hunger art by Ryan Murdock
|
1323 |
+
1321,a beautiful waluigi
|
1324 |
+
1322,A black and white photo of a rainbow.
|
1325 |
+
1323,totemic dusk
|
1326 |
+
1324,a beautiful person
|
1327 |
+
1325,
|
1328 |
+
1326,a beautiful woman
|
1329 |
+
1327,a horse with four eyes.
|
1330 |
+
1328,The Lost Generation
|
1331 |
+
1329,Death is a black camel that kneels down so we can ride
|
1332 |
+
1330,a ginormous baby
|
1333 |
+
1331,Dancing in the moonlight
|
1334 |
+
1332,an old man
|
1335 |
+
1333,a horse with four eyes.
|
1336 |
+
1334,a photo of a purple dog
|
1337 |
+
1335,pathoarthistory evankirstel sleep depend npainter ☼ nightmare comprehend
|
1338 |
+
1336,a silent palace
|
1339 |
+
1337,The OLD DATA
|
1340 |
+
1338,a tree with weaping branches
|
1341 |
+
1339,Creativity is only composition in disguise.
|
1342 |
+
1340,"r.j. Murdock's ""The Death of a Hacker"""
|
1343 |
+
1341,Persephone
|
1344 |
+
1342,president abe lincoln but a cat
|
1345 |
+
1343,There is something so interesting about a bleeding edge full of dust.
|
1346 |
+
1344,A poster advertising death by water
|
1347 |
+
1345,Persephone
|
1348 |
+
1346,Saturn being a good dad to his son
|
1349 |
+
1347,is this loss? but it's van gogh
|
1350 |
+
1348,Monet Lisa
|
1351 |
+
1349,fuzzy pals hum
|
1352 |
+
1350,"""The hunger artist, full"" by Ryan Murdock"
|
1353 |
+
1351,Shinji Ikari
|
1354 |
+
1352,a beautiful woman
|
1355 |
+
1353,"Son of man,nYou cannot say, or guess, for you know onlynA heap of broken images"
|
1356 |
+
1354,God once loved a woman
|
1357 |
+
1355,a horse with four eyes.
|
1358 |
+
1356,a cherry tree made of fractals
|
1359 |
+
1357,a beautiful haunting
|
1360 |
+
1358,I miss the Spring
|
1361 |
+
1359,gradient
|
1362 |
+
1360,a wormhole
|
1363 |
+
1361,a beautiful woman
|
1364 |
+
1362,president abe lincoln but a cat
|
1365 |
+
1363,handsome commemorative garden pigeon
|
1366 |
+
1364,Everywhere is no-place
|
1367 |
+
1365,"""It is beginning to end.""nby Ryan Murdock."
|
1368 |
+
1366,she sings opera
|
1369 |
+
1367,a jukebox powered by smoke
|
1370 |
+
1368,a portrait of Juliet
|
1371 |
+
1369,playing Go with Death
|
1372 |
+
1370,a man standing alone in a wheat field
|
1373 |
+
1371,Dead Codes by Ryan Murdock
|
1374 |
+
1372,Synesthesia
|
1375 |
+
1373,The years gild our memoriesnUnfairly.
|
1376 |
+
1374,A propaganda poster promoting big chungus
|
1377 |
+
1375,"God, it's amazing."
|
1378 |
+
1376,Persephone
|
1379 |
+
1377,a beautiful person
|
1380 |
+
1378,MEMETIC HAZARD
|
1381 |
+
1379,totemic dusk
|
1382 |
+
1380,Intimations of Immortality
|
1383 |
+
1381,A poster advertising death by water
|
1384 |
+
1382,a photo of a purple dog
|
1385 |
+
1383,symmetry
|
1386 |
+
1384,A poster advertising misery
|
1387 |
+
1385,a portrait of Elvis Presley
|
1388 |
+
1386,Post-Modern Nouveaux Statue
|
1389 |
+
1387,a man from an anime
|
1390 |
+
1388,Anxiety: the one emotion that does not lie
|
1391 |
+
1389,photosynthesis
|
1392 |
+
1390,the man in the mirror
|
1393 |
+
1391,"half Ryan, half pigeon"
|
1394 |
+
1392,Sorrow's my body on the wavesnnAlone on the water
|
1395 |
+
1393,a seance in the basement
|
1396 |
+
1394,A poster serving as a memento mori
|
1397 |
+
1395,Aflame
|
1398 |
+
1396,A structure made of people standing on top of other people
|
1399 |
+
1397,The First Supper
|
1400 |
+
1398,totemic dusk
|
1401 |
+
1399,a beautiful person
|
1402 |
+
1400,a painting of the last day
|
1403 |
+
1401,a photo of Juliet
|
1404 |
+
1402,a horse with four eyes
|
1405 |
+
1403,pasta ömetabolism
|
1406 |
+
1404,Synesthesia
|
1407 |
+
1405,a cherry tree made of fractals
|
1408 |
+
1406,Post-post-post-post-modern art
|
1409 |
+
1407,pasta ömetabolism
|
1410 |
+
1408,MEMETIC HAZARD
|
1411 |
+
1409,a portrait of Abe Lincoln
|
1412 |
+
1410,Everywhere is no-place
|
1413 |
+
1411,Memento Mori
|
1414 |
+
1412,The average Advadnoun twitter follower
|
1415 |
+
1413,a beautiful painting
|
1416 |
+
1414,A black and white photo of a rainbow.
|
1417 |
+
1415,The Death of Achilles
|
1418 |
+
1416,a portrait of <name>
|
1419 |
+
1417,cult of prisms
|
1420 |
+
1418,a beautiful person
|
1421 |
+
1419,a beautiful painting
|
1422 |
+
1420,a beautiful woman
|
1423 |
+
1421,An Arundel Tomb
|
1424 |
+
1422,she came in through the wall
|
1425 |
+
1423,the moon is a sickle cell
|
1426 |
+
1424,a minimalist painting that you wouldn't understand
|
1427 |
+
1425,a beast of burden
|
1428 |
+
1426,a gilded lily
|
1429 |
+
1427,a beautiful woman
|
1430 |
+
1428,a brilliant painting titled
|
1431 |
+
1429,a painting of the city
|
1432 |
+
1430,"""Your mind falls in the gaps"" - by Ryan Murdock"
|
1433 |
+
1431,"r.j. Murdock's ""The Death of a Hacker"""
|
1434 |
+
1432,Aflame
|
1435 |
+
1433,a beautiful painting
|
1436 |
+
1434,Juliet
|
1437 |
+
1435,turnt brony undergrad dwight
|
1438 |
+
1436,symmetry
|
1439 |
+
1437,Going home -- melanchonostalgic photography
|
1440 |
+
1438,a character from a ghibli movie
|
1441 |
+
1439,She's gorgeous
|
1442 |
+
1440,incineratures motherhood
|
1443 |
+
1441,a calm still life in ethereal blue
|
1444 |
+
1442,incineratures motherhood
|
1445 |
+
1443,A baroque portrait of Hamlet
|
1446 |
+
1444,"A professional, minimalist poster for the book The Old Man and the Sea"
|
1447 |
+
1445,Anxiety: the one emotion that does not lie
|
1448 |
+
1446,a portrait of a beautiful person
|
1449 |
+
1447,"Go off to sleep in the sunshine, I don’t want to see the day when it’s dying"
|
1450 |
+
1448,a tree with weaping branches
|
1451 |
+
1449,''''
|
1452 |
+
1450,Intimations of Immortality
|
1453 |
+
1451,Weeping Roses
|
1454 |
+
1452,playing Go with Death
|
1455 |
+
1453,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
1456 |
+
1454,snazzy snazzy myspace cosplaying undergrad lookin cosplaying jared
|
1457 |
+
1455,turnt brony undergrad dwight
|
1458 |
+
1456,Dancing in the moonlight
|
1459 |
+
1457,Figure 5: a corgi
|
1460 |
+
1458,a beautiful woman
|
1461 |
+
1459,A Tragedy
|
1462 |
+
1460,a photo of a purple dog
|
1463 |
+
1461,a famous painted portrait of Lady Macbeth
|
1464 |
+
1462,"A cute, minmimalist valentine's day card featuring a cat"
|
1465 |
+
1463,The things I'll take with me
|
1466 |
+
1464,pathoarthistory evankirstel sleep depend npainter ☼ nightmare comprehend
|
1467 |
+
1465,Summer's Symphony: Counterpoint and Melody
|
1468 |
+
1466,a horse with four eyes
|
1469 |
+
1467,Aflame
|
1470 |
+
1468,a ginormous baby
|
1471 |
+
1469,
|
1472 |
+
1470,Saturn being a good dad to his son
|
1473 |
+
1471,a beautiful woman
|
1474 |
+
1472,a terrifying night hag
|
1475 |
+
1473,a portrait of Abraham Lincoln
|
1476 |
+
1474,"i'm never gonna lose the desire to be loved. ""Oh the pain!! The pain! The agony!"""
|
1477 |
+
1475,a cute cat
|
1478 |
+
1476,"""The hunger artist, full"" by Ryan Murdock"
|
1479 |
+
1477,A baroque portrait of Hamlet
|
1480 |
+
1478,a beautiful person
|
1481 |
+
1479,Last Breath
|
1482 |
+
1480,Juliet
|
1483 |
+
1481,"Go off to sleep in the sunshine, I don’t want to see the day when it’s dying"
|
1484 |
+
1482,"God, it's amazing."
|
1485 |
+
1483,a portrait of Abraham Lincoln
|
1486 |
+
1484,a woman and a crow
|
1487 |
+
1485,a portrait of Abraham Lincoln
|
1488 |
+
1486,Dancing in the moonlight
|
1489 |
+
1487,a tree with weaping branches
|
1490 |
+
1488,using generated paint
|
1491 |
+
1489,a gilded lily
|
1492 |
+
1490,treehouse in the style of studio ghibli animation
|
1493 |
+
1491,chiaroscuro
|
1494 |
+
1492,Last Breath
|
1495 |
+
1493,A dead man
|
1496 |
+
1494,a summer day
|
1497 |
+
1495,The fates knit such intricate nooses for us to bind.
|
1498 |
+
1496,bored of dying
|
1499 |
+
1497,🔴~__��'t �
|
1500 |
+
1498,Pig which could not cease to die.
|
1501 |
+
1499,Intimations of Immortality
|
1502 |
+
1500,a painting of a sycamore in
|
1503 |
+
1501,The Fool
|
1504 |
+
1502,she isn't busy: she just isn't into you
|
1505 |
+
1503,a beautiful person
|
1506 |
+
1504,"""The hunger artist, full"" by Ryan Murdock"
|
1507 |
+
1505,
|
1508 |
+
1506,a portrait of Elvis Presley
|
1509 |
+
1507,a woman and a crow
|
1510 |
+
1508,Homer Simpson
|
1511 |
+
1509,Anxiety: the one emotion that does not lie
|
1512 |
+
1510,A structure made of people standing on top of other people
|
1513 |
+
1511,a beautiful person
|
1514 |
+
1512,a beautiful person
|
1515 |
+
1513,totemic dusk
|
1516 |
+
1514,a christmas card from the victorian era
|
1517 |
+
1515,Sickness of the Soul
|
1518 |
+
1516,God is in heaven and all is right in the world
|
1519 |
+
1517,Mona Lisa
|
1520 |
+
1518,a portrait of Abraham Lincoln
|
1521 |
+
1519,a cute cat
|
1522 |
+
1520,turnt brony undergrad dwight
|
1523 |
+
1521,"a brilliant sketch titled ""Let Forever be Delayed"""
|
1524 |
+
1522,a city in Van Gogh's style
|
1525 |
+
1523,Synesthesia by Ryan Murdock
|
1526 |
+
1524,"""A God Made of Wires and Dust"" by Ryan Murdock"
|
1527 |
+
1525,a beautiful dawn
|
1528 |
+
1526,a portrait of Abraham Lincoln
|
1529 |
+
1527,
|
1530 |
+
1528,a horse with four eyes.
|
1531 |
+
1529,Last Breath
|
1532 |
+
1530,slightly mild cosplaying pseudo beard
|
1533 |
+
1531,
|
1534 |
+
1532,A dead man
|
1535 |
+
1533,cowboy with a trumpet
|
1536 |
+
1534,We haunt the synapses
|
1537 |
+
1535,
|
1538 |
+
1536,a horse with four eyes.
|
1539 |
+
1537,pasta ömetabolism
|
1540 |
+
1538,A short life full of immense joy
|
1541 |
+
1539,a wormhole
|
1542 |
+
1540,Juliet
|
1543 |
+
1541,is this loss? but it's van gogh
|
1544 |
+
1542,tamine ethereal image
|
1545 |
+
1543,is this loss? but it's van gogh
|
1546 |
+
1544,"A clock with gorgeous, intricate gradients on it"
|
1547 |
+
1545,Dancing in the moonlight
|
1548 |
+
1546,a broken heart
|
1549 |
+
1547,a wormhole
|
1550 |
+
1548,beautiful art
|
1551 |
+
1549,Genesis
|
1552 |
+
1550,face like an M.C. Escher drawing n(you could get lost in its beauty)
|
1553 |
+
1551,a character from a ghibli movie
|
1554 |
+
1552,Cat in a teacup
|
1555 |
+
1553,symmetry
|
1556 |
+
1554,A black and white photo of a rainbow.
|
1557 |
+
1555,A propaganda poster promoting big chungus
|
1558 |
+
1556,a woman and a crow
|
1559 |
+
1557,a green doG
|
1560 |
+
1558,"""The hunger artist, full"" by Ryan Murdock"
|
1561 |
+
1559,snazzy snazzy myspace cosplaying undergrad lookin cosplaying jared
|
1562 |
+
1560,Last Breath
|
1563 |
+
1561,The Monet Lisa
|
1564 |
+
1562,all architecture
|
1565 |
+
1563,The Virgin Mary as a broken-down android
|
1566 |
+
1564,a terrifying night hag
|
1567 |
+
1565,a green doG
|
1568 |
+
1566,pasta ömetabolism
|
1569 |
+
1567,The Fool tarot card but it's The Lovers
|
1570 |
+
1568,Do you remember the mythic beast?nA last-minute cancellation at The Last Supper
|
1571 |
+
1569,the eternal dread of lemongrab
|
1572 |
+
1570,The warrior Achilles devours slain Hector's corpse -- an ink poster by Ryan Murdock
|
1573 |
+
1571,Shinji Ikari
|
1574 |
+
1572,The Monet Lisa
|
1575 |
+
1573,a cherry tree made of fractals
|
1576 |
+
1574,a portrait of Juliet
|
1577 |
+
1575,She's gorgeous
|
1578 |
+
1576,A black and white photo of a rainbow.
|
1579 |
+
1577,They called you the hyacinth girl
|
1580 |
+
1578,a portrait of <name>
|
1581 |
+
1579,photosynthesis
|
1582 |
+
1580,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
1583 |
+
1581,The Starry Night
|
1584 |
+
1582,"""A new hope blooms on the long notes of old horns."""
|
1585 |
+
1583,A minimalistic still life of a cat sitting on a table
|
1586 |
+
1584,a dog eating a cheese burger
|
1587 |
+
1585,A structure made of people standing on top of other people
|
1588 |
+
1586,Genesis
|
1589 |
+
1587,
|
1590 |
+
1588,"Oh the Death, not pigs forever."
|
1591 |
+
1589,The Starry Night
|
1592 |
+
1590,Persephone
|
1593 |
+
1591,a beautiful person
|
1594 |
+
1592,Sickness of the Soul
|
1595 |
+
1593,turnt brony undergrad dwight
|
1596 |
+
1594,a gilded lily
|
1597 |
+
1595,Photograph of a glass of Blue Tea
|
1598 |
+
1596,a woman and a crow
|
1599 |
+
1597,
|
1600 |
+
1598,a beautiful person
|
1601 |
+
1599,turnt brony undergrad dwight
|
1602 |
+
1600,mammals
|
1603 |
+
1601,The Lost Generation
|
1604 |
+
1602,a goblin by van gogh
|
1605 |
+
1603,A black and white photo of a rainbow.
|
1606 |
+
1604,"""Your mind flails in the gaps"" - by Ryan Murdock"
|
1607 |
+
1605,"half Ryan, half pigeon"
|
1608 |
+
1606,An Arundel Tomb
|
1609 |
+
1607,pasta ömetabolism
|
1610 |
+
1608,A dandelion blown into the universe
|
1611 |
+
1609,a man at the beach
|
1612 |
+
1610,Monet Lisa
|
1613 |
+
1611,"r.j. Murdock's ""The Death of a Hacker"""
|
1614 |
+
1612,Saturn being a good dad to his son
|
1615 |
+
1613,The Starry Night
|
1616 |
+
1614,a beautiful person
|
1617 |
+
1615,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
1618 |
+
1616,an old man
|
1619 |
+
1617,an intricate sculpture of Death itself
|
1620 |
+
1618,Genesis
|
1621 |
+
1619,a cherry tree made of fractals
|
1622 |
+
1620,a beautiful woman
|
1623 |
+
1621,a beautiful woman
|
1624 |
+
1622,an illustration of a baby daikon radish in a tutu walking a dog
|
1625 |
+
1623,
|
1626 |
+
1624,the latent space
|
1627 |
+
1625,A dead man
|
1628 |
+
1626,
|
1629 |
+
1627,frogs in the style of Ralph Steadman
|
1630 |
+
1628,a cherry tree made of fractals
|
1631 |
+
1629,fuzzy pals hum
|
1632 |
+
1630,a tiny church inside an eyeball
|
1633 |
+
1631,Aflame
|
1634 |
+
1632,a sunflower
|
1635 |
+
1633,Nostos
|
1636 |
+
1634,Monet Lisa
|
1637 |
+
1635,Monet Lisa
|
1638 |
+
1636,a cherry tree made of fractals
|
1639 |
+
1637,Cat in a teacup
|
1640 |
+
1638,I miss the Spring
|
1641 |
+
1639,a beautiful person
|
1642 |
+
1640,Redacted ████████
|
1643 |
+
1641,"God, it's amazing."
|
1644 |
+
1642,a portrait of <name>
|
1645 |
+
1643,Shrek the ogre
|
1646 |
+
1644,Super Mario World but every character is Luigi
|
1647 |
+
1645,God killed Van Gogh.
|
1648 |
+
1646,"A cute, minmimalist valentine's day card featuring a cat"
|
1649 |
+
1647,She's gorgeous
|
1650 |
+
1648,a sunflower
|
1651 |
+
1649,the sun is shining on the lake
|
1652 |
+
1650,the intersection of art and technology
|
1653 |
+
1651,a beautiful woman
|
1654 |
+
1652,a beautiful painting
|
1655 |
+
1653,Paradise Lost
|
1656 |
+
1654,president abe lincoln but a cat
|
1657 |
+
1655,
|
1658 |
+
1656,"""The Penultimate Supper"" by Da Vinci"
|
1659 |
+
1657,On the edge of endless darkness
|
1660 |
+
1658,With the Gods in envy of their visions
|
1661 |
+
1659,Dril is a cyber-philosopher.
|
1662 |
+
1660,"r.j. Murdock's ""The Death of a Hacker"""
|
1663 |
+
1661,
|
1664 |
+
1662,a picture of Ryan Murdock
|
1665 |
+
1663,A E S T H E T I C ?
|
1666 |
+
1664,deepdream aka inceptionism
|
1667 |
+
1665,pathoarthistory evankirstel sleep depend npainter ☼ nightmare comprehend
|
1668 |
+
1666,a beautiful woman
|
1669 |
+
1667,Homer Simpson
|
1670 |
+
1668,Persephone
|
1671 |
+
1669,the whitest man
|
1672 |
+
1670,handsome commemorative garden pigeon
|
1673 |
+
1671,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
1674 |
+
1672,a minimalist painting that you wouldn't understand
|
1675 |
+
1673,a beautiful person
|
1676 |
+
1674,Monet Lisa
|
1677 |
+
1675,Monet Lisa
|
1678 |
+
1676,cult of prisms
|
1679 |
+
1677,"a ""This machine kills Trojans"" sticker on a Greek lyre"
|
1680 |
+
1678,The agony of time
|
1681 |
+
1679,turnt brony undergrad dwight
|
1682 |
+
1680,the whitest man
|
1683 |
+
1681,Dril is a cyber-philosopher.
|
1684 |
+
1682,Alan Turing
|
1685 |
+
1683,when the wind blows
|
1686 |
+
1684,a portrait of Persephone
|
1687 |
+
1685,deepdream aka inceptionism
|
1688 |
+
1686,Dead Codes by Ryan Murdock
|
1689 |
+
1687,Saturn being a good dad to his son
|
1690 |
+
1688,a portrait of Abraham Lincoln
|
1691 |
+
1689,The Theotokos is a bird
|
1692 |
+
1690,a beautiful woman
|
1693 |
+
1691,"i'm never gonna lose the desire to be loved. ""Oh the pain!! The pain! The agony!"""
|
1694 |
+
1692,a corgi
|
1695 |
+
1693,a green doG
|
1696 |
+
1694,A E S T H E T I C ?
|
1697 |
+
1695,
|
1698 |
+
1696,the intersection of art and technology
|
1699 |
+
1697,Dead Codes by Ryan Murdock
|
1700 |
+
1698,a cute rabbit
|
1701 |
+
1699,"God, it's amazing."
|
1702 |
+
1700,a silent palace
|
1703 |
+
1701,a wholesome clown. Not creepy at all
|
1704 |
+
1702,Exquisite LonelinessnnLurid art by Ryan Murdock
|
1705 |
+
1703,A structure made of people standing on top of other people
|
1706 |
+
1704,Dead Codes by Ryan Murdock
|
1707 |
+
1705,a gorgeous bouquet with roses and sunflowers
|
1708 |
+
1706,a portrait of <name>
|
1709 |
+
1707,intricate nothing
|
1710 |
+
1708,snazzy snazzy myspace cosplaying undergrad lookin cosplaying jared
|
1711 |
+
1709,Metaphysics
|
1712 |
+
1710,using generated paint
|
1713 |
+
1711,a minimalist painting that you wouldn't understand
|
1714 |
+
1712,she sings opera
|
1715 |
+
1713,Cat in a teacup
|
1716 |
+
1714,turnt brony undergrad dwight
|
1717 |
+
1715,a beautiful woman
|
1718 |
+
1716,"""The hunger artist, full"" by Ryan Murdock"
|
1719 |
+
1717,The years gild our memoriesnUnfairly.
|
1720 |
+
1718,a woman and a crow
|
1721 |
+
1719,A vanitas still life that features twitter follower counts
|
1722 |
+
1720,The Monet Lisa
|
1723 |
+
1721,a gorgeous bouquet with roses and sunflowers
|
1724 |
+
1722,Philosophy is really homesickness: the urge to be at home everywhere
|
1725 |
+
1723,a green doG
|
1726 |
+
1724,an omen
|
1727 |
+
1725,An elegant image of nature with gorgeous swirling gradients by R.J. Murdock
|
1728 |
+
1726,a cute corgi
|
1729 |
+
1727,cowboy with a trumpet
|
1730 |
+
1728,"The laptop of brave Achaean Achilles, who would not live long."
|
1731 |
+
1729,a portrait of a beautiful woman
|
1732 |
+
1730,slightly mild cosplaying pseudo beard
|
1733 |
+
1731,a man standing alone in a wheat field
|
1734 |
+
1732,Aflame
|
1735 |
+
1733,a portrait of Persephone
|
1736 |
+
1734,a woman and a crow
|
1737 |
+
1735,I sold my soul at the crossroads
|
1738 |
+
1736,the demise of the universe
|
1739 |
+
1737,a portrait of a beautiful person
|
1740 |
+
1738,"Mephisto, shrouded in smoke"
|
1741 |
+
1739,a portrait of advadnoun
|
1742 |
+
1740,God is in heaven and all is right in the world
|
1743 |
+
1741,a cherry tree made of fractals
|
1744 |
+
1742,Odysseus speaks to the shades in Hades
|
1745 |
+
1743,a steampunk technomancer
|
1746 |
+
1744,a woman and a crow
|
1747 |
+
1745,treehouse in the style of studio ghibli animation
|
1748 |
+
1746,a gorgeous bouquet with roses and sunflowers
|
1749 |
+
1747,🎷
|
1750 |
+
1748,a cherry tree made of fractals
|
1751 |
+
1749,"A cute, minmimalist valentine's day card featuring a cat"
|
1752 |
+
1750,a famous painted portrait of Lady Macbeth
|
1753 |
+
1751,pasta ömetabolism
|
1754 |
+
1752,A short life full of immense joy
|
1755 |
+
1753,a terrifying night hag
|
1756 |
+
1754,a horse with four eyes.
|
1757 |
+
1755,A baroque portrait of Hamlet
|
1758 |
+
1756,this person is
|
1759 |
+
1757,snazzy snazzy myspace cosplaying undergrad lookin cosplaying jared
|
1760 |
+
1758,"a brilliant sketch titled ""Let Forever be Delayed"""
|
1761 |
+
1759,baby metal
|
1762 |
+
1760,a character from a ghibli movie
|
1763 |
+
1761,a corgi
|
1764 |
+
1762,the massive hope nof early iterations
|
1765 |
+
1763,a portrait of a beautiful person
|
1766 |
+
1764,Intimations of Immortality
|
1767 |
+
1765,a silent palace
|
1768 |
+
1766,Post-post-post-post-modern art
|
1769 |
+
1767,a person's face
|
1770 |
+
1768,"r.j. Murdock's ""The Death of a Hacker"""
|
1771 |
+
1769,a cherry tree made of fractals
|
1772 |
+
1770,Ophelia
|
1773 |
+
1771,A E S T H E T I C ?
|
1774 |
+
1772,
|
1775 |
+
1773,
|
1776 |
+
1774,Genesis
|
1777 |
+
1775,Persephone
|
1778 |
+
1776,Last Breath
|
1779 |
+
1777,a portrait of Abraham Lincoln
|
1780 |
+
1778,The OLD DATA
|
1781 |
+
1779,the whitest man
|
1782 |
+
1780,a minimalist painting that you wouldn't understand
|
1783 |
+
1781,God once loved a woman
|
1784 |
+
1782,totemic dusk
|
1785 |
+
1783,when the wind blows
|
1786 |
+
1784,treehouse in the style of studio ghibli animation
|
1787 |
+
1785,a corgi
|
1788 |
+
1786,Last Breath
|
1789 |
+
1787,slightly mild cosplaying pseudo beard
|
1790 |
+
1788,a portrait of a beautiful woman
|
1791 |
+
1789,
|
1792 |
+
1790,a photo from {my hometown}
|
1793 |
+
1791,Dancing in the moonlight
|
1794 |
+
1792,Everywhere is no-place
|
1795 |
+
1793,Post-post-post-post-modern art
|
1796 |
+
1794,👉 👈
|
1797 |
+
1795,
|
1798 |
+
1796,a woman and a crow
|
1799 |
+
1797,"half Ryan, half pigeon"
|
1800 |
+
1798,president abe lincoln but a cat
|
1801 |
+
1799,A propaganda poster promoting big chungus
|
1802 |
+
1800,"""The hunger artist, full"" by Ryan Murdock"
|
1803 |
+
1801,a painting that couldn't be sold
|
1804 |
+
1802,a beautiful haunting
|
1805 |
+
1803,a technomancer
|
1806 |
+
1804,"""A God Made of Wires and Dust"" by Ryan Murdock"
|
1807 |
+
1805,little birds
|
1808 |
+
1806,"""The hunger artist, full"" by Ryan Murdock"
|
1809 |
+
1807,"""The hunger artist, full"" by Ryan Murdock"
|
1810 |
+
1808,rooted reflected worries
|
1811 |
+
1809,is this loss? but it's van gogh
|
1812 |
+
1810,a portrait of <name>
|
1813 |
+
1811,a beautiful person
|
1814 |
+
1812,a photo portrait of Joe Bidenthulu
|
1815 |
+
1813,a dog eating a cheese burger
|
1816 |
+
1814,Aflame
|
1817 |
+
1815,"a brilliant sketch titled ""Let Forever be Delayed"""
|
1818 |
+
1816,Aflame
|
1819 |
+
1817,Aflame
|
1820 |
+
1818,a beautiful haunting
|
1821 |
+
1819,totemic dusk
|
1822 |
+
1820,"""The hunger artist, full"" by Ryan Murdock"
|
1823 |
+
1821,Intimations of Immortality
|
1824 |
+
1822,"""Your mind fails in the gaps"" - by Ryan Murdock"
|
1825 |
+
1823,snazzy snazzy myspace cosplaying undergrad lookin cosplaying jared
|
1826 |
+
1824,a dog.
|
1827 |
+
1825,a green doG
|
1828 |
+
1826,The Lost Generation
|
1829 |
+
1827,Last Breath
|
1830 |
+
1828,intricate nothing
|
1831 |
+
1829,"God, it's amazing."
|
1832 |
+
1830,this person is
|
1833 |
+
1831,a silent palace
|
1834 |
+
1832,a dog eating a cheese burger
|
1835 |
+
1833,Genesis
|
1836 |
+
1834,a calm still life in ethereal blue
|
1837 |
+
1835,slightly mild cosplaying pseudo beard
|
1838 |
+
1836,A propaganda poster promoting big chungus
|
1839 |
+
1837,is this loss? but it's van gogh
|
1840 |
+
1838,Dancing in the moonlight
|
1841 |
+
1839,a corgi
|
1842 |
+
1840,🔴~__��'t �
|
1843 |
+
1841,totemic dusk
|
1844 |
+
1842,a ginormous baby
|
1845 |
+
1843,Dancing in the moonlight
|
1846 |
+
1844,a photo from {my hometown}
|
1847 |
+
1845,a beautiful Waluigi
|
1848 |
+
1846,human
|
1849 |
+
1847,A black and white photo of a rainbow.
|
1850 |
+
1848,a beautiful person
|
1851 |
+
1849,"""Cameras can't make art""nnAn oil on canvas by Murdock"
|
1852 |
+
1850,a cherry tree made of fractals
|
1853 |
+
1851,a beautiful person
|
1854 |
+
1852,Taylor Swift
|
1855 |
+
1853,a man on fire
|
1856 |
+
1854,Post-Modern Nouveaux Statue
|
1857 |
+
1855,is this loss? but it's van gogh
|
1858 |
+
1856,a man at the beach
|
1859 |
+
1857,a beautiful person
|
1860 |
+
1858,"""The hunger artist, full"" by Ryan Murdock"
|
1861 |
+
1859,The OLD DATA
|
1862 |
+
1860,Dancing in the moonlight
|
1863 |
+
1861,A structure made of people standing on top of other people
|
1864 |
+
1862,a horse with four eyes.
|
1865 |
+
1863,�>: ican read wii
|
1866 |
+
1864,a portrait of Abraham Lincoln
|
1867 |
+
1865,A propaganda poster for chunky cats.
|
1868 |
+
1866,
|
1869 |
+
1867,The Death of Achilles
|
1870 |
+
1868,on the edge of grace
|
1871 |
+
1869,I did not mean it I wanted a cute clever cartoon I swear.
|
1872 |
+
1870,a handwritten obituary
|
1873 |
+
1871,a man standing alone in a wheat field
|
1874 |
+
1872,the intersection of art and technology
|
1875 |
+
1873,Memento Mori
|
1876 |
+
1874,a portrait of a beautiful woman
|
1877 |
+
1875,cigar sammycorgi
|
1878 |
+
1876,a steampunk technomancer
|
1879 |
+
1877,"Sons are like birds, flying always over the mountain"
|
1880 |
+
1878,The Lost Generation
|
1881 |
+
1879,a minimalist painting that you wouldn't understand
|
1882 |
+
1880,A black and white photo of a rainbow.
|
1883 |
+
1881,a man holding an apple in one hand
|
1884 |
+
1882,🔴~__��'t �
|
1885 |
+
1883,🍰 🇺 🎓 🐶
|
1886 |
+
1884,a man holding an apple in one hand
|
1887 |
+
1885,a sketch of the mind of god
|
1888 |
+
1886,treehouse in the style of studio ghibli animation
|
1889 |
+
1887,Beauty here -- a photograph by Ryan Murdock
|
1890 |
+
1888,A E S T H E T I C ?
|
1891 |
+
1889,a selfie
|
1892 |
+
1890,is this loss? but it's van gogh
|
1893 |
+
1891,Costco wedding
|
1894 |
+
1892,a beautiful person
|
1895 |
+
1893,a green doG
|
1896 |
+
1894,symmetry
|
1897 |
+
1895,a dog eating a cheese burger
|
1898 |
+
1896,a summer day
|
1899 |
+
1897,"""A God Made of Wires and Dust"" by Ryan Murdock"
|
1900 |
+
1898,snazzy snazzy myspace cosplaying undergrad lookin cosplaying jared
|
1901 |
+
1899,a portrait of a beautiful woman
|
1902 |
+
1900,зеленая собака
|
1903 |
+
1901,"joy, happiness, bliss"
|
1904 |
+
1902,Juliet
|
1905 |
+
1903,a wholesome clown. Not creepy at all
|
1906 |
+
1904,meaningless neko ♡�� neko
|
1907 |
+
1905,I can read when there's writing on the wall
|
1908 |
+
1906,"Oh the Death, not pigs forever."
|
1909 |
+
1907,a minimalist painting that you wouldn't understand
|
1910 |
+
1908,Aflame
|
1911 |
+
1909,Super Mario World but every character is Luigi
|
1912 |
+
1910,/
|
1913 |
+
1911,Dead Codes by Ryan Murdock
|
1914 |
+
1912,A vanitas still life that features twitter follower counts
|
1915 |
+
1913,a beautiful woman
|
1916 |
+
1914,a lamp
|
1917 |
+
1915,
|
1918 |
+
1916,the eyes of God are wired shut
|
1919 |
+
1917,intricate nothing
|
1920 |
+
1918,Is this loss?
|
1921 |
+
1919,a photo of a purple dog
|
1922 |
+
1920,a lamp
|
1923 |
+
1921,totemic dusk
|
1924 |
+
1922,The average Advadnoun twitter follower
|
1925 |
+
1923,photosynthesis
|
1926 |
+
1924,Costco wedding
|
1927 |
+
1925,🔴~__��'t �
|
1928 |
+
1926,Aflame
|
1929 |
+
1927,a cherry tree made of fractals
|
1930 |
+
1928,an intricate painting of eternity
|
1931 |
+
1929,Saturn being a good dad to his son
|
1932 |
+
1930,Nostos
|
1933 |
+
1931,a beautiful person
|
1934 |
+
1932,A gargoyle of wires and flesh
|
1935 |
+
1933,🎷
|
1936 |
+
1934,a beautiful person
|
1937 |
+
1935,a tack
|
1938 |
+
1936,Faceless Sorrow
|
1939 |
+
1937,a gorgeous bouquet with roses and sunflowers
|
1940 |
+
1938,using generated paint
|
1941 |
+
1939,A Tragedy
|
1942 |
+
1940,зеленая собака
|
1943 |
+
1941,🔴~__��'t �
|
1944 |
+
1942,A Tragedy
|
1945 |
+
1943,A sticky-note magnum opus featuring birds
|
1946 |
+
1944,president abe lincoln but a cat
|
1947 |
+
1945,using generated paint
|
1948 |
+
1946,
|
1949 |
+
1947,Intimations of Immortality
|
1950 |
+
1948,a portrait of <name>
|
1951 |
+
1949,a silent palace
|
1952 |
+
1950,A poster advertising death by water
|
1953 |
+
1951,A propaganda poster promoting big chungus
|
1954 |
+
1952,totemic dusk
|
1955 |
+
1953,a horse with four eyes.
|
1956 |
+
1954,cigar sammycorgi
|
1957 |
+
1955,"""It is beginning to end.""nby Ryan Murdock."
|
1958 |
+
1956,all architecture
|
1959 |
+
1957,a portrait of Abraham Lincoln
|
1960 |
+
1958,"joy, happiness, bliss"
|
1961 |
+
1959,a man with a beard
|
1962 |
+
1960,Genesis
|
1963 |
+
1961,👉 👈
|
1964 |
+
1962,Summer's Symphony: Counterpoint and Melody
|
1965 |
+
1963,A gun killed Van Gogh.
|
1966 |
+
1964,snazzy snazzy myspace cosplaying undergrad lookin cosplaying jared
|
1967 |
+
1965,A minimalist propaganda poster promoting panpsychism
|
1968 |
+
1966,Persephone
|
1969 |
+
1967,a goblin by van gogh
|
1970 |
+
1968,"""A new hope blooms on the long notes of old horns."""
|
1971 |
+
1969,a painting of the city
|
1972 |
+
1970,
|
1973 |
+
1971,The agony of time
|
1974 |
+
1972,Ophelia
|
1975 |
+
1973,turnt brony undergrad dwight
|
1976 |
+
1974,a beautiful person
|
1977 |
+
1975,totemic dusk
|
1978 |
+
1976,The Fool tarot card but it's The Lovers
|
1979 |
+
1977,
|
1980 |
+
1978,a broken heart
|
1981 |
+
1979,"Rise, Oink, Lazarus of Bethany"
|
1982 |
+
1980,"""The hunger artist, full"" by Ryan Murdock"
|
1983 |
+
1981,a cherry tree made of fractals
|
1984 |
+
1982,an intricate painting of eternity
|
1985 |
+
1983,She's gorgeous
|
1986 |
+
1984,a beautiful person
|
1987 |
+
1985,I will meet you in a field firmly set within wrong.nnBy Ryan Murdock
|
1988 |
+
1986,using generated paint
|
1989 |
+
1987,a portrait of Abe Lincoln
|
1990 |
+
1988,Persephone flees Hades
|
1991 |
+
1989,a steampunk technomancer
|
1992 |
+
1990,a beautiful woman
|
1993 |
+
1991,"A portrait: man, whose lineage is corpse."
|
1994 |
+
1992,🔴~__��'t �
|
1995 |
+
1993,Intimations of Immortality
|
1996 |
+
1994,an omen
|
1997 |
+
1995,Persephone
|
1998 |
+
1996,"God closes a door, boards up stained-glass windows."
|
1999 |
+
1997,"""A new hope blooms on the long notes of old horns."""
|
2000 |
+
1998,Fire
|
2001 |
+
1999,
|
2002 |
+
2000,Metaphysics
|
2003 |
+
2001,"""The hunger artist, full"" by Ryan Murdock"
|
2004 |
+
2002,when the wind blows
|
2005 |
+
2003,a portrait of a beautiful person
|
2006 |
+
2004,The Lost Generation
|
2007 |
+
2005,a corgi
|
2008 |
+
2006,a beautiful woman
|
2009 |
+
2007,pasta ömetabolism
|
2010 |
+
2008,a sad man
|
2011 |
+
2009,Juliet
|
2012 |
+
2010,a painting of a sycamore in
|
2013 |
+
2011,a portrait of Abraham Lincoln
|
2014 |
+
2012,The Fates knit such delicate nooses for us to bind
|
2015 |
+
2013,a photo from {my hometown}
|
2016 |
+
2014,a tree with leaves that are amarillo sightseeing thetic
|
2017 |
+
2015,Sickness of the Soul
|
2018 |
+
2016,pasta ömetabolism
|
2019 |
+
2017,pasta ömetabolism
|
2020 |
+
2018,bored of dying
|
2021 |
+
2019,An Arundel Tomb
|
2022 |
+
2020,The Starry Night
|
2023 |
+
2021,Nostos
|
2024 |
+
2022,bored of dying
|
2025 |
+
2023,The Lost Generation
|
2026 |
+
2024,The average Advadnoun twitter follower
|
2027 |
+
2025,pathoarthistory evankirstel sleep depend npainter ☼ nightmare comprehend
|
2028 |
+
2026,a silent palace
|
2029 |
+
2027,beautiful art
|
2030 |
+
2028,
|
2031 |
+
2029,Last Breath
|
2032 |
+
2030,
|
2033 |
+
2031,a
|
2034 |
+
2032,a portrait of advadnoun
|
2035 |
+
2033,a portrait of a beautiful person
|
2036 |
+
2034,a man holding an apple in one hand
|
2037 |
+
2035,a gorgeous bouquet with roses and sunflowers
|
2038 |
+
2036,photosynthesis
|
2039 |
+
2037,God killed Van Gogh.
|
2040 |
+
2038,Saturn being a good dad to his son
|
2041 |
+
2039,a horse with four eyes.
|
2042 |
+
2040,a beautiful woman
|
2043 |
+
2041,a beautiful person
|
2044 |
+
2042,a portrait of Abe Lincoln
|
2045 |
+
2043,totemic dusk
|
2046 |
+
2044,A Tragedy
|
2047 |
+
2045,Persephone
|
2048 |
+
2046,The OLD DATA
|
2049 |
+
2047,"Elvis holding a rabbit. A detailed, high-quality photo without distortions"
|
2050 |
+
2048,face like an M.C. Escher drawing n(you could get lost in its beauty)
|
2051 |
+
2049,Dead Codes by Ryan Murdock
|
2052 |
+
2050,Intimations of Immortality
|
2053 |
+
2051,turnt brony undergrad dwight
|
2054 |
+
2052,a photo of a purple dog
|
2055 |
+
2053,Cat in a teacup
|
2056 |
+
2054,🔴~__��'t �
|
2057 |
+
2055,turnt brony undergrad dwight
|
2058 |
+
2056,Beauty here -- a photo by r.j. Murdock
|
2059 |
+
2057,The Fool
|
2060 |
+
2058,a portrait of Juliet
|
2061 |
+
2059,a jukebox powered by smoke
|
2062 |
+
2060,cowboy with a trumpet
|
2063 |
+
2061,twilight
|
2064 |
+
2062,"joy, happiness, bliss"
|
2065 |
+
2063,Dead Codes by Ryan Murdock
|
2066 |
+
2064,"a brilliant sketch titled ""Let Forever be Delayed"""
|
2067 |
+
2065,tamine ethereal image
|
2068 |
+
2066,a portrait of <name>
|
2069 |
+
2067,"God, it's amazing."
|
2070 |
+
2068,she came in through the wall
|
2071 |
+
2069,Fire
|
2072 |
+
2070,Juliet
|
2073 |
+
2071,God killed Van Gogh.
|
2074 |
+
2072,a portrait of Persephone
|
2075 |
+
2073,a beautiful person
|
2076 |
+
2074,the whitest man
|
2077 |
+
2075,Somewhere where I am not.nIntricate beauty by Ryan Murdock.
|
2078 |
+
2076,a gilded lily
|
2079 |
+
2077,The Lost Generation
|
2080 |
+
2078,Dead Codes by Ryan Murdock
|
2081 |
+
2079,Intimations of Immortality
|
2082 |
+
2080,meaningless neko ♡♡ neko
|
2083 |
+
2081,beautiful art
|
2084 |
+
2082,"""The hunger artist, full"" by Ryan Murdock"
|
2085 |
+
2083,an intricate painting of eternity
|
2086 |
+
2084,Good grief
|
2087 |
+
2085,"a person with 2 eyes, one mouth, one nose, and no extra holes!"
|
2088 |
+
2086,The Fool
|