Food Desert commited on
Commit
2cd64de
·
0 Parent(s):

Initial Space

Browse files
.gitattributes ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
2
+ *.faiss filter=lfs diff=lfs merge=lfs -text
3
+ *.npy filter=lfs diff=lfs merge=lfs -text
app.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ from PIL import Image
4
+ from typing import Dict, Tuple
5
+
6
+ # 🔧 Your model lives here.
7
+ # Implement load() and predict(image) in model.py.
8
+ import model # noqa: F401
9
+
10
+ # --------- Glue code (kept intentionally tiny) ---------
11
+ def _format_outputs(scores: Dict[str, float], neighbors: list, threshold: float):
12
+ # sort by score desc and apply threshold
13
+ filtered = {k: v for k, v in sorted(scores.items(), key=lambda kv: kv[1], reverse=True) if v >= threshold}
14
+ tag_string = ", ".join(filtered.keys())
15
+ return tag_string, filtered, "\n".join(neighbors)
16
+
17
+ def infer(image: Image.Image, threshold: float):
18
+ if image is None:
19
+ return "", {}, ""
20
+
21
+ # model.predict now returns (scores_norm, neighbors, counts_raw)
22
+ scores, neighbors, counts = model.predict(image)
23
+
24
+ # Sort and threshold the display dict
25
+ sorted_scores = sorted(scores.items(), key=lambda kv: kv[1], reverse=True)
26
+ filtered = {k: float(v) for k, v in sorted_scores if v >= threshold}
27
+ tag_text = ", ".join(filtered.keys())
28
+
29
+ # Pretty-print neighbors. Each neighbor dict has:
30
+ # { "filename": str, "similarity": float, "distance": float, "styles": [str, ...] }
31
+ lines = []
32
+ for i, d in enumerate(neighbors, 1):
33
+ styles_str = ", ".join(d.get("styles", []))
34
+ sim = d.get("similarity", None)
35
+ dist = d.get("distance", None)
36
+ if sim is not None and dist is not None:
37
+ lines.append(f"{i}. {d['filename']} sim={sim:.3f} dist={dist:.3f} styles=[{styles_str}]")
38
+ else:
39
+ # (just in case similarity/distance are not present)
40
+ lines.append(f"{i}. {d['filename']} styles=[{styles_str}]")
41
+ neighbors_text = "\n".join(lines) if lines else "(neighbors unavailable)"
42
+
43
+ # Return three outputs: tag text, scores dict, and neighbors textbox text
44
+ return tag_text, filtered, neighbors_text
45
+
46
+
47
+ def clear_outputs():
48
+ return "", {}, ""
49
+
50
+
51
+ custom_css = '''
52
+ #image_container-image { width: 100%; aspect-ratio: 1 / 1; max-height: 100%; }
53
+ #image_container img { object-fit: contain !important; }
54
+ '''
55
+
56
+ with gr.Blocks(css=custom_css) as demo:
57
+ gr.Markdown("## Style Tagger — Skeleton (local dev first)")
58
+ with gr.Row():
59
+ with gr.Column():
60
+ image = gr.Image(label="Drop an image here", sources=["upload", "clipboard"], type="pil", show_label=False, elem_id="image_container")
61
+ with gr.Column():
62
+ threshold = gr.Slider(0.0, 1.0, value=0.01, step=0.01, label="Confidence threshold")
63
+ tag_text = gr.Textbox(label="Style tags (comma-separated)")
64
+ tag_scores = gr.Label(label="Scores", num_top_classes=250, show_label=False)
65
+ neighbors_text = gr.Textbox(label="Nearest training images", lines=8, interactive=False)
66
+
67
+ image.upload(fn=infer, inputs=[image, threshold], outputs=[tag_text, tag_scores, neighbors_text], show_progress="minimal")
68
+ image.clear(fn=clear_outputs, inputs=[], outputs=[tag_text, tag_scores, neighbors_text])
69
+ threshold.input(fn=infer, inputs=[image, threshold], outputs=[tag_text, tag_scores, neighbors_text], show_progress="hidden")
70
+ gr.Markdown("""
71
+ ---
72
+ ### Instructions
73
+ - Drop an image in the box on the left.
74
+ - Tags that are stylistically similar are returned, along with some statistics about them.
75
+ - I tried to isolate style from topic and was only partly successful. So many reported tags might be topically rather than stylistically similar.
76
+ """)
77
+
78
+
79
+ if __name__ == "__main__":
80
+ # Load your model once at start-up (optional; define as no-op in model.py for now)
81
+ try:
82
+ model.load()
83
+ except Exception as e:
84
+ print("Model load() raised (ok during skeleton dev):", e)
85
+ demo.launch()
model.py ADDED
@@ -0,0 +1,254 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Runtime model for the Style Tagger Space (nearest-neighbor over training set).
2
+
3
+ - Embeds query image with CLIP (use_fast=True for consistency).
4
+ - Projects with your trained StyleProjector.
5
+ - Looks up nearest neighbors in a retrieval bundle (FAISS if available).
6
+ - Tallies style tags from neighbors and returns {tag: score in [0,1]}.
7
+
8
+ Expected files next to app.py:
9
+ style_projector_and_topic_table.safetensors
10
+ style_topic_meta.json
11
+ style_vocab.json
12
+ retrieval_bundle/
13
+ ├─ vectors.faiss (optional but recommended)
14
+ ├─ tag_ids_concat.npy
15
+ ├─ tag_offsets.npy
16
+ └─ image_ids.npy (optional, for debugging)
17
+
18
+ Notes:
19
+ - If FAISS index is missing but you also ship vectors.npy (optional), we fall back to NumPy top‑K.
20
+ - If neither is present, we return a stable dummy output so UI stays responsive.
21
+ """
22
+
23
+ from __future__ import annotations
24
+ import os, json
25
+ from typing import Dict, List, Optional, Tuple
26
+
27
+ import numpy as np
28
+ from PIL import Image
29
+
30
+ import torch
31
+ import torch.nn as nn
32
+ from safetensors.torch import load_file as load_safetensors
33
+ from transformers import CLIPModel, CLIPProcessor
34
+
35
+ # Try FAISS (optional at runtime)
36
+ try:
37
+ import faiss # type: ignore
38
+ except Exception:
39
+ faiss = None
40
+
41
+ # -------------------
42
+ # Globals
43
+ # -------------------
44
+ _DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
45
+
46
+ _PROJECTOR: Optional[nn.Module] = None
47
+ _CLIP_MODEL: Optional[CLIPModel] = None
48
+ _CLIP_PROCESSOR: Optional[CLIPProcessor] = None
49
+ _VOCAB: Optional[List[str]] = None
50
+
51
+ # Retrieval bundle
52
+ _INDEX: Optional[object] = None # faiss index if available
53
+ _VEC_NP: Optional[np.ndarray] = None # fallback: raw vectors (optional file vectors.npy)
54
+ _TAGS_CONCAT: Optional[np.ndarray] = None
55
+ _TAGS_OFFSETS: Optional[np.ndarray] = None
56
+ _IMAGE_IDS: Optional[np.ndarray] = None # filenames aligned to index rows
57
+
58
+ _READY = False
59
+
60
+ # How many neighbors to tally by default
61
+ K_DEFAULT = int(os.getenv("STYLE_K", "30"))
62
+
63
+ # -------------------
64
+ # Model definition (matches training projector)
65
+ # -------------------
66
+ class StyleProjector(nn.Module):
67
+ def __init__(self, d_in: int, d_out: int, use_layer_norm: bool = True):
68
+ super().__init__()
69
+ blocks = [nn.Linear(d_in, 1024), nn.GELU()]
70
+ if use_layer_norm:
71
+ blocks.append(nn.LayerNorm(1024))
72
+ blocks += [nn.Dropout(0.0), nn.Linear(1024, d_out)]
73
+ self.net = nn.Sequential(*blocks)
74
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
75
+ z = self.net(x)
76
+ return nn.functional.normalize(z, dim=-1)
77
+
78
+ # -------------------
79
+ # Helpers
80
+ # -------------------
81
+
82
+ def _embed_image(image: Image.Image) -> torch.Tensor:
83
+ """CLIP-embed the (optionally cropped) image and L2-normalize to unit length."""
84
+ # Crop 1/8 top & bottom to match preprocessing, controlled via env var
85
+ if os.getenv("STYLE_CROP_TB", "1") not in ("0", "false", "False"):
86
+ w, h = image.size
87
+ dy = h // 8
88
+ if dy > 0:
89
+ image = image.crop((0, dy, w, h - dy))
90
+ inputs = _CLIP_PROCESSOR(images=[image.convert("RGB")], return_tensors="pt").to(_DEVICE)
91
+ with torch.no_grad():
92
+ feats = _CLIP_MODEL.get_image_features(**inputs)
93
+ feats = feats / feats.norm(dim=-1, keepdim=True)
94
+ return feats # [1, d_in]
95
+
96
+
97
+ def _load_retrieval_bundle(bundle_dir: str) -> None:
98
+ global _INDEX, _VEC_NP, _TAGS_CONCAT, _TAGS_OFFSETS, _IMAGE_IDS
99
+ # Required tag tables
100
+ _TAGS_CONCAT = np.load(os.path.join(bundle_dir, "tag_ids_concat.npy"))
101
+ _TAGS_OFFSETS = np.load(os.path.join(bundle_dir, "tag_offsets.npy"))
102
+
103
+ # Filenames (optional but recommended for diagnostics)
104
+ img_ids_path = os.path.join(bundle_dir, "image_ids.npy")
105
+ _IMAGE_IDS = np.load(img_ids_path) if os.path.exists(img_ids_path) else None
106
+
107
+ # Preferred: FAISS index
108
+ index_path = os.path.join(bundle_dir, "vectors.faiss")
109
+ if faiss is not None and os.path.exists(index_path):
110
+ _INDEX = faiss.read_index(index_path)
111
+ else:
112
+ _INDEX = None
113
+ # Optional fallback: raw vectors file if you ship it
114
+ vec_path = os.path.join(bundle_dir, "vectors.npy")
115
+ if os.path.exists(vec_path):
116
+ _VEC_NP = np.load(vec_path).astype(np.float32) # expected L2-normalized
117
+ else:
118
+ _VEC_NP = None
119
+
120
+
121
+ # -------------------
122
+ # Public API
123
+ # -------------------
124
+
125
+ def load():
126
+ """Load CLIP, projector weights, vocab, and retrieval bundle if present.
127
+ This function is tolerant: it will not raise if files are missing; _READY will stay False.
128
+ """
129
+ global _PROJECTOR, _CLIP_MODEL, _CLIP_PROCESSOR, _VOCAB, _READY
130
+ try:
131
+ # ---- Metadata ----
132
+ with open("style_topic_meta.json", "r", encoding="utf-8") as f:
133
+ meta = json.load(f)
134
+ proj_dim = int(meta["proj_dim"])
135
+ use_ln = bool(meta.get("use_layer_norm", True))
136
+
137
+ # ---- CLIP (use_fast=True for consistency; requires torchvision) ----
138
+ model_id = os.getenv("CLIP_MODEL_ID", "openai/clip-vit-base-patch32")
139
+ _CLIP_MODEL = CLIPModel.from_pretrained(model_id).to(_DEVICE)
140
+ _CLIP_PROCESSOR = CLIPProcessor.from_pretrained(model_id, use_fast=True)
141
+ _CLIP_MODEL.eval()
142
+
143
+ # ---- Projector ----
144
+ d_in = int(_CLIP_MODEL.config.projection_dim)
145
+ _PROJECTOR = StyleProjector(d_in, proj_dim, use_layer_norm=use_ln).to(_DEVICE)
146
+ tensors = load_safetensors("style_projector_and_topic_table.safetensors")
147
+ with torch.no_grad():
148
+ _PROJECTOR.net[0].weight.copy_(tensors["projector.net.0.weight"])
149
+ _PROJECTOR.net[0].bias.copy_(tensors["projector.net.0.bias"])
150
+ if use_ln:
151
+ _PROJECTOR.net[2].weight.copy_(tensors["projector.net.ln.weight"])
152
+ _PROJECTOR.net[2].bias.copy_(tensors["projector.net.ln.bias"])
153
+ last = _PROJECTOR.net[4]
154
+ else:
155
+ last = _PROJECTOR.net[3]
156
+ last.weight.copy_(tensors["projector.net.last.weight"])
157
+ last.bias.copy_(tensors["projector.net.last.bias"])
158
+ _PROJECTOR.eval()
159
+
160
+ # ---- Vocab ----
161
+ with open("style_vocab.json", "r", encoding="utf-8") as f:
162
+ _VOCAB = json.load(f)
163
+
164
+ # ---- Retrieval bundle (optional but recommended) ----
165
+ bundle_dir = os.getenv("RETRIEVAL_DIR", os.path.join(os.getcwd(), "retrieval_bundle"))
166
+ if os.path.isdir(bundle_dir):
167
+ _load_retrieval_bundle(bundle_dir)
168
+
169
+ _READY = True
170
+ except FileNotFoundError as e:
171
+ print("model.load(): missing file (skeleton mode)", e)
172
+ _READY = False
173
+
174
+
175
+ def predict(image: Image.Image, k: Optional[int] = None) -> Tuple[Dict[str, float], List[Dict[str, object]], Dict[str, int]]:
176
+ """Return (scores_norm, neighbors_detailed, counts_raw)
177
+
178
+ - scores_norm: {style_tag: score in [0,1]} (counts normalized by max count)
179
+ - neighbors_detailed: [{"filename": str, "similarity": float, "distance": float, "styles": [str, ...]}, ...]
180
+ - counts_raw: {style_tag: int} (exact tallies used to rank)
181
+ """
182
+ global _READY, _INDEX, _VEC_NP, _TAGS_CONCAT, _TAGS_OFFSETS, _VOCAB, _IMAGE_IDS
183
+
184
+ if not _READY or _VOCAB is None:
185
+ fallback = _VOCAB[:10] if _VOCAB else ["watercolor","oil painting","pixel art","sketch","digital painting"]
186
+ return ({tag: 0.0 for tag in fallback}, [], {tag: 0 for tag in fallback})
187
+
188
+ # 1) Embed + project query
189
+ with torch.no_grad():
190
+ q_clip = _embed_image(image) # [1, d_in]
191
+ q_proj = _PROJECTOR(q_clip).cpu().numpy()[0] # [d_proj], L2-normed
192
+
193
+ # 2) Nearest neighbors (and similarities)
194
+ K = k or K_DEFAULT
195
+ if _INDEX is not None and faiss is not None:
196
+ q = q_proj[np.newaxis, :].astype(np.float32)
197
+ D, I = _INDEX.search(q, K) # D: sims, I: indices
198
+ nbrs = I[0]
199
+ sims = D[0]
200
+ elif _VEC_NP is not None:
201
+ sims_all = _VEC_NP @ q_proj # cosine via dot, [N]
202
+ if K < sims_all.shape[0]:
203
+ idx = np.argpartition(-sims_all, K)[:K]
204
+ order = np.argsort(-sims_all[idx])
205
+ nbrs = idx[order]
206
+ sims = sims_all[nbrs]
207
+ else:
208
+ order = np.argsort(-sims_all)
209
+ nbrs = order[:K]
210
+ sims = sims_all[nbrs]
211
+ else:
212
+ # No retrieval table present
213
+ fallback = {tag: 0.0 for tag in _VOCAB[:10]}
214
+ return (fallback, [], {k: 0 for k in fallback})
215
+
216
+ # Build neighbor detail list with filenames, sims, distances, and neighbor styles
217
+ neighbors: List[Dict[str, object]] = []
218
+ for i, s in zip(nbrs, sims):
219
+ # neighbor styles from ragged arrays
220
+ start, end = int(_TAGS_OFFSETS[i]), int(_TAGS_OFFSETS[i + 1])
221
+ tag_ids_i = _TAGS_CONCAT[start:end]
222
+ styles_i = [_VOCAB[int(tid)] for tid in tag_ids_i] if len(tag_ids_i) > 0 else []
223
+ # filename (if available)
224
+ fname = str(_IMAGE_IDS[i]) if _IMAGE_IDS is not None else str(int(i))
225
+ neighbors.append({
226
+ "filename": fname,
227
+ "similarity": float(s),
228
+ "distance": float(1.0 - s), # cosine distance since vectors are L2-normalized
229
+ "styles": styles_i,
230
+ })
231
+
232
+ # 3) Tally neighbor style tags → counts_raw
233
+ if len(nbrs) == 0:
234
+ fallback = {tag: 0.0 for tag in _VOCAB[:10]}
235
+ return (fallback, neighbors, {k: 0 for k in fallback})
236
+
237
+ # concatenate tags across neighbors and bincount
238
+ tag_ids_all = np.concatenate([
239
+ _TAGS_CONCAT[int(_TAGS_OFFSETS[i]):int(_TAGS_OFFSETS[i + 1])] for i in nbrs
240
+ ]) if len(nbrs) else np.array([], dtype=np.int32)
241
+
242
+ counts = np.bincount(tag_ids_all, minlength=len(_VOCAB)) if tag_ids_all.size else np.zeros(len(_VOCAB), dtype=np.int64)
243
+ counts_raw: Dict[str, int] = { _VOCAB[i]: int(counts[i]) for i in np.nonzero(counts)[0] }
244
+
245
+ # 4) Normalize counts → scores_norm in [0,1]
246
+ maxc = float(counts.max()) if counts.size else 0.0
247
+ if maxc <= 0:
248
+ return ({tag: 0.0 for tag in _VOCAB[:10]}, neighbors, counts_raw)
249
+ scores = counts / maxc
250
+ scores_norm: Dict[str, float] = { _VOCAB[i]: float(scores[i]) for i in np.nonzero(counts)[0] }
251
+
252
+ return (scores_norm, neighbors, counts_raw)
253
+
254
+
requirements.txt ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ --extra-index-url https://download.pytorch.org/whl/cpu
2
+
3
+ gradio>=4.44.0
4
+ Pillow
5
+ safetensors
6
+ transformers
7
+ tqdm
8
+ faiss-cpu
9
+ torch==2.8.0+cpu
10
+ torchvision==0.23.0+cpu
retrieval_bundle/image_ids.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:14ad4a8ae2842bfdb0fbde83ca2bb46e277c814b294d4ed96b968a1b2715ca84
3
+ size 2614212
retrieval_bundle/tag_ids_concat.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bebe24450e788301ccf5b8d08c6d1aa79977b0e9851823e66a2eb96f09e46254
3
+ size 396632
retrieval_bundle/tag_offsets.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:df6c23b7150bf4d7b20c09840f266c35f6d8c69043e3fdc61d176cf637c3eff8
3
+ size 237776
retrieval_bundle/vectors.faiss ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dde2fcda00cf1caa715a4d2f907fc40c29e0924935d7b4fce632d2f34ca63030
3
+ size 121673773
style_projector_and_topic_table.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8c4aff6c97beb8656800ca1c137e332ffcc92e9a399786c0fbe1e33e3916a5ba
3
+ size 113541752
style_topic_meta.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "proj_dim": 512,
3
+ "use_layer_norm": true,
4
+ "k_ndcg": [
5
+ 5,
6
+ 10
7
+ ],
8
+ "lambda_start": 0.0,
9
+ "lambda_end": 0.12597425596299047,
10
+ "lambda_sched": "linear"
11
+ }
style_vocab.json ADDED
@@ -0,0 +1,912 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ "zackary911",
3
+ "r-mk",
4
+ "peritian",
5
+ "boosterpang",
6
+ "jollyjack",
7
+ "sefeiren",
8
+ "meandraco",
9
+ "sepiruth",
10
+ "toby_art",
11
+ "ancient_art",
12
+ "visionaryserpent",
13
+ "bernielover",
14
+ "tom_fischbach",
15
+ "inumatori",
16
+ "yaoifairy",
17
+ "parody",
18
+ "furlana",
19
+ "harmarist",
20
+ "winte",
21
+ "asthexiancal",
22
+ "smite_(artist)",
23
+ "nightfaux",
24
+ "pen_(artwork)",
25
+ "burgerkiss",
26
+ "bahnbahn",
27
+ "artdecade",
28
+ "mizzyam",
29
+ "araidian",
30
+ "anthroanim",
31
+ "cat-boots",
32
+ "plaga",
33
+ "selenophile",
34
+ "akkusky",
35
+ "yosshidoragon",
36
+ "kitfox-crimson",
37
+ "makarimorph",
38
+ "bigdad",
39
+ "demicoeur",
40
+ "commanderthings",
41
+ "difetra",
42
+ "takataka",
43
+ "glacierclear",
44
+ "yuguni",
45
+ "manika_nika",
46
+ "oystercatcher7",
47
+ "desertkaiju",
48
+ "blazethefox",
49
+ "carving",
50
+ "icon",
51
+ "dumdum",
52
+ "booponies",
53
+ "kame_3",
54
+ "reclamon",
55
+ "eyeofcalamity",
56
+ "ratcha",
57
+ "dangpa",
58
+ "munkeesgomu",
59
+ "reagan700",
60
+ "higsby",
61
+ "semi_(artist)",
62
+ "submarine_screw",
63
+ "shintatokoro",
64
+ "bravo",
65
+ "bleats",
66
+ "teathekook",
67
+ "glitter_trap_boy",
68
+ "ichduhernz",
69
+ "marsminer",
70
+ "danji-isthmus",
71
+ "sunibee",
72
+ "chimeracocks",
73
+ "dekomaru",
74
+ "torakuta",
75
+ "screwingwithsfm",
76
+ "electricsnowfox",
77
+ "bakuhaku",
78
+ "yaroul",
79
+ "merunyaa",
80
+ "sorafoxyteils",
81
+ "trevor-fox",
82
+ "trias",
83
+ "zaush",
84
+ "thecon",
85
+ "j5furry",
86
+ "bna_v5",
87
+ "rainbowscreen",
88
+ "foot_ninja15",
89
+ "dark_theme",
90
+ "gingy_k_fox",
91
+ "bigshow",
92
+ "dr.bug",
93
+ "tohupo",
94
+ "xilrayne",
95
+ "stargazer",
96
+ "ratte",
97
+ "bassybefuddle",
98
+ "white_crest_(artist)",
99
+ "nimzy",
100
+ "reysi",
101
+ "senimasan",
102
+ "robcivecat",
103
+ "doneru",
104
+ "type",
105
+ "aeolus06",
106
+ "the_weaver",
107
+ "daigaijin",
108
+ "re-sublimity-kun",
109
+ "wonderslug",
110
+ "nexcoyotlgt",
111
+ "kyleroo",
112
+ "ceehaz",
113
+ "hladilnik",
114
+ "rainbowsprinklesart",
115
+ "reilukah",
116
+ "kyotoleopard",
117
+ "pridark",
118
+ "thesecretcave",
119
+ "sincastermon",
120
+ "maldu",
121
+ "frenky_hw",
122
+ "marik_azemus34",
123
+ "elzzombie",
124
+ "crackers",
125
+ "lil_scooter56",
126
+ "e-01",
127
+ "zourik",
128
+ "bgn",
129
+ "tricksta",
130
+ "spelunker_sal",
131
+ "alradeck",
132
+ "dreiker",
133
+ "kacey",
134
+ "syuro",
135
+ "flat_colors",
136
+ "partially_colored",
137
+ "aaaninja",
138
+ "jooshy",
139
+ "superix",
140
+ "totesfleisch8",
141
+ "sarek_aran_desian",
142
+ "zerolativity",
143
+ "nicnak044",
144
+ "mastergodai",
145
+ "mellonsoda",
146
+ "sincrescent",
147
+ "marker_(artwork)",
148
+ "pandashorts",
149
+ "ezukapizumu",
150
+ "bobert",
151
+ "slickerwolf",
152
+ "96panda",
153
+ "wolfblade",
154
+ "moodyferret",
155
+ "pink_theme",
156
+ "lostgoose",
157
+ "eldiman",
158
+ "suirano",
159
+ "tegerio",
160
+ "dalwart",
161
+ "sicmop",
162
+ "quotefox",
163
+ "iztli",
164
+ "sidnithefox",
165
+ "yamatokuroko965",
166
+ "sollyz",
167
+ "semiitu",
168
+ "rinny",
169
+ "twistedscarlett60",
170
+ "jaeh",
171
+ "ber00",
172
+ "cev",
173
+ "jackalope_(artist)",
174
+ "suelix",
175
+ "momiji-kun",
176
+ "imanika",
177
+ "patrikthedog",
178
+ "outta_sync",
179
+ "skecchiart",
180
+ "slimefur",
181
+ "crystal-for-ever",
182
+ "kabula_(artist)",
183
+ "reign-2004",
184
+ "cornchip21",
185
+ "gnaw",
186
+ "abluedeer",
187
+ "rick_griffin",
188
+ "sparrow_(artist)",
189
+ "viskasunya",
190
+ "abstract",
191
+ "inverted_colors",
192
+ "cottontail",
193
+ "witchofavalon",
194
+ "detailed",
195
+ "angiewolf",
196
+ "kenket",
197
+ "ripli",
198
+ "ukent",
199
+ "spinal22",
200
+ "mintyspirit",
201
+ "urusee584",
202
+ "cobalt_snow",
203
+ "chowdie",
204
+ "grimart",
205
+ "thefuckingdevil",
206
+ "akiric",
207
+ "nurinaki",
208
+ "sssonic2",
209
+ "kemokin_mania",
210
+ "s2-freak",
211
+ "kammi-lu",
212
+ "surreal",
213
+ "darkluxia",
214
+ "rukis",
215
+ "lord_magicpants",
216
+ "rairai-no26-chu",
217
+ "feretta",
218
+ "komenuka_inaho",
219
+ "caribou_(artist)",
220
+ "mosa",
221
+ "elfein",
222
+ "plantpenetrator",
223
+ "quin-nsfw",
224
+ "cocolog",
225
+ "replica_(artist)",
226
+ "nekocrispy",
227
+ "vimhomeless",
228
+ "fuel_(artist)",
229
+ "truegrave9",
230
+ "eliana-asato",
231
+ "omny87",
232
+ "aogami",
233
+ "mamabliss",
234
+ "oselotti",
235
+ "toto_draw",
236
+ "rossciaco",
237
+ "hooves-art",
238
+ "sketch",
239
+ "ziggie13",
240
+ "lovespell",
241
+ "tolerain",
242
+ "kadath",
243
+ "riendonut",
244
+ "sculpture",
245
+ "missy_(artist)",
246
+ "redoxx",
247
+ "mifa",
248
+ "watsup",
249
+ "compfive",
250
+ "purple_yoshi_draws",
251
+ "manmosu_marimo",
252
+ "dark-moltres",
253
+ "eleacat",
254
+ "phenyanyanya",
255
+ "davidsanchan",
256
+ "negoya",
257
+ "youjomodoki",
258
+ "dream_and_nightmare",
259
+ "enrique849",
260
+ "limebreaker",
261
+ "korichi",
262
+ "simple_background",
263
+ "animatics",
264
+ "darkgem",
265
+ "parasitedeath",
266
+ "stemingbunbun",
267
+ "goshaag",
268
+ "tinygaypirate",
269
+ "ldr",
270
+ "roy_mccloud",
271
+ "digital_painting_(artwork)",
272
+ "lambent",
273
+ "sirjzau",
274
+ "longinius",
275
+ "f-r95",
276
+ "diadorin",
277
+ "red_theme",
278
+ "green_theme",
279
+ "misx",
280
+ "kihu",
281
+ "ajin",
282
+ "dimwitdog",
283
+ "photolol.03",
284
+ "tenshigarden",
285
+ "dagasi",
286
+ "nettsuu",
287
+ "mot",
288
+ "fir3born",
289
+ "kilinah",
290
+ "chalo",
291
+ "nana_gel",
292
+ "caroo",
293
+ "gammainks",
294
+ "john_joseco",
295
+ "hallogreen",
296
+ "realistic",
297
+ "nirvana3",
298
+ "wolfkidd",
299
+ "watercolor_(artwork)",
300
+ "concept_art",
301
+ "sqoon",
302
+ "pochincoff",
303
+ "jedayskayvoker",
304
+ "drxii",
305
+ "dbaru",
306
+ "azuma_minatsu",
307
+ "caliluminos",
308
+ "hyilpi",
309
+ "chloe-dog",
310
+ "line_art",
311
+ "nr_ac",
312
+ "jakethegoat",
313
+ "soul-silver-dragon",
314
+ "nikkyvix",
315
+ "backlash91",
316
+ "halcy0n",
317
+ "notbad621",
318
+ "nauth",
319
+ "fleurfurr",
320
+ "lonbluewolf",
321
+ "ro",
322
+ "azaleesh",
323
+ "w4g4",
324
+ "gillpanda",
325
+ "inkyfrog",
326
+ "silfoe",
327
+ "ill_dingo",
328
+ "dithering",
329
+ "lavilovi",
330
+ "chochi",
331
+ "bacn",
332
+ "lichfang",
333
+ "alacarte",
334
+ "goopyarts",
335
+ "colored_pencil_(artwork)",
336
+ "funkybun",
337
+ "james_howard",
338
+ "trinity-fate62",
339
+ "solterv",
340
+ "trout_(artist)",
341
+ "predaguy",
342
+ "freckles_(artist)",
343
+ "mcsweezy",
344
+ "twang",
345
+ "badgerben",
346
+ "zeiro",
347
+ "lollipopcon",
348
+ "marthedog",
349
+ "anti_dev",
350
+ "atrolux",
351
+ "dramamine",
352
+ "theblueberrycarrots",
353
+ "9x9",
354
+ "tsampikos",
355
+ "mustachemutt",
356
+ "katahane3",
357
+ "komdog",
358
+ "dragk",
359
+ "inuzu",
360
+ "inno-sjoa",
361
+ "felino",
362
+ "kitsune_youkai",
363
+ "spirale",
364
+ "vipery-07",
365
+ "patto",
366
+ "bonk",
367
+ "brown_theme",
368
+ "wolfy-nail",
369
+ "crovirus",
370
+ "lazysnout",
371
+ "sprockeyart",
372
+ "diacordst",
373
+ "enigi09",
374
+ "seth-iova",
375
+ "dibujosv12",
376
+ "berseepon09",
377
+ "dankodeadzone",
378
+ "koul",
379
+ "fluff-kevlar",
380
+ "third-party_edit",
381
+ "s-nina",
382
+ "gyrotech",
383
+ "jhenightfox",
384
+ "photography_(artwork)",
385
+ "jamesfoxbr",
386
+ "boo3",
387
+ "photorealism",
388
+ "spazman",
389
+ "itsunknownanon",
390
+ "soft_shading",
391
+ "geekidog",
392
+ "flashw",
393
+ "lockworkorange",
394
+ "cumlord",
395
+ "themefinland",
396
+ "huskii-s",
397
+ "os",
398
+ "twinkle-sez",
399
+ "jumperbear",
400
+ "wolfeed",
401
+ "lotusgarden",
402
+ "aennor",
403
+ "todex",
404
+ "fenrir_lunaris",
405
+ "incase",
406
+ "sailoranna",
407
+ "seven_(artist)",
408
+ "toony",
409
+ "angstrom",
410
+ "stunnerpony",
411
+ "paeonypetals",
412
+ "smitty_g",
413
+ "roly",
414
+ "pace-maker",
415
+ "bright_colors",
416
+ "vdisco",
417
+ "soulcentinel",
418
+ "pache_riggs",
419
+ "tinydevilhorns",
420
+ "milkytiger1145",
421
+ "vorusuarts",
422
+ "kekitopu",
423
+ "marjani",
424
+ "quanjiang",
425
+ "fuf",
426
+ "psy101",
427
+ "omesore",
428
+ "karno",
429
+ "yogoat",
430
+ "lumineko",
431
+ "carniscorner",
432
+ "senthaurekmern",
433
+ "paperclip_(artist)",
434
+ "haychel",
435
+ "dracojeff",
436
+ "hinar_miler",
437
+ "kaboozle",
438
+ "yakovlev-vad",
439
+ "arh",
440
+ "shinigamisquirrel",
441
+ "gllorvillain",
442
+ "vu06",
443
+ "toradoshi",
444
+ "peculiart",
445
+ "maririn",
446
+ "miso_souperstar",
447
+ "saltyxodium",
448
+ "dryadex",
449
+ "camychan",
450
+ "hungothenomster",
451
+ "kuttoyaki",
452
+ "falvie",
453
+ "cyancapsule",
454
+ "jcosneverexisted",
455
+ "kaboozey",
456
+ "pizademokttero",
457
+ "doxy",
458
+ "3d_(artwork)",
459
+ "purple_theme",
460
+ "mykegreywolf",
461
+ "sindoll",
462
+ "marblesoda",
463
+ "marlon.cores",
464
+ "dipingxiangtr.d",
465
+ "frumples",
466
+ "avoid_posting",
467
+ "amberpendant",
468
+ "darkmirage",
469
+ "screentone",
470
+ "marauder6272",
471
+ "kittydee",
472
+ "droll3",
473
+ "theboogie",
474
+ "inuhoshi-to-darkpen",
475
+ "seamen",
476
+ "posexe",
477
+ "discordthege",
478
+ "nobby_(artist)",
479
+ "rymherdier",
480
+ "skully",
481
+ "dakkawoof",
482
+ "wyntersun",
483
+ "jrvanesbroek",
484
+ "pia-sama",
485
+ "black-kitten",
486
+ "honovy",
487
+ "claweddrip",
488
+ "traditional_media_(artwork)",
489
+ "lizardlars",
490
+ "digitoxici",
491
+ "colored_line_art",
492
+ "warm_colors",
493
+ "snoiifoxxo",
494
+ "iskra",
495
+ "latiar",
496
+ "ozoneserpent",
497
+ "yawg",
498
+ "ravoilie",
499
+ "winick-lim",
500
+ "arania",
501
+ "erunroe",
502
+ "tailzkim",
503
+ "pearlyiridescence",
504
+ "jerro",
505
+ "ventkazemaru",
506
+ "shikaro",
507
+ "chrisandcompany",
508
+ "scappo",
509
+ "gimka",
510
+ "zp92",
511
+ "dacad",
512
+ "metal_(artist)",
513
+ "littlesheep",
514
+ "latex_(artist)",
515
+ "colored_sketch",
516
+ "kick_(artist)",
517
+ "oposa",
518
+ "inuki",
519
+ "lustylamb",
520
+ "chibi",
521
+ "imperatorcaesar",
522
+ "lysergide",
523
+ "rrowdybeast",
524
+ "keishinkae",
525
+ "ritts",
526
+ "blitzdrachin",
527
+ "kakuteki11029",
528
+ "danaume",
529
+ "anaugi",
530
+ "lunalei",
531
+ "sigenoya",
532
+ "iggi",
533
+ "dhx2kartz",
534
+ "kitchiki",
535
+ "solid_color",
536
+ "formal_art",
537
+ "ayaka",
538
+ "kanel",
539
+ "thewyvernsweaver",
540
+ "jerseydevil",
541
+ "zer0rebel4",
542
+ "dark_colors",
543
+ "general-irrelevant",
544
+ "walter_sache",
545
+ "detailed_background",
546
+ "toshi_(artist)",
547
+ "shane_frost",
548
+ "wingedwilly",
549
+ "kandlin",
550
+ "oekaki",
551
+ "kosian",
552
+ "voidlesky",
553
+ "furryratchet",
554
+ "style_wager",
555
+ "pururing",
556
+ "ota_(artist)",
557
+ "cotton_(artist)",
558
+ "chromapan",
559
+ "denizen1414",
560
+ "inspired_by_formal_art",
561
+ "dedoarts",
562
+ "tatu_wani_(artist)",
563
+ "animancer",
564
+ "skipsy",
565
+ "jailbird",
566
+ "macop",
567
+ "joaoppereiraus",
568
+ "willitfit",
569
+ "sundown_(artist)",
570
+ "lightsource",
571
+ "spot_color",
572
+ "corrsk",
573
+ "restricted_palette",
574
+ "carrot_(artist)",
575
+ "kiwa_flowcat",
576
+ "grey_theme",
577
+ "ymbk",
578
+ "creatiffy",
579
+ "ankk",
580
+ "weskers",
581
+ "pdxyz",
582
+ "eric_schwartz",
583
+ "araivis-edelveys",
584
+ "an-tonio",
585
+ "zzvinniezz",
586
+ "teckworks",
587
+ "tehbuttercookie",
588
+ "aoizuri",
589
+ "orange_theme",
590
+ "ratatooey",
591
+ "renthedragon",
592
+ "backsash",
593
+ "tokifuji",
594
+ "harnny",
595
+ "kemono",
596
+ "hioshiru",
597
+ "keadonger",
598
+ "mytigertail",
599
+ "magnificent-arsehole",
600
+ "wittless-pilgrim",
601
+ "neurodyne",
602
+ "mleonheart",
603
+ "anibaruthecat",
604
+ "asnnonaka",
605
+ "sylvanedadeer",
606
+ "revadiehard",
607
+ "slugbox",
608
+ "quillu",
609
+ "badlandsdrws",
610
+ "el-loko",
611
+ "kevinsano",
612
+ "sake_kemosalmon",
613
+ "gewitter",
614
+ "averyshadydolphin",
615
+ "viroveteruscy",
616
+ "style_parody",
617
+ "dirtyscoundrel",
618
+ "zwitterkitsune",
619
+ "conditional_dnp",
620
+ "joelasko",
621
+ "skeleion",
622
+ "malicekira",
623
+ "avante92",
624
+ "itoruna",
625
+ "simonaquarius",
626
+ "crayon_(artwork)",
627
+ "coffeechicken",
628
+ "marenlicious",
629
+ "conrie",
630
+ "iriedono",
631
+ "riorix",
632
+ "lyme-slyme",
633
+ "neksu",
634
+ "delta.dynamics",
635
+ "kristiana_puff",
636
+ "katie_hofgard",
637
+ "demien",
638
+ "dancrescentwolf",
639
+ "kenno_arkkan",
640
+ "karabiner",
641
+ "zooshi",
642
+ "kami-chan",
643
+ "pastel_(artwork)",
644
+ "nauyaco",
645
+ "thebigbadwolf01",
646
+ "matemi",
647
+ "badumsquish",
648
+ "cooliehigh",
649
+ "zummeng",
650
+ "bikupan",
651
+ "cheezayballz",
652
+ "gorsha_pendragon",
653
+ "prsmrti",
654
+ "atryl",
655
+ "kazuhiro",
656
+ "kingofacesx",
657
+ "domovoi_lazaroth",
658
+ "glopossum",
659
+ "slashysmiley",
660
+ "flynx-flink",
661
+ "seyrmo",
662
+ "superbunnygt",
663
+ "ifus",
664
+ "tattoorexy",
665
+ "jinti_(artist)",
666
+ "punkypanda",
667
+ "aka6",
668
+ "mofuaki",
669
+ "tai_l_rodriguez",
670
+ "hitsuji",
671
+ "synnfultiger",
672
+ "still_life",
673
+ "jinu",
674
+ "no_swift",
675
+ "neko-me",
676
+ "thejoyfuldragon",
677
+ "cel_shading",
678
+ "haps",
679
+ "aimi",
680
+ "skidd",
681
+ "unknown_artist",
682
+ "thekinkybear",
683
+ "mixed_media",
684
+ "greasymojo",
685
+ "matospectoru",
686
+ "kimacats",
687
+ "max_blackrabbit",
688
+ "band1tnsfw",
689
+ "neotheta",
690
+ "ultilix",
691
+ "unfinished",
692
+ "valsalia",
693
+ "mr-shin",
694
+ "aer0_zer0",
695
+ "blues64",
696
+ "cotora",
697
+ "t0l0k",
698
+ "nexus",
699
+ "diesel_wiesel",
700
+ "lineless",
701
+ "kredri",
702
+ "cownugget",
703
+ "starfighter",
704
+ "painting_(artwork)",
705
+ "redishdragie",
706
+ "melianah",
707
+ "pasaran",
708
+ "notkastar",
709
+ "tetsushi",
710
+ "domibun",
711
+ "frist44",
712
+ "high_contrast",
713
+ "shamziwhite",
714
+ "xing1",
715
+ "foxovh",
716
+ "zi0808",
717
+ "anonymous_artist",
718
+ "somescrub",
719
+ "rikose",
720
+ "smudge_proof",
721
+ "sculpture_(artwork)",
722
+ "redout",
723
+ "rotten_robbie",
724
+ "aaron_(artist)",
725
+ "statue",
726
+ "lazydez",
727
+ "modeseven",
728
+ "renegade-157",
729
+ "thunderouserections",
730
+ "letterbox",
731
+ "masterelrest",
732
+ "cynthiafeline",
733
+ "zeklullaby",
734
+ "kloudmutt",
735
+ "tyroo",
736
+ "unusual_coloring",
737
+ "flinters",
738
+ "xenoforge",
739
+ "zeta-haru",
740
+ "asbel_lhant",
741
+ "grinn3r",
742
+ "redpixie",
743
+ "narse",
744
+ "jmg",
745
+ "takotyutyu",
746
+ "heather_bruton",
747
+ "justmegabenewell",
748
+ "furball",
749
+ "nastycalamari",
750
+ "sketchybug",
751
+ "sirmasterdufel",
752
+ "wfa",
753
+ "oddjuice",
754
+ "xnirox",
755
+ "toughset",
756
+ "yoshimister",
757
+ "lawyerdog",
758
+ "javkiller",
759
+ "aztepyeen",
760
+ "guide_lines",
761
+ "xylas",
762
+ "senshion",
763
+ "slb",
764
+ "hitmore",
765
+ "tansau",
766
+ "ashraely",
767
+ "viola_bat",
768
+ "1boshi",
769
+ "darkflash23",
770
+ "yaki_atsuage",
771
+ "aomori",
772
+ "shiuk",
773
+ "thegreatmatsutzu",
774
+ "vavacung",
775
+ "doggomeatball",
776
+ "vono",
777
+ "tachiuo",
778
+ "jwinkz",
779
+ "lavenderpandy",
780
+ "jrjresq",
781
+ "mylafox",
782
+ "lewdchuu_(artist)",
783
+ "argento",
784
+ "tahlian",
785
+ "vrabo",
786
+ "fuze",
787
+ "mdgusty",
788
+ "goonie-san",
789
+ "grypwolf",
790
+ "cursedmarked",
791
+ "sogaroth",
792
+ "0r0ch1",
793
+ "hierophant_green_(artist)",
794
+ "argon_vile",
795
+ "hyaku_(artist)",
796
+ "bastionshadowpaw",
797
+ "siroc",
798
+ "digital_drawing_(artwork)",
799
+ "mr.pink",
800
+ "billynr",
801
+ "kyander",
802
+ "unknowhiter",
803
+ "littlerager",
804
+ "kuroodod",
805
+ "ssssnowy",
806
+ "plankboy",
807
+ "senz",
808
+ "roobin",
809
+ "sbshouseofpancakes",
810
+ "ewgengster_(artist)",
811
+ "tojo_the_thief",
812
+ "nakoo",
813
+ "famir_(artist)",
814
+ "wastedtimeee",
815
+ "1-upclock",
816
+ "blue_theme",
817
+ "ruaidri",
818
+ "thousandfoldfeathers",
819
+ "kusosensei",
820
+ "cool_colors",
821
+ "sugarlesspaints",
822
+ "doesnotexist",
823
+ "bobbydando",
824
+ "meesh",
825
+ "johnmarten",
826
+ "strega",
827
+ "kogito",
828
+ "polygon5",
829
+ "yupa",
830
+ "sunny_way",
831
+ "faint",
832
+ "sacrificabominat",
833
+ "king-cheetah",
834
+ "shyguy9",
835
+ "insomniacovrlrd",
836
+ "geeflakes",
837
+ "paper-wings",
838
+ "oob",
839
+ "smooshkin",
840
+ "zerofox1000",
841
+ "sudonym",
842
+ "bristol",
843
+ "cracker_(artist)",
844
+ "wherewolf",
845
+ "snofu",
846
+ "aoino",
847
+ "yellow_theme",
848
+ "bunnybits",
849
+ "kaion",
850
+ "gin-blade",
851
+ "jamoart",
852
+ "guoh",
853
+ "krazyelf",
854
+ "euyoshi89",
855
+ "v-tal",
856
+ "norithics",
857
+ "aycee",
858
+ "mr.under",
859
+ "official_art",
860
+ "kanashiipanda",
861
+ "rayka",
862
+ "martincorps",
863
+ "yakantuzura",
864
+ "art_nouveau",
865
+ "ipoke",
866
+ "ze_blackball.d",
867
+ "signature",
868
+ "karnator",
869
+ "gideon",
870
+ "isyld",
871
+ "loveslove",
872
+ "dizzymilky",
873
+ "sana!rpg",
874
+ "elpatrixf",
875
+ "bigdon1992",
876
+ "artlegionary",
877
+ "erobos",
878
+ "doomington",
879
+ "pencil_(artwork)",
880
+ "lamiaaaa",
881
+ "seibear",
882
+ "james_m_hardiman",
883
+ "pickles-hyena",
884
+ "emenius",
885
+ "screamoshaymin",
886
+ "wugi",
887
+ "shaded",
888
+ "ittybittykittytittys",
889
+ "pixel_(artwork)",
890
+ "digital_media_(artwork)",
891
+ "hyenaface",
892
+ "border",
893
+ "muzz",
894
+ "jarnqk",
895
+ "orlandofox",
896
+ "azura_inalis",
897
+ "captain_nikko",
898
+ "kabalmystic_(artist)",
899
+ "pata",
900
+ "personalami",
901
+ "theblackrook",
902
+ "grisser",
903
+ "uniparasite",
904
+ "cold-blooded-twilight",
905
+ "neon_colors",
906
+ "tsudamaku",
907
+ "zeekzag",
908
+ "foxenawolf",
909
+ "zyira",
910
+ "sexotheque"
911
+ ]
912
+