[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-11318":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":14,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":15,"starSnapshotCount":15,"syncStatus":16,"lastSyncTime":28,"discoverSource":29},11318,"LifeManga","iam567\u002FLifeManga","iam567","ios swift swiftui openai gpt-image manga ai-art","",null,"Swift",341,92,1,0,2,31,3,52.01,"MIT License",false,"main",true,[],"2026-06-12 04:00:54","# 漫画人生 · LifeManga\n> 这是在家里闲着没事，随手写的一个项目。本身不想靠这些闲暇时间搞出来的东西盈利，索性把源码公开出来，让大家都可以自由的去使用。\n> 把生活中随手拍的照片，自动转化成日式漫画风格的 iOS App。\n> 内置工程管理、角色库、故事模式、后台任务系统。\n\n**技术栈**：SwiftUI · Swift 5 · iOS 17+ · OpenAI `gpt-image-2`（图像）+ GPT-5 系列（编剧）\n\n---\n\n## 功能\n\n### 创作\n- 多张参考图（拍照 \u002F 多选相册）→ 一张 \u002F 多张漫画图\n- **8 种漫画风格** 一键切换：少年 Jump 风、日常治愈风、暗黑剧情风、复古剧画风、萌系四格、运动热血、科幻机甲、悬疑氛围\n- **彩色 \u002F 黑白** 任意切换\n- **气泡文字** 5 种模式：中文 \u002F 日文 \u002F 英文 \u002F 留空 \u002F 不画气泡\n- 自由补充 prompt（\"主角戴墨镜\"\"下雨场景\"…）\n\n### 工程化\n- 「工程」概念隔离每部漫画。每个工程下有独立的「创作 \u002F 历史」分区\n- **「前一张」** 续接：从历史里挑一张作为风格参考，新一张能续接画风、人物造型、剧情\n\n### 角色库\n- 从真人照片生成多视图设定稿，支持 9 种艺术风格：日漫风 \u002F 美漫风 \u002F 韩漫风 \u002F 萌系 \u002F Q 版 \u002F 3D 渲染 \u002F 半写实 \u002F 水彩 \u002F 像素风\n- 「动作姿势池」：5 大类共 30+ 个姿势，多选一次出图（合并成一张设定稿，省 token）\n- 角色可被「载入」到任意创作页作为参考图\n\n### 故事模式\n- 第 1 步：GPT-5 看你的照片自动写多格剧本（标题 \u002F 概要 \u002F 每格台词与画面）\n- 第 2 步：剧本可由你编辑后再画\n- 自动控制 2~9 格分镜数\n\n### 任务系统\n- 全部图像生成走 `URLSessionConfiguration.background`，**锁屏 \u002F 切 App 不会中断**，完成后系统通知\n- 任务面板实时显示日志、首字节时刻、已运行时长、错误码\n- 失败 \u002F 超时未知任务可手动「重新生成」，输入图自动恢复\n- **绝不自动重试** `gpt-image-2`：图像生成是长 GPU 任务，超时后无法判断 OpenAI 是否仍在跑，自动 retry 会重复扣费\n- 同 hash 请求 60 秒内拦截，防误触\n\n---\n\n## 截图\n\n### 创作页\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"doc\u002Fhome.jpg\" alt=\"创作页\" width=\"320\">\n\u003C\u002Fp>\n\n选素材图、续接前一张、载入角色、挑风格、补充 prompt——一个屏幕讲完。\n\n### 几张实际生成出来的漫画\n\n| 萌系四格 · 永康牛肉面 | 经典少年 Jump 风 · 大阪游记 | 经典少年 Jump 风 · 雪夜炸物 |\n|:---:|:---:|:---:|\n| \u003Cimg src=\"doc\u002Foutput-chibi.jpg\" alt=\"萌系四格\" width=\"240\"> | \u003Cimg src=\"doc\u002Foutput-jump-osaka.jpg\" alt=\"Jump大阪\" width=\"240\"> | \u003Cimg src=\"doc\u002Foutput-jump-snow.jpg\" alt=\"Jump雪夜\" width=\"240\"> |\n\n> 这几张都是 App 里直接拍照 \u002F 选图 + 选角色 + 选风格生成的，没有任何后期。\n\n---\n\n## 跑起来的 7 步清单\n\n> 全程大概 15 分钟，前提是已经有 Apple ID + OpenAI 账号。\n\n### ① 装 Xcode 15+\n\nApp Store 装最新 Xcode（macOS 也得够新，Xcode 15 要 macOS 13.5 起步）。\n\n### ② Clone 项目\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fiam567\u002FLifeManga.git\ncd LifeManga\u002FLifeManga\nopen LifeManga.xcodeproj\n```\n\n### ③ 改 Bundle ID + 选 Team\n\nXcode 顶部选中 `LifeManga` target → **Signing & Capabilities**：\n\n- **Team**：从下拉选自己的 Apple ID（没有就点 \"Add an Account...\" 登录，**免费 Apple ID 也能签**）\n- **Bundle Identifier**：改成 `com.\u003C你的名字>.lifemanga` 这种唯一字符串。**这步必须改**——`com.iam567.lifemanga` 我已经占了，撞 ID 苹果不让签\n\n### ④ 真机运行\n\n- iPhone 用数据线连 Mac → 解锁 → 弹\"信任这台电脑\"点信任\n- Xcode 顶部设备选择器选你的 iPhone\n- ⌘R 编译并安装到手机\n\n> 模拟器也能跑，但拍照功能没法用（模拟器没摄像头）。从相册选图、做漫画都正常。\n\n### ⑤ iPhone 上信任开发者证书\n\n第一次跑会弹\"未受信任的企业级开发者\"导致 App 闪退。去：\n\n设置 → 通用 → VPN与设备管理 → 找到你的 Apple ID → 点信任 → 回到桌面再点 App 就能进了\n\n### ⑥ App 内填 OpenAI API Key\n\n进入 App 后顶部会有黄色提示 → 设置 Tab → 粘贴 `sk-...` Key → 保存。\n\n> Key 只存在本机 iOS Keychain，源码不含任何 Key。\n> [platform.openai.com\u002Fapi-keys](https:\u002F\u002Fplatform.openai.com\u002Fapi-keys) 申请。\n\n### ⑦ 完成 OpenAI Organization 验证\n\n`gpt-image-2` 不是开箱即用的——OpenAI 强制要求做 organization 验证，没验证调用直接报 403。\n\n[platform.openai.com](https:\u002F\u002Fplatform.openai.com) → Settings → Organization → **Verify Organization**（一般要交身份证 \u002F 护照照片，1~2 个工作日审核）。\n\n完成后回 App 试着生成一张漫画，能出图就成功了。🎉\n\n---\n\n## 容易踩的坑\n\n| 坑 | 现象 | 解决 |\n|---|---|---|\n| **免费 Apple ID 签的 App 7 天后过期** | 一周后打开 App 闪退 | 重新连 Mac ⌘R 一次重签；或者付 $99\u002F年开发者账号 |\n| **免费 Apple ID 设备装机限制** | 装到第 11 个 App 时报错 | 一个免费 ID 一年只能装 10 个不同 App，删几个旧的 |\n| **iOS 版本太老** | Xcode 跑到设备上提示 \"iOS 17.0 or later required\" | iPhone 升级到 iOS 17+，或者把 `IPHONEOS_DEPLOYMENT_TARGET` 调低（部分 SwiftUI 17 API 会失效） |\n| **OpenAI 余额 $0** | 任何调用都 401 \u002F `insufficient_quota` | 去 platform.openai.com → Billing 充 $5 起步 |\n| **没做 organization 验证** | 调 `gpt-image-2` 报 403 `must verify organization` | 见上面第 ⑦ 步 |\n| **国内网络** | 请求超时 \u002F 挂 90 秒报错 | OpenAI API 在国内直连不通，需自行解决网络环境 |\n| **同一台 iPhone 有多人的 LifeManga** | 数据混在一起 | 现在每个 Bundle ID 的 App 是独立沙盒，只要 ③ 步换了 Bundle ID 就互不干扰 |\n\n---\n\n## 项目结构\n\n```\nLifeManga\u002F                              # 仓库根\n├── README.md\n├── LICENSE\n├── .gitignore\n└── LifeManga\u002F                          # Xcode 项目根\n    ├── LifeManga.xcodeproj\n    └── LifeManga\u002F                      # 主 target 源码\n        ├── LifeMangaApp.swift          # App 入口\n        ├── Assets.xcassets             # AppIcon、AccentColor\n        ├── Models\u002F\n        │   ├── MangaStyle.swift        # 8 种漫画风格 + prompt\n        │   ├── MangaItem.swift         # 工程 \u002F 作品 \u002F 角色 \u002F 剧本 \u002F 日志\n        │   └── AppSettings.swift       # 全局设置\n        ├── Services\u002F\n        │   ├── KeychainService.swift   # API Key Keychain 存储\n        │   ├── OpenAIService.swift     # \u002Fv1\u002Fimages\u002Fedits 与 \u002Fv1\u002Fchat\u002Fcompletions 调用、后台 URLSession、错误归类\n        │   └── MangaStorage.swift      # 工程 \u002F 作品 \u002F 角色 \u002F 任务 \u002F 日志 持久化\n        ├── ViewModels\u002F\n        │   └── MangaGeneratorViewModel.swift\n        └── Views\u002F\n            ├── ContentView.swift       # 三大 Tab + 任务面板 + 日志面板\n            ├── HomeView.swift          # 创作主页\n            ├── MangaDetailView.swift   # 作品详情\n            ├── HistoryView.swift       # 历史 \u002F 收藏\n            ├── SettingsView.swift      # 设置\n            └── ImagePickerView.swift   # 相机包装\n```\n\n---\n\n## 关键技术点\n\n| 关注点 | 实现 |\n|---|---|\n| 后台不中断 | `URLSessionConfiguration.background(withIdentifier:)` + delegate 累积 data |\n| 多图上传 | `multipart\u002Fform-data`，`image[]` 字段，先写临时文件再 `uploadTask(fromFile:)` |\n| 上传体积 | 强制 `UIGraphicsImageRendererFormat.scale = 1.0`，JPEG 0.85 起步迭代压到 ≤500KB |\n| 超时策略 | URLSession `timeoutForRequest = 300s` \u002F `timeoutForResource = 600s`，**没有自动 retry** |\n| 防重复扣费 | 输入指纹 `OpenAIImageRequest.fingerprint`，60 秒内同 hash 拦截 |\n| 编剧 LLM | `gpt-5-mini` \u002F `gpt-5` 通过 `\u002Fv1\u002Fchat\u002Fcompletions` + `response_format=json_object` |\n| 剧本结构 | `MangaStoryScript { title, summary, panels[].caption\u002Fdialog\u002Fvisual }` |\n| API Key 安全 | iOS Keychain，`kSecAttrAccessibleAfterFirstUnlock` |\n| 任务状态机 | `running → done \u002F failed \u002F timeoutUnknown`，App 重启时残留 running 归入 timeoutUnknown 而非 failed |\n| 任务日志 | 内存中按 jobId 累积 200 条，含 INFO \u002F SUCCESS \u002F WARNING \u002F ERROR \u002F DETAIL 五级 |\n| 输入图快照 | 失败任务的输入图自动落盘到 `Documents\u002FPendingJobInputs\u002F\u003CjobId>\u002F`，供「重新生成」恢复 |\n\n---\n\n## 添加新的漫画风格\n\n打开 `Models\u002FMangaStyle.swift`：\n\n1. enum 加一个 case，如 `case cyberpunk`\n2. 在 `displayName` \u002F `subtitle` \u002F `prompt` 几个 switch 里补齐\n3. UI 不用改，画廊和选择器自动出现\n\nprompt 写法建议：英文为主，4–6 句具体描述线条、阴影、风格参考、情绪氛围。\n\n---\n\n## 常见问题\n\n**生成报 `must verify organization` (403)?**\n`gpt-image-2` 需要在 OpenAI 后台完成 organization 验证。\n\n**任务卡在 OpenAI 90 秒就超时了？**\nURLSession 已经放到 600s，wall-clock 也已删掉。如果你 fork 之后还是 90s，确认你跑的是最新代码（`OpenAIService.swift` 里 `timeoutIntervalForResource = 600`）。\n\n**任务变成「结果未知」（橙色）？**\n说明客户端没收到响应、但 OpenAI 端可能正在跑或已经成功——避免无脑重试导致重复扣费。点重新生成前会弹确认框。\n\n**生成很慢？**\n画质 `high` 显著变慢，建议 `medium`。一次 1 张 比 4 张 快很多。多张参考图（>3 张）也会拖慢 OpenAI 处理速度。\n\n**模拟器里点拍照没反应？**\n模拟器没摄像头，按钮会自动禁用。请用真机或从相册选。\n\n---\n\n## 贡献\n\n欢迎提 Issue \u002F PR。新功能建议先开 Issue 讨论一下，避免做完了方向不一致。\n\n---\n\n## License\n\n[MIT](.\u002FLICENSE) — 随便用、随便改、随便商用，有良心的提一下我的X账号：@iam678 就可以。\n\nOpenAI API 调用产生的费用由你的 OpenAI 帐号承担，本项目作者不负责任何账单。\n","LifeManga 是一款将生活照片自动转化为日式漫画风格的 iOS 应用。其核心功能包括多张参考图一键转换成多种漫画风格、内置的角色库和故事模式，以及强大的后台任务系统。应用利用 SwiftUI 和 Swift 5 开发，支持 iOS 17+，并集成了 OpenAI 的 GPT-5 系列和 gpt-image-2 技术来生成图像和剧本。用户可以自由选择不同的漫画风格（如少年 Jump 风、日常治愈风等）和气泡文字模式，并通过角色库自定义人物造型。此外，应用还提供工程管理和续接功能，方便用户组织和延续创作。该应用适合喜欢漫画创作或希望以新颖方式记录生活的用户使用。","2026-06-11 03:31:39","CREATED_QUERY"]