收入 43 美元的拼豆 App,我把核心算法开源了

收入 43 美元的拼豆 App,我把核心算法开源了

去年 9 月,我开始做一款拼豆 App。今年 7 月上线,到今天运营了三个月。

这是它三个月的全部收入:43 美元。

这篇文章不讲鸡汤,也不卖课。我会把 App Store 后台的真实数据全部贴出来,给所有想做独立开发的朋友当一个参考样本 ------ 一个普通的、没成的样本。文章最后,我会把这个项目里唯一真正沉淀下来的东西 ------ 图像转拼豆图纸的核心算法 ------ 开源出来。

这个 App 是干什么的

先一句话解释拼豆:把彩色塑料小豆按图纸一颗颗摆在模板上,熨斗加热定型,得到一幅实体像素画。成本不高,很解压,是个有真实爱好者的小圈子。

玩家的痛点很直接:想拼自己的照片、喜欢的角色、爱豆的图,但把一张图变成图纸很麻烦 ------ 真实的豆子只有几百种固定色号(不同品牌色卡不一样,常见的三百色上下),模板格子是有限的,照片却是几百万种颜色、几百万个像素。"把任意图片翻译成用真实豆子在有限格子上能摆出来的图纸",就是这个小圈子的核心需求。

我做的 App「趣拼豆」就干这一件事:上传照片,生成拼豆图纸 ------ 网格、每格的色号、每种颜色需要多少颗豆,一目了然。

先上数据,全部真实

统计周期:2026 年 7 月 17 日 --- 10 月 14 日,约 90 天,App Store Connect 后台原始数据。

获客漏斗:

环节 数值
商店展示 245,000 次
产品页查看 6,950 次
首次下载 3,960 次

转化率:

转化 数值
展示 → 点进产品页 2.85%
产品页 → 下载 57%
下载 → 35 天内付费 0.8%

收入:

  • 应用内购买 30 次,销售额 US$43
  • 定价 8 元/月,当前有效订阅 8 个 ,月度经常性收入 US$14

留存(最难看的一项):

  • 三个月内订阅方案生效 28 次,流失 26 次
  • 也就是说,约 93% 的付费用户订完第一个月就走了

这些数据说明了什么

复盘这组数字,我的结论是:这不是一个"没人要"的产品,而是一个商业模式不成立的产品。拆开看:

1. 产品本身是合格的。 57% 的产品页转化率(常见区间是 30%--50%)说明看到页面的人认可它;0.8% 的下载转付费在工具类 App 里是正常水平。

2. 曝光端很弱。 24 万次展示只换来 2.85% 的点击率 ------ 绝大多数人在商店里直接划过去了。图标和前两屏截图没能在三秒内说清"这对你有什么用"。

3. 真正的死因是留存。 93% 的月度流失意味着:平均每个付费用户只付一个月,单用户终身价值(LTV)≈ 8 元人民币。而随便一个投放渠道的单次安装成本(CPI)都是几块钱起步 ------ 花 5 块钱买来一个用户,用户一辈子给你 8 块,扣掉平台抽成就是白忙甚至倒贴。 这个数学不改善,投流就是烧钱。

4. 所以"优化一下再投流"这条路,我在算账之后就放弃了。 把留存和定价修好,天花板大概是每月几百块;想把收入放大一个量级,需要的是我自己都不具备的投流预算和运营能力。继续投入,期望值为负。

十个月的开发复盘

2025 年 9 月动工,2026 年 7 月发布,十个月。

最开始我做的是网页版,后来判断真正的使用场景在手机上(玩家在茶几上拼豆,不会开着电脑),于是用 uni-app 重写成了 App。来来回回,等于做了两遍。

十个月里真正的大头时间花在算法上:照片 → 图纸这个转换,改了多少版我自己都数不清,到今天我也不能说满意。颜色怎么取、格子怎么降、豆色怎么映射,每个问题都没有标准答案,全是权衡。

