qwqcc commited on
Commit
cf07758
·
verified ·
1 Parent(s): 64aab1e

Upload 7 files

Browse files
Files changed (7) hide show
  1. .env.example +58 -0
  2. .gitignore +124 -0
  3. DEPLOYMENT.md +185 -0
  4. Dockerfile +35 -0
  5. README.md +57 -11
  6. app.py +54 -0
  7. requirements.txt +32 -0
.env.example ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Hugging Face Space 环境变量配置示例
2
+ # 复制此文件并根据需要在 Space 设置中配置环境变量
3
+
4
+ # ===========================================
5
+ # 翻译服务配置(可选)
6
+ # ===========================================
7
+ #
8
+ # 翻译功能主要用于以下表情包模板:
9
+ # - dianzhongdian (典中典/入典): 自动将中文翻译成日文
10
+ #
11
+ # 注意:350+ 个表情包模板中,只有极少数需要翻译功能
12
+ # 即使不配置翻译服务,应用也能正常工作
13
+ # ===========================================
14
+
15
+ # 翻译服务类型: openai 或 baidu (默认: openai)
16
+ TRANSLATOR_TYPE=openai
17
+
18
+ # 百度翻译配置
19
+ BAIDU_TRANS_APPID=your_baidu_app_id
20
+ BAIDU_TRANS_APIKEY=your_baidu_api_key
21
+
22
+ # OpenAI 翻译配置
23
+ OPENAI_API_BASE=https://api.openai.com/v1
24
+ OPENAI_API_KEY=your_openai_api_key
25
+ OPENAI_MODEL=gpt-3.5-turbo
26
+ OPENAI_TIMEOUT=30
27
+
28
+ # ===========================================
29
+ # 应用配置
30
+ # ===========================================
31
+
32
+ # 日志级别: DEBUG, INFO, WARNING, ERROR
33
+ LOG_LEVEL=INFO
34
+
35
+ # GIF 处理配置
36
+ GIF_MAX_SIZE=10.0
37
+ GIF_MAX_FRAMES=100
38
+
39
+ # ===========================================
40
+ # 服务器配置(通常不需要修改)
41
+ # ===========================================
42
+
43
+ # 服务器主机和端口(Hugging Face Spaces 会自动设置)
44
+ HOST=0.0.0.0
45
+ PORT=2233
46
+
47
+ # 主目录和配置目录(Docker 中已设置)
48
+ HOME=/app
49
+ XDG_CONFIG_HOME=/app/.config
50
+
51
+ # ===========================================
52
+ # 使用说明
53
+ # ===========================================
54
+
55
+ # 1. 在 Hugging Face Space 的 Settings 页面中添加环境变量
56
+ # 2. 只需要添加你实际需要的变量
57
+ # 3. 如果不配置翻译服务,应用仍然可以正常生成表情包
58
+ # 4. 翻译功能主要用于处理非中文文本输入
.gitignore ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ *.egg-info/
20
+ .installed.cfg
21
+ *.egg
22
+ MANIFEST
23
+
24
+ # PyInstaller
25
+ *.manifest
26
+ *.spec
27
+
28
+ # Installer logs
29
+ pip-log.txt
30
+ pip-delete-this-directory.txt
31
+
32
+ # Unit test / coverage reports
33
+ htmlcov/
34
+ .tox/
35
+ .coverage
36
+ .coverage.*
37
+ .cache
38
+ nosetests.xml
39
+ coverage.xml
40
+ *.cover
41
+ .hypothesis/
42
+ .pytest_cache/
43
+
44
+ # Translations
45
+ *.mo
46
+ *.pot
47
+
48
+ # Django stuff:
49
+ *.log
50
+ local_settings.py
51
+ db.sqlite3
52
+
53
+ # Flask stuff:
54
+ instance/
55
+ .webassets-cache
56
+
57
+ # Scrapy stuff:
58
+ .scrapy
59
+
60
+ # Sphinx documentation
61
+ docs/_build/
62
+
63
+ # PyBuilder
64
+ target/
65
+
66
+ # Jupyter Notebook
67
+ .ipynb_checkpoints
68
+
69
+ # pyenv
70
+ .python-version
71
+
72
+ # celery beat schedule file
73
+ celerybeat-schedule
74
+
75
+ # SageMath parsed files
76
+ *.sage.py
77
+
78
+ # Environments
79
+ .env
80
+ .venv
81
+ env/
82
+ venv/
83
+ ENV/
84
+ env.bak/
85
+ venv.bak/
86
+
87
+ # Spyder project settings
88
+ .spyderproject
89
+ .spyproject
90
+
91
+ # Rope project settings
92
+ .ropeproject
93
+
94
+ # mkdocs documentation
95
+ /site
96
+
97
+ # mypy
98
+ .mypy_cache/
99
+ .dmypy.json
100
+ dmypy.json
101
+
102
+ # IDE
103
+ .vscode/
104
+ .idea/
105
+ *.swp
106
+ *.swo
107
+ *~
108
+
109
+ # OS
110
+ .DS_Store
111
+ .DS_Store?
112
+ ._*
113
+ .Spotlight-V100
114
+ .Trashes
115
+ ehthumbs.db
116
+ Thumbs.db
117
+
118
+ # Logs
119
+ logs/
120
+ *.log
121
+
122
+ # Temporary files
123
+ tmp/
124
+ temp/
DEPLOYMENT.md ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Hugging Face Space 部署指南
2
+
3
+ 本文档介绍如何将 Meme Generator Unified 部署到 Hugging Face Spaces。
4
+
5
+ ## 🔧 重要更新 (v2.1.0)
6
+
7
+ **翻译服务配置已优化!** 现在默认使用 OpenAI 翻译服务,如果你设置了 OpenAI 配置,将不再需要百度翻译配置。
8
+ ## 📋 前置要求
9
+
10
+ - Hugging Face 账户
11
+ - Docker 镜像:`ghcr.io/syfantasy/meme-generator:latest`
12
+
13
+ ## 🚀 部署步骤
14
+
15
+ ### 1. 创建新的 Space
16
+
17
+ 1. 访问 [Hugging Face Spaces](https://huggingface.co/spaces)
18
+ 2. 点击 "Create new Space"
19
+ 3. 填写以下信息:
20
+ - **Space name**: `meme-generator-unified`
21
+ - **License**: MIT
22
+ - **SDK**: Docker
23
+ - **Hardware**: CPU basic (免费) 或 CPU upgrade (付费,性能更好)
24
+
25
+ ### 2. 配置 Space
26
+
27
+ 1. 将本目录下的所有文件上传到你的 Space 仓库
28
+ 2. 确保以下文件存在:
29
+ - `README.md` - Space 的主页面和配置
30
+ - `Dockerfile` - Docker 配置文件
31
+ - `.gitignore` - Git 忽略文件
32
+
33
+ ### 3. 配置说明
34
+
35
+ #### README.md 配置
36
+ ```yaml
37
+ ---
38
+ title: Meme Generator Unified
39
+ emoji: 🎭
40
+ colorFrom: blue
41
+ colorTo: purple
42
+ sdk: docker
43
+ pinned: false
44
+ license: mit
45
+ app_port: 2233
46
+ ---
47
+ ```
48
+
49
+ #### Dockerfile 配置
50
+ ```dockerfile
51
+ FROM ghcr.io/syfantasy/meme-generator:latest
52
+
53
+ # 设置工作目录
54
+ WORKDIR /app
55
+
56
+ # 创建必要的目录并设置权限,同时创建一个默认配置文件
57
+ RUN mkdir -p /app/.config/meme_generator && \
58
+ chmod -R 777 /app/.config && \
59
+ echo '[meme]' > /app/.config/meme_generator/config.toml && \
60
+ echo 'load_builtin_memes = true' >> /app/.config/meme_generator/config.toml && \
61
+ echo 'meme_dirs = ["/data/contrib", "/data/emoji"]' >> /app/.config/meme_generator/config.toml && \
62
+ echo 'meme_disabled_list = []' >> /app/.config/meme_generator/config.toml && \
63
+ echo '' >> /app/.config/meme_generator/config.toml && \
64
+ echo '[server]' >> /app/.config/meme_generator/config.toml && \
65
+ echo 'host = "0.0.0.0"' >> /app/.config/meme_generator/config.toml && \
66
+ echo 'port = 2233' >> /app/.config/meme_generator/config.toml && \
67
+ echo '' >> /app/.config/meme_generator/config.toml && \
68
+ echo '[log]' >> /app/.config/meme_generator/config.toml && \
69
+ echo 'log_level = "INFO"' >> /app/.config/meme_generator/config.toml && \
70
+ chmod 666 /app/.config/meme_generator/config.toml
71
+
72
+ # 暴露端口
73
+ EXPOSE 2233
74
+
75
+ # 设置环境变量
76
+ ENV HOST=0.0.0.0
77
+ ENV PORT=2233
78
+ ENV HOME=/app
79
+ ENV XDG_CONFIG_HOME=/app/.config
80
+
81
+ CMD ["python", "-m", "meme_generator.app"]
82
+ ```
83
+
84
+ ### 4. 环境变量(可选)
85
+
86
+ #### 翻译功能说明
87
+
88
+ 翻译功能主要用于以下表情包模板:
89
+
90
+ - **dianzhongdian (典中典/入典)**: 当只提供一个文本时,会自动将中文翻译成日文显示
91
+ - 使用场景:制作"典中典"风格的黑白草图表情包
92
+ - 翻译方向:中文 → 日文
93
+ - 如果不配置翻译服务,该模板仍可使用,但需要手动提供两个文本(中文和日文)
94
+
95
+ **注意**: 大部分表情包模板(350+ 个中的 99%)都不需要翻译功能,即使不配置翻译服务,应用也能正常工作。
96
+
97
+ 如果需要配置翻译服务,可以在 Space 设置中添加以下环境变量:
98
+
99
+ #### 翻译服务配置
100
+ - `TRANSLATOR_TYPE`: 翻译服务类型,可选值:
101
+ - `openai` - 使用 OpenAI 翻译(默认,推荐)
102
+ - `baidu` - 使用百度翻译
103
+
104
+ #### 百度翻译
105
+ - `BAIDU_TRANS_APPID`: 百度翻译 APP ID
106
+ - `BAIDU_TRANS_APIKEY`: 百度翻译 API Key
107
+
108
+ #### OpenAI 翻译
109
+ - `OPENAI_API_BASE`: OpenAI API 基础URL
110
+ - `OPENAI_API_KEY`: OpenAI API Key
111
+ - `OPENAI_MODEL`: 使用的模型(默认:gpt-3.5-turbo)
112
+ - `OPENAI_TIMEOUT`: 请求超时时间(秒,默认:30)
113
+
114
+ #### 其他配置
115
+ - `LOG_LEVEL`: 日志级别(默认:INFO)
116
+ - `GIF_MAX_SIZE`: GIF 最大文件大小(MB,默认:10.0)
117
+ - `GIF_MAX_FRAMES`: GIF 最大帧数(默认:100)
118
+
119
+ ### 5. 部署验证
120
+
121
+ 部署完成后,你可以:
122
+
123
+ 1. **访问 Web 界面**: 直接在 Space 页面使用
124
+ 2. **API 调用**: 使用 Space 的 URL 进行 API 调用
125
+ 3. **查看文档**: 访问 `/docs` 查看 API 文档
126
+
127
+ ## 🔧 故障排除
128
+
129
+ ### 常见问题
130
+
131
+ 1. **权限错误 (Permission denied)**
132
+ ```
133
+ PermissionError: [Errno 13] Permission denied: '/.config'
134
+ PermissionError: [Errno 13] Permission denied: '/app/.config/meme_generator/config.toml'
135
+ ```
136
+ **解决方案**:
137
+ - 确保 Dockerfile 中包含了目录创建和权限设置
138
+ - 设置正确的环境变量 `HOME=/app` 和 `XDG_CONFIG_HOME=/app/.config`
139
+ - 预先创建配置文件并设置写入权限 `chmod 666`
140
+ - 使用 `chmod 777` 确保目录有完全权限
141
+
142
+ 2. **容器启动失败**
143
+ - 检查 Dockerfile 语法
144
+ - 确认 Docker 镜像可访问
145
+ - 查看 Space 日志
146
+
147
+ 3. **端口访问问题**
148
+ - 确认 `app_port: 2233` 在 README.md 中正确设置
149
+ - 检查��器内服务是否绑定到 `0.0.0.0:2233`
150
+
151
+ 4. **内存不足**
152
+ - 考虑升级到付费的 CPU upgrade 硬件
153
+ - 优化 Docker 镜像大小
154
+
155
+ ### 日志查看
156
+
157
+ 在 Space 页面的 "Logs" 标签中可以查看:
158
+ - 容器启动日志
159
+ - 应用运行日志
160
+ - 错误信息
161
+
162
+ ## 📊 性能优化
163
+
164
+ ### 硬件选择
165
+ - **CPU basic**: 免费,适合轻量使用
166
+ - **CPU upgrade**: 付费,更好的性能和稳定性
167
+ - **GPU**: 如果有图像处理需求可考虑
168
+
169
+ ### 缓存优化
170
+ - Docker 镜像会被缓存,重复部署速度更快
171
+ - 应用启动后会保持运行状态
172
+
173
+ ## 🔗 相关链接
174
+
175
+ - [Hugging Face Spaces 文档](https://huggingface.co/docs/hub/spaces)
176
+ - [Docker SDK 指南](https://huggingface.co/docs/hub/spaces-sdks-docker)
177
+ - [项目 GitHub 仓库](https://github.com/syfantasy/meme-generator-unified)
178
+ - [Docker 镜像](https://ghcr.io/syfantasy/meme-generator:latest)
179
+
180
+ ## 📞 支持
181
+
182
+ 如果遇到问题,可以:
183
+ 1. 查看 Space 日志
184
+ 2. 检查 GitHub 仓库的 Issues
185
+ 3. 参考项目文档中的故障排除指南
Dockerfile ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM ghcr.io/1111qwq1111/meme-generator:latest
2
+
3
+ # 设置工作目录
4
+ WORKDIR /app
5
+
6
+ # 创建必要的目录并设置权限,同时创建一个默认配置文件
7
+ RUN mkdir -p /app/.config/meme_generator && \
8
+ chmod -R 777 /app/.config && \
9
+ echo '[meme]' > /app/.config/meme_generator/config.toml && \
10
+ echo 'load_builtin_memes = true' >> /app/.config/meme_generator/config.toml && \
11
+ echo 'meme_dirs = ["/data/contrib", "/data/emoji"]' >> /app/.config/meme_generator/config.toml && \
12
+ echo 'meme_disabled_list = []' >> /app/.config/meme_generator/config.toml && \
13
+ echo '' >> /app/.config/meme_generator/config.toml && \
14
+ echo '[server]' >> /app/.config/meme_generator/config.toml && \
15
+ echo 'host = "0.0.0.0"' >> /app/.config/meme_generator/config.toml && \
16
+ echo 'port = 2233' >> /app/.config/meme_generator/config.toml && \
17
+ echo '' >> /app/.config/meme_generator/config.toml && \
18
+ echo '[translate]' >> /app/.config/meme_generator/config.toml && \
19
+ echo 'translator_type = "openai"' >> /app/.config/meme_generator/config.toml && \
20
+ echo '' >> /app/.config/meme_generator/config.toml && \
21
+ echo '[log]' >> /app/.config/meme_generator/config.toml && \
22
+ echo 'log_level = "INFO"' >> /app/.config/meme_generator/config.toml && \
23
+ chmod 666 /app/.config/meme_generator/config.toml
24
+
25
+ # 暴露端口
26
+ EXPOSE 2233
27
+
28
+ # 设置环境变量
29
+ ENV HOST=0.0.0.0
30
+ ENV PORT=2233
31
+ ENV HOME=/app
32
+ ENV XDG_CONFIG_HOME=/app/.config
33
+
34
+ # 启动命令
35
+ CMD ["python", "-m", "meme_generator.app"]
README.md CHANGED
@@ -1,11 +1,57 @@
1
- ---
2
- title: Meme
3
- emoji: 📈
4
- colorFrom: pink
5
- colorTo: red
6
- sdk: docker
7
- pinned: false
8
- short_description: meme
9
- ---
10
-
11
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Meme Generator Unified
3
+ emoji: 🎭
4
+ colorFrom: blue
5
+ colorTo: purple
6
+ sdk: docker
7
+ pinned: false
8
+ license: mit
9
+ app_port: 2233
10
+ ---
11
+
12
+ # Meme Generator Unified
13
+
14
+ 一个功能强大的表情包生成器,整合了350+个表情包模板,支持多种风格和类型的表情包制作。
15
+
16
+ ## 🚀 功能特性
17
+
18
+ - **丰富模板**: 350+ 个表情包模板
19
+ - **多种类型**: 支持静态图片和动态GIF
20
+ - **API接口**: 完整的RESTful API
21
+ - **翻译支持**: 集成百度翻译和OpenAI翻译
22
+ - **高质量输出**: 支持多种图片格式和分辨率
23
+
24
+ ## 📖 使用方法
25
+
26
+ ### Web界面
27
+ 访问应用后,可以通过Web界面选择模板并生成表情包。
28
+
29
+ ### API调用
30
+ ```bash
31
+ # 获取所有可用的表情包模板
32
+ curl https://your-space-url/memes/keys
33
+
34
+ # 生成表情包
35
+ curl -X POST https://your-space-url/memes/petpet/ \
36
+ -F "images=@your-image.jpg"
37
+ ```
38
+
39
+ ## 🛠️ 技术栈
40
+
41
+ - **后端**: FastAPI + Python
42
+ - **图像处理**: Pillow + OpenCV
43
+ - **容器化**: Docker
44
+ - **部署**: Hugging Face Spaces
45
+
46
+ ## 📚 API文档
47
+
48
+ 启动后访问 `/docs` 查看完整的API文档。
49
+
50
+ ## 🔗 相关链接
51
+
52
+ - [GitHub仓库](https://github.com/syfantasy/meme-generator-unified)
53
+ - [Docker镜像](https://ghcr.io/syfantasy/meme-generator:latest)
54
+
55
+ ## 📄 许可证
56
+
57
+ 本项目采用 MIT 许可证。
app.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ Hugging Face Space 启动脚本
4
+ 主要使用 Docker 部署,此文件作为备用
5
+ """
6
+
7
+ import os
8
+ import sys
9
+ import subprocess
10
+ from pathlib import Path
11
+
12
+ def main():
13
+ """主启动函数"""
14
+ print("🎭 Meme Generator Unified - Hugging Face Space")
15
+ print("=" * 50)
16
+
17
+ # 检查是否在容器环境中
18
+ if os.path.exists("/.dockerenv"):
19
+ print("✅ 检测到 Docker 容器环境")
20
+
21
+ # 设置环境变量
22
+ os.environ.setdefault("HOST", "0.0.0.0")
23
+ os.environ.setdefault("PORT", "2233")
24
+
25
+ print(f"🌐 服务将启动在: {os.environ['HOST']}:{os.environ['PORT']}")
26
+
27
+ try:
28
+ # 启动应用
29
+ print("🚀 启动 Meme Generator 服务...")
30
+ subprocess.run([
31
+ sys.executable, "-m", "meme_generator.app"
32
+ ], check=True)
33
+ except subprocess.CalledProcessError as e:
34
+ print(f"❌ 启动失败: {e}")
35
+ sys.exit(1)
36
+ except KeyboardInterrupt:
37
+ print("\n👋 服务已停止")
38
+ sys.exit(0)
39
+ else:
40
+ print("⚠️ 未检测到 Docker 环境")
41
+ print("📖 请参考 DEPLOYMENT.md 了解正确的部署方式")
42
+ print("🐳 推荐使用 Docker 部署: ghcr.io/syfantasy/meme-generator:latest")
43
+
44
+ # 显示帮助信息
45
+ print("\n📋 部署步骤:")
46
+ print("1. 确保所有文件已上传到 Hugging Face Space")
47
+ print("2. 检查 README.md 中的配置")
48
+ print("3. 确认 Dockerfile 正确")
49
+ print("4. Space 会自动构建和部署")
50
+
51
+ sys.exit(1)
52
+
53
+ if __name__ == "__main__":
54
+ main()
requirements.txt ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 本文件仅作为参考,实际依赖已包含在 Docker 镜像中
2
+ # Docker 镜像: ghcr.io/syfantasy/meme-generator:latest
3
+
4
+ # 核心依赖
5
+ fastapi>=0.104.0
6
+ uvicorn[standard]>=0.24.0
7
+ pillow>=10.0.0
8
+ opencv-python-headless>=4.8.0
9
+ numpy>=1.24.0
10
+ pydantic>=2.0.0
11
+ toml>=0.10.2
12
+
13
+ # 翻译服务
14
+ requests>=2.31.0
15
+ openai>=1.0.0
16
+
17
+ # 图像处理
18
+ imageio>=2.31.0
19
+ imageio-ffmpeg>=0.4.8
20
+
21
+ # 字体支持
22
+ fonttools>=4.42.0
23
+
24
+ # 工具库
25
+ python-multipart>=0.0.6
26
+ jinja2>=3.1.2
27
+ aiofiles>=23.2.1
28
+
29
+ # 开发工具(可选)
30
+ pytest>=7.4.0
31
+ black>=23.7.0
32
+ isort>=5.12.0