StickerBaker是一个完全开源的AI贴纸制作工具。用户只需输入一个提示词,便可以在Sticker Maker上生成独特的贴纸。
如何工作
在StickerBaker的主页,通过lib/sticker_web/home_live.ex渲染。当用户提交提示词表单后,将触发以下事件处理:
def handle_event("save", %{"prompt" => prompt}, socket) do
user_id = socket.assigns.local_user_id
{:ok, prediction} =
Predictions.create_prediction(%{
prompt: prompt,
local_user_id: user_id
})
send(self(), {:kick_off, prediction})
{:noreply,
socket
|> assign(form: to_form(%{"prompt" => ""}))
|> stream_insert(:my_predictions, prediction, at: 0)}
end
{:ok, prediction} =
Predictions.create_prediction(%{
prompt: prompt,
local_user_id: user_id
})
send(self(), {:kick_off, prediction})
{:noreply,
socket
|> assign(form: to_form(%{“prompt” => “”}))
|> stream_insert(:my_predictions, prediction, at: 0)}
end
这会发送一个:kick_off
消息到LiveView,这样就没有延迟。在lib/sticker/predictions.ex中调用Predictions.moderate/3
进行内容审核:
def moderate(prompt, user_id, prediction_id) do
"fofr/prompt-classifier"
|> Replicate.Models.get!()
|> Replicate.Models.get_latest_version!()
|> Replicate.Predictions.create(
%{
prompt: "[PROMPT] #{prompt} [/PROMPT] [SAFETY_RANKING]",
max_new_tokens: 128,
temperature: 0.2,
top_p: 0.9,
top_k: 50,
stop_sequences: "[/SAFETY_RANKING]"
},
"#{Sticker.Utils.get_host()}/webhooks/replicate?user_id=#{user_id}&prediction_id=#{prediction_id}"
)
end
完成审核后,通过Replicate的webhook处理预测队列,这意味着即使刷新页面或断开连接,Replicate仍然可以处理预测队列。
开发和生产环境配置
- 本地开发:
- 运行
mix setup
安装并设置依赖。 - 创建环境变量文件:
cp .env.copy .env
。 - 在.env文件中添加你的Replicate和Tigris令牌。
- 使用
ngrok http 4000
运行ngrok,并将URL添加到你的.env文件。 - 通过
mix phx.server
或iex -S mix phx.server
启动Phoenix服务器。
- 运行
- 生产环境:
- 在prod.exs中更新URL和check_origin设置。
- 使用
fly launch
进行部署,并确保设置了Postgres数据库。
StickerBaker不仅提供了一个创意和趣味性十足的平台,而且其开源和AI驱动的特性使其在个性化贴纸制作方面具有巨大的潜力。无论是为个人项目增添趣味,还是为商业用途创造独特的品牌贴纸,StickerBaker都是一个值得尝试的工具。