一个人做产品的另一个真实体验是:写代码只占了三成时间。 剩下的七成是:图标和商店截图、隐私政策、支付接入、审核被拒再改、资质材料......这些事没有任何一件难,但它们不结束。

为什么把算法开源

这个项目我不会再投入了。但图像转拼豆图纸这个算法,是我这一年里真正沉淀下来的东西 ------ 它被我重写了无数遍,踩遍了该踩的坑。

拼豆、像素画、十字绣是个真实存在的小圈子,而"图片转图纸"这个轮子,值得有一个公开、能用、可以随便改的版本。与其让它烂在我的私有仓库里,不如放出来。

仓库地址:github.com/857god/pind...

算法到底难在哪

给想读代码的朋友一个导读。"图片转拼豆图纸"听起来一句话,做起来是三个互相打架的问题:

1. 网格降采样。 一张照片几百万像素,要压到比如 50×50 的格子上。每个格子取什么颜色?

这一步我走过弯路:老的那套降采样管线(pixelizeImageData)被一个硬编码的开关永远绕开了 ------ 代码还在,但那条分支永远进不去,所以抽取开源版时我把这 141 行直接删了。现在真正在跑的不是某个"高级采样核",而是一串组合:降采样 → 区域合并 → 色彩简化 → 采样增强 → 空间平滑。质量不是靠单点聪明换来的,是靠把这五步的档位调对。

另一个我比较满意的决定是"方板":格数恒等于「像素大小²」,源图等比缩放后居中,非等比的部分留白而不是拉伸,所以预览永远是正方形。拉伸会把一张竖构图的人物照压扁,留白只是损失边缘 ------ 这个取舍我认为后者更对。

还有两个工程上的教训。一是我曾经以为"不同图片该走不同策略",写了一套图像特征分析(检测噪点、渐变、细节、人像)想让参数自适应;抽库时实测发现那些封装在运行时被调用 0 次,从来没接上,纯属自嗨,所以没搬进仓库。二是为了能在没有浏览器的情况下测试这套算法,我把 canvas 用纯 JS 打了个等价实现(含双线性重采样),于是整条链在 Node 里也能跑 ------ 这一步后来救了命,因为没有它,我根本做不了下面说的"删完代码逐格比对"。

2. 色彩量化。 几百个色号里挑"最接近"的那个 ------ 问题全在"最近"怎么定义。

仓库里这份色号匹配器是我把原实现修好之后的版本,支持三种度量:默认 CIEDE2000(sRGB → CIELAB(D65) → CIEDE2000,最贴近人眼感知)、ΔE76(CIELAB 空间欧氏距离,更便宜、排序大体一致)、以及红均值加权的 RGB 距离(只给预览或低端机兜底)。

最值得说的一个 bug:用 k-d 树加速最近色搜索时,剪枝依据是"查询点到分割面的距离",这个量是 CIELAB 坐标差,只能和同量纲的距离比较 。而我原来的实现直接拿 CIEDE2000 的值去剪枝 ------ CIEDE2000 经过 SL/SC/SH 缩放,量纲不同,会剪掉真正更近的分支,实测在 418 色色卡、300 次随机查询里就能稳定复现错配。修法是从 ΔE00 公式本身推一个同量纲的下界(在 sRGB 色域上数值求得 SLmax=1.747、Smax=7.030、|RT|max=1.732,取 3% 安全余量后得到剪枝系数 1.8 / 20),于是 k-d 树的结果和全量扫描逐位一致,而不是"大概率一致"。

性能上留了三档:精确档(k-d 树)、fast 档(只取 ΔE76 下的 K 个最近邻,再用 CIEDE2000 重排 ------ 实测 418 色卡 2000 次查询里约 0.25% 与全局最优不一致,换来大量 CIEDE2000 计算被省掉)、加权 RGB 兜底。再加一层惰性 LUT 缓存(hex → 匹配结果),因为图像里重复色的命中率很高。

