Spaces:
Running on Zero
Running on Zero
sync: 上传 240 个文件,删除 2 个文件
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +4 -0
- meme_generator/memes_emoji/ai_ace/__init__.py +7 -7
- meme_generator/memes_emoji/ai_ace/images/0.png +2 -2
- meme_generator/memes_emoji/allegiance/__init__.py +3 -3
- meme_generator/memes_emoji/anyliew_struggling/__init__.py +3 -4
- meme_generator/memes_emoji/atri_like/__init__.py +3 -3
- meme_generator/memes_emoji/baby/__init__.py +3 -4
- meme_generator/memes_emoji/begged_me/__init__.py +12 -26
- meme_generator/memes_emoji/beloveds/__init__.py +3 -3
- meme_generator/memes_emoji/catch/__init__.py +1 -2
- meme_generator/memes_emoji/chillet_deer/__init__.py +4 -5
- meme_generator/memes_emoji/christmas_hat/__init__.py +1 -2
- meme_generator/memes_emoji/cleverer/__init__.py +1 -2
- meme_generator/memes_emoji/commemorate/__init__.py +4 -5
- meme_generator/memes_emoji/dalia_everyone/__init__.py +3 -3
- meme_generator/memes_emoji/deer_time/__init__.py +1 -2
- meme_generator/memes_emoji/dinosaur_head/__init__.py +10 -25
- meme_generator/memes_emoji/doro_contact/__init__.py +3 -3
- meme_generator/memes_emoji/doro_dear/__init__.py +3 -3
- meme_generator/memes_emoji/doro_group_photo/__init__.py +1 -2
- meme_generator/memes_emoji/doro_orange/__init__.py +3 -3
- meme_generator/memes_emoji/doro_surrounding_photos/__init__.py +3 -3
- meme_generator/memes_emoji/doro_work_for_you/__init__.py +3 -3
- meme_generator/memes_emoji/drumstick/__init__.py +1 -2
- meme_generator/memes_emoji/durian/__init__.py +2 -3
- meme_generator/memes_emoji/error3b/__init__.py +1 -2
- meme_generator/memes_emoji/family_know/__init__.py +3 -3
- meme_generator/memes_emoji/fireworks_head/__init__.py +11 -26
- meme_generator/memes_emoji/heart_shape/__init__.py +64 -0
- meme_generator/memes_emoji/heart_shape/images/0.png +3 -0
- meme_generator/memes_emoji/ice_tea_head/__init__.py +11 -26
- meme_generator/memes_emoji/ikun_basketball/__init__.py +3 -4
- meme_generator/memes_emoji/ikun_durian_head/__init__.py +4 -24
- meme_generator/memes_emoji/ikun_head/__init__.py +4 -24
- meme_generator/memes_emoji/ikun_like/__init__.py +3 -3
- meme_generator/memes_emoji/ikun_need_tv/__init__.py +3 -3
- meme_generator/memes_emoji/ikun_why_are_you/__init__.py +2 -3
- meme_generator/memes_emoji/izumi_sagiri_painting/__init__.py +3 -4
- meme_generator/memes_emoji/jd_delivery_person/__init__.py +3 -3
- meme_generator/memes_emoji/jd_takeout/__init__.py +3 -4
- meme_generator/memes_emoji/kfc/__init__.py +1 -2
- meme_generator/memes_emoji/kfc_thursday/__init__.py +1 -2
- meme_generator/memes_emoji/kurogames_aemeath/__init__.py +2 -3
- meme_generator/memes_emoji/kurogames_aemeath_holding/__init__.py +3 -1
- meme_generator/memes_emoji/kurogames_brqd/__init__.py +1 -2
- meme_generator/memes_emoji/kurogames_camellya_photo/__init__.py +3 -4
- meme_generator/memes_emoji/kurogames_camellya_red_hug/__init__.py +4 -5
- meme_generator/memes_emoji/kurogames_carlotta_play/__init__.py +3 -3
- meme_generator/memes_emoji/kurogames_cartethyia/__init__.py +1 -2
- meme_generator/memes_emoji/kurogames_cartethyia_feetup/__init__.py +4 -5
.gitattributes
CHANGED
|
@@ -1178,3 +1178,7 @@ meme_generator/memes_emoji/kurogames_suoming_say/images/0.png filter=lfs diff=lf
|
|
| 1178 |
meme_generator/memes_emoji/kurogames_xuanling_say/images/0.png filter=lfs diff=lfs merge=lfs -text
|
| 1179 |
meme_generator/memes_emoji/nailoong_snuggle/images/20.png filter=lfs diff=lfs merge=lfs -text
|
| 1180 |
meme_generator/memes_emoji/nailoong_snuggle/images/74.png filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1178 |
meme_generator/memes_emoji/kurogames_xuanling_say/images/0.png filter=lfs diff=lfs merge=lfs -text
|
| 1179 |
meme_generator/memes_emoji/nailoong_snuggle/images/20.png filter=lfs diff=lfs merge=lfs -text
|
| 1180 |
meme_generator/memes_emoji/nailoong_snuggle/images/74.png filter=lfs diff=lfs merge=lfs -text
|
| 1181 |
+
meme_generator/memes_emoji/ai_ace/images/0.png filter=lfs diff=lfs merge=lfs -text
|
| 1182 |
+
meme_generator/memes_emoji/heart_shape/images/0.png filter=lfs diff=lfs merge=lfs -text
|
| 1183 |
+
meme_generator/memes_emoji/prosperitywish/images/0.png filter=lfs diff=lfs merge=lfs -text
|
| 1184 |
+
meme_generator/memes_tudou/nawabao/images/0.png filter=lfs diff=lfs merge=lfs -text
|
meme_generator/memes_emoji/ai_ace/__init__.py
CHANGED
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
-
from meme_generator.utils import
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def ai_ace(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -18,10 +18,10 @@ def ai_ace(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
| 18 |
text = f"不用了\n我{name}是AI高手\n正在用AI写代码中ing"
|
| 19 |
try:
|
| 20 |
frame.draw_text(
|
| 21 |
-
(
|
| 22 |
text,
|
| 23 |
fill=(58, 58, 58),
|
| 24 |
-
max_fontsize=
|
| 25 |
min_fontsize=20,
|
| 26 |
lines_align="left",
|
| 27 |
font_families=["FZShaoEr-M11S"],
|
|
@@ -29,9 +29,9 @@ def ai_ace(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
| 29 |
except ValueError:
|
| 30 |
raise TextOverLength(name)
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
-
img = imgs[0].convert("RGBA").resize((
|
| 33 |
-
return frame.copy().paste(img, (
|
| 34 |
-
return
|
| 35 |
add_meme(
|
| 36 |
"ai_ace",
|
| 37 |
ai_ace,
|
|
@@ -41,5 +41,5 @@ add_meme(
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["AI高手","ai高手"],
|
| 43 |
date_created=datetime(2025, 7, 11),
|
| 44 |
-
date_modified=datetime(
|
| 45 |
)
|
|
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
+
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def ai_ace(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 18 |
text = f"不用了\n我{name}是AI高手\n正在用AI写代码中ing"
|
| 19 |
try:
|
| 20 |
frame.draw_text(
|
| 21 |
+
(115, 83, 1104, 744),
|
| 22 |
text,
|
| 23 |
fill=(58, 58, 58),
|
| 24 |
+
max_fontsize=200,
|
| 25 |
min_fontsize=20,
|
| 26 |
lines_align="left",
|
| 27 |
font_families=["FZShaoEr-M11S"],
|
|
|
|
| 29 |
except ValueError:
|
| 30 |
raise TextOverLength(name)
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
+
img = imgs[0].convert("RGBA").resize((650, 650))
|
| 33 |
+
return frame.copy().paste(img, (1142, 151), alpha=True, below=True)
|
| 34 |
+
return make_png_or_gif(images, make)
|
| 35 |
add_meme(
|
| 36 |
"ai_ace",
|
| 37 |
ai_ace,
|
|
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["AI高手","ai高手"],
|
| 43 |
date_created=datetime(2025, 7, 11),
|
| 44 |
+
date_modified=datetime(2026, 10, 12),
|
| 45 |
)
|
meme_generator/memes_emoji/ai_ace/images/0.png
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
meme_generator/memes_emoji/allegiance/__init__.py
CHANGED
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
-
from meme_generator.utils import
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def allegiance(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -31,7 +31,7 @@ def allegiance(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((436, 400))
|
| 33 |
return frame.copy().paste(img, (279, 159), alpha=True,below=True)
|
| 34 |
-
return
|
| 35 |
add_meme(
|
| 36 |
"allegiance",
|
| 37 |
allegiance,
|
|
@@ -41,5 +41,5 @@ add_meme(
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["충성","忠橙","敬礼"],
|
| 43 |
date_created=datetime(2025, 8, 16),
|
| 44 |
-
date_modified=datetime(
|
| 45 |
)
|
|
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
+
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def allegiance(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((436, 400))
|
| 33 |
return frame.copy().paste(img, (279, 159), alpha=True,below=True)
|
| 34 |
+
return make_png_or_gif(images, make)
|
| 35 |
add_meme(
|
| 36 |
"allegiance",
|
| 37 |
allegiance,
|
|
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["충성","忠橙","敬礼"],
|
| 43 |
date_created=datetime(2025, 8, 16),
|
| 44 |
+
date_modified=datetime(2026, 10, 12),
|
| 45 |
)
|
meme_generator/memes_emoji/anyliew_struggling/__init__.py
CHANGED
|
@@ -2,8 +2,7 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def anyliew_struggling(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -11,7 +10,7 @@ def anyliew_struggling(images: list[BuildImage], texts: list[str], args: MemeArg
|
|
| 11 |
img = imgs[0].convert("RGBA").circle().resize((300, 300))
|
| 12 |
img = img.rotate(25, expand=True)
|
| 13 |
return frame.copy().paste(img, (275, 28), alpha=True,below=True)
|
| 14 |
-
return
|
| 15 |
add_meme(
|
| 16 |
"anyliew_struggling",
|
| 17 |
anyliew_struggling,
|
|
@@ -21,5 +20,5 @@ add_meme(
|
|
| 21 |
max_texts=0,
|
| 22 |
keywords=["挣扎"],
|
| 23 |
date_created=datetime(2025, 5, 26),
|
| 24 |
-
date_modified=datetime(
|
| 25 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
|
|
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def anyliew_struggling(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 8 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 10 |
img = imgs[0].convert("RGBA").circle().resize((300, 300))
|
| 11 |
img = img.rotate(25, expand=True)
|
| 12 |
return frame.copy().paste(img, (275, 28), alpha=True,below=True)
|
| 13 |
+
return make_png_or_gif(images, make)
|
| 14 |
add_meme(
|
| 15 |
"anyliew_struggling",
|
| 16 |
anyliew_struggling,
|
|
|
|
| 20 |
max_texts=0,
|
| 21 |
keywords=["挣扎"],
|
| 22 |
date_created=datetime(2025, 5, 26),
|
| 23 |
+
date_modified=datetime(2026, 10, 12),
|
| 24 |
)
|
meme_generator/memes_emoji/atri_like/__init__.py
CHANGED
|
@@ -4,7 +4,7 @@ from pil_utils import BuildImage
|
|
| 4 |
from meme_generator import add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.tags import MemeTags
|
| 7 |
-
from meme_generator.utils import
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
| 9 |
default_text = "亚托莉喜欢这个"
|
| 10 |
def atri_like(images: list[BuildImage], texts: list[str], args):
|
|
@@ -24,7 +24,7 @@ def atri_like(images: list[BuildImage], texts: list[str], args):
|
|
| 24 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 25 |
img = imgs[0].convert("RGBA").resize((305, 235), keep_ratio=True)
|
| 26 |
return frame.copy().paste(img, (106, 72), below=True)
|
| 27 |
-
return
|
| 28 |
add_meme(
|
| 29 |
"atri_like",
|
| 30 |
atri_like,
|
|
@@ -36,5 +36,5 @@ add_meme(
|
|
| 36 |
keywords=["亚托莉喜欢"],
|
| 37 |
tags=MemeTags.atri,
|
| 38 |
date_created=datetime(2025, 5, 25),
|
| 39 |
-
date_modified=datetime(
|
| 40 |
)
|
|
|
|
| 4 |
from meme_generator import add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.tags import MemeTags
|
| 7 |
+
from meme_generator.utils import make_png_or_gif
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
| 9 |
default_text = "亚托莉喜欢这个"
|
| 10 |
def atri_like(images: list[BuildImage], texts: list[str], args):
|
|
|
|
| 24 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 25 |
img = imgs[0].convert("RGBA").resize((305, 235), keep_ratio=True)
|
| 26 |
return frame.copy().paste(img, (106, 72), below=True)
|
| 27 |
+
return make_png_or_gif(images, make)
|
| 28 |
add_meme(
|
| 29 |
"atri_like",
|
| 30 |
atri_like,
|
|
|
|
| 36 |
keywords=["亚托莉喜欢"],
|
| 37 |
tags=MemeTags.atri,
|
| 38 |
date_created=datetime(2025, 5, 25),
|
| 39 |
+
date_modified=datetime(2026, 10, 12),
|
| 40 |
)
|
meme_generator/memes_emoji/baby/__init__.py
CHANGED
|
@@ -2,8 +2,7 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def baby (images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -11,7 +10,7 @@ def baby (images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
| 11 |
img = imgs[0].convert("RGBA").resize((235, 235))
|
| 12 |
img = img.rotate(-8, expand=True)
|
| 13 |
return frame.copy().paste(img, (140, 480), alpha=True,below=True)
|
| 14 |
-
return
|
| 15 |
add_meme(
|
| 16 |
"baby",
|
| 17 |
baby,
|
|
@@ -21,5 +20,5 @@ add_meme(
|
|
| 21 |
max_texts=0,
|
| 22 |
keywords=["宝宝","BB","bb","baby","Baby"],
|
| 23 |
date_created=datetime(2025, 6, 11),
|
| 24 |
-
date_modified=datetime(
|
| 25 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
|
|
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def baby (images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 8 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 10 |
img = imgs[0].convert("RGBA").resize((235, 235))
|
| 11 |
img = img.rotate(-8, expand=True)
|
| 12 |
return frame.copy().paste(img, (140, 480), alpha=True,below=True)
|
| 13 |
+
return make_png_or_gif(images, make)
|
| 14 |
add_meme(
|
| 15 |
"baby",
|
| 16 |
baby,
|
|
|
|
| 20 |
max_texts=0,
|
| 21 |
keywords=["宝宝","BB","bb","baby","Baby"],
|
| 22 |
date_created=datetime(2025, 6, 11),
|
| 23 |
+
date_modified=datetime(2026, 10, 12),
|
| 24 |
)
|
meme_generator/memes_emoji/begged_me/__init__.py
CHANGED
|
@@ -2,42 +2,28 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
|
|
|
| 8 |
def begged_me(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
| 10 |
-
|
| 11 |
-
name = ta
|
| 12 |
-
if texts:
|
| 13 |
-
name = texts[0]
|
| 14 |
-
elif args.user_infos:
|
| 15 |
-
info = args.user_infos[0]
|
| 16 |
-
ta = "他" if info.gender == "male" else "她"
|
| 17 |
-
name = info.name or ta
|
| 18 |
-
text = f""
|
| 19 |
-
try:
|
| 20 |
-
frame.draw_text(
|
| 21 |
-
(235, 615, 478, 659),
|
| 22 |
-
text,
|
| 23 |
-
max_fontsize=100,
|
| 24 |
-
min_fontsize=20,
|
| 25 |
-
valign="bottom",
|
| 26 |
-
)
|
| 27 |
-
except ValueError:
|
| 28 |
-
raise TextOverLength(name)
|
| 29 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 30 |
img = imgs[0].convert("RGBA").circle().resize((1720, 1720))
|
| 31 |
img = img.rotate(-15, expand=True)
|
| 32 |
-
return frame.copy().paste(img, (125, 655), alpha=True, below=True
|
| 33 |
-
|
|
|
|
|
|
|
| 34 |
add_meme(
|
| 35 |
"begged_me",
|
| 36 |
begged_me,
|
| 37 |
min_images=1,
|
| 38 |
max_images=1,
|
| 39 |
-
|
|
|
|
| 40 |
keywords=["求我"],
|
| 41 |
date_created=datetime(2025, 3, 10),
|
| 42 |
-
date_modified=datetime(
|
| 43 |
-
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
| 6 |
+
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
+
|
| 9 |
def begged_me(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 10 |
frame = BuildImage.open(img_dir / "0.png")
|
| 11 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 13 |
img = imgs[0].convert("RGBA").circle().resize((1720, 1720))
|
| 14 |
img = img.rotate(-15, expand=True)
|
| 15 |
+
return frame.copy().paste(img, (125, 655), alpha=True, below=True)
|
| 16 |
+
|
| 17 |
+
return make_png_or_gif(images, make)
|
| 18 |
+
|
| 19 |
add_meme(
|
| 20 |
"begged_me",
|
| 21 |
begged_me,
|
| 22 |
min_images=1,
|
| 23 |
max_images=1,
|
| 24 |
+
min_texts=0,
|
| 25 |
+
max_texts=0,
|
| 26 |
keywords=["求我"],
|
| 27 |
date_created=datetime(2025, 3, 10),
|
| 28 |
+
date_modified=datetime(2026, 10, 12),
|
| 29 |
+
)
|
meme_generator/memes_emoji/beloveds/__init__.py
CHANGED
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
-
from meme_generator.utils import
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def beloveds(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -31,7 +31,7 @@ def beloveds(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((330, 330))
|
| 33 |
return frame.copy().paste(img, (330, 140), alpha=True,below=True)
|
| 34 |
-
return
|
| 35 |
add_meme(
|
| 36 |
"beloveds",
|
| 37 |
beloveds,
|
|
@@ -41,5 +41,5 @@ add_meme(
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["挚爱"],
|
| 43 |
date_created=datetime(2025, 5, 26),
|
| 44 |
-
date_modified=datetime(
|
| 45 |
)
|
|
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
+
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def beloveds(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((330, 330))
|
| 33 |
return frame.copy().paste(img, (330, 140), alpha=True,below=True)
|
| 34 |
+
return make_png_or_gif(images, make)
|
| 35 |
add_meme(
|
| 36 |
"beloveds",
|
| 37 |
beloveds,
|
|
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["挚爱"],
|
| 43 |
date_created=datetime(2025, 5, 26),
|
| 44 |
+
date_modified=datetime(2026, 10, 12),
|
| 45 |
)
|
meme_generator/memes_emoji/catch/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def catch (images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
@@ -20,5 +19,5 @@ add_meme(
|
|
| 20 |
max_texts=0,
|
| 21 |
keywords=["抓住"],
|
| 22 |
date_created=datetime(2026, 4, 17),
|
| 23 |
-
date_modified=datetime(2026,
|
| 24 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_png_or_gif
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def catch (images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
|
|
| 19 |
max_texts=0,
|
| 20 |
keywords=["抓住"],
|
| 21 |
date_created=datetime(2026, 4, 17),
|
| 22 |
+
date_modified=datetime(2026, 10, 12),
|
| 23 |
)
|
meme_generator/memes_emoji/chillet_deer/__init__.py
CHANGED
|
@@ -2,23 +2,22 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def chillet_deer(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
| 10 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 11 |
img = imgs[0].convert("RGBA").resize((549, 463))
|
| 12 |
return frame.copy().paste(img, (202, 289), alpha=True, below=True )
|
| 13 |
-
return
|
| 14 |
add_meme(
|
| 15 |
"chillet_deer",
|
| 16 |
chillet_deer,
|
| 17 |
min_images=1,
|
| 18 |
max_images=1,
|
| 19 |
min_texts=0,
|
| 20 |
-
max_texts=
|
| 21 |
keywords=["疾风鹿"],
|
| 22 |
date_created=datetime(2025, 8, 14),
|
| 23 |
-
date_modified=datetime(
|
| 24 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
|
|
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def chillet_deer(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 8 |
frame = BuildImage.open(img_dir / "0.png")
|
| 9 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 10 |
img = imgs[0].convert("RGBA").resize((549, 463))
|
| 11 |
return frame.copy().paste(img, (202, 289), alpha=True, below=True )
|
| 12 |
+
return make_png_or_gif(images, make)
|
| 13 |
add_meme(
|
| 14 |
"chillet_deer",
|
| 15 |
chillet_deer,
|
| 16 |
min_images=1,
|
| 17 |
max_images=1,
|
| 18 |
min_texts=0,
|
| 19 |
+
max_texts=0,
|
| 20 |
keywords=["疾风鹿"],
|
| 21 |
date_created=datetime(2025, 8, 14),
|
| 22 |
+
date_modified=datetime(2026, 10, 12),
|
| 23 |
)
|
meme_generator/memes_emoji/christmas_hat/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def christmas_hat(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
@@ -20,5 +19,5 @@ add_meme(
|
|
| 20 |
max_texts=0,
|
| 21 |
keywords=["圣诞帽子","圣诞帽"],
|
| 22 |
date_created=datetime(2025, 12, 6),
|
| 23 |
-
date_modified=datetime(
|
| 24 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_png_or_gif
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def christmas_hat(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
|
|
| 19 |
max_texts=0,
|
| 20 |
keywords=["圣诞帽子","圣诞帽"],
|
| 21 |
date_created=datetime(2025, 12, 6),
|
| 22 |
+
date_modified=datetime(2026, 10, 12),
|
| 23 |
)
|
meme_generator/memes_emoji/cleverer/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_png_or_gif
|
| 7 |
from meme_generator.tags import MemeTags
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
|
@@ -59,5 +58,5 @@ add_meme(
|
|
| 59 |
max_texts=1,
|
| 60 |
keywords=["比聪明"],
|
| 61 |
date_created=datetime(2025, 11, 21),
|
| 62 |
-
date_modified=datetime(
|
| 63 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_png_or_gif
|
| 6 |
from meme_generator.tags import MemeTags
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
|
|
|
| 58 |
max_texts=1,
|
| 59 |
keywords=["比聪明"],
|
| 60 |
date_created=datetime(2025, 11, 21),
|
| 61 |
+
date_modified=datetime(2026, 10, 12),
|
| 62 |
)
|
meme_generator/memes_emoji/commemorate/__init__.py
CHANGED
|
@@ -2,8 +2,7 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def commemorate(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -11,15 +10,15 @@ def commemorate(images: list[BuildImage], texts: list[str], args: MemeArgsModel)
|
|
| 11 |
img = imgs[0].convert("RGBA").resize((815, 747), keep_ratio=True)
|
| 12 |
img = img.convert("L").convert("RGBA")
|
| 13 |
return frame.copy().paste(img, (129, 218), alpha=True,below=True)
|
| 14 |
-
return
|
| 15 |
add_meme(
|
| 16 |
"commemorate",
|
| 17 |
commemorate,
|
| 18 |
min_images=1,
|
| 19 |
max_images=1,
|
| 20 |
min_texts=0,
|
| 21 |
-
max_texts=
|
| 22 |
keywords=["奠","寄"],
|
| 23 |
date_created=datetime(2026, 1, 12),
|
| 24 |
-
date_modified=datetime(2026,
|
| 25 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
|
|
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def commemorate(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 8 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 10 |
img = imgs[0].convert("RGBA").resize((815, 747), keep_ratio=True)
|
| 11 |
img = img.convert("L").convert("RGBA")
|
| 12 |
return frame.copy().paste(img, (129, 218), alpha=True,below=True)
|
| 13 |
+
return make_png_or_gif(images, make)
|
| 14 |
add_meme(
|
| 15 |
"commemorate",
|
| 16 |
commemorate,
|
| 17 |
min_images=1,
|
| 18 |
max_images=1,
|
| 19 |
min_texts=0,
|
| 20 |
+
max_texts=0,
|
| 21 |
keywords=["奠","寄"],
|
| 22 |
date_created=datetime(2026, 1, 12),
|
| 23 |
+
date_modified=datetime(2026, 10, 12),
|
| 24 |
)
|
meme_generator/memes_emoji/dalia_everyone/__init__.py
CHANGED
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
-
from meme_generator.utils import
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def dalia_everyone(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -31,7 +31,7 @@ def dalia_everyone(images: list[BuildImage], texts: list[str], args: MemeArgsMod
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((95, 95)).circle().rotate(-5, expand=True)
|
| 33 |
return frame.copy().paste(img, (611, 387), alpha=True, below=True)
|
| 34 |
-
return
|
| 35 |
add_meme(
|
| 36 |
"dalia_everyone",
|
| 37 |
dalia_everyone,
|
|
@@ -41,5 +41,5 @@ add_meme(
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["所有人"],
|
| 43 |
date_created=datetime(2025, 12, 1),
|
| 44 |
-
date_modified=datetime(
|
| 45 |
)
|
|
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
+
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def dalia_everyone(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((95, 95)).circle().rotate(-5, expand=True)
|
| 33 |
return frame.copy().paste(img, (611, 387), alpha=True, below=True)
|
| 34 |
+
return make_png_or_gif(images, make)
|
| 35 |
add_meme(
|
| 36 |
"dalia_everyone",
|
| 37 |
dalia_everyone,
|
|
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["所有人"],
|
| 43 |
date_created=datetime(2025, 12, 1),
|
| 44 |
+
date_modified=datetime(2026, 10, 12),
|
| 45 |
)
|
meme_generator/memes_emoji/deer_time/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_png_or_gif
|
| 7 |
from meme_generator.tags import MemeTags
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
|
@@ -21,5 +20,5 @@ add_meme(
|
|
| 21 |
max_texts=0,
|
| 22 |
keywords=["鹿管时间"],
|
| 23 |
date_created=datetime(2025, 7, 2),
|
| 24 |
-
date_modified=datetime(
|
| 25 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_png_or_gif
|
| 6 |
from meme_generator.tags import MemeTags
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
|
|
|
| 20 |
max_texts=0,
|
| 21 |
keywords=["鹿管时间"],
|
| 22 |
date_created=datetime(2025, 7, 2),
|
| 23 |
+
date_modified=datetime(2026, 10, 12),
|
| 24 |
)
|
meme_generator/memes_emoji/dinosaur_head/__init__.py
CHANGED
|
@@ -2,42 +2,27 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
|
|
|
| 8 |
def dinosaur_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
| 10 |
-
|
| 11 |
-
name = ta
|
| 12 |
-
if texts:
|
| 13 |
-
name = texts[0]
|
| 14 |
-
elif args.user_infos:
|
| 15 |
-
info = args.user_infos[0]
|
| 16 |
-
ta = "他" if info.gender == "male" else "她"
|
| 17 |
-
name = info.name or ta
|
| 18 |
-
text = f""
|
| 19 |
-
try:
|
| 20 |
-
frame.draw_text(
|
| 21 |
-
(27, 73, 374, 136),
|
| 22 |
-
text,
|
| 23 |
-
max_fontsize=100,
|
| 24 |
-
min_fontsize=20,
|
| 25 |
-
valign="bottom",
|
| 26 |
-
)
|
| 27 |
-
except ValueError:
|
| 28 |
-
raise TextOverLength(name)
|
| 29 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 30 |
img = imgs[0].convert("RGBA").resize((620, 620))
|
| 31 |
return frame.copy().paste(img, (215, 245), alpha=True, below=True)
|
| 32 |
-
|
|
|
|
|
|
|
| 33 |
add_meme(
|
| 34 |
"dinosaur_head",
|
| 35 |
dinosaur_head,
|
| 36 |
min_images=1,
|
| 37 |
max_images=1,
|
| 38 |
min_texts=0,
|
| 39 |
-
max_texts=
|
| 40 |
keywords=["恐龙头"],
|
| 41 |
date_created=datetime(2024, 7, 26),
|
| 42 |
-
date_modified=datetime(
|
| 43 |
-
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
| 6 |
+
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
+
|
| 9 |
def dinosaur_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 10 |
frame = BuildImage.open(img_dir / "0.png")
|
| 11 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 13 |
img = imgs[0].convert("RGBA").resize((620, 620))
|
| 14 |
return frame.copy().paste(img, (215, 245), alpha=True, below=True)
|
| 15 |
+
|
| 16 |
+
return make_png_or_gif(images, make)
|
| 17 |
+
|
| 18 |
add_meme(
|
| 19 |
"dinosaur_head",
|
| 20 |
dinosaur_head,
|
| 21 |
min_images=1,
|
| 22 |
max_images=1,
|
| 23 |
min_texts=0,
|
| 24 |
+
max_texts=0,
|
| 25 |
keywords=["恐龙头"],
|
| 26 |
date_created=datetime(2024, 7, 26),
|
| 27 |
+
date_modified=datetime(2026, 10, 12),
|
| 28 |
+
)
|
meme_generator/memes_emoji/doro_contact/__init__.py
CHANGED
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
-
from meme_generator.utils import
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def doro_contact(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -31,7 +31,7 @@ def doro_contact(images: list[BuildImage], texts: list[str], args: MemeArgsModel
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((108, 108))
|
| 33 |
return frame.copy().paste(img, (145, 278), alpha=True, below=True)
|
| 34 |
-
return
|
| 35 |
add_meme(
|
| 36 |
"doro_contact",
|
| 37 |
doro_contact,
|
|
@@ -41,5 +41,5 @@ add_meme(
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["交往","doro交往","Doro交往","DORO交往","桃乐丝交往"],
|
| 43 |
date_created=datetime(2025, 7, 7),
|
| 44 |
-
date_modified=datetime(
|
| 45 |
)
|
|
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
+
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def doro_contact(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((108, 108))
|
| 33 |
return frame.copy().paste(img, (145, 278), alpha=True, below=True)
|
| 34 |
+
return make_png_or_gif(images, make)
|
| 35 |
add_meme(
|
| 36 |
"doro_contact",
|
| 37 |
doro_contact,
|
|
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["交往","doro交往","Doro交往","DORO交往","桃乐丝交往"],
|
| 43 |
date_created=datetime(2025, 7, 7),
|
| 44 |
+
date_modified=datetime(2026, 10, 12),
|
| 45 |
)
|
meme_generator/memes_emoji/doro_dear/__init__.py
CHANGED
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
-
from meme_generator.utils import
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def doro_dear(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -31,7 +31,7 @@ def doro_dear(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((100, 100))
|
| 33 |
return frame.copy().paste(img, (576, 529), alpha=True, below=True)
|
| 34 |
-
return
|
| 35 |
add_meme(
|
| 36 |
"doro_dear",
|
| 37 |
doro_dear,
|
|
@@ -41,5 +41,5 @@ add_meme(
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["最爱","doro最爱","Doro最爱","DORO最爱","桃乐丝最爱"],
|
| 43 |
date_created=datetime(2025, 7, 7),
|
| 44 |
-
date_modified=datetime(
|
| 45 |
)
|
|
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
+
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def doro_dear(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((100, 100))
|
| 33 |
return frame.copy().paste(img, (576, 529), alpha=True, below=True)
|
| 34 |
+
return make_png_or_gif(images, make)
|
| 35 |
add_meme(
|
| 36 |
"doro_dear",
|
| 37 |
doro_dear,
|
|
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["最爱","doro最爱","Doro最爱","DORO最爱","桃乐丝最爱"],
|
| 43 |
date_created=datetime(2025, 7, 7),
|
| 44 |
+
date_modified=datetime(2026, 10, 12),
|
| 45 |
)
|
meme_generator/memes_emoji/doro_group_photo/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def doro_group_photo(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
@@ -20,5 +19,5 @@ add_meme(
|
|
| 20 |
max_texts=0,
|
| 21 |
keywords=["doro合影","Doro合影","桃乐丝合影"],
|
| 22 |
date_created=datetime(2026, 2, 16),
|
| 23 |
-
date_modified=datetime(2026,
|
| 24 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_png_or_gif
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def doro_group_photo(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
|
|
| 19 |
max_texts=0,
|
| 20 |
keywords=["doro合影","Doro合影","桃乐丝合影"],
|
| 21 |
date_created=datetime(2026, 2, 16),
|
| 22 |
+
date_modified=datetime(2026, 10, 12),
|
| 23 |
)
|
meme_generator/memes_emoji/doro_orange/__init__.py
CHANGED
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
-
from meme_generator.utils import
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def doro_orange(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -31,7 +31,7 @@ def doro_orange(images: list[BuildImage], texts: list[str], args: MemeArgsModel)
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((270, 270))
|
| 33 |
return frame.copy().paste(img, (588, 65), alpha=True, below=True)
|
| 34 |
-
return
|
| 35 |
add_meme(
|
| 36 |
"doro_orange",
|
| 37 |
doro_orange,
|
|
@@ -41,5 +41,5 @@ add_meme(
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["欧润吉","润吉","润橘","橘子","橘","🍊"],
|
| 43 |
date_created=datetime(2025, 7, 7),
|
| 44 |
-
date_modified=datetime(
|
| 45 |
)
|
|
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
+
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def doro_orange(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((270, 270))
|
| 33 |
return frame.copy().paste(img, (588, 65), alpha=True, below=True)
|
| 34 |
+
return make_png_or_gif(images, make)
|
| 35 |
add_meme(
|
| 36 |
"doro_orange",
|
| 37 |
doro_orange,
|
|
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["欧润吉","润吉","润橘","橘子","橘","🍊"],
|
| 43 |
date_created=datetime(2025, 7, 7),
|
| 44 |
+
date_modified=datetime(2026, 10, 12),
|
| 45 |
)
|
meme_generator/memes_emoji/doro_surrounding_photos/__init__.py
CHANGED
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
-
from meme_generator.utils import
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def doro_surrounding_photos(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -39,7 +39,7 @@ def doro_surrounding_photos(images: list[BuildImage], texts: list[str], args: Me
|
|
| 39 |
img3 = img.resize((100, 100)).rotate(-15, expand=True)
|
| 40 |
result_frame.paste(img3, (815, 1296), alpha=True, below=True)
|
| 41 |
return result_frame
|
| 42 |
-
return
|
| 43 |
add_meme(
|
| 44 |
"doro_surrounding_photos",
|
| 45 |
doro_surrounding_photos,
|
|
@@ -49,5 +49,5 @@ add_meme(
|
|
| 49 |
max_texts=1,
|
| 50 |
keywords=["周边写真"],
|
| 51 |
date_created=datetime(2025, 9, 13),
|
| 52 |
-
date_modified=datetime(
|
| 53 |
)
|
|
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
+
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def doro_surrounding_photos(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 39 |
img3 = img.resize((100, 100)).rotate(-15, expand=True)
|
| 40 |
result_frame.paste(img3, (815, 1296), alpha=True, below=True)
|
| 41 |
return result_frame
|
| 42 |
+
return make_png_or_gif(images, make)
|
| 43 |
add_meme(
|
| 44 |
"doro_surrounding_photos",
|
| 45 |
doro_surrounding_photos,
|
|
|
|
| 49 |
max_texts=1,
|
| 50 |
keywords=["周边写真"],
|
| 51 |
date_created=datetime(2025, 9, 13),
|
| 52 |
+
date_modified=datetime(2026, 10, 12),
|
| 53 |
)
|
meme_generator/memes_emoji/doro_work_for_you/__init__.py
CHANGED
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
-
from meme_generator.utils import
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def doro_work_for_you(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -39,7 +39,7 @@ def doro_work_for_you(images: list[BuildImage], texts: list[str], args: MemeArgs
|
|
| 39 |
img3 = img.resize((35, 35)).rotate(35, expand=True)
|
| 40 |
result_frame.paste(img3, (60, 450), alpha=True, below=True)
|
| 41 |
return result_frame
|
| 42 |
-
return
|
| 43 |
add_meme(
|
| 44 |
"doro_work_for_you",
|
| 45 |
doro_work_for_you,
|
|
@@ -49,5 +49,5 @@ add_meme(
|
|
| 49 |
max_texts=1,
|
| 50 |
keywords=["为你打工"],
|
| 51 |
date_created=datetime(2025, 9, 2),
|
| 52 |
-
date_modified=datetime(
|
| 53 |
)
|
|
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
+
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def doro_work_for_you(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 39 |
img3 = img.resize((35, 35)).rotate(35, expand=True)
|
| 40 |
result_frame.paste(img3, (60, 450), alpha=True, below=True)
|
| 41 |
return result_frame
|
| 42 |
+
return make_png_or_gif(images, make)
|
| 43 |
add_meme(
|
| 44 |
"doro_work_for_you",
|
| 45 |
doro_work_for_you,
|
|
|
|
| 49 |
max_texts=1,
|
| 50 |
keywords=["为你打工"],
|
| 51 |
date_created=datetime(2025, 9, 2),
|
| 52 |
+
date_modified=datetime(2026, 10, 12),
|
| 53 |
)
|
meme_generator/memes_emoji/drumstick/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_png_or_gif
|
| 7 |
from meme_generator.tags import MemeTags
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
|
@@ -23,5 +22,5 @@ add_meme(
|
|
| 23 |
keywords=["🍗","鸡腿"],
|
| 24 |
tags=MemeTags.genshin,
|
| 25 |
date_created=datetime(2025, 7, 1),
|
| 26 |
-
date_modified=datetime(
|
| 27 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_png_or_gif
|
| 6 |
from meme_generator.tags import MemeTags
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
|
|
|
| 22 |
keywords=["🍗","鸡腿"],
|
| 23 |
tags=MemeTags.genshin,
|
| 24 |
date_created=datetime(2025, 7, 1),
|
| 25 |
+
date_modified=datetime(2026, 10, 12),
|
| 26 |
)
|
meme_generator/memes_emoji/durian/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def durian(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
@@ -18,8 +17,8 @@ add_meme(
|
|
| 18 |
min_images=1,
|
| 19 |
max_images=1,
|
| 20 |
min_texts=0,
|
| 21 |
-
max_texts=
|
| 22 |
keywords=["榴莲"],
|
| 23 |
date_created=datetime(2025, 5, 29),
|
| 24 |
-
date_modified=datetime(
|
| 25 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_png_or_gif
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def durian(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
|
|
| 17 |
min_images=1,
|
| 18 |
max_images=1,
|
| 19 |
min_texts=0,
|
| 20 |
+
max_texts=0,
|
| 21 |
keywords=["榴莲"],
|
| 22 |
date_created=datetime(2025, 5, 29),
|
| 23 |
+
date_modified=datetime(2026, 10, 12),
|
| 24 |
)
|
meme_generator/memes_emoji/error3b/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def error3b(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
@@ -22,5 +21,5 @@ add_meme(
|
|
| 22 |
max_texts=0,
|
| 23 |
keywords=["30亿error", "三十亿报错"],
|
| 24 |
date_created=datetime(2026, 4, 17),
|
| 25 |
-
date_modified=datetime(2026,
|
| 26 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_png_or_gif
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def error3b(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
|
|
| 21 |
max_texts=0,
|
| 22 |
keywords=["30亿error", "三十亿报错"],
|
| 23 |
date_created=datetime(2026, 4, 17),
|
| 24 |
+
date_modified=datetime(2026, 10, 12),
|
| 25 |
)
|
meme_generator/memes_emoji/family_know/__init__.py
CHANGED
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
-
from meme_generator.utils import
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def family_know(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -31,7 +31,7 @@ def family_know(images: list[BuildImage], texts: list[str], args: MemeArgsModel)
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").circle().resize((205, 205))
|
| 33 |
return frame.copy().paste(img, (199, 937), alpha=True,below=True)
|
| 34 |
-
return
|
| 35 |
add_meme(
|
| 36 |
"family_know",
|
| 37 |
family_know,
|
|
@@ -41,5 +41,5 @@ add_meme(
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["家人们谁懂啊"],
|
| 43 |
date_created=datetime(2025, 9, 9),
|
| 44 |
-
date_modified=datetime(
|
| 45 |
)
|
|
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
+
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def family_know(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").circle().resize((205, 205))
|
| 33 |
return frame.copy().paste(img, (199, 937), alpha=True,below=True)
|
| 34 |
+
return make_png_or_gif(images, make)
|
| 35 |
add_meme(
|
| 36 |
"family_know",
|
| 37 |
family_know,
|
|
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["家人们谁懂啊"],
|
| 43 |
date_created=datetime(2025, 9, 9),
|
| 44 |
+
date_modified=datetime(2026, 10, 12),
|
| 45 |
)
|
meme_generator/memes_emoji/fireworks_head/__init__.py
CHANGED
|
@@ -2,42 +2,27 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
|
|
|
| 8 |
def fireworks_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
| 10 |
-
|
| 11 |
-
name = ta
|
| 12 |
-
if texts:
|
| 13 |
-
name = texts[0]
|
| 14 |
-
elif args.user_infos:
|
| 15 |
-
info = args.user_infos[0]
|
| 16 |
-
ta = "他" if info.gender == "male" else "她"
|
| 17 |
-
name = info.name or ta
|
| 18 |
-
text = f""
|
| 19 |
-
try:
|
| 20 |
-
frame.draw_text(
|
| 21 |
-
(235, 615, 478, 659),
|
| 22 |
-
text,
|
| 23 |
-
max_fontsize=100,
|
| 24 |
-
min_fontsize=20,
|
| 25 |
-
valign="bottom",
|
| 26 |
-
)
|
| 27 |
-
except ValueError:
|
| 28 |
-
raise TextOverLength(name)
|
| 29 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 30 |
img = imgs[0].convert("RGBA").circle().resize((320, 320))
|
| 31 |
-
return frame.copy().paste(img, (340, 165), alpha=True, below=True
|
| 32 |
-
|
|
|
|
|
|
|
| 33 |
add_meme(
|
| 34 |
"fireworks_head",
|
| 35 |
fireworks_head,
|
| 36 |
min_images=1,
|
| 37 |
max_images=1,
|
| 38 |
min_texts=0,
|
| 39 |
-
max_texts=
|
| 40 |
keywords=["烟花头像"],
|
| 41 |
date_created=datetime(2025, 1, 28),
|
| 42 |
-
date_modified=datetime(
|
| 43 |
-
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
| 6 |
+
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
+
|
| 9 |
def fireworks_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 10 |
frame = BuildImage.open(img_dir / "0.png")
|
| 11 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 13 |
img = imgs[0].convert("RGBA").circle().resize((320, 320))
|
| 14 |
+
return frame.copy().paste(img, (340, 165), alpha=True, below=True)
|
| 15 |
+
|
| 16 |
+
return make_png_or_gif(images, make)
|
| 17 |
+
|
| 18 |
add_meme(
|
| 19 |
"fireworks_head",
|
| 20 |
fireworks_head,
|
| 21 |
min_images=1,
|
| 22 |
max_images=1,
|
| 23 |
min_texts=0,
|
| 24 |
+
max_texts=0,
|
| 25 |
keywords=["烟花头像"],
|
| 26 |
date_created=datetime(2025, 1, 28),
|
| 27 |
+
date_modified=datetime(2026, 10, 12),
|
| 28 |
+
)
|
meme_generator/memes_emoji/heart_shape/__init__.py
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from datetime import datetime
|
| 2 |
+
from pathlib import Path
|
| 3 |
+
|
| 4 |
+
from pil_utils import BuildImage
|
| 5 |
+
|
| 6 |
+
from meme_generator import MemeArgsModel, add_meme
|
| 7 |
+
from meme_generator.utils import make_png_or_gif
|
| 8 |
+
|
| 9 |
+
img_dir = Path(__file__).parent / "images"
|
| 10 |
+
|
| 11 |
+
AVATAR_SLOTS: list[tuple[int, int, int, int]] = [
|
| 12 |
+
(77, 710, 220, 220), # 1
|
| 13 |
+
(77, 968, 220, 220), # 2
|
| 14 |
+
(322, 429, 246, 246), # 3
|
| 15 |
+
(599, 429, 246, 246), # 4
|
| 16 |
+
(350, 710, 485, 485), # 5
|
| 17 |
+
(350, 1255, 215, 215), # 6
|
| 18 |
+
(620, 1255, 495, 495), # 7
|
| 19 |
+
(891, 710, 220, 220), # 8
|
| 20 |
+
(891, 968, 220, 220), # 9
|
| 21 |
+
(891, 1793, 220, 220), # 10
|
| 22 |
+
(1163, 429, 500, 500), # 11
|
| 23 |
+
(1163, 968, 500, 500), # 12
|
| 24 |
+
(1163, 1508, 247, 247), # 13
|
| 25 |
+
(1709, 688, 244, 244), # 14
|
| 26 |
+
(1709, 974, 244, 244), # 15
|
| 27 |
+
]
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
def heart_shape(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 31 |
+
frame = BuildImage.open(img_dir / "0.png")
|
| 32 |
+
|
| 33 |
+
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 34 |
+
result = frame.copy()
|
| 35 |
+
for i, (x, y, w, h) in enumerate(AVATAR_SLOTS):
|
| 36 |
+
img = imgs[i % len(imgs)].convert("RGBA").square().resize((w, h))
|
| 37 |
+
result.paste(img, (x, y), alpha=True)
|
| 38 |
+
if texts:
|
| 39 |
+
result.draw_text(
|
| 40 |
+
(180, 93, 1868, 295),
|
| 41 |
+
texts[0],
|
| 42 |
+
fill=(255, 255, 255),
|
| 43 |
+
allow_wrap=True,
|
| 44 |
+
max_fontsize=300,
|
| 45 |
+
min_fontsize=15,
|
| 46 |
+
lines_align="center",
|
| 47 |
+
font_families=["FZKaTong-M19S"],
|
| 48 |
+
)
|
| 49 |
+
return result
|
| 50 |
+
|
| 51 |
+
return make_png_or_gif(images, make)
|
| 52 |
+
|
| 53 |
+
|
| 54 |
+
add_meme(
|
| 55 |
+
"heart_shape",
|
| 56 |
+
heart_shape,
|
| 57 |
+
min_images=1,
|
| 58 |
+
max_images=15,
|
| 59 |
+
min_texts=0,
|
| 60 |
+
max_texts=1,
|
| 61 |
+
keywords=["爱心形状"],
|
| 62 |
+
date_created=datetime(2026, 10, 12),
|
| 63 |
+
date_modified=datetime(2026, 10, 12),
|
| 64 |
+
)
|
meme_generator/memes_emoji/heart_shape/images/0.png
ADDED
|
Git LFS Details
|
meme_generator/memes_emoji/ice_tea_head/__init__.py
CHANGED
|
@@ -2,42 +2,27 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
|
|
|
| 8 |
def ice_tea_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
| 10 |
-
|
| 11 |
-
name = ta
|
| 12 |
-
if texts:
|
| 13 |
-
name = texts[0]
|
| 14 |
-
elif args.user_infos:
|
| 15 |
-
info = args.user_infos[0]
|
| 16 |
-
ta = "他" if info.gender == "male" else "她"
|
| 17 |
-
name = info.name or ta
|
| 18 |
-
text = f""
|
| 19 |
-
try:
|
| 20 |
-
frame.draw_text(
|
| 21 |
-
(235, 615, 478, 659),
|
| 22 |
-
text,
|
| 23 |
-
max_fontsize=100,
|
| 24 |
-
min_fontsize=20,
|
| 25 |
-
valign="bottom",
|
| 26 |
-
)
|
| 27 |
-
except ValueError:
|
| 28 |
-
raise TextOverLength(name)
|
| 29 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 30 |
img = imgs[0].convert("RGBA").circle().resize((500, 500))
|
| 31 |
-
return frame.copy().paste(img, (320,35), alpha=True)
|
| 32 |
-
|
|
|
|
|
|
|
| 33 |
add_meme(
|
| 34 |
"ice_tea_head",
|
| 35 |
ice_tea_head,
|
| 36 |
min_images=1,
|
| 37 |
max_images=1,
|
| 38 |
min_texts=0,
|
| 39 |
-
max_texts=
|
| 40 |
keywords=["冰红茶"],
|
| 41 |
date_created=datetime(2025, 3, 25),
|
| 42 |
-
date_modified=datetime(
|
| 43 |
-
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
| 6 |
+
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
+
|
| 9 |
def ice_tea_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 10 |
frame = BuildImage.open(img_dir / "0.png")
|
| 11 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 13 |
img = imgs[0].convert("RGBA").circle().resize((500, 500))
|
| 14 |
+
return frame.copy().paste(img, (320, 35), alpha=True)
|
| 15 |
+
|
| 16 |
+
return make_png_or_gif(images, make)
|
| 17 |
+
|
| 18 |
add_meme(
|
| 19 |
"ice_tea_head",
|
| 20 |
ice_tea_head,
|
| 21 |
min_images=1,
|
| 22 |
max_images=1,
|
| 23 |
min_texts=0,
|
| 24 |
+
max_texts=0,
|
| 25 |
keywords=["冰红茶"],
|
| 26 |
date_created=datetime(2025, 3, 25),
|
| 27 |
+
date_modified=datetime(2026, 10, 12),
|
| 28 |
+
)
|
meme_generator/memes_emoji/ikun_basketball/__init__.py
CHANGED
|
@@ -2,8 +2,7 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def ikun_basketball(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -11,7 +10,7 @@ def ikun_basketball(images: list[BuildImage], texts: list[str], args: MemeArgsMo
|
|
| 11 |
img = imgs[0].convert("RGBA").circle().resize((250, 250))
|
| 12 |
img = img.rotate(10, expand=True)
|
| 13 |
return frame.copy().paste(img, (322, 129), alpha=True,below=True)
|
| 14 |
-
return
|
| 15 |
add_meme(
|
| 16 |
"ikun_basketball",
|
| 17 |
ikun_basketball,
|
|
@@ -19,5 +18,5 @@ add_meme(
|
|
| 19 |
max_images=1,
|
| 20 |
keywords=["篮球","🏀"],
|
| 21 |
date_created=datetime(2025, 5, 29),
|
| 22 |
-
date_modified=datetime(
|
| 23 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
|
|
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def ikun_basketball(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 8 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 10 |
img = imgs[0].convert("RGBA").circle().resize((250, 250))
|
| 11 |
img = img.rotate(10, expand=True)
|
| 12 |
return frame.copy().paste(img, (322, 129), alpha=True,below=True)
|
| 13 |
+
return make_png_or_gif(images, make)
|
| 14 |
add_meme(
|
| 15 |
"ikun_basketball",
|
| 16 |
ikun_basketball,
|
|
|
|
| 18 |
max_images=1,
|
| 19 |
keywords=["篮球","🏀"],
|
| 20 |
date_created=datetime(2025, 5, 29),
|
| 21 |
+
date_modified=datetime(2026, 10, 12),
|
| 22 |
)
|
meme_generator/memes_emoji/ikun_durian_head/__init__.py
CHANGED
|
@@ -2,42 +2,22 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def ikun_durian_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
| 10 |
-
ta = "她"
|
| 11 |
-
name = ta
|
| 12 |
-
if texts:
|
| 13 |
-
name = texts[0]
|
| 14 |
-
elif args.user_infos:
|
| 15 |
-
info = args.user_infos[0]
|
| 16 |
-
ta = "他" if info.gender == "male" else "她"
|
| 17 |
-
name = info.name or ta
|
| 18 |
-
text = f""
|
| 19 |
-
try:
|
| 20 |
-
frame.draw_text(
|
| 21 |
-
(235, 615, 478, 659),
|
| 22 |
-
text,
|
| 23 |
-
max_fontsize=100,
|
| 24 |
-
min_fontsize=20,
|
| 25 |
-
valign="bottom",
|
| 26 |
-
)
|
| 27 |
-
except ValueError:
|
| 28 |
-
raise TextOverLength(name)
|
| 29 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 30 |
img = imgs[0].convert("RGBA").resize((180, 180))
|
| 31 |
return frame.copy().paste(img, (62, 93), alpha=True, below=True )
|
| 32 |
-
return
|
| 33 |
add_meme(
|
| 34 |
"ikun_durian_head",
|
| 35 |
ikun_durian_head,
|
| 36 |
min_images=1,
|
| 37 |
max_images=1,
|
| 38 |
min_texts=0,
|
| 39 |
-
max_texts=
|
| 40 |
keywords=["榴莲坤头"],
|
| 41 |
date_created=datetime(2025, 3, 29),
|
| 42 |
-
date_modified=datetime(
|
| 43 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
|
|
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def ikun_durian_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 8 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 10 |
img = imgs[0].convert("RGBA").resize((180, 180))
|
| 11 |
return frame.copy().paste(img, (62, 93), alpha=True, below=True )
|
| 12 |
+
return make_png_or_gif(images, make)
|
| 13 |
add_meme(
|
| 14 |
"ikun_durian_head",
|
| 15 |
ikun_durian_head,
|
| 16 |
min_images=1,
|
| 17 |
max_images=1,
|
| 18 |
min_texts=0,
|
| 19 |
+
max_texts=0,
|
| 20 |
keywords=["榴莲坤头"],
|
| 21 |
date_created=datetime(2025, 3, 29),
|
| 22 |
+
date_modified=datetime(2026, 10, 12),
|
| 23 |
)
|
meme_generator/memes_emoji/ikun_head/__init__.py
CHANGED
|
@@ -2,42 +2,22 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def ikun_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
| 10 |
-
ta = "她"
|
| 11 |
-
name = ta
|
| 12 |
-
if texts:
|
| 13 |
-
name = texts[0]
|
| 14 |
-
elif args.user_infos:
|
| 15 |
-
info = args.user_infos[0]
|
| 16 |
-
ta = "他" if info.gender == "male" else "她"
|
| 17 |
-
name = info.name or ta
|
| 18 |
-
text = f""
|
| 19 |
-
try:
|
| 20 |
-
frame.draw_text(
|
| 21 |
-
(235, 615, 478, 659),
|
| 22 |
-
text,
|
| 23 |
-
max_fontsize=100,
|
| 24 |
-
min_fontsize=20,
|
| 25 |
-
valign="bottom",
|
| 26 |
-
)
|
| 27 |
-
except ValueError:
|
| 28 |
-
raise TextOverLength(name)
|
| 29 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 30 |
img = imgs[0].convert("RGBA").circle().resize((220, 220))
|
| 31 |
return frame.copy().paste(img, (73, 75), alpha=True, below=True )
|
| 32 |
-
return
|
| 33 |
add_meme(
|
| 34 |
"ikun_head",
|
| 35 |
ikun_head,
|
| 36 |
min_images=1,
|
| 37 |
max_images=1,
|
| 38 |
min_texts=0,
|
| 39 |
-
max_texts=
|
| 40 |
keywords=["小黑子"],
|
| 41 |
date_created=datetime(2025, 3, 25),
|
| 42 |
-
date_modified=datetime(
|
| 43 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
|
|
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def ikun_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 8 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 10 |
img = imgs[0].convert("RGBA").circle().resize((220, 220))
|
| 11 |
return frame.copy().paste(img, (73, 75), alpha=True, below=True )
|
| 12 |
+
return make_png_or_gif(images, make)
|
| 13 |
add_meme(
|
| 14 |
"ikun_head",
|
| 15 |
ikun_head,
|
| 16 |
min_images=1,
|
| 17 |
max_images=1,
|
| 18 |
min_texts=0,
|
| 19 |
+
max_texts=0,
|
| 20 |
keywords=["小黑子"],
|
| 21 |
date_created=datetime(2025, 3, 25),
|
| 22 |
+
date_modified=datetime(2026, 10, 12),
|
| 23 |
)
|
meme_generator/memes_emoji/ikun_like/__init__.py
CHANGED
|
@@ -4,7 +4,7 @@ from pil_utils import BuildImage
|
|
| 4 |
from meme_generator import add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.tags import MemeTags
|
| 7 |
-
from meme_generator.utils import
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
| 9 |
default_text = "坤坤喜欢这个"
|
| 10 |
def ikun_like(images: list[BuildImage], texts: list[str], args):
|
|
@@ -24,7 +24,7 @@ def ikun_like(images: list[BuildImage], texts: list[str], args):
|
|
| 24 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 25 |
img = imgs[0].convert("RGBA").resize((305, 235), keep_ratio=True)
|
| 26 |
return frame.copy().paste(img, (106, 72), below=True)
|
| 27 |
-
return
|
| 28 |
add_meme(
|
| 29 |
"ikun_like",
|
| 30 |
ikun_like,
|
|
@@ -36,5 +36,5 @@ add_meme(
|
|
| 36 |
keywords=["坤坤喜欢"],
|
| 37 |
tags=["ikun","坤坤","真爱粉","喜欢"],
|
| 38 |
date_created=datetime(2025, 5, 25),
|
| 39 |
-
date_modified=datetime(
|
| 40 |
)
|
|
|
|
| 4 |
from meme_generator import add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.tags import MemeTags
|
| 7 |
+
from meme_generator.utils import make_png_or_gif
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
| 9 |
default_text = "坤坤喜欢这个"
|
| 10 |
def ikun_like(images: list[BuildImage], texts: list[str], args):
|
|
|
|
| 24 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 25 |
img = imgs[0].convert("RGBA").resize((305, 235), keep_ratio=True)
|
| 26 |
return frame.copy().paste(img, (106, 72), below=True)
|
| 27 |
+
return make_png_or_gif(images, make)
|
| 28 |
add_meme(
|
| 29 |
"ikun_like",
|
| 30 |
ikun_like,
|
|
|
|
| 36 |
keywords=["坤坤喜欢"],
|
| 37 |
tags=["ikun","坤坤","真爱粉","喜欢"],
|
| 38 |
date_created=datetime(2025, 5, 25),
|
| 39 |
+
date_modified=datetime(2026, 10, 12),
|
| 40 |
)
|
meme_generator/memes_emoji/ikun_need_tv/__init__.py
CHANGED
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
-
from meme_generator.utils import
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def ikun_need_tv(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -31,7 +31,7 @@ def ikun_need_tv(images: list[BuildImage], texts: list[str], args: MemeArgsModel
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((518, 488))
|
| 33 |
return frame.copy().paste(img, (614, 118), alpha=True, below=True)
|
| 34 |
-
return
|
| 35 |
add_meme(
|
| 36 |
"ikun_need_tv",
|
| 37 |
ikun_need_tv,
|
|
@@ -41,5 +41,5 @@ add_meme(
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["坤坤想要"],
|
| 43 |
date_created=datetime(2025, 9, 4),
|
| 44 |
-
date_modified=datetime(
|
| 45 |
)
|
|
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
+
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def ikun_need_tv(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 31 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 32 |
img = imgs[0].convert("RGBA").resize((518, 488))
|
| 33 |
return frame.copy().paste(img, (614, 118), alpha=True, below=True)
|
| 34 |
+
return make_png_or_gif(images, make)
|
| 35 |
add_meme(
|
| 36 |
"ikun_need_tv",
|
| 37 |
ikun_need_tv,
|
|
|
|
| 41 |
max_texts=1,
|
| 42 |
keywords=["坤坤想要"],
|
| 43 |
date_created=datetime(2025, 9, 4),
|
| 44 |
+
date_modified=datetime(2026, 10, 12),
|
| 45 |
)
|
meme_generator/memes_emoji/ikun_why_are_you/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def ikun_why_are_you(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
@@ -18,8 +17,8 @@ add_meme(
|
|
| 18 |
min_images=1,
|
| 19 |
max_images=1,
|
| 20 |
min_texts=0,
|
| 21 |
-
max_texts=
|
| 22 |
keywords=["你干嘛","你干吗"],
|
| 23 |
date_created=datetime(2024, 7, 26),
|
| 24 |
-
date_modified=datetime(
|
| 25 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_jpg_or_gif
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def ikun_why_are_you(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
|
|
| 17 |
min_images=1,
|
| 18 |
max_images=1,
|
| 19 |
min_texts=0,
|
| 20 |
+
max_texts=0,
|
| 21 |
keywords=["你干嘛","你干吗"],
|
| 22 |
date_created=datetime(2024, 7, 26),
|
| 23 |
+
date_modified=datetime(2026, 10, 12),
|
| 24 |
)
|
meme_generator/memes_emoji/izumi_sagiri_painting/__init__.py
CHANGED
|
@@ -2,15 +2,14 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def izumi_sagiri_painting (images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
| 10 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 11 |
img = imgs[0].convert("RGBA").resize((1270, 730)).rotate(-10, expand=True)
|
| 12 |
return frame.copy().paste(img, (350, 1423), alpha=True,below=True)
|
| 13 |
-
return
|
| 14 |
add_meme(
|
| 15 |
"izumi_sagiri_painting",
|
| 16 |
izumi_sagiri_painting ,
|
|
@@ -20,5 +19,5 @@ add_meme(
|
|
| 20 |
max_texts=0,
|
| 21 |
keywords=["和泉纱雾画画"],
|
| 22 |
date_created=datetime(2025, 9, 21),
|
| 23 |
-
date_modified=datetime(
|
| 24 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
|
|
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def izumi_sagiri_painting (images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 8 |
frame = BuildImage.open(img_dir / "0.png")
|
| 9 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 10 |
img = imgs[0].convert("RGBA").resize((1270, 730)).rotate(-10, expand=True)
|
| 11 |
return frame.copy().paste(img, (350, 1423), alpha=True,below=True)
|
| 12 |
+
return make_png_or_gif(images, make)
|
| 13 |
add_meme(
|
| 14 |
"izumi_sagiri_painting",
|
| 15 |
izumi_sagiri_painting ,
|
|
|
|
| 19 |
max_texts=0,
|
| 20 |
keywords=["和泉纱雾画画"],
|
| 21 |
date_created=datetime(2025, 9, 21),
|
| 22 |
+
date_modified=datetime(2026, 10, 12),
|
| 23 |
)
|
meme_generator/memes_emoji/jd_delivery_person/__init__.py
CHANGED
|
@@ -4,7 +4,7 @@ from pil_utils import BuildImage
|
|
| 4 |
from PIL import ImageEnhance
|
| 5 |
from meme_generator import MemeArgsModel, add_meme
|
| 6 |
from meme_generator.exception import TextOverLength
|
| 7 |
-
from meme_generator.utils import
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
| 9 |
def jd_delivery_person(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 10 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -39,7 +39,7 @@ def jd_delivery_person(images: list[BuildImage], texts: list[str], args: MemeArg
|
|
| 39 |
img = BuildImage(img_darkened)
|
| 40 |
img = img.rotate(-20, expand=True)
|
| 41 |
return frame.copy().paste(img, (420, 1000), alpha=True,below=True)
|
| 42 |
-
return
|
| 43 |
add_meme(
|
| 44 |
"jd_delivery_person",
|
| 45 |
jd_delivery_person,
|
|
@@ -49,5 +49,5 @@ add_meme(
|
|
| 49 |
max_texts=1,
|
| 50 |
keywords=["京东外卖骑手","京东外卖工牌"],
|
| 51 |
date_created=datetime(2025, 3, 24),
|
| 52 |
-
date_modified=datetime(
|
| 53 |
)
|
|
|
|
| 4 |
from PIL import ImageEnhance
|
| 5 |
from meme_generator import MemeArgsModel, add_meme
|
| 6 |
from meme_generator.exception import TextOverLength
|
| 7 |
+
from meme_generator.utils import make_png_or_gif
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
| 9 |
def jd_delivery_person(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 10 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 39 |
img = BuildImage(img_darkened)
|
| 40 |
img = img.rotate(-20, expand=True)
|
| 41 |
return frame.copy().paste(img, (420, 1000), alpha=True,below=True)
|
| 42 |
+
return make_png_or_gif(images, make)
|
| 43 |
add_meme(
|
| 44 |
"jd_delivery_person",
|
| 45 |
jd_delivery_person,
|
|
|
|
| 49 |
max_texts=1,
|
| 50 |
keywords=["京东外卖骑手","京东外卖工牌"],
|
| 51 |
date_created=datetime(2025, 3, 24),
|
| 52 |
+
date_modified=datetime(2026, 10, 12),
|
| 53 |
)
|
meme_generator/memes_emoji/jd_takeout/__init__.py
CHANGED
|
@@ -2,8 +2,7 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def jd_takeout(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 9 |
frame = BuildImage.open(img_dir / "0.png")
|
|
@@ -11,7 +10,7 @@ def jd_takeout(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
| 11 |
img = imgs[0].convert("RGBA").circle().resize((230, 230))
|
| 12 |
img = img.rotate(10, expand=True)
|
| 13 |
return frame.copy().paste(img, (625, 5), alpha=True,below=True)
|
| 14 |
-
return
|
| 15 |
add_meme(
|
| 16 |
"jd_takeout",
|
| 17 |
jd_takeout,
|
|
@@ -19,5 +18,5 @@ add_meme(
|
|
| 19 |
max_images=1,
|
| 20 |
keywords=["京东外卖"],
|
| 21 |
date_created=datetime(2025, 5, 29),
|
| 22 |
-
date_modified=datetime(
|
| 23 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
|
|
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def jd_takeout(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
| 8 |
frame = BuildImage.open(img_dir / "0.png")
|
|
|
|
| 10 |
img = imgs[0].convert("RGBA").circle().resize((230, 230))
|
| 11 |
img = img.rotate(10, expand=True)
|
| 12 |
return frame.copy().paste(img, (625, 5), alpha=True,below=True)
|
| 13 |
+
return make_png_or_gif(images, make)
|
| 14 |
add_meme(
|
| 15 |
"jd_takeout",
|
| 16 |
jd_takeout,
|
|
|
|
| 18 |
max_images=1,
|
| 19 |
keywords=["京东外卖"],
|
| 20 |
date_created=datetime(2025, 5, 29),
|
| 21 |
+
date_modified=datetime(2026, 10, 12),
|
| 22 |
)
|
meme_generator/memes_emoji/kfc/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_png_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def kfc(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
@@ -21,5 +20,5 @@ add_meme(
|
|
| 21 |
max_texts=0,
|
| 22 |
keywords=["kfc","KFC","肯德基"],
|
| 23 |
date_created=datetime(2025, 5, 29),
|
| 24 |
-
date_modified=datetime(
|
| 25 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_png_or_gif
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def kfc(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
|
|
| 20 |
max_texts=0,
|
| 21 |
keywords=["kfc","KFC","肯德基"],
|
| 22 |
date_created=datetime(2025, 5, 29),
|
| 23 |
+
date_modified=datetime(2026, 10, 12),
|
| 24 |
)
|
meme_generator/memes_emoji/kfc_thursday/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def kfc_thursday(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
@@ -18,5 +17,5 @@ add_meme(
|
|
| 18 |
max_images=1,
|
| 19 |
keywords=["星期四","疯狂星期四"],
|
| 20 |
date_created=datetime(2025, 5, 29),
|
| 21 |
-
date_modified=datetime(
|
| 22 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_jpg_or_gif
|
| 6 |
img_dir = Path(__file__).parent / "images"
|
| 7 |
def kfc_thursday(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
|
|
| 17 |
max_images=1,
|
| 18 |
keywords=["星期四","疯狂星期四"],
|
| 19 |
date_created=datetime(2025, 5, 29),
|
| 20 |
+
date_modified=datetime(2026, 10, 12),
|
| 21 |
)
|
meme_generator/memes_emoji/kurogames_aemeath/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_png_or_gif
|
| 7 |
from meme_generator.tags import MemeTags
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
|
@@ -18,9 +17,9 @@ add_meme(
|
|
| 18 |
min_images=1,
|
| 19 |
max_images=1,
|
| 20 |
min_texts=0,
|
| 21 |
-
max_texts=
|
| 22 |
keywords=["爱弥斯"],
|
| 23 |
tags=MemeTags.wuthering_waves,
|
| 24 |
date_created=datetime(2026, 2, 7),
|
| 25 |
-
date_modified=datetime(2026,
|
| 26 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_png_or_gif
|
| 6 |
from meme_generator.tags import MemeTags
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
|
|
|
| 17 |
min_images=1,
|
| 18 |
max_images=1,
|
| 19 |
min_texts=0,
|
| 20 |
+
max_texts=0,
|
| 21 |
keywords=["爱弥斯"],
|
| 22 |
tags=MemeTags.wuthering_waves,
|
| 23 |
date_created=datetime(2026, 2, 7),
|
| 24 |
+
date_modified=datetime(2026, 10, 12),
|
| 25 |
)
|
meme_generator/memes_emoji/kurogames_aemeath_holding/__init__.py
CHANGED
|
@@ -4,6 +4,7 @@ from PIL.Image import Image as IMG
|
|
| 4 |
from pil_utils import BuildImage
|
| 5 |
from meme_generator import add_meme
|
| 6 |
from meme_generator.utils import save_gif
|
|
|
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def kurogames_aemeath_holding(images: list[BuildImage], texts, args):
|
| 9 |
img = images[0].convert("RGBA")
|
|
@@ -22,6 +23,7 @@ add_meme(
|
|
| 22 |
min_images=1,
|
| 23 |
max_images=1,
|
| 24 |
keywords=["爱弥斯捧"],
|
|
|
|
| 25 |
date_created=datetime(2026, 2, 24),
|
| 26 |
-
date_modified=datetime(2026,
|
| 27 |
)
|
|
|
|
| 4 |
from pil_utils import BuildImage
|
| 5 |
from meme_generator import add_meme
|
| 6 |
from meme_generator.utils import save_gif
|
| 7 |
+
from meme_generator.tags import MemeTags
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
| 9 |
def kurogames_aemeath_holding(images: list[BuildImage], texts, args):
|
| 10 |
img = images[0].convert("RGBA")
|
|
|
|
| 23 |
min_images=1,
|
| 24 |
max_images=1,
|
| 25 |
keywords=["爱弥斯捧"],
|
| 26 |
+
tags=MemeTags.wuthering_waves,
|
| 27 |
date_created=datetime(2026, 2, 24),
|
| 28 |
+
date_modified=datetime(2026, 10, 12),
|
| 29 |
)
|
meme_generator/memes_emoji/kurogames_brqd/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_png_or_gif
|
| 7 |
from meme_generator.tags import MemeTags
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
|
@@ -22,5 +21,5 @@ add_meme(
|
|
| 22 |
keywords=["百日签到"],
|
| 23 |
tags=MemeTags.wuthering_waves,
|
| 24 |
date_created=datetime(2026, 2, 16),
|
| 25 |
-
date_modified=datetime(2026,
|
| 26 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_png_or_gif
|
| 6 |
from meme_generator.tags import MemeTags
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
|
|
|
| 21 |
keywords=["百日签到"],
|
| 22 |
tags=MemeTags.wuthering_waves,
|
| 23 |
date_created=datetime(2026, 2, 16),
|
| 24 |
+
date_modified=datetime(2026, 10, 12),
|
| 25 |
)
|
meme_generator/memes_emoji/kurogames_camellya_photo/__init__.py
CHANGED
|
@@ -2,8 +2,7 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
from meme_generator.tags import MemeTags
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
| 9 |
def kurogames_camellya_photo(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
@@ -12,7 +11,7 @@ def kurogames_camellya_photo(images: list[BuildImage], texts: list[str], args: M
|
|
| 12 |
img = imgs[0].convert("RGBA").resize((345, 310))
|
| 13 |
img = img.rotate(-5, expand=True)
|
| 14 |
return frame.copy().paste(img, (170, 500), alpha=True,below=True)
|
| 15 |
-
return
|
| 16 |
add_meme(
|
| 17 |
"kurogames_camellya_photo",
|
| 18 |
kurogames_camellya_photo,
|
|
@@ -23,5 +22,5 @@ add_meme(
|
|
| 23 |
keywords=["大傻椿照片","傻椿照片"],
|
| 24 |
tags=MemeTags.wuthering_waves,
|
| 25 |
date_created=datetime(2025, 7, 4),
|
| 26 |
-
date_modified=datetime(
|
| 27 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
|
|
|
| 6 |
from meme_generator.tags import MemeTags
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def kurogames_camellya_photo(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
|
|
| 11 |
img = imgs[0].convert("RGBA").resize((345, 310))
|
| 12 |
img = img.rotate(-5, expand=True)
|
| 13 |
return frame.copy().paste(img, (170, 500), alpha=True,below=True)
|
| 14 |
+
return make_png_or_gif(images, make)
|
| 15 |
add_meme(
|
| 16 |
"kurogames_camellya_photo",
|
| 17 |
kurogames_camellya_photo,
|
|
|
|
| 22 |
keywords=["大傻椿照片","傻椿照片"],
|
| 23 |
tags=MemeTags.wuthering_waves,
|
| 24 |
date_created=datetime(2025, 7, 4),
|
| 25 |
+
date_modified=datetime(2026, 10, 12),
|
| 26 |
)
|
meme_generator/memes_emoji/kurogames_camellya_red_hug/__init__.py
CHANGED
|
@@ -2,8 +2,7 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
from meme_generator.tags import MemeTags
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
| 9 |
def kurogames_camellya_red_hug(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
@@ -11,16 +10,16 @@ def kurogames_camellya_red_hug(images: list[BuildImage], texts: list[str], args:
|
|
| 11 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 12 |
img = imgs[0].convert("RGBA").resize((428, 428))
|
| 13 |
return frame.copy().paste(img, (399, 0), alpha=True,below=True)
|
| 14 |
-
return
|
| 15 |
add_meme(
|
| 16 |
"kurogames_camellya_red_hug",
|
| 17 |
kurogames_camellya_red_hug,
|
| 18 |
min_images=1,
|
| 19 |
max_images=1,
|
| 20 |
min_texts=0,
|
| 21 |
-
max_texts=
|
| 22 |
keywords=["红椿抱"],
|
| 23 |
tags=MemeTags.wuthering_waves,
|
| 24 |
date_created=datetime(2025, 12, 19),
|
| 25 |
-
date_modified=datetime(
|
| 26 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
|
|
|
| 6 |
from meme_generator.tags import MemeTags
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def kurogames_camellya_red_hug(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
|
|
| 10 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 11 |
img = imgs[0].convert("RGBA").resize((428, 428))
|
| 12 |
return frame.copy().paste(img, (399, 0), alpha=True,below=True)
|
| 13 |
+
return make_png_or_gif(images, make)
|
| 14 |
add_meme(
|
| 15 |
"kurogames_camellya_red_hug",
|
| 16 |
kurogames_camellya_red_hug,
|
| 17 |
min_images=1,
|
| 18 |
max_images=1,
|
| 19 |
min_texts=0,
|
| 20 |
+
max_texts=0,
|
| 21 |
keywords=["红椿抱"],
|
| 22 |
tags=MemeTags.wuthering_waves,
|
| 23 |
date_created=datetime(2025, 12, 19),
|
| 24 |
+
date_modified=datetime(2026, 10, 12),
|
| 25 |
)
|
meme_generator/memes_emoji/kurogames_carlotta_play/__init__.py
CHANGED
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
-
from meme_generator.utils import
|
| 7 |
from meme_generator.tags import MemeTags
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
| 9 |
def kurogames_carlotta_play(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
@@ -32,7 +32,7 @@ def kurogames_carlotta_play(images: list[BuildImage], texts: list[str], args: Me
|
|
| 32 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 33 |
img = imgs[0].convert("RGBA").resize((290, 340)).rotate(-60, expand=True)
|
| 34 |
return frame.copy().paste(img, (1090, 920), alpha=True,below=True)
|
| 35 |
-
return
|
| 36 |
add_meme(
|
| 37 |
"kurogames_carlotta_play",
|
| 38 |
kurogames_carlotta_play,
|
|
@@ -43,5 +43,5 @@ add_meme(
|
|
| 43 |
keywords=["一边玩去吧","一边玩去"],
|
| 44 |
tags=MemeTags.wuthering_waves,
|
| 45 |
date_created=datetime(2025, 10, 11),
|
| 46 |
-
date_modified=datetime(
|
| 47 |
)
|
|
|
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
from meme_generator.exception import TextOverLength
|
| 6 |
+
from meme_generator.utils import make_png_or_gif
|
| 7 |
from meme_generator.tags import MemeTags
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
| 9 |
def kurogames_carlotta_play(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
|
|
| 32 |
def make(imgs: list[BuildImage]) -> BuildImage:
|
| 33 |
img = imgs[0].convert("RGBA").resize((290, 340)).rotate(-60, expand=True)
|
| 34 |
return frame.copy().paste(img, (1090, 920), alpha=True,below=True)
|
| 35 |
+
return make_png_or_gif(images, make)
|
| 36 |
add_meme(
|
| 37 |
"kurogames_carlotta_play",
|
| 38 |
kurogames_carlotta_play,
|
|
|
|
| 43 |
keywords=["一边玩去吧","一边玩去"],
|
| 44 |
tags=MemeTags.wuthering_waves,
|
| 45 |
date_created=datetime(2025, 10, 11),
|
| 46 |
+
date_modified=datetime(2026, 10, 12),
|
| 47 |
)
|
meme_generator/memes_emoji/kurogames_cartethyia/__init__.py
CHANGED
|
@@ -2,7 +2,6 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.exception import TextOverLength
|
| 6 |
from meme_generator.utils import make_png_or_gif
|
| 7 |
from meme_generator.tags import MemeTags
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
|
@@ -22,5 +21,5 @@ add_meme(
|
|
| 22 |
keywords=["卡提希娅","卡提"],
|
| 23 |
tags=MemeTags.wuthering_waves,
|
| 24 |
date_created=datetime(2026, 2, 16),
|
| 25 |
-
date_modified=datetime(2026,
|
| 26 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
|
|
|
| 5 |
from meme_generator.utils import make_png_or_gif
|
| 6 |
from meme_generator.tags import MemeTags
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
|
|
|
| 21 |
keywords=["卡提希娅","卡提"],
|
| 22 |
tags=MemeTags.wuthering_waves,
|
| 23 |
date_created=datetime(2026, 2, 16),
|
| 24 |
+
date_modified=datetime(2026, 10, 12),
|
| 25 |
)
|
meme_generator/memes_emoji/kurogames_cartethyia_feetup/__init__.py
CHANGED
|
@@ -2,8 +2,7 @@ from datetime import datetime
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
-
from meme_generator.
|
| 6 |
-
from meme_generator.utils import make_jpg_or_gif
|
| 7 |
from meme_generator.tags import MemeTags
|
| 8 |
img_dir = Path(__file__).parent / "images"
|
| 9 |
def kurogames_cartethyia_feetup(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
@@ -12,16 +11,16 @@ def kurogames_cartethyia_feetup(images: list[BuildImage], texts: list[str], args
|
|
| 12 |
img = imgs[0].convert("RGBA").resize((120, 120))
|
| 13 |
img = img.rotate(15, expand=True)
|
| 14 |
return frame.copy().paste(img, (395, 130), alpha=True, below=True )
|
| 15 |
-
return
|
| 16 |
add_meme(
|
| 17 |
"kurogames_cartethyia_feetup",
|
| 18 |
kurogames_cartethyia_feetup,
|
| 19 |
min_images=1,
|
| 20 |
max_images=1,
|
| 21 |
min_texts=0,
|
| 22 |
-
max_texts=
|
| 23 |
keywords=["卡提希娅抬脚","卡提抬脚"],
|
| 24 |
tags=MemeTags.wuthering_waves,
|
| 25 |
date_created=datetime(2025, 8, 12),
|
| 26 |
-
date_modified=datetime(
|
| 27 |
)
|
|
|
|
| 2 |
from pathlib import Path
|
| 3 |
from pil_utils import BuildImage
|
| 4 |
from meme_generator import MemeArgsModel, add_meme
|
| 5 |
+
from meme_generator.utils import make_png_or_gif
|
|
|
|
| 6 |
from meme_generator.tags import MemeTags
|
| 7 |
img_dir = Path(__file__).parent / "images"
|
| 8 |
def kurogames_cartethyia_feetup(images: list[BuildImage], texts: list[str], args: MemeArgsModel):
|
|
|
|
| 11 |
img = imgs[0].convert("RGBA").resize((120, 120))
|
| 12 |
img = img.rotate(15, expand=True)
|
| 13 |
return frame.copy().paste(img, (395, 130), alpha=True, below=True )
|
| 14 |
+
return make_png_or_gif(images, make)
|
| 15 |
add_meme(
|
| 16 |
"kurogames_cartethyia_feetup",
|
| 17 |
kurogames_cartethyia_feetup,
|
| 18 |
min_images=1,
|
| 19 |
max_images=1,
|
| 20 |
min_texts=0,
|
| 21 |
+
max_texts=0,
|
| 22 |
keywords=["卡提希娅抬脚","卡提抬脚"],
|
| 23 |
tags=MemeTags.wuthering_waves,
|
| 24 |
date_created=datetime(2025, 8, 12),
|
| 25 |
+
date_modified=datetime(2026, 10, 12),
|
| 26 |
)
|