顺便一个隐蔽的坑:原实现会就地修改入参 ------ 对传入的色卡数组原地排序、并往色卡对象上写 lab 字段。同一个色卡对象被两个页面共享时,这种行为迟早会咬人,开源版改成了不改写入参。

3. 保真与可用的权衡。 严格取最近色,图纸会丢细节;加抖动(dithering)能保住观感,但玩家拼的时候会发现"一格一个色"极其痛苦。

抖动我实测过,然后删掉了 ------ Floyd--Steinberg 和 Atkinson 都实现过。它在拼豆场景是负优化:96 格下,孤立豆(四邻都不同色的格子)从 11 格涨到 350 格 ,耗时还多 3.5 倍。多出来的全是高频噪点,而玩家是要一颗一颗照着摆的 ------ 这等于把图纸变成一份不可执行的任务。

真正有效的反而是最朴素的一步:孤色清理。它把孤立豆从约 1.4% 降到约 0.2%,代价是被强改颜色的格子色差会变大。这是我认为整条链里最值的一个取舍。

最后说一个不太好听但真实的发现:结构层的"柔和降噪"、匹配层的"匹配层平滑"和"块面统一"这三个滑块,实测开到最大也几乎不改变结果。原因是它们判断的都是"邻域主色是否占优",而在这之前区域合并已经把平面区域抹平了,主色就是格子自己 ------ 判断永远成立,等于空转。界面上我保留了这些控件(与原页面一致),但如果你拉它们发现没反应,那不是 bug,是我当时没想明白就把旋钮装上了。

(「肤色自然」这个开关是有的:检测到肤色像素后对它们做更温和的调整。但它只在自定义模式下可用,标准模式下恒为关闭。)

仓库地址:github.com/857god/pind... ,欢迎 issue 和 PR,尤其欢迎拼豆玩家来告诉我哪里不像。

接下来的打算

这个 App 进入维护状态,不再加新功能,订阅价格我会调整一次然后放着。手里还有两个项目的核心算法(一个匿名聊天的匹配算法、一套 AI 聊天的工程实现),我会陆续整理开源,并把过程写下来。

如果你也在做独立开发,或者正打算跳进来:希望这组真实的、不漂亮的数据,比那些"月入十万"的帖子对你更有用。这个游戏的难,不在写代码,在于代码之外的一切。


作者:一名工作四年的前端,业余时间做独立开发。以上所有数据来自 App Store Connect 后台,未做任何修饰。

相关推荐
斯内普吖1 小时前
(开源)线上花店系统实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源
Web极客码2 小时前
告别慢速对话大模型:如何通过替换语言头,把开源 Qwen 改造成毫秒级文本分类器
开源·模型路由·qwen 改造
码点滴2 小时前
67000 星的开源语音引擎:用 VoiceStudio 搭建本地语音克隆与多语言配音流水线
开源·音视频
恒拓高科WorkPlus3 小时前
私有化IM技术选型:商业平台、开源IM和IM PaaS怎么选?
云原生·开源·paas
Vex2une3 小时前
获取 PowerToys - 从系统外挂工具到开源效率平台
windows·开源·效率工具·powertoys·fancyzones·command palette·键盘管理器
apple_692658855 小时前
GitHub fqapp 番茄开源魔改版:小短剧+漫剧+听书聚合工具 安装指南使用
学习·开源
鶴哥只手遮天5 小时前
Apache Subversion 1.15 源码深度剖析-第 3 章 文件系统层(FS 抽象与 FSFS 后端)
svn·开源
unconditional5 小时前
我把 nvm、jenv、pyenv 全卸了:一个 Rust 单文件管完 40+ 开发工具
开源
鶴哥只手遮天5 小时前
Apache Subversion 1.15 源码深度剖析-第 6 章 工作副本:WC-NG 与 pristineless
svn·开源