# 听文视频工作台 — 完整公开资料 招商合作微信:wzqy2019。添加备注:听文合作。合作联系页:https://tingwen-creator-studio-102.pages.dev/contact/ 产品功能 · 一套完整的创作工具 文案配音与照片视频, 一套工作台完成。 打开全部功能文档 ↗ Android 创作页 · 当前版本测试界面 浏览器检查截图,示例内容,非用户作品。 01 文案输入与清洗 直接粘贴、TXT / MD 导入、实时计数、清洗与一次撤销。长文自动分段配音,无需手工拆成许多小文件。 看文案与标题规则 → 02 26 种音色,先试听再选择 包含普通话、方言、港台及多语言预设。新配音通过在线 TTS 生成,音色选择播放 APK 内置样音。 试听 · 云健 03 三种画面来源,按需求选择 自选手机照片、公开图片直链,或可选 Seedream AI 配图。AI 模型 Pro / Flash 可选,使用自己的 Key 并确认费用。 看图片规格与费用 → 04 标题排版与 1080p 本机合成 可选主副标题,首张画面叠字,完整照片居中、模糊背景补齐。输出兼容常见播放器的 MP4,原始 MP3 也可单独保存。 看视频输出与检查 → 任务可控 分阶段进度、暂停、继续、取消、失败重试 素材可复用 保留 MP3 换图、删除图库照片、重新确认 作品可交付 播放、系统另存、MP3 / MP4 分享 过程可追溯 草稿、历史任务、运行日志、JSON 导出 公开作品 · 内容题材参考 让具体作品,打开你的创作想象。 科技解说、影视文化、热点观察、知识分享与产品讲解。八个原片封面,展示不同题材如何走向声音与画面。 查看全部案例 → 移动信息杂谈 · 科技资讯解说 500 亿砸向北方小城!乌兰察布,凭什么成为 AI 算力黑马 以城市与 AI 算力为主题的公开作品,展示科技资讯题材的内容表达。 ▶ 观看头条原片 ↗ 移动信息杂谈 · 产品功能讲解 AI电话助理接话全流程!这波操作真的太香了✨ 围绕 AI 电话助理的功能讲解题材。电话助理是此作品主题,不是工作台内置功能。 ▶ 观看头条原片 ↗ 移动信息杂谈 · 实用知识分享 如何拦截诈骗来电?从运营商到手机,手把手教你全部设防? 以诈骗来电防范为主题的实用知识作品,适合参考讲解与教程型内容选题。 ▶ 观看头条原片 ↗ 移动信息杂谈 · 排行清单内容 热门高薪专业 top 10 排行与清单题材的公开作品,原页面标注个人观点,仅供参考。 ▶ 观看头条原片 ↗ 移动信息杂谈 · 影视文化解说 张艺谋赌上全部!单部拍完百万字《三体》,为何全球没人拍好? 围绕《三体》影视改编的话题解说作品,用于展示影视文化类内容题材。 ▶ 观看头条原片 ↗ 移动信息杂谈 · 国际热点观察 深圳 APEC 临近,外交称谓风波爆发!日本一边示好一边留后手 以国际话题为选题的公开解说作品,展示热点观察类内容的表达方式。 ▶ 观看头条原片 ↗ 移动信息杂谈 · 社会话题解说 59000人全部押回!缅北四大家族连根覆灭,中国这次绝不手软 以跨境电诈治理为主题的公开解说作品,展示社会话题型内容表达。 ▶ 观看头条原片 ↗ 移动信息杂谈 · 通信科技解说 全球6G终极博弈打响!中美领跑,谁能拿下未来话语权? 围绕6G技术竞争与产业话题的科技解说作品,适合参考技术科普与行业观察型选题。 ▶ 观看头条原片 ↗ 你的内容,也值得被听见。 从一段文案、一组照片开始。免费试用与招商合作微信: wzqy2019 。 我也想制作这样的内容 ↗ 案例由产品提供方指定展示。已核实公开页面的标题、发布者和发布时间;缩略图来自对应头条原视频页面,点击查看完整原片。案例题材不等同于软件功能,不据此承诺制作来源、播放量或商业效果。 为认真做内容的创作者而来 文案有声音。 故事有 画面。 把一篇文案、一组照片,做成可交付的配音与视频。 听文视频工作台,让创作从想法走向作品。 ▣ PC 电脑工作台 ▯ Android 独立客户端 获取免费试用 ↗ 看懂制作过程 ↓ 当前音频合成无需个人 TTS Key · 自选照片本机合成 · 优惠授权微信咨询 创意,正在成为作品 ● ● ● 听文 · 创作工作台 准备就绪 01 / 文案 把值得分享的故事 讲给更多人听。 声 云健 · 讲述音色 26 种预设音色可选 让故事 被看见 ▶ 图片 + 配音 → MP4 1080p / 16:9 素材预览 · 用户确认 · 本机编码 MP3 + MP4 ↗ 听文视频工作台 灵感在手边 创作随时开始 生成素材 → 创作 任务 作品 关于 创作流程示意 · 最终界面见下方实图 文字 → 声音 → 画面 → 作品 从电脑到手机,把创作节奏留给自己。 ↓ 双端 PC 与 Android 各自运行 26 种 预设音色 · 内置试听 1080p 横屏 H.264 / AAC MP4 45 章 完整产品与技术资料 从你的创作需求出发 内容已经写好了, 接下来交给工作台。 减少文案、配音、配图和导出之间的反复切换, 把时间用在选题、表达和内容本身。 01 / 故事与知识 讲故事的人 需要稳定的声音。 故事朗读、文章解说、知识分享、历史人文内容:导入整理好的长文,选择音色,生成可单独保存的 MP3;需要画面时再制作照片视频。 查看音色与配音功能 → 02 / 图片与记录 手里的照片 值得变成一段叙事。 旅行记录、照片故事、产品介绍、静态画面讲解:用自己的图片或公开图片直链搭配配音,多图按顺序均分时长,输出完整横屏视频。 查看图片来源与管理 → 03 / 持续内容创作 创作不只一次, 素材也不必从头再做。 自媒体个人、内容工作室、讲师与小团队:查看历史任务,保留已有配音更换图片,预览满意后重新生成,保存并交给自己的发布流程。 查看换图与配音复用 → 适合配音与静态照片视频。平台上传、自动字幕、背景音乐混音及摄影视频剪辑需在其他工具完成。 最大的便利,是选择权 电脑做长内容。 手机接住灵感。 同一套核心创作思路,覆盖桌面与移动场景。Android APK 内置运行环境,安装后可独立制作,不需要连接 PC 工作台。 咨询适合我的版本 ↗ ▣ PC 电脑工作台 大屏编辑文案、检查素材、管理文件。适合桌面长文制作和固定工作环境。 文案 → 配音 → 图片 → 确认成片 复用语音与素材,保存 MP3 / MP4 当前桌面维护基线为 PC 1.5.9 PC 安装方式与运行环境通过微信获取。 ▯ Android 客户端 手机选图、填写正文、试听与导出。内置 Python 与媒体编码组件,独立完成本机合成。 Android 7.0+ / 64 位设备 创作、任务、作品、关于四页入口 当前正式版与试用版 1.0.2 双端分别保存任务,当前不提供自动云同步。 使用流程 六步,把内容做成作品。 先检查素材,再确认合成。 音频完成后,也可以直接保存配音。 01 写文案 粘贴或导入正文,按需清洗,填写主副标题。 02 选声音 试听音色,选择适合内容风格的讲述方式。 03 定画面 选照片、填图片直链,或使用可选 AI 配图。 04 检查素材 生成 MP3 和图片,试听、预览,按需换图。 05 确认成片 确认当前照片,本机制作 1920 × 1080 MP4。 06 保存分享 检查成品并另存,交给自己的发布与剪辑流程。 阅读一步一步的完整操作指南 ↗ 把成本和步骤讲清楚 简单上手。 把预算留给内容。 核心价值不是堆很多按钮, 而是把文案、声音和照片连接起来。 0 元 / 按次云端模型费 自选照片 + 本机编码 使用自己的照片准备画面,视频在设备上编码,不需要为这个编码步骤调用收费云端模型。音频合成当前无应用内收费入口,不要求个人 TTS API Key。 查看完整费用口径 → 01 既能配音,也能做视频 只需要声音时直接另存 MP3;需要作品时继续生成 MP4,避免为单纯配音走完所有视频步骤。 02 素材检查后再开始编码 试听、看图、更换素材,再明确确认。确认版本与内容摘要帮助避免旧素材误配。 03 手机端独立运行 APK 内置业务和媒体组件,任务与作品留在应用私有目录;新语音仍需联网,不承诺全流程离线。 免费方式与优惠合作 先体验,再选择长期使用。 免费环节、试用规则和可选收费服务分开说明, 让每一步投入都清楚。 先验证是否适合自己 免费试用版 免费 申请体验 使用累计试用额度体验完整创作思路,适合第一次尝试配音和照片视频。 累计新增正文字符上限 10,000 累计新选图片上限 10 张 任一达到上限,立即停止制作 已保存作品仍可查看和导出 微信获取试用版本 ↗ 不是每个任务重新获得额度;第 10 张或第 10000 字即触发到期,详细口径见试用说明。 长期创作 · 推荐咨询 为持续制作与团队需求准备 正式版 · 优惠合作 优惠报价 按实际合作需求沟通 不设试用期间的累计字数与图片额度,保留技术规格和安全保护。 PC 与 Android 使用场景可咨询 文案配音与照片视频完整流程 已有配音复用、任务与作品管理 个人创作、工作室及合作需求沟通 咨询正式版与招商合作 ↗ 本页不收款、不虚构固定售价;软件授权、支持和合作范围以微信实际沟通为准。 制作过程中还会产生什么费用 制作费用说明 当前音频合成 无需个人 TTS Key;应用无语音生成收费入口。新合成依赖网络与在线服务。 自选照片 / 本机编码 没有按次云端模型费;网络流量、设备与系统文档提供方成本另行考虑。 可选 AI 配图 Seedream 使用自己的方舟 Key,按服务方实际计费,需明确费用同意。 费用、网络与隐私全文 → “免费环节”不等同于软件正式授权、所有第三方服务或永久使用都免费。 不仅有展示,还有完整说明 45 章资料, 把每一步讲透。 产品说明与操作指南 20 章,技术架构与实现 25 章。约 2.9 万汉字正文,配合架构、流程、状态机和时序图,完整说明当前版本能做什么、怎么使用、如何实现。 进入完整知识文档 ↗ 读取全文文本 产品 / 05 从文案到成片的完整工作流 ↗ 产品 / 07 26 种音色、试听与音频合成 ↗ 产品 / 15 累计试用规则与购买联系 ↗ 技术 / 02 系统总体架构与运行边界 ↗ 技术 / 13 FFmpeg 编码与视频时间轴 ↗ 技术 / 18 完整 HTTP 接口目录 ↗ 先回答你关心的 开始之前,心里有数。 查看全部常见问题 ↗ 我只需要文章配音,不做视频,也能使用吗? 可以。输入文案、选择音色并生成音频,MP3完成后即可单独保存或分享,不必继续制作MP4。适合文章配音、故事朗读、知识讲解和独立语音素材。 查看详细说明 → 音频合成真的免费吗? 当前应用没有音频生成收费入口,不要求个人TTS API Key。新语音通过在线服务生成,需要网络;这不等同于软件正式授权、网络流量或所有第三方服务永久免费。自选照片与本机视频编码不产生按次云端模型费;可选Seedream AI生图另行计费。 查看详细说明 → 电脑和安卓手机都可以用吗? 产品提供PC电脑工作台与Android独立客户端,共用文案、声音、图片、确认成片的核心思路。安卓APK不需要连接PC,也不需要另装Python或FFmpeg。当前两端分别保存任务,没有自动云同步;PC安装方式请联系微信wzqy2019。 查看详细说明 → 怎样免费试用?试用限制怎么算? 添加招商合作微信wzqy2019获取试用APK。整个试用期间累计新增正文字符最多10000、累计新选图片最多10张,任一达到上限立即停止制作,正在处理的任务也会收到取消信号;不是每个任务重新获得额度。已保存的作品仍可查看与导出。正式版长期使用请咨询优惠合作报价。 查看详细说明 → 招商合作 · 需求咨询 你的下一篇内容, 可以从这里开始。 无论你是独立自媒体人、内容工作室,还是有配音与照片视频需求的团队,都可以先体验,再讨论适合自己的长期使用与合作方式。 自媒体个人 内容工作室 讲师与创作者 产品展示团队 招商合作微信 wzqy2019 添加微信时,备注“听文合作” 告诉我们你做什么内容、需要哪个客户端。 查看并复制联系方式 ↗ 阅读试用与长期使用说明 累计访问总数 统计加载中 含真人 · AI · 搜索访问 # 常见问题 ## 我只需要文章配音,不做视频,也能使用吗? 可以。输入文案、选择音色并生成音频,MP3完成后即可单独保存或分享,不必继续制作MP4。适合文章配音、故事朗读、知识讲解和独立语音素材。 ## 音频合成真的免费吗? 当前应用没有音频生成收费入口,不要求个人TTS API Key。新语音通过在线服务生成,需要网络;这不等同于软件正式授权、网络流量或所有第三方服务永久免费。自选照片与本机视频编码不产生按次云端模型费;可选Seedream AI生图另行计费。 ## 电脑和安卓手机都可以用吗? 产品提供PC电脑工作台与Android独立客户端,共用文案、声音、图片、确认成片的核心思路。安卓APK不需要连接PC,也不需要另装Python或FFmpeg。当前两端分别保存任务,没有自动云同步;PC安装方式请联系微信wzqy2019。 ## 怎样免费试用?试用限制怎么算? 添加招商合作微信wzqy2019获取试用APK。整个试用期间累计新增正文字符最多10000、累计新选图片最多10张,任一达到上限立即停止制作,正在处理的任务也会收到取消信号;不是每个任务重新获得额度。已保存的作品仍可查看与导出。正式版长期使用请咨询优惠合作报价。 ## 适合哪些自媒体内容? 适合故事朗读、历史人文、知识分享、文章讲解、照片叙事、旅行记录、产品展示和静态画面解说。内容由创作者提供,工作台完成配音、照片画面与本机合成;不自动写文章、上传平台或生成字幕。 ## 换照片时,需要重新花时间制作配音吗? 同一任务可保留已有MP3,选择新照片、网址图片或AI配图,检查素材后重新确认视频。普通AI重生成使用原任务模型,更换模型有专门入口。修改正文则需要新任务,不会自动改写旧任务的声音。 ## 输出的视频与音频是什么规格? Android输出1920×1080、16:9横屏MP4,H.264视频与AAC音轨;原音频以MP3保存。照片按保留顺序均分配音时长,第一张可叠加主副标题。静态照片视频的单图1fps、多图5fps,当前没有自动字幕、背景音乐混音和专门转场。 ## 有多少音色?能先试听吗? 共26种预设音色,包含普通话、方言、港台与多语言预设,默认云健。APK内置试听样音,试听无需新云端合成;正式的新配音依赖联网服务。本站提供云健内置样音供你听取风格,全部音色清单见文档。 ## 用自己的照片,必须购买AI生图服务吗? 不必。可以选择手机照片或公开图片直链,不需要AI生图Key。Seedream只是可选配图方式,需要使用自己的方舟Key并明确同意服务方费用;本站和应用不承诺替第三方平台承担这些费用。 ## 制作进度与失败任务能控制吗? 应用提供分阶段进度、暂停、继续、取消、重试及历史任务。语音可复用已经完成的分段,素材与作品保留在私有目录;进程中断后的步骤需按状态手动恢复。后台服务有助于持续处理,但系统省电或回收仍可能中断。 ## 成品怎样交付或发布? 任务页可另存MP3、MP4和首张图片,也可通过系统分享MP3或MP4;作品页可播放、保存与分享MP4。分享到内容平台、补字幕或音乐可交给你已有的发布和剪辑工具。换图重做同一任务可能覆盖旧视频,需要保留旧版时先另存。 ## 有没有批量自动排队、摄影视频剪辑或自动上传? 当前没有。这是一款文字配音与静态照片视频工作台,一次活动任务受保护,同一任务的音频与图片可并行准备;不提供任意多任务批量排队、摄影视频剪辑、自动字幕、背景音乐混音或平台自动发布。 ## Android能在所有手机上安装吗? 当前要求Android7.0/API24以上和64位设备,包含ARM64与x86_64组件,不包含32位ARM或x86运行组件。真实兼容性仍需按设备、系统版本和存储条件验证,不能承诺所有手机均可运行。 ## 正式版价格与招商合作怎样咨询? 产品以优惠合作价提供长期使用咨询,具体授权、支持范围、PC与Android需求及团队合作方式通过微信沟通,本站不虚构固定售价、不在线收款。招商合作微信:wzqy2019。添加时备注“听文合作”,说明内容类型、使用端和预期制作量即可。 ## 创作内容保存在哪里?隐私需要注意什么? Android草稿、任务和素材保存在应用私有目录。在线TTS会向语音服务提交正文,AI生图会向服务方提交图片要求和认证信息;应用不长期保存API Key。重要成品应主动另存,卸载或清除应用数据会删除私有任务。本站不设置联系表单,不收集你的文案或API Key。 # 产品事实与来源 { "schema_version": "1.0", "name": "听文视频工作台", "alternate_name": "Tingwen Video Workbench", "language": "zh-CN", "canonical_url": "https://tingwen-creator-studio-102.pages.dev/", "updated_at": "2026-10-10", "version": { "android": "1.0.2", "trial": "1.0.2-trial", "pc": "1.5.9" }, "summary": "中文文案配音、照片叙事与本机1080p视频制作工作台,面向自媒体、内容工作室、讲师与产品展示团队。", "contact": { "wechat": "wzqy2019", "purpose": "免费试用、优惠授权、PC/Android版本、团队及渠道合作意向", "add_note": "听文合作", "url": "https://tingwen-creator-studio-102.pages.dev/contact/" }, "features": { "voice_count": 26, "input": [ "直接输入中文文案", "TXT导入", "MD导入", "文案清洗" ], "images": [ "本机照片", "公开图片直链", "可选Seedream配图" ], "audio_output": "MP3", "video_output": { "container": "MP4", "resolution": "1920×1080", "video_codec": "H.264", "audio_codec": "AAC", "single_image_fps": 1, "multiple_image_fps": 5 }, "workflow": [ "写文案", "选音色", "准备图片", "确认素材", "生成配音", "本机编码", "导出分享" ], "reuse_audio": true, "independent_pc_android": true, "task_control": [ "进度查看", "取消任务", "重试", "复用音频", "保存分享" ], "unsupported": [ "自动字幕", "背景音乐混音", "原始视频剪辑", "平台自动发布", "云同步", "任意多任务队列", "Android本地画图模型" ] }, "costs": { "audio": "当前无应用音频生成收费入口,无需个人TTS Key,新合成需要联网。", "local_images_video": "自选照片和本机编码不产生按次云端模型费用。", "optional_ai": "Seedream可选,使用自己的Key并明确同意服务方费用。", "formal_license": "正式授权优惠报价,具体微信咨询;没有公开固定售价,不承诺永久免费。" }, "trial": { "scope": "整个试用过程累计新增正文和新选图片", "characters": 10000, "photos": 10, "expiration": "任一额度达到上限即停止制作;不是每任务限额。", "refund": "取消、删除、失败不返还已消耗额度。", "image_charge": "图片直链及AI图片按新增图片请求计数,失败也可能已消耗额度。", "completed_exports": "已完成的导出结果仍可保存。" }, "compatibility": { "platforms": [ "PC", "Android" ], "storage": "双端各自保存,不自动云同步", "network": "新音频合成及网络配图需要联网,样音预览可离线" }, "sources": [ { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/product-01" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/product-04" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/product-05" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/product-06" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/product-07" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/product-08" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/product-09" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/product-10" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/product-11" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/product-12" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/technical-02" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/technical-04" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/technical-08" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/technical-10" }, { "type": "产品与实现原始说明", "url": "https://tingwen-creator-studio-102.pages.dev/guide/technical-17" } ], "examples": [ { "title": "500 亿砸向北方小城!乌兰察布,凭什么成为 AI 算力黑马", "url": "https://www.toutiao.com/i7694973286849135140?enter_from=mp_group_management", "publisher": "移动信息杂谈", "published": "2026-10-10T17:46:00+08:00", "thumbnail_url": "https://tingwen-creator-studio-102.pages.dev/assets/cases/7694973286849135140.jpg", "verified_scope": "公开页面标题、发布者、发布时间及原视频封面,未核实媒体编码来源或商业效果" }, { "title": "AI电话助理接话全流程!这波操作真的太香了✨", "url": "https://www.toutiao.com/i7694961587576209967?enter_from=mp_group_management", "publisher": "移动信息杂谈", "published": "2026-10-10T17:01:00+08:00", "thumbnail_url": "https://tingwen-creator-studio-102.pages.dev/assets/cases/7694961587576209967.jpg", "verified_scope": "公开页面标题、发布者、发布时间及原视频封面,未核实媒体编码来源或商业效果" }, { "title": "如何拦截诈骗来电?从运营商到手机,手把手教你全部设防?", "url": "https://www.toutiao.com/i7694927202420359708?enter_from=mp_group_management", "publisher": "移动信息杂谈", "published": "2026-10-10T14:47:00+08:00", "thumbnail_url": "https://tingwen-creator-studio-102.pages.dev/assets/cases/7694927202420359708.jpg", "verified_scope": "公开页面标题、发布者、发布时间及原视频封面,未核实媒体编码来源或商业效果" }, { "title": "热门高薪专业 top 10", "url": "https://www.toutiao.com/i7694918702332002845?enter_from=mp_group_management", "publisher": "移动信息杂谈", "published": "2026-10-10T14:14:00+08:00", "thumbnail_url": "https://tingwen-creator-studio-102.pages.dev/assets/cases/7694918702332002845.jpg", "verified_scope": "公开页面标题、发布者、发布时间及原视频封面,未核实媒体编码来源或商业效果" }, { "title": "张艺谋赌上全部!单部拍完百万字《三体》,为何全球没人拍好?", "url": "https://www.toutiao.com/video/7694893301542961674/?enter_from=mp_group_management", "publisher": "移动信息杂谈", "published": "2026-10-10T12:36:00+08:00", "thumbnail_url": "https://tingwen-creator-studio-102.pages.dev/assets/cases/7694893301542961674.jpg", "verified_scope": "公开页面标题、发布者、发布时间及原视频封面,未核实媒体编码来源或商业效果" }, { "title": "深圳 APEC 临近,外交称谓风波爆发!日本一边示好一边留后手", "url": "https://www.toutiao.com/video/7694881639034159625/?enter_from=mp_group_management", "publisher": "移动信息杂谈", "published": "2026-10-10T11:50:00+08:00", "thumbnail_url": "https://tingwen-creator-studio-102.pages.dev/assets/cases/7694881639034159625.jpg", "verified_scope": "公开页面标题、发布者、发布时间及原视频封面,未核实媒体编码来源或商业效果" }, { "title": "59000人全部押回!缅北四大家族连根覆灭,中国这次绝不手软", "url": "https://www.toutiao.com/video/7694879262158914063/?enter_from=mp_group_management", "publisher": "移动信息杂谈", "published": "2026-10-10T11:41:00+08:00", "thumbnail_url": "https://tingwen-creator-studio-102.pages.dev/assets/cases/7694879262158914063.jpg", "verified_scope": "公开页面标题、发布者、发布时间及原视频封面,未核实媒体编码来源或商业效果" }, { "title": "全球6G终极博弈打响!中美领跑,谁能拿下未来话语权?", "url": "https://www.toutiao.com/video/7694843490920743424/?enter_from=mp_group_management", "publisher": "移动信息杂谈", "published": "2026-10-10T09:22:00+08:00", "thumbnail_url": "https://tingwen-creator-studio-102.pages.dev/assets/cases/7694843490920743424.jpg", "verified_scope": "公开页面标题、发布者、发布时间及原视频封面,未核实媒体编码来源或商业效果" } ] } # 45章产品与技术全文 # 01 产品定位与阅读方式 听文视频工作台 · 产品说明与指南 · 1.0.2 听文视频工作台是一款在 Android 手机内独立运行的文字、语音和照片视频制作工具。用户输入朗读文案,选择音色和画面素材,先生成并检查 MP3 与图片,再明确确认素材,最后由手机本机编码生成 1920×1080 MP4。整个流程围绕“文案 → 声音 → 画面 → 预览确认 → 成片”组织,适用于故事朗读、知识讲解、文章配音、照片叙事和静态画面解说。 本文以 Android 正式版 1.0.2 和 独立试用版 1.0.2-trial 为准,业务基础对应 PC 1.5.9。两版采用相同的基本创作流程;试用版额外执行整个试用期间的累计额度。APK 安装后无需连接原 PC 工作台,也无需在手机上另装 Python、FFmpeg 或本机绘图模型。 本说明书面向使用者、培训人员和产品服务方。需要理解代码、部署、接口、安全控制或故障定位时,请阅读同一文件夹中的《技术架构与实现文档》。文档中的“图示示例”用于解释机制;界面截图来自当前版本的浏览器检查,使用测试内容,不包含用户作品。不同 Android 系统的文件选择器、分享菜单和通知权限界面可能不同。 ## 阅读路线 你的目标 | 建议阅读 | 第一次安装并生成一个视频 | 第03、05、06、07、08、10章 | 只想生成并保存配音 | 第06、07、09、13章;音频完成后可以直接保存,不必确认视频 | 换图但保留现有配音 | 第09、11章 | 理解试用结束规则 | 第02、15章;输入或选图前先核对剩余额度 | 处理网络、编码或导出故障 | 第12、16、18章 | 分发或升级 APK | 第03、17、19章 | ## 产品能力概览 能力 | 具体说明 | 文案输入 | 直接输入、粘贴、TXT/MD 导入、实时字符计数、长文框内滚动、文案清洗与一次清洗撤销 | 标题设计 | 主副标题可选,合计最多30字符,换行不计;主标题红黄各半、副标题黄色,适配中央标题区域 | 音频生成 | 26个预设音色、离线试听、默认云健、记忆所选音色、长文自动分段、失败重试和已完成分段复用 | 画面来源 | 手机照片、公开图片直链、可选云端豆包 Seedream;本版不接入本机 Draw Things 模型 | 素材检查 | 音频试听、图片放大、照片数量与平均时长提示、保留照片筛选、更换照片、AI重新生成 | 视频合成 | 用户明确确认后本机制作1080p横屏MP4;单图覆盖完整音频,多图依序均分时长 | 任务管理 | 分阶段进度、暂停、继续、取消、重试、历史任务、进程重启后的待恢复状态 | 作品管理 | 已保存成片列表、播放、保存、分享;已有成片入口不因换图状态重置而丢失 | 数据与说明 | 本机草稿、安全偏好、版本记录、运行日志、模型调用记录、JSON导出、完整关于菜单 | --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-01 # 02 版本、规格与正式/试用差异 听文视频工作台 · 产品说明与指南 · 1.0.2 项目 | 正式版1.0.2 | 试用版1.0.2-trial | 应用名称 | 听文视频工作台 | 听文视频工作台·试用版 | 应用包名 | cn.tingwen.workbench | cn.tingwen.workbench.trial | versionCode | 10002 | 10002 | 文案试用额度 | 不设累计试用字符额度 | 整个试用期间累计新增输入10000个Unicode字符 | 照片试用额度 | 不设累计试用张数额度 | 整个试用期间累计新选10张照片;URL/AI新配图也纳入 | 到期规则 | 无试用到期规则 | 任一累计值达到上限,立即停用制作入口并停止正在处理的任务 | 购买咨询 | 无试用购买弹窗 | 到期提示联系微信 wzqy2019;关于页可复制联系方式 | 同时安装 | 可与试用版并存 | 使用独立包名和导出provider,与正式版数据隔离 | “正式版不设累计试用限制”不等于取消技术保护:正式版每批手机照片最多50张、单张原文件最多20 MiB、整批原文件合计最多40 MiB,本机接口还设64 MiB请求体保护。标题合计30字符的版式限制在两版均保留。界面使用“MB”,对应代码中的1024×1024字节。 通用输出规格 | 当前实现 | 视频画面 | 1920×1080,16:9横屏 | 视频文件 | MP4容器,H.264视频,AAC音轨 | 画面播放方式 | 照片按保留顺序一次播放,每张分配完整配音时长÷照片数量 | 标题覆盖 | 仅第一张画面叠加用户填写的主副标题;留空时不叠加 | 字幕、背景音乐、转场 | 当前用户流程未提供字幕、背景音乐混音或专门转场设置 | 图片背景 | 完整前景照片居中,周围空余区域由模糊背景填充 | 原音频 | MP3,可在视频生成前单独保存 | 音色试听 | 26段MP3随APK打包,选择时播放;试听不发起新云端合成 | 视频制作以静态照片叙事为目标,单图编码帧率1fps、多图5fps。该规格来自当前Android实现;画面不包含摄影视频剪辑和动画转场,因此不应将本产品描述为通用视频编辑器。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-02 # 03 安装、首次启动与升级 听文视频工作台 · 产品说明与指南 · 1.0.2 ## 安装前准备 - 确认设备为Android 7.0/API24及以上,CPU支持ARM64;x86_64包内组件也可用于相应设备或模拟器。当前APK不包含32位ARM或x86运行组件。 - 下载你需要的正式版或试用版APK,核对版本文件名。需要验证来源时,可对照同一GitHub发布页的SHA256校验和。 - 为新语音生成准备可用网络。手机照片导入、画面加工和MP4编码在本机完成,但“本机制作视频”并不表示整个流程完全离线。 - 确保有足够存储空间。应用会同时保留任务原文、语音分段、MP3、规范化图片、1080p画面及成片;将成片另存到系统文件夹还会产生一份副本。空间需求随文案时长和照片数量变化,当前没有固定的最低剩余容量提示。 ## 安装步骤 - 在系统文件管理器或浏览器中打开APK。 - 若系统要求,为正在打开该文件的应用启用“安装未知应用”权限。 - 完成安装,点“打开”或从启动器打开应用。 - 首次出现约3秒的科技蓝动态启动画面,展示文字、声音、视频之间的转换。服务与页面同时加载;若准备耗时超过3秒,继续显示真实准备状态,不强行进入尚未就绪的页面。 - 若提示通知权限,按实际需要允许,以便从通知栏查看后台任务阶段并回到应用。权限请求安排在开场之后;不需要授予全盘照片或文件读取权限才能使用系统选择器。 ## 覆盖升级与数据隔离 同一版本系列沿用原应用包名和签名,安装新APK可覆盖旧正式版或旧试用版并保留应用内数据。不要先卸载再安装来代替升级:卸载或清除应用数据会删除私有任务库。正式版与试用版是两个独立应用,安装正式版不会自动迁移试用版草稿、任务和照片;需要保留的成品应先导出。 当前交付文件:听文视频工作台-Android-v1.0.2.apk 与 听文视频工作台-试用版-v1.0.2.apk。正式版约44,472,826字节,试用版约44,492,954字节,实际安装占用还包括Android运行时展开内容与后续任务文件。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-03 # 04 界面布局与所有主要入口 听文视频工作台 · 产品说明与指南 · 1.0.2 页面采用白色卡片、科技蓝操作色、适合手机的纵向布局和底部四页导航。顶部应用名称下的两行小字说明“写文案、选声音、确定画面”及草稿保存位置;1.0.2已压缩这一说明区域,让创作输入获得更多空间。6G 通信/如何真正落地是主标题输入框的示例占位文字,尚未实际填写时不会自动写进视频。 当前正式版创作页 · 390px浏览器检查截图;示例占位文字,非手机实拍点击截图可放大阅读 ## 四个导航页 页面 | 用途 | 主要入口与行为 | 创作 | 输入当前草稿并创建新任务 | 主标题、副标题、正文、导入、清洗、撤销、更换音色、图片方式、照片选择、公开图片网址、AI提示词与豆包设置、生成素材 | 任务 | 检查选中任务并控制处理 | 历史任务选择、保存的原文与图片要求、MP3试听、图片预览/放大、保留照片删除、确认成片、换图、重新生成、暂停/继续/取消、失败重试、保存分享素材 | 作品 | 查看实际保留的视频及记录 | 已保存MP4播放/保存/分享、刷新视频列表、任务与文件信息、运行日志/模型调度/历史版本、更多日志、JSON导出 | 关于 | 了解功能、技术与使用 | 版本、基本功能、TTS和费用、联网与隐私、技术栈、六步操作;试用版还显示累计额度及微信联系入口 | ## 顶部与其他常用按钮 按钮或区域 | 操作含义 | 容易混淆的地方 | 清空 | 清空当前工作区,回到创作页;正式版及未到期试用版保存清空后的草稿 | 不删除历史文件、不取消后台任务;试用累计用量不返还,到期后不保存新空草稿,正文还可能恢复为最近已接受内容 | 日志 | 打开作品页的记录区域 | 不是自动上传日志;需要你另存JSON后才有导出文件 | 更换音色 | 展开26音色按钮,选择后收起并播放本地试听 | 改变下一次新任务所用音色,不重新配音已完成任务 | 历史任务选择 | 切换任务页显示的任务 | 查看已有任务,不把新创作草稿写入旧任务 | 作品/全部视频 | 列出实际完成、非空且未处于pending状态的MP4 | 旧成片仍可查看,但旧照片和旧MP3并不代表已经重新制作了新版本 | 保存文件 | 调出Android系统文件创建界面 | 是复制导出,不是打开应用内部的真实文件夹 | 分享文件 | 调出Android分享目标列表 | 分享给第三方应用是你主动发起的操作,与应用自动上传不同 | --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-04 # 05 从文案到成片的完整工作流 听文视频工作台 · 产品说明与指南 · 1.0.2 图示:文案、声音、画面到MP4 文案、声音、画面到MP4 正文+音色 图片来源 输入正文与标题 选音色 · 选择配图方式 生成MP3 2000字符分段 · 联网TTS 准备图片 手机照片/图片直链/Seedream 试听并预览素材 换图/删图后重新检查 确认当前素材 版本和摘要保护 手机编码1080p MP4 检查画面、音轨与时长 播放 · 保存 · 分享 系统文档位置或分享目标 图1|用户完整合成路径。图片与语音可以同时准备,用户确认是进入本机视频编码的必要条件。小屏可横向滚动查看图示 - **准备文案。**输入正文或导入文件,检查内容、清洗结果和音色。正式版可以保存超过10000字的文案;试用版应先查看剩余额度。 - **决定是否加标题。**填写主副标题或全部留空。输入的是“画面上的字”,正文输入的是“要朗读的内容”,两者各有用途。 - **选择画面来源。**手机照片最直接;也可以使用公开图片直链,或在明确同意费用后调用自己的Seedream账户。 - **生成素材。**创建任务后启动音频处理;本机照片可立即成为图片素材,URL或AI图片准备可与音频处理并行进行。 - **检查素材。**等MP3和图片均准备好,在任务页试听、放大预览、删除不需要的照片或换图。检查的是任务保存的原文,而不是当前另行编辑的草稿。 - **明确确认。**点击“确认…张照片,生成MP4”。未确认时不会自动开始视频编码;换图、删图、重生成后需要再次确认。 - **本机编码并验证。**手机将图片加工成1080p画面,分配时间轴,编码MP4,检查尺寸、音轨和时长,再将成片标记为完成。 - **保存或分享。**从任务或作品页播放视频,另存到你指定的系统目录,或分享给目标应用。 ## 一次照片讲解视频的操作示例 以正式版为例:准备约1000字讲解稿和4张照片 → 主标题填写“6G 通信”,副标题填写“产业协同与应用路径” → 选择云健 → 从手机多选4张照片 → 点击生成素材 → 试听MP3并放大检查照片 → 删除1张不适合的照片 → 确认剩余3张 → 生成后播放MP4 → 保存到系统“下载”或你选择的文件夹。 如果最终配音时长为90秒,3张保留照片各分配约30秒。该数字只是均分规则示例,不是本应用的生成速度或语音速率承诺。第一张叠加标题,第二、第三张保持照片画面;本流程不自动生成字幕。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-05 # 06 文案输入、导入、清洗和标题 听文视频工作台 · 产品说明与指南 · 1.0.2 ## 直接输入与实时字数 正文框用于完整朗读内容。字符数按Unicode字符统计,汉字、字母、数字、标点、空格、换行均可贡献计数,不能把界面“字”理解为只数汉字。长文在输入框内滚动,不需要为了避免界面变长而删除正文。新任务创建时正文会去除首尾空白;试用累计输入计数在编辑过程中进行,和最终朗读时去除首尾空白的任务正文口径有区别。 按原稿合理分段有助于朗读。应用会自动将长文拆成每段最多2000字符的语音请求;不需要用户先人工分成多个任务。该分段只服务于语音处理,不建立“文字段落—照片”的一一对应关系。 ## 导入TXT/MD - 点“导入TXT/MD”,从Android系统文件选择器选择文档。 - 文件内容载入当前正文框,核对编码、标点及是否完整。 - .md文件导入会移除代码块、标题前缀、Markdown图片、链接地址及部分格式标记,保留链接可读文本;这是一组固定格式处理,不是AI改写或语义摘要。 - 若字符显示乱码,可先把原文另存为UTF-8 TXT再导入。当前接口没有提供编码手动切换,也不直接读取Word、PDF或扫描件。 导入会替换当前正文。正式版可重新导入;试用版将按内容新增/替换规则记入累计输入,删除后重新输入不会退还旧用量。试用前宜在其他编辑器中整理好正文,再导入最终版本。 ## 文案清洗与撤销清洗 “文案清洗”用于整理适合朗读的正文,包括Markdown格式、HTML标签、链接与图片、列表或标题符号、括号外壳以及部分格式化空白等;保留括号内文字、数字和通常的标点,数字之间的星号可转换为“乘以”。它不会自动解码&、 等HTML实体。它会改变当前编辑框,移除裸网址、图片语法和代码围栏等;代码围栏内的正文在显式清洗时保留,而MD导入会移除整个代码块,两者并非同一规则。清洗不会自动改写观点、补充内容或生成新文章。完成后查看清洗状态、前后字数以及具体结果。 “撤销清洗”恢复最近一次有效清洗前保留的原文,是清洗专用回退入口,并非完整多步编辑历史。清洗后手动编辑正文会禁用这一撤销,清空工作区或重新启动也不保留临时撤销缓存。正文变化不改动已经创建任务的MP3;要让修改后的正文生效,应创建新任务。试用版同样对清洗和撤销产生的新增字符进行计数,纯删除不退款,撤销恢复的字符可能新增扣额。 ## 主副标题与排版规则 设置 | 用法与输出 | 主标题 | 可留空。手动Enter换行或自动换行;大号粗字,前半红、后半黄,奇数时两色最多差1个字符 | 副标题 | 可留空。黄色粗字,可手动分行;位于主标题下方 | 总长度 | 主副标题规范化后合计最多30字符,换行不计。超过时先拒绝,不会进入生成步骤 | 深色底板 | 中央深色区域为标题提供对比度;字号根据实际可用空间缩放,保持两组文字不重叠 | 生效范围 | 仅首张视频画面。多图后续画面没有标题,用户未填标题时不叠加文字 | 任务冻结 | 已创建任务保存当时的标题。随后编辑创作页标题不会回写既有任务 | ## 成片文件名与画面标题 MP4文件名始终使用实际任务正文开头30个字符,并替换路径分隔符、控制字符等不合法文件名字符;如果结果为空,则使用“听文视频.mp4”。画面主标题与文件名彼此独立。因此两篇正文开头相同的作品可能显示同样文件名,但应用内部按独立任务UUID目录保存,不相互覆盖;导出到同一系统文件夹时,应按系统提示选择保留方式或自行改名。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-06 # 07 26种音色、试听与音频合成 听文视频工作台 · 产品说明与指南 · 1.0.2 应用默认音色是云健,已有安全偏好会恢复上次所选音色。点击“更换音色”展开列表,点选后立即播放随APK提供的样音,选中音色显示在摘要区域。仅在点选试听时播放;恢复偏好不自动播放。音色名称与描述是当前产品提供的选择信息,不表示针对每段文案的音质保证。 序号 | 音色名称 | 产品描述 | 服务音色ID | 1 | 云健(默认) | 男 · 充满激情 | zh-CN-YunjianNeural | 2 | 云希 | 男 · 沉稳大气 | zh-CN-YunxiNeural | 3 | 云扬 | 男 · 成熟稳重 | zh-CN-YunyangNeural | 4 | 云霞 | 男 · 温和清晰 | zh-CN-YunxiaNeural | 5 | 晓晓 | 女 · 温暖自然 | zh-CN-XiaoxiaoNeural | 6 | 小艺 | 女 · 温柔感性 | zh-CN-XiaoyiNeural | 7 | 小北 | 女 · 东北口音 | zh-CN-liaoning-XiaobeiNeural | 8 | 小妮 | 女 · 陕西口音 | zh-CN-shaanxi-XiaoniNeural | 9 | Hiu Gaai | 女 · 香港粤语 | zh-HK-HiuGaaiNeural | 10 | Hiu Maan | 女 · 香港粤语 | zh-HK-HiuMaanNeural | 11 | Wan Lung | 男 · 香港粤语 | zh-HK-WanLungNeural | 12 | Hsiao Chen | 女 · 台湾国语 | zh-TW-HsiaoChenNeural | 13 | Hsiao Yu | 女 · 台湾国语 | zh-TW-HsiaoYuNeural | 14 | Yun Jhe | 男 · 台湾国语 | zh-TW-YunJheNeural | 15 | 弗洛里安 | 男 · 德国多语言 | de-DE-FlorianMultilingualNeural | 16 | 塞拉菲娜 | 女 · 德国多语言 | de-DE-SeraphinaMultilingualNeural | 17 | 威廉 | 男 · 澳大利亚多语言 | en-AU-WilliamMultilingualNeural | 18 | 安德鲁 | 男 · 美国多语言 | en-US-AndrewMultilingualNeural | 19 | 艾娃 | 女 · 美国多语言 | en-US-AvaMultilingualNeural | 20 | 布莱恩 | 男 · 美国多语言 | en-US-BrianMultilingualNeural | 21 | 艾玛 | 女 · 美国多语言 | en-US-EmmaMultilingualNeural | 22 | 雷米 | 男 · 法国多语言 | fr-FR-RemyMultilingualNeural | 23 | 薇薇安 | 女 · 法国多语言 | fr-FR-VivienneMultilingualNeural | 24 | 朱塞佩 | 男 · 意大利多语言 | it-IT-GiuseppeMultilingualNeural | 25 | 贤洙 | 男 · 韩国多语言 | ko-KR-HyunsuMultilingualNeural | 26 | 塔莉塔 | 女 · 巴西多语言 | pt-BR-ThalitaMultilingualNeural | 多语言音色可以根据服务对输入语言的支持生成语音,具体发音应以实际试听和成品为准;应用没有独立语言翻译入口,也不会把文案翻译为音色名称对应的语言。 ## 音频处理过程与进度 - 创建任务时固定正文和所选音色。 - 正文按段落和2000字符上限拆分;过长段落按长度继续切分。 - 按顺序逐段联网获取MP3数据。每段先写入临时文件,只有收到非空且可探测的音频才保存为完成分段。 - 网络中断或超时,每段最多自动重试2次,即首次请求加最多2次重试;两次退避等待分别为1.5秒和3秒。 - 每段成功后更新“已完成段数/总段数”。所有片段就绪后合并并验证,生成最终audio.mp3。 任务页百分比首先反映完成分段数量,不是按声波字节或精确时间比例计算的预测进度;合并和验证阶段可显示不定百分比。网络等待时会提示本次等待秒数和已接收数据量。通知栏展示处理阶段汇总,不承担任务页的详细百分比展示。 ## 失败、重试与保存 若某一段失败,可检查网络后点“重试音频”。已经成功落盘的分段会复用,不必从头请求全部文案。取消会保留已完成素材,未完成临时片段不会被当成成功音频。MP3达到“完成/可试听”状态后可以单独保存或分享;即使尚未确认视频,也能交付配音。 本版本没有向用户开放语速、音量、音调、SSML编辑、声音克隆或自定义音色训练控件;界面中的“26音色”是固定列表,不能据此推断支持本机大模型语音生成。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-07 # 08 三种画面来源与照片管理 听文视频工作台 · 产品说明与指南 · 1.0.2 ## 手机照片 - 图片方式选“手机照片”,点选照片进入系统选择器。 - 支持多选,但系统照片选择器自身可能设更小的多选上限,50张是本应用的上限,不保证每台设备一次可选50张。选择完成后,在预览区核对顺序、文件名、张数和总大小;可点图片打开大图。 - 删除不需要的预选照片,再点击生成素材。当前选择批次用于新任务,重新选取一批不会自动追加到旧的未提交批次。 - 任务保存后,在任务页删除不需要的照片时至少保留1张;当前没有拖拽排序界面。成片遵循导入/保留顺序,不按传入索引数组任意重排。 每批最多50张,单张20MiB,合计40MiB;试用版还叠加累计10张规则。文件大小保护按原文件计算,传到本机接口的Base64会比原文件更大,所以请求体仍可能触发64MiB保护。超出技术保护时先减少张数或压缩图片;正式版没有累计试用扣额。 支持JPEG、PNG、WebP、GIF、BMP和TIFF等常见格式;动图、多帧图以第一帧作为静态照片。导入处理拍摄方向,透明图使用白底,转换为可用的RGB PNG并清除EXIF等元数据。HEIC/HEIF、AVIF依赖Android系统解码能力,不能仅凭文件后缀保证任意设备均可读取;失败时可先转换成JPEG/PNG。照片像素数另有5000万像素、单边16384像素保护。 ## 网上图片网址 使用公开图片文件本身的HTTP/HTTPS直链,填入“网上图片网址”后生成素材;不能用新闻网页、公众号文章页面、登录链接、网盘展示页或带账号密码的URL来代替图片直链。应用检查公网地址、目标端口、重定向和响应格式,拒绝局域网、回环地址及不符合安全要求的目标。 如果图片网站禁止外部访问、要求Cookie/登录或临时签名已过期,下载可能失败。可以通过你已有访问权限的浏览器先保存图片,再从手机照片导入。应用不会绕过登录或验证码,也没有从文章页提取多图的用户入口。不要把“图片网址”理解成“网页内容转视频”。 ## AI生成图片:豆包Seedream - 图片方式选“AI生成图片”,填写场景、构图、主体、色彩等图片要求。 - 选择图片来源“豆包Seedream·云端收费”。Android版不提供电脑本机Draw Things入口。 - 模型可选当前打包的doubao-seedream-5-0-pro-260628(默认)或doubao-seedream-5-0-flash-260915。该列表是APK配置,不代表服务端未来一定保留访问权限。 - 填写自己的火山方舟API Key,勾选明确的付费同意,再创建任务。 - 当前请求设置为2K、单张PNG、保留AI水印;最终视频仍加工成1920×1080。生成时间和费用由服务端及账户实际情况决定。 API Key只在运行内存中使用,不写入草稿、任务JSON或自动日志;进程完全关闭后需重新填写。模型选择和付费勾选也不在草稿保存字段内,重新打开可能回到默认Pro并需要重新勾选。图片要求会发送给云端服务。首次生成、手动重试或重新生成都可能产生新的收费请求;不存在“重试永久免费”的保证。 ## 画面适配 横图和竖图都先加工成1920×1080画面。完整照片按比例缩放居中,空余部分用原图拉伸并模糊的背景铺满;因此主体前景不会为了填满横屏而被任意裁掉。产品没有让用户手动选“裁切/拉伸/模糊填充”的切换按钮。 图示:90秒三图时间轴示例 均分示例:D=90秒、N=3张;每张30秒 首张:主副标题+图片 0~30 秒 第二张:图片 30~60 秒 第三张:图片 60~90 秒 完整MP3音轨持续播放;图片硬切,无字幕和背景音乐 实际时间轴由FFconcat及输出帧率量化;这不是生成速度或逐采样对齐承诺。 图11|图片时间轴示例。使用完整音频时长除以保留照片数量,与正文段落或图像语义无绑定。小屏可横向滚动查看图示 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-08 # 09 任务页:检查、确认与状态理解 听文视频工作台 · 产品说明与指南 · 1.0.2 ## 查看任务保存内容 任务页显示选中任务的标题、模式、语音/配图/视频三个阶段。“查看本任务保存的文案与图片要求”可以展开核对正文和提示词。新任务创建后这些内容成为任务快照;你在创作页编辑的是另一个草稿,不会偷偷修改当前任务的音轨或标题。 状态 | 用户应怎样理解 | 下一步 | 等待处理/queued | 步骤已排入处理 | 等待,或取消任务 | 处理中/working | 该步骤正在实际执行 | 查看进度;可在支持的本机阶段暂停/取消 | 素材已完成/ready | MP3或图片可以预览 | 试听、检查图片,再确认 | 视频已完成/done | MP4通过当前规格检查并保存 | 播放、保存、分享 | 失败/failed | 步骤未成功完成 | 读错误信息,处理原因后重试对应步骤 | 已取消/cancelled | 本机后续处理停止 | 素材保留;按需继续/重试未完成步骤 | 待恢复/interrupted | 进程重启前该步骤仍在处理中 | 手动重试,应用不自动重新请求收费接口 | 已暂停 | 任务带有暂停标记,完成素材不受影响 | 点继续;已提交云端请求不等于被撤销 | ## 确认素材的正确顺序 - 确认MP3已完成,播放一段并检查读音、内容完整性与音色。 - 确认图片已完成;检查单图显示,多图核对数量、顺序、是否至少保留1张。预选照片卡与任务多图卡可点击放大;任务单图没有单独放大入口,必要时保存首图到系统位置再查看。 - 如有不满意的画面,先换图或重生成;处理完成后重新检查。 - 确认任务没有暂停/取消,其他步骤已结束。 - 点“确认…张照片,生成MP4”。应用记录当前照片版本和内容摘要,并在实际编码前再次核对。 图示:版本+内容摘要保护 版本+内容摘要保护 状态/版本失败 摘要不一致 用户检查当前素材 MP3 ready+图片 ready POST confirm 发送当前image_version 后端状态与版本校验 无暂停/取消/活动冲突 记录确认版本与SHA256 当前有序图片字节摘要 视频worker再次核对 版本一致+内容摘要一致 开始本机编码 通过后发布MP4 换图/删图/重生成 新image_version · 清确认 拒绝旧确认或变更素材 重新查看图片并再次确认 图4|素材确认双闸门。客户端版本、服务端版本和worker内容摘要必须一致;变化后回到重新预览。小屏可横向滚动查看图示 任务页展示的图片是当前原素材,主副标题在合成画面阶段才制作,因此原图片预览不等同于最终标题版式预览。如果收到“图片版本已改变,请重新预览确认”或“确认后的图片发生变化”,重新载入任务并检查当前图片,不要用旧页面的确认按钮强行继续。该提示是防止旧照片与新确认错配的保护,不能通过只修改创作页提示词来消除。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-09 # 10 MP4合成、播放与结果检查 听文视频工作台 · 产品说明与指南 · 1.0.2 确认后,应用依序制作1080p画面、生成图片时间轴、编码视频、检查媒体规格,最后把临时文件发布为任务成片。视频和配音的总时长匹配,多张照片按保留数量平均分配音频时长;第一张显示标题,后续照片不带标题,没有自动字幕、背景音乐或转场。 任务页进度分为“画面准备”“视频编码”“验证画面与音轨”“MP4已完成”。编码百分比根据FFmpeg实际输出时间与音频时长计算,验证完成前最高显示99%;不按固定秒数假装进度。耗时随手机CPU、散热、文案长度、照片数及后台限制变化,本版本没有提供固定出片时间承诺。 ## 交付前检查清单 - 播放开头:主副标题是否正确,留空时是否没有多余标题。 - 播放中段:画面是否按保留顺序切换,声音是否持续,竖图是否完整。 - 播放结尾:朗读是否覆盖正文结尾,是否有明显提前结束或异常长尾。 - 核对文件:MP4可播放并含音轨,文件名与正文开头对应;需要另一种命名时在系统保存界面修改。 - 完成另存:确认目标系统文件夹中实际存在文件,再执行卸载或清理应用数据。 本机自动检查覆盖1920×1080、存在视频/音频流、时长差阈值等规格,不等同于人工审核每句内容和每个字形。关键成品仍应由使用者试听和观看。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-10 # 11 换图、删图、重新生成与复用配音 听文视频工作台 · 产品说明与指南 · 1.0.2 需求 | 应采用的操作 | 会保留什么 | 需要注意 | 更换手机照片 | 任务页选择新的手机照片并选用 | 原MP3、旧照片文件、已有视频文件 | 新照片完成后重新确认;试用新选择累计扣张数 | 改用网上图片 | 任务页填新图片直链并选用 | 原MP3与旧素材 | 失败不会覆盖原素材;试用新下载选择计数 | 从多图中删除部分 | 任务预览卡片点删除 | 文件作为历史素材保留,当前图库变为保留子集 | 至少保留1张;不退款,不允许在编码中删图 | AI图片不满意 | 输入新的图片要求,点重新生成 | 原MP3及此前素材 | 可能再次收费;试用版新增配图计数 | 更换AI来源或Pro/Flash模型 | 展开“需要更换图片来源或模型?”,点“使用创作页所选AI来源生成(保留MP3)” | 原MP3及此前素材 | 先在创作页选择AI来源/模型并填写要求、Key及费用同意;可把照片或网址任务改为AI配图 | AI图像步骤失败 | 点重试图片 | 已完成MP3及其他素材 | 云端结果未知时先核对用量,手动重发需明确确认;网址/手机照片失败应重新选择来源素材 | 朗读内容需修改 | 返回创作页修改正文,再创建新任务 | 历史任务可继续查看 | 换图不会修改音轨;重试音频使用旧任务保存的正文与音色 | 换图/删图/重生成会使当前任务视频状态重新等待确认,并清空先前的素材确认版本。应用不会因为保留了旧MP4而将它误当成新照片的成片。已有MP4仍可从作品页查看;同一任务再次编码使用其既定成片文件名,最终成功发布可能替换同一路径的旧视频,因此需要长期保留旧版本时应先导出旧MP4,再生成新版。旧素材保留不构成无限视频版本快照。 普通“重新生成图片”沿用原任务的AI模型;仅在创作页修改模型不会自动改变旧任务,必须使用上面的更换来源/模型入口。 云端AI请求已提交后,本机取消不能保证撤销云端生成。若服务最终返回已付费图片,应用尽量保存该图片并显示后续处理已取消,供用户之后继续使用。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-11 # 12 暂停、继续、取消、后台与恢复 听文视频工作台 · 产品说明与指南 · 1.0.2 ## 暂停和继续 “暂停”设置本机任务的暂停标记。语音网络等待与文件合并会在检查点等待;视频编码通过暂停整个编码进程组停止前进。“继续”解除暂停,保留已有进度。图片请求如果已经送达云端,不能靠本机暂停让服务端停止计费,应用也无法提供云端百分比。 ## 取消与重试 “取消”让后续处理停止,保留已完成MP3分段、图片和实际成片。取消网络等待、本机画面或编码过程需要步骤响应控制信号;“正在取消”不等于已经完全停止。尚未结束时,不要连续创建另一个任务或立即重试同一步骤;等界面允许操作再继续。 “重试音频”使用任务固定正文和音色,复用完成分段。“重试图片”用于AI任务,依当前模型配置执行,Seedream需要重新具备有效Key和费用同意;网址或手机照片失败需重新填写网址或选择照片。“再次确认”用于视频失败后的制作恢复,不会自动重做已准备素材。 ## 返回、锁屏与强行停止 正常返回桌面或锁屏,前台服务继续承载任务,通知显示处理阶段。Android返回键通常先从任务/作品/关于回创作,音色列表展开时先收起,再进行页面后退或退出。省电模式、厂商后台清理、网络断开、存储不足或系统回收仍可能使任务中断;前台服务不是永不退出的保证。试用版在真正返回退出时等待输入队列及草稿保存落盘,避免刚输入的字数或草稿丢失。 “强行停止”或系统杀进程后,重新打开应用会保留已生成素材,把原先等待/处理中步骤标记为待恢复,而不是假装仍在运行。选择对应历史任务,查看哪个步骤未完成,再手动重试。“继续”只解除暂停/取消标记,并不自动重启已经取消或中断的步骤;分别使用“重试音频”、重新选择照片/网址、图片重试或“重试合成”。进程重启不会自动重新提交Seedream收费请求。 ## 同时处理限制 应用为避免素材错配和设备资源竞争,会拒绝在已有活动任务时创建另一任务;同一个任务的音频与图片准备可并行。换图和删图也受活动步骤保护,不支持任意多任务并发、批量排队或批量自动生成成片。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-12 # 13 作品列表、保存和系统分享 听文视频工作台 · 产品说明与指南 · 1.0.2 作品页列出任务目录内实际完成且非空的MP4,按修改时间排序,显示文件名、大小、时间和任务关联。换图导致任务状态改变时,保留的视频仍可通过作品列表播放。点击刷新重新扫描文件;当前没有删除历史任务、清理素材或批量导出全部作品的按钮。 ## 保存MP3、MP4和图片 - 在任务页选择“保存MP3”“保存MP4”或“保存首张图片”;也可在作品列表保存对应MP4。 - 系统打开“创建文档”界面,选择目标位置,核对文件名并保存。 - 应用将已经完成的文件复制到你选择的目标URI,原文件继续保存在应用私有目录。 - 到目标位置检查文件是否完整;如果选择云端文档提供方,后续上传或同步由该系统提供方处理。 MP3/图片导出的建议名称通常参考任务画面标题,标题留空时使用“听文视频”;MP4使用正文开头命名。任务页对外提供保存首张图片的便捷入口,不是自动把整套原始照片备份到公共相册。 ## 分享 任务页可分享MP3或MP4,作品页仅分享MP4,由Android系统列出已安装接收应用。工作台发放只读内容URI权限;接收应用是否支持该MIME类型、文件大小及完整读取由其自身决定。当前分享令牌没有固定到期时长,不应理解为分享后若干分钟自动销毁文件。分享失败时可先保存到系统目录,再从接收应用选择文件。 图示:读取已有成品 → 多层校验 → 用户选择目标 读取已有成品 → 多层校验 → 用户选择目标 保存 分享 用户点保存/分享 任务或作品页 原生桥解析URL或路径 当前本机源 · 固定媒体路由 Python文件白名单 任务媒体/导出记录 · 非空非pending Java再次canonical校验 允许目录/类型/文件 ACTION_CREATE_DOCUMENT 64KiB复制到用户所选URI ACTION_SEND+content URI 随机映射 · 只读grant · Provider复核 图6|安全导出链。保存是复制到用户URI;分享是通过只读内容URI授予目标应用访问,不开放任意私有文件。小屏可横向滚动查看图示 应用内部路径显示用于说明文件归属,不代表其他文件管理器能直接读取私有目录。要把作品交给别人,使用系统保存或分享,而不是复制界面中的内部绝对路径。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-13 # 14 草稿、偏好、日志和关于菜单 听文视频工作台 · 产品说明与指南 · 1.0.2 ## 自动草稿与清空 草稿保存在本机,包括正文、主副标题、图片要求、音色、图片方式、安全的图片来源偏好以及选中任务标识。恢复草稿不会播放样音。API Key、模型选择、付费同意、图片网址和尚未提交的系统文件选择不作为草稿长期保存,进程关闭后需要重新提供这些信息;已创建任务自身会保存模型快照。 顶部“清空”清除当前输入、临时选图和当前任务显示;历史任务、成片、日志继续保留,正在后台运行的任务不会因这一按钮取消。清空后可以从历史任务重新选择。试用计数已发生时不会因为清空退还额度。 ## 运行日志与版本记录 “日志”区域可查看全部运行记录、模型调度记录、历史版本说明,支持刷新、继续加载分页和导出JSON。自动记录包含事件、时间、版本、任务标识、阶段、来源/模型、耗时、状态及照片数量等安全字段;不记录API Key、完整朗读正文、完整提示词或远程图片网址。 任务JSON仍保存必要的正文和提示词,这是作品生成资料,不应把“日志脱敏”解释成“整个应用没有保存正文”。记录文件仅在手机私有目录;导出JSON是用户主动行为,不会自动发送给GitHub或其他服务。历史版本说明是整理记录,和当时实际生成的运行事件有不同含义。 ## 关于菜单 当前正式版关于页 · 浏览器检查截图点击截图可放大阅读 关于页包括当前APK版本、主要功能、音频合成费用说明、联网和隐私说明、核心技术、六步使用方法,以及相关服务说明入口。1.0.2“本次更新”说明6G示例标题与紧凑首页;原约3秒开场与关于功能继续保留。试用关于页补充累计额度、到期规则和微信联系信息。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-14 # 15 累计试用规则与购买联系 听文视频工作台 · 产品说明与指南 · 1.0.2 试用额度按整个试用过程累计。不是每个任务10000字,也不是每个任务10张照片。任一额度达到上限,即立即结束制作功能。 图示:全试用期累计:文字 OR 照片 全试用期累计:文字 OR 照片 否 是/坏账保护 新增/替换正文 Unicode差异计数 新选择/URL/AI配图 手机图有效批次+选择凭据 私有TrialUsage账本 RLock · pending · fsync · replace 达到任一上限? text_used ≥ 10000 OR photos_used ≥ 10 尚有两项余额 允许制作 · 重复提交不重扣 expired持久锁定 取消在途本机处理 · 停止新制作 保留成品导出与联系 微信wzqy2019 · 不自动付款 图5|累计试用的“任一耗尽”判定。恰好10000字或第10张的记账可返回成功,但随即失效;删除不返额。小屏可横向滚动查看图示 ## 文案如何累计 操作 | 计数方式 | 第一次输入1000字符 | 已用1000、剩余9000 | 在后面追加500字符 | 新增500,已用1500 | 保存相同草稿,或同一文案提交任务 | 不因重复保存/提交重复扣同一已记输入 | 从原文删除300字符 | 不增加,但已用额度不减少 | 替换一段正文 | 替换后新增的部分计数;不是仅算当前总长度增长 | 清空再输入或重新导入 | 清空不退款,后续新增输入继续累计 | 输入标点、空格、换行、英文、emoji | 按Unicode字符口径;不是只数中文汉字,某些视觉字符由多个Unicode码点组成 | 中文输入法拼音候选 | 未确认的预编辑过程不扣;确认后的实际内容计数 | 恢复已有草稿、纯查看历史任务 | 不因正常恢复或查看再次计数 | 清洗与撤销 | 纯删除不退款;恢复或替换出新增内容可能继续计数 | 这里的“1000字”以产品的Unicode字符口径为准。累计算法比较已接受正文与新正文的新增/替换内容,因此“把1000字改为另1000字”不等于免费修改,也不一定只增加最终长度之差。标题与图片提示词不作为本项朗读正文额度扣除;它们仍受各自规则与请求体保护。正常MD导入按去格式后的正文计数;若原始导入文本本身超过10000字符,会先触发超限结束,不靠去格式绕过。 ## 照片如何累计 新选的手机照片在预选阶段即记账,不需要等生成任务。删掉预选照片或取消任务不返还张数;重新从系统选择器新选同样照片仍是一轮新选择。把已记账的同一批照片直接提交任务,不会再扣一次;删除部分预选照片后提交合法子集,也不会再扣这一子集。 任务中的换图、公开图片网址的新选择以及AI新配图请求都纳入新图片额度。现有图库中的删除/保留筛选不属于新图,不增加也不退款。网址配图在网址/DNS校验前扣1,AI新图在配置、Key和费用同意校验前扣1,因此尚未联网的无效网址、缺少AI认证或最终失败,也可能消耗照片额度。常规不超过10张的手机照片批次在完整解码校验后才扣,解码失败不扣;单批超过10张会在解码前令试用到期。没有根据最终是否成片返还次数的机制。新建任务请求即使最终因已有活动任务而被拒绝,也可能已完成额度记账。 ## 精确边界与立即停止 例如:此前已用9000字符,再新增1000字符,累计到10000时立即到期;此前已选9张,再选第10张时立即到期。第10张可以完成有效选择和记账,但不能再据此启动新的作品;正在进行的音频/图片/视频步骤也会收到取消信号。超出剩余额度的批次或输入会被拒绝并结束试用,不会当成下一任务的可用额度。 到期后可继续查看说明、联系信息和已经完成作品,并导出保留的成品。停止制作包含新任务、继续制作、重试、换图、AI重生成与确认编码等入口。已提交云端付费请求无法由本机额度锁定撤销,其可能返回的素材会按既有保存策略处理。 ## 联系正式版与现有弹窗 联系微信:wzqy2019。到期弹窗提示添加该微信咨询长期使用;关于页也有复制联系信息入口。首次成功完成试用视频后的联系提示是一次性购买咨询提示,不代表额度已经耗尽;真正试用结束由累计阈值或账本安全状态决定。本版本没有内置支付、微信自动添加好友、激活码校验或远程授权平台。 ## 计数保存、旧版迁移与限制 额度账本保存在应用私有目录,跨普通退出和重启保留;损坏或无法可信重建时采取停止制作的保护。旧1.0.1试用版升级时,会根据仍存在的任务、草稿、照片文件和安全事件记录进行保守迁移;旧版未记录且已经删除的输入无法完整重建,不能保证还原全部过去编辑动作。 当前为本机计数方案,卸载、清除应用数据或在另一台设备新装会失去原私有账本,没有跨设备账户累计,也没有服务端防重置授权。正式版和试用版安装数据独立,购买咨询不能自动把试用版解锁为正式版。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-15 # 16 费用、联网、隐私与数据去向 听文视频工作台 · 产品说明与指南 · 1.0.2 环节 | 是否联网 | 当前软件费用说明 | 数据去向 | 输入、清洗、标题编辑 | 不需要 | 本机处理 | 本机草稿;任务创建后保存到私有任务文件 | 播放26段预设试听 | 不需要新合成 | 不发起云端TTS请求 | 读取随包音频 | 生成新MP3 | 需要 | 本应用不收取音频生成费用,不要求填写TTS Key | 朗读正文/音色发送至Edge在线语音服务 | 导入手机照片 | 本地文件本身不需要;云端文件提供方可能联网 | 不调用收费生图接口 | 本机解码、规范化、私有任务图片 | 下载图片直链 | 需要 | 不调用AI生成;外部网站及流量按其规则 | 访问用户指定公开图片服务器 | Seedream新图 | 需要 | 用户自己的方舟账户可能按请求计费 | Key用于认证;提示词发送至方舟 | 画面加工、MP4编码 | 不需要外部编码服务 | 在手机本机完成 | 私有目录 | 保存/分享 | 本地保存通常不需要;云盘目标或接收应用可能联网 | 由目标服务自行处理 | 用户选择的系统存储或分享目标 | “音频不收费”指当前应用没有向用户按音频生成收款,也不要求为Edge TTS填写个人API Key;它不是对外部服务永久可用、商用权利、网络运营商流量费或未来政策的保证。服务故障、网络限制或外部变更可能影响合成。项目使用的是edge-tts接入在线语音服务,不是手机本地语音大模型。edge-tts项目说明可供核对接入方式。 音频及图片费用说明 · 浏览器检查截图点击截图可放大阅读 应用服务仅监听手机回环地址,用户任务不因为安装APK而上传GitHub;GitHub发布的是代码、开发记录和安装包。不要主动把敏感文案送到联网语音或云端生图服务。API Key不长期落盘并不表示整个手机或第三方输入法绝对无法观察正在输入的信息。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-16 # 17 文件生命周期、备份与容量管理 听文视频工作台 · 产品说明与指南 · 1.0.2 图示:用户输入与文件保留关系 用户输入与文件保留关系 历史保留 主动导出 私有数据清除 编辑草稿 白名单字段 · 不保存Key 建立任务快照 正文/标题/音色/图片配置 完成素材和成片 part/MP3/PNG/cover/MP4 应用私有workbench JSON/媒体/日志/试用账本 清空工作区 改空草稿 · 不取消不删任务 普通重开/覆盖升级 保留素材 · busy变待恢复 用户另存到系统文档 副本由目标提供方保存 卸载/清除应用数据 删除私有任务和本机账本 图7|数据生命周期。清空只改草稿/当前显示;覆盖升级保留私有数据;卸载/清数据删除私有数据和本机试用计数。小屏可横向滚动查看图示 数据 | 保存在哪里 | 清空界面后 | 升级覆盖安装后 | 卸载/清除数据后 | 当前草稿和安全偏好 | 应用私有目录/偏好存储 | 正式版/未到期试用版保存空草稿;到期试用不再保存新草稿,旧正文可能恢复;安全选择按界面逻辑恢复 | 一般保留 | 删除 | 已创建任务正文和提示词 | 私有任务JSON | 保留 | 保留 | 删除 | MP3分段、规范化图片、画面与成片 | 私有任务目录 | 保留 | 保留 | 删除 | 运行日志 | 私有records目录 | 保留 | 保留 | 删除 | 试用累计账本 | 试用应用私有目录 | 不退款,继续保留 | 保留并按规则迁移 | 删除 | 用户已经另存的MP3/MP4/PNG/JSON | 用户所选系统文档位置 | 不受工作区清空影响 | 不因APK覆盖被主动修改 | 通常独立保留,具体由目标提供方管理 | Android清理“缓存”和“应用数据”不是同一操作;本产品主要任务位于私有files区域。不要假定任意手机清理工具都只删除临时文件。当前界面没有任务删除、自动容量回收或项目打包备份入口。长期制作会累积素材,重要作品应定期另存,并在系统存储设置中查看应用占用。 只导出MP4可保留最终作品;还需后续再制作或向他人交付独立配音时,另存MP3及必要图片。导出JSON日志用于诊断,不是可一键恢复全部任务和试用状态的备份包。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-17 # 18 常见问题与故障处理指南 听文视频工作台 · 产品说明与指南 · 1.0.2 现象/提示 | 可能原因 | 建议处理 | 应避免的操作 | APK无法安装或架构不支持 | 32位设备、Android版本不足、不同签名或文件不完整 | 核对API24+和64位架构、SHA256、正式/试用包名及原签名升级关系 | 为了绕过不同签名而先卸载未备份数据 | 开屏超过3秒 | 资源准备、本机Python/服务或WebView尚未就绪 | 等待真实状态;出现失败时使用重试;检查存储和应用权限 | 将“至少约3秒开场”理解成所有设备3秒必进入主页 | 试听正常但新语音失败 | 试听本地,新语音依赖联网服务 | 检查网络;读语音错误后重试,完成分段可复用 | 把试听成功当作云端服务连通证明 | 文案清洗删掉内容 | 固定格式处理移除格式符号/链接等 | 立即撤销清洗,核对原文后再处理 | 把清洗结果未经检查直接用于关键内容 | 主副标题超过30字 | 两组标题合并超出版式限制 | 缩短标题,正文无需因此缩短 | 只减少主标题却忘了副标题也计数 | 照片无法读取 | 格式不支持、损坏、超过大小/像素保护 | 转JPEG/PNG,压缩并重新选择 | 只改文件后缀而不转换内容 | 请求超过64MB | 照片Base64导致请求体膨胀 | 减少张数或文件大小 | 重复提交同一超大批次 | 图片网址提示不是图片/地址不允许 | 填入文章页、私网、登录地址或被禁止端口 | 使用公开图片直链,或保存后本机导入 | 尝试填写内网接口或账号密码链接 | Seedream 401 | Key无效 | 检查自己的Key,进程关闭后重新填写 | 将Key发给无关人员或写进截图/日志 | Seedream 403/模型未开通 | 账户没有模型访问权限 | 在方舟控制台核对模型权限与APK模型名称 | 重复点击期待绕过权限 | SetLimitExceeded | 模型用量上限触发 | 核对方舟“开通管理”中的实际限额 | 把它一概理解为Key无效或无条件关闭费用保护 | Seedream超时/结果未知 | 外部响应不确定,可能已生成并计费 | 先查看方舟用量,决定是否手动重发 | 连续重试导致多次收费 | 确认按钮不可用 | 音频或图未准备好、仍在处理、暂停、取消或试用到期 | 读三阶段状态,解决对应原因 | 用修改创作页正文来试图修复旧任务状态 | 图片版本已改变 | 换图或删图后旧确认失效 | 重新查看当前图库并确认 | 依旧预览确认新的未知素材 | 视频失败 | 空间不足、编码异常、应用被回收或素材校验失败 | 保留任务,查看消息,检查空间后重新确认/恢复 | 未导出前清除全部应用数据 | 锁屏后任务中断 | 系统省电/后台限制或进程回收 | 重开选择历史任务,手动恢复未完成步骤 | 认为前台通知能保证永久运行 | 保存/分享失败 | 文档提供方错误、目标应用不支持、文件未完成 | 先确保成品完成;改用本地系统目录保存再分享 | 把内部绝对路径当作可公开访问链接 | 试用显示到期但当前正文很短 | 额度按累计新增输入,不按当前长度 | 查已用/剩余提示,联系微信wzqy2019 | 清空删字期待退还已用额度 | 正式版没出现试用作品 | 两包数据独立 | 从试用版先导出已有成品 | 认为购买或安装会自动迁移任务 | --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-18 # 19 验证范围与当前产品边界 听文视频工作台 · 产品说明与指南 · 1.0.2 正式版1.0.2交付进行了78项离线业务回归、3项真实Chrome关于/紧凑布局检查和2项正式版API检查,共83项通过。试用版1.0.2进行了45项Python接口/运行时/累计账本检查、76项离线业务回归和21项Chrome检查,共142项通过。两个release APK均核对了包名、版本、原签名、provider、45项打包资源、两种ABI原生组件及16KB ZIP对齐。 这些证据来自主机回归、浏览器及安装包检查,本轮1.0.2未新增真实手机上的完整WebView、SAF、分享和成片流程验收。原生FFmpeg/FFprobe曾在Android14 ARM64模拟器执行版本命令;用户反馈此前版本已经跑起来。这些来源分别记录,不能互相替代。 当前产品边界:没有账户登录/跨设备同步、远程激活、内置支付、任意自定义音色、文章网页提炼、文案AI续写、片段与图片语义对齐、字幕、背景音乐、视频素材剪辑、转场编辑、照片拖拽重排、批量自动任务队列或任务清理管理;本机Draw Things按要求未接入。源代码中保留的兼容函数或脚本选项不等于APK向用户提供的功能。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-19 # 20 术语、服务联系方式与来源 听文视频工作台 · 产品说明与指南 · 1.0.2 术语 | 在本产品中的含义 | 草稿 | 目前编辑的输入,和已创建任务快照相互独立 | 任务 | 独立UUID目录及其正文、音色、照片、阶段状态和作品 | 素材 | MP3及当前保留照片;完成素材不等于已经确认编码 | 图片版本 | 换图/删图后变更的标识,用来阻止旧确认继续生效 | 成片 | 经本机编码和规格检查的实际MP4文件 | pending/partial | 未完成的临时文件,不应作为成品保存/分享 | 本机服务 | APK内部回环HTTP服务,非PC服务器,也不是对外网站 | API Key | 用户自己的方舟认证信息,与APK签名、试用额度不同 | 累计额度 | 试用期间已经接受的新增输入或新图片选择,不因删除退款 | 正式版购买咨询:微信 wzqy2019。本手册提供使用与实现说明,不创建支付订单,也不自动联系微信。 ## 本说明书的主要源码依据 - app/src/main/assets/workbench/templates/index.html:文案、音色、配图、任务、作品、关于及内联界面逻辑。 - app/src/main/assets/workbench/static/mobile.js、mobile.css:四页导航、手机按钮、原生保存分享、草稿与紧凑布局。 - app/src/main/python/app.py:创建任务、标题校验、素材版本确认、状态、历史与导出接口。 - speech.py、photo_import.py、seedream.py、android_runtime.py:语音、照片、云端图片与手机编码行为。 - 试用版trial_limits.py及其app.py/mobile.js/原生Activity差异:累计计数、到期锁定和购买提示。 - 两版docs/1.0.2交付验证.json或docs/1.0.2交付记录.json、测试报告:实际验证范围。 产品发布:正式版1.0.2、试用版1.0.2。原仓库为私有,访问代码或发布附件需要相应账号权限。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/product-20 # 01 文档基线、目标与技术边界 听文视频工作台 · 技术架构与实现 · 1.0.2 本文描述听文视频工作台Android正式版1.0.2与独立试用版1.0.2-trial的实际实现,覆盖产品到代码、输入到成片、任务到文件、构建到发布的完整链路。适用对象为开发人员、技术交付人员、维护人员以及需要判断产品实现范围的评审者。本文不是将来功能方案:已实现行为、测试证据和现有局限分开表述。 基线项 | 正式版 | 试用版 | APK versionName | 1.0.2 | 1.0.2-trial | versionCode | 10002 | 10002 | applicationId | cn.tingwen.workbench | cn.tingwen.workbench.trial | Java namespace | cn.tingwen.workbench | cn.tingwen.workbench | 导出provider authority | cn.tingwen.workbench.exports | cn.tingwen.workbench.trial.exports | 保留的PC业务基线 | PC1.5.9 | PC1.5.9,附累计试用控制 | Android SDK | min24 / target34 / compile36 | 相同 | ABI | arm64-v8a、x86_64 | 相同 | 技术实现使用原生Java宿主与WebView承载交互、Chaquopy内嵌Python、Flask提供回环HTTP业务接口、Pillow加工画面、在线Edge TTS生成MP3、可选Seedream生成图片,以及打包的Android原生FFmpeg/FFprobe执行编码与探测。手机不依赖PC在线、不下载本机绘图模型,不存在远程Web应用托管层。 需要区分三条边界:界面在哪里显示(WebView)、业务在哪里执行(应用进程内Python)、哪些数据离开设备(联网TTS正文、用户选择的图片服务器访问、用户明确同意的Seedream提示词/认证及主动分享)。视频编码和照片规范化在手机本地,但不是所有输入处理都完全离线。 源码归档中仍保留PC兼容函数、Draw Things模块、CLI脚本和历史版本记录;这些不代表APK现行用户入口。特别是Android启动会替换视频worker,绕过桌面Python子进程合成分支。本文所有编码参数均取Android实际worker,而非保留CLI的可选字幕或macOS硬件编码分支。 编制日期:2026-10-10。正式版代码发布目标提交为7fa6bf848d5f6718a38838f56b5754e267cba19f;试用版发布目标为14f47dc5edadcd5d498a71ae039b1d44feaef3f1。后续主分支fb7e0c1补充发布核验记录,未改已签APK。原始源码及证据目录的SHA256索引附于本文最后,便于核对资料基线。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-01 # 02 总体架构与部署拓扑 听文视频工作台 · 技术架构与实现 · 1.0.2 图示:Android默认进程+本机原生媒体子进程 Android默认进程+本机原生媒体子进程 载入本机页 start() 同源HTTP 桥调用 在线语音 可选收费图 安全导出 MainActivity 启动/页面/系统交互 WorkbenchService Chaquopy启动 · 通知 · WakeLock NativeBridge+导出层 路径复核 · SAF · 只读URI WebView前端 模板内联JS+mobile.js/CSS Flask回环服务 127.0.0.1:随机端口 · 双层鉴权 Python任务与素材处理 Control/WORKERS/RLock FFmpeg/FFprobe子进程 Pillow cover · H.264/AAC 应用私有文件 任务/草稿/素材/日志/账本 Edge在线TTS 正文+所选音色 Seedream(可选) 提示词+用户Key+付费同意 公开图片服务器 仅安全直链下载 Android系统文件目标 用户另存/主动分享 图2|系统运行架构。实线表示本机调用或数据流,虚线表示网络访问;远端TTS与可选AI服务不属于手机内置模型。小屏可横向滚动查看图示 ## 分层职责 层次 | 实现组件 | 职责 | 不承担的职责 | Android宿主层 | MainActivity、WorkbenchService、StartupAnimationView、ExportPolicy、ExportProvider | 生命周期、启动画面、WebView、系统选择器、通知、唤醒、另存与分享安全 | 不实现TTS模型、不承载远端账号授权 | 前端交互层 | Jinja模板中的内联JS、mobile.js、mobile.css | 文案和标题、音色、图片来源、状态展示、确认操作、草稿、四页导航 | 不作为唯一的验证或额度权威 | 本机服务层 | android_runtime.start、Flask app、guard | 手机私有回环服务、鉴权、JSON接口、资源和媒体返回 | 不面向局域网或互联网开放API | 业务调度层 | app.py、Control、WORKERS、ACTIVE、CONTROLS | 创建任务、线程调度、阶段状态、确认闸门、暂停/取消、恢复、素材保留 | 无持久化多任务队列、无OS JobScheduler | 素材处理层 | speech.py、photo_import.py、seedream.py、标题脚本 | 在线语音、输入图片安全、云端图像适配、画面绘制 | 无端侧大模型、无文字AI改写 | 媒体执行层 | Android FFmpeg/FFprobe PIE程序 | H.264/AAC编码、格式/时长/流探测、进度输出 | 无Android MediaCodec硬件编码分支 | 私有数据层 | JSON/JSONL、PNG、MP3、MP4 | 草稿、任务快照、语音片段、素材、成品、日志、试用账本 | 无SQLite/Room、无同步服务器 | ## 进程与线程 Activity、Service、WebView宿主和Chaquopy均处于默认应用进程,Manifest没有独立android:process声明。Service有单线程计划执行器,Python本机HTTP服务以daemon线程运行且请求处理支持线程;每个业务步骤由daemon线程执行,音频步骤内部运行asyncio事件循环。FFmpeg和FFprobe通过Python子进程执行,不由JNI媒体接口加载。 libffmpeg.so和libffprobe.so虽使用.so名字,实际是Android ELF64 PIE可执行程序。这个名称方便Android安装时将其提取到nativeLibraryDir;执行路径来自系统应用信息,不依赖PATH中另行安装FFmpeg。 Chaquopy作为Android Gradle插件将Python运行时、Python业务和对应ABI依赖打入APK;本项目使用Java API在宿主中启动与调用Python模块。Chaquopy 17 Gradle文档说明这一接入机制;具体版本和模块调用以本项目配置为准。 依据:app/build.gradle:9–55、AndroidManifest.xml:14–27、WorkbenchService.java:47–57、android_runtime.py:168–187、app.py:325–366。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-02 # 03 模块、目录与接口责任 听文视频工作台 · 技术架构与实现 · 1.0.2 源码模块 | 核心责任 | 主要输入/输出 | MainActivity.java | 主WebView、开场覆盖层、原生桥、文件选择、保存/分享、返回键 | 系统Intent/本机URL/导出路径 → 页面、URI、原生提示 | WorkbenchService.java | 拷贝应用资源、启动Python/Flask、阶段通知、WakeLock | files根/native目录/随机密钥 → baseUrl与运行摘要 | StartupAnimationView.java与StartupTiming.java | Canvas科技蓝动画及首帧计时 | 首帧时刻、页面ready → 是否揭示WebView | ExportPolicy.java | 同源和文件路径二次校验 | URL/文件 → 安全判定 | ExportProvider.java | 临时内容URI映射、只读访问 | token/文件名 → MIME、描述、只读文件描述符 | android_runtime.py | Android启动、实际视频worker、系统图像解码、导出解析 | Java调用、任务/Control → 本机服务与手机成片 | app.py | 路由、任务schema、调度、状态、图片确认、历史和恢复 | JSON请求 → 任务JSON/媒体/日志 | speech.py | 音色表、正文分段、受控流、有限重试、片段复用与拼接 | 正文/音色/控制 → part文件/audio.mp3 | photo_import.py | Base64/图片验证、批次保护、PNG规范化、公网URL安全 | 手机图/直链 → PNG字节与脱敏元数据 | seedream.py | 方舟图像单次请求、结果未知分类、错误脱敏 | 用户Key/模型/prompt → 单张PNG与模型元信息 | image_sources.py | 来源注册与客户端选择 | 环境/provider → 可用来源和客户端 | records.py | 版本说明、安全事件日志、分页 | 白名单字段 → events.jsonl/响应列表 | make_homepage_bg.py | 标题规范化、计数、字体与海报布局 | 原图/主副标题 → 标题画面 | compose_video.py | 保留PC CLI;Android仅复用时间轴函数 | Android调用build_image_sequence → ffconcat | trial_limits.py(仅试用版) | 累计账本、文字差异、照片凭据、迁移、失效联动 | 新正文/新图片 → 持久usage及到期状态 | 界面主业务脚本并非独立app.js:它位于templates/index.html的内联script,随后加载static/mobile.js改写手机端布局、导航及PC按钮行为。技术维护时必须同时查看模板、移动JS和移动CSS,单看原模板会把“打开文件夹”等PC文案误认为Android实际动作。 应用随包资源包括字体、26段试听、许可证、模板和静态文件。用户任务、运行日志、草稿、API Key和签名私钥不应进入源码归档或APK资源。文档中的数据结构与示例使用合成内容,不来自实际用户任务。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-03 # 04 启动、3秒动态开场与前台服务 听文视频工作台 · 技术架构与实现 · 1.0.2 图示:原生开场与本机服务并行 原生开场与本机服务并行 计时条件 页面条件 失败/等待 Activity创建 隐藏WebView+开场覆盖层 Canvas首帧 记录uptime · 至少3000ms Service初始化 资源 · Python · 回环服务 WebView载入首页 Android密钥/页面ready 开场揭示闸门 首帧已发生+已满3秒+页面ready 进入四页工作台 延后通知权限申请 加载慢或启动失败 留状态/明确重试入口 图3|开屏揭示条件与服务并行初始化。3秒从首帧起计,加载失败不以空白页面冒充就绪。小屏可横向滚动查看图示 ## 启动序列 - Activity创建隐藏WebView与原生开场覆盖层;同时启动WorkbenchService。动画和业务初始化并行,不用固定sleep阻塞主线程。 - StartupAnimationView使用Canvas/Paint/Path和渐变绘制科技蓝背景、轨道、声波及“文字/声音/视频”阶段。设计坐标按屏幕映射,首个实际绘制帧记录SystemClock.uptimeMillis()。 - StartupTiming的时长常量为3000ms。显示页面需同时满足首帧发生、已满3000ms和pageReady=true;页面慢时保持加载状态,失败时显示错误与“重试启动”。 - Service立即建立低重要性通知渠道并进入前台。API34及以上使用FOREGROUND_SERVICE_TYPE_SPECIAL_USE;Manifest附带用户发起本机语音和视频任务的用途描述。 - 后台执行器将assets/workbench拷到getFilesDir()/workbench;模板和静态文件按前缀更新,其他已有文件通常保留。 - 启动Chaquopy Python;Java用SecureRandom生成32字节密钥(256bit),并转为64个十六进制字符的字符串保存在运行内存。 - 调用android_runtime.start(root,nativeDirectory,secret):设置环境、导入业务、替换视频worker、恢复任务状态、建立随机端口回环服务。 - Activity用X-Android-Key头载入首页。返回首页设置HttpOnly Cookie,让同源子资源继续通过Android密钥验证。 - 页面ready后等待开场满足计时条件,隐藏覆盖层。Android13及以上的通知权限请求延后至开场完成、页面ready且Activity恢复状态,避免遮住动画。 ## 关键常量与生命周期 项目 | 实际值/机制 | 开场最低时长 | 3000ms,从首个绘制帧起计 | 服务Host/Port | 127.0.0.1,端口0由系统动态分配;不是固定8091 | 通知渠道/ID | workbench_tasks/1001 | 服务状态轮询 | 每2秒调用Python status_json | 处理期唤醒 | PARTIAL_WAKE_LOCK,单次最长10分钟;仍忙时后续轮询可重新获取,空闲释放 | 服务重建提示 | START_STICKY;不能据此保证进程永远存活 | Activity销毁 | 销毁页面与预览资源,不主动停止前台服务 | copyAssets代码还检查previews/前缀,但真实试听位于assets/previews/,不能将其泛化为“升级一定覆盖所有已有试听”。本版本试听内容未调整;未来资源升级应按实际相对路径核验。 通知展示ACTIVE步骤汇总,例如“合成MP3/准备照片/合成MP4”;精确分段与编码进度属于任务页。唤醒锁仅影响部分CPU休眠,不能阻止所有厂商省电清理、强行停止或存储故障。 依据:StartupTiming.java:4–12、StartupAnimationView.java:35–94、MainActivity.java:72–145、WorkbenchService.java:28–103、android_runtime.py:168–197。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-04 # 05 本机HTTP鉴权、会话和WebView边界 听文视频工作台 · 技术架构与实现 · 1.0.2 图示:从本机页面到受限业务接口 从本机页面到受限业务接口 不通过 可信主WebView 当前127.0.0.1:动态端口 Android运行密钥 请求头/HttpOnly同源Cookie Host与Origin检查 回环Host · 同源 · 拒绝cross-site POST令牌与JSON/大小 X-Local-Token · 64MiB保护 业务/素材/额度验证 参数 · 状态 · 版本 · TrialUsage 允许的任务与文件能力 受控worker/安全媒体读取 保护性拒绝 403/415/413/400/409 图13|本机请求验证链。先通过应用密钥、来源、POST会话与JSON保护,才进入业务和试用校验;服务仅监听回环地址。小屏可横向滚动查看图示 ## 请求验证顺序 层次 | 检查项 | 结果 | Android应用访问密钥 | X-Android-Key或tingwen_app Cookie与运行态secret恒时比较 | 不匹配403,拒绝进入业务 | Host | 仅127.0.0.1或localhost | 其他Host拒绝 | 来源 | POST和/api/session在提供Origin时检查其等于当前scheme/host/port;Sec-Fetch-Site不得为cross-site | 不同源拒绝;缺Origin本身不拒绝,无放开CORS | 本机会话 | 所有POST要求X-Local-Token等于本进程TOKEN | 缺失/过期403,带明确code | 内容类型 | POST必须JSON | 非JSON为415 | 请求体 | 最大64×1024×1024字节 | 超出413 | 业务校验 | 标题、音色、图片、状态、版本、额度等 | 不通过时400/409等 | TOKEN通过secrets.token_urlsafe(32)生成,仅在运行内存;Android secret同样不写任务或草稿。首页Cookie设置HttpOnly与SameSite=Strict;回环HTTP没有设置Secure。首页和会话响应为no-store。HttpOnly能限制页面JS读取Cookie,不能替代主WebView导航控制和设备安全边界。 前端仅对服务器明确给出的local_session_expired拒绝进行一次会话恢复与重放:获取同源/api/session、校验产品名与token后重新发原请求。该拒绝发生在任务/模型处理之前,因此可以安全恢复。普通网络断连、Seedream超时或“响应未知”不属于可自动重发场景,防止产生第二次付费请求。 ## 主WebView设置与导航 - 开启JavaScript和DOM storage,关闭file access;content access供系统选择器交互使用。 - 拒绝第三方Cookie、禁止mixed content、媒体播放要求用户手势;WebView摄像头/麦克风权限请求直接deny。 - 主页面仅允许当前http://127.0.0.1:同源导航。主机需字面127.0.0.1、无userInfo、合法且相同端口。 - 当前源资源、当前源拥有的blob、data和about:blank按代码规则放行;其他资源请求返回403。外部http/https/mailto/tel交给系统应用。 - 图片放大使用无AndroidNative桥的独立预览WebView,需用户手势;关闭预览会销毁其资源,避免把原生文件能力带给任意外部页面。 网络安全XML默认拒绝cleartext,仅回环域名放行。Python照片下载自行允许并验证公共HTTP/HTTPS,不能把XML设置误解为Python的网上图片只支持HTTPS。APK并未实现证书钉扎、设备加密数据仓库或跨设备身份服务。 依据:app.py:369–419、MainActivity.java:146–239、ExportPolicy.java:9–27、res/xml/network_security_config.xml。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-05 # 06 前端交互、草稿与手机适配 听文视频工作台 · 技术架构与实现 · 1.0.2 前端通过四个pane组织创作、任务、作品和关于,mobile.js将PC定位文件行为适配为AndroidNative导出或作品页。首页大介绍区已去除,应用名下两行10px说明保留;360/390px检查避免标题区挤占文案输入空间。主标题placeholder“6G 通信”不等于默认写入标题。 交互机制 | 实现要点 | 正文统计 | Array.from(text).length,Unicode码点口径;长文输入框内部滚动 | 标题统计 | 规范化主副标题,去换行后合计;客户端提前拒绝30字符以上,服务端重复校验 | 音色 | 模板由VOICES渲染,所选按钮和摘要更新;样音来自本机preview接口,恢复不自动播放 | 本机照片预选 | FileReader读取、大小和数量预检、ObjectURL缩略图;重新选择替换批次,删除回收ObjectURL | 图片动作锁 | 防重复点击、换图期间禁用相冲突动作;服务端仍执行状态校验 | 任务轮询 | 选中任务约每2.5秒刷新,显示三个独立阶段状态 | 草稿 | input/change后300ms延迟,隐藏/返回时主动保存;只保存白名单字段 | 视频列表 | 请求实际磁盘成片列表,内嵌标准video控件;保存/分享交给原生 | 错误反馈 | alert/toast与步骤消息;结构化服务错误显示原因,模板文本以textContent插入数据 | “清空”调用工作区清理逻辑,不向后端发送cancel,也不删除任务。它清输入、文件预选、Key、费用勾选、当前任务显示和本地清洗撤销缓存;正式版及未到期试用版保存空草稿。到期试用的flushDraft不再保存新草稿,清空正文还可能被计数锁回退为acceptedText,重启仍可恢复原已存正文。历史文件和活动工作仍由后端维护。用户想停止处理需要明确点击取消。 草稿恢复字段包括title,titleSecondary,text,prompt,voice,imageMode,provider,selectedId;不包含model、api_key、payment_consent、photo_url或File对象。模型不持久保存回草稿,已有任务的模型快照保存在job中。来源在Android草稿中固定为seedream。 正式版返回键保存行为与试用版不同:试用版额外等待串行计数/保存Promise后才触发原生finish,相关一致性细节见第17章。不得把试用专属修复扩写成正式版也具有同一队列实现。 依据:templates/index.html:154–282、static/mobile.js:4–101、static/mobile.css:3–19、app.py:427–465。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-06 # 07 任务模型、调度与三阶段状态机 听文视频工作台 · 技术架构与实现 · 1.0.2 图示:阶段状态与显式恢复 阶段状态与显式恢复 重启 通过校验 pause/resume idle/未开始 视频等待素材确认 queued/等待 launch接受步骤 working/处理中 执行worker/更新进度 ready/done 音频图ready · 视频done failed/失败 素材保留 · 显示错误 cancelled/已取消 Control取消后worker退出 interrupted/待恢复 进程重启时busy转入 显式重试或再次确认 检查状态/版本/费用/试用额度 paused独立标记 检查点等待/编码SIGSTOP 图8|单个步骤状态机。音频/图片成功为ready,视频成功为done;paused/cancelled是跨阶段标志,resume并不自动启动中断步骤。小屏可横向滚动查看图示 系统不是一个单独全局状态枚举。每个job有独立的audio_state、image_state、video_state,以及paused、cancelled、submitting等跨阶段标记。音频、图片成功状态为ready;视频成功为done。queued/working用于活动判定,failed/cancelled/interrupted表示不同终止或恢复情形。 ## 创建与工作器 新任务先规范化标题、验证正文/音色/配图方式、解码或校验照片与来源配置。在RLock内检查ACTIVE,若有活动任务则409拒绝创建;生成规范UUID、写job快照、创建Control,启动audio。手机上传图已在请求中处理并保存,所以无需另启动image线程;URL和Seedream会启动image,与音频工作器可并行。 ACTIVE是(job_id,part)集合,CONTROLS映射每任务共享控制对象。launch()避免同一步重复启动,用daemon线程执行WORKERS映射中的函数。Android启动覆盖WORKERS['video'],其他业务继承PC规则。全局RLock协调任务读写、活动集和动作,不形成跨进程数据库事务。 ## 状态与动作关系 动作 | 状态改变/处理 | 活動限制 | create | audio queued,image queued或ready,video idle | ACTIVE非空拒绝新任务 | pause | 设置paused事件及持久标志 | 对在途云图片不能撤回服务端处理 | resume | 清paused/cancelled,必要时新Control | 取消尚未完成则拒绝;不自动launch中断步骤 | cancel | cancelled事件,清前端暂停显示;未运行busy步骤设cancelled | 正在运行worker在检查点停止 | retry-audio | 重置audio queued,清素材确认,video idle | 同步/视频/导图或其他任务忙时拒绝 | retry-image | 重置image queued,沿用任务来源/模型 | manual图不使用这一AI重试入口 | regenerate | 更新prompt,重生成当前来源/模型图 | 新要求非空;Seedream重新认证/同意 | change-source | 使用新来源/模型配置并更新prompt | Android只有Seedream可选AI来源 | use-image | 保存手机图或下载直链,更新image_version | 允许同任务音频仍在处理,拒其他冲突步骤 | select-images | 原图库保留非空子集,新image_version | 有图/视频冲突步骤时拒绝,至少一张 | confirm | 保存当前confirmed_version/digest,video queued并launch | audio/image都ready,无暂停/取消/ACTIVE | worker生命周期会记录开始、完成、失败或取消事件,finally清ACTIVE。异常消息替换当前Key,取消且所有相关步骤结束后清Control Key。没有retry-video独立action;视频失败或中断由confirm重新核对素材后启动。 图片存储、换图和删图都会清确认标识,使video回idle。旧MP4不立即删除,job_view单独查磁盘上保留成片并返回入口;再次成功合成以同名路径replace,属于一任务一个当前输出路径,并非永久多版本归档。 依据:app.py:35–58,163–195,325–366,590–643,667–839、android_runtime.py:181。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-07 # 08 文案处理、标题校验与文件命名 听文视频工作台 · 技术架构与实现 · 1.0.2 ## 正文与清洗 正式版不设产品级正文字符上限,仍受64MiB单请求、设备空间和外部TTS可用性约束。create以str(...).strip()得到实际朗读正文,拒绝空文本。试用版在strip前执行累计账本,故输入首尾空白可扣额但不朗读;这是两个不同处理目的。 前端显式清洗基于正则替换,统一换行、移除零宽/BOM、HTML注释和标签、Markdown链接地址/图片、裸网址、列表/引用/水平线、括号外壳及格式符,整理空白;保留数字、通常标点、括号内文本,数字间星号转换为“乘以”。不解码&等HTML实体,不调用语言模型、不识别文章事实,也不是通用Markdown语义解析器。最近一次有效清洗前原文用于撤销,手动编辑后撤销失效。 MD导入是另一套简化处理:删除完整三反引号代码块、标题前缀、图片、链接地址和部分格式符。显式清洗只去代码围栏而保留代码正文;需要文案一致性时不能把两个入口当成相同转换。 ## 标题规则 normalize_title统一换行,逐行去首尾、连续空白合并、丢弃空行并保留有效手动换行。title_character_count合计主副标题的非换行Python字符,超过30即400拒绝,在启动语音/图像请求之前执行。标题颜色和布局见第12章。新任务保存title_style=poster,旧style仍有兼容路径。 ## 文件命名与路径安全 新MP4文件stem取实际正文前30个Python字符,将/\:*?"<>|及控制字符替换下划线,再整理首尾空格/点;空stem回退听文视频。主标题不影响新MP4名。已有任务没有video_filename时继续用video.mp4,不为历史文件自动更名。 任务目录使用规范UUID,必须str(uuid.UUID(id)) == id。照片文件必须basename、以image-开头并以.png结尾;视频文件同样只能basename且.mp4,无反斜杠。路径保护与导出白名单相结合,避免用户输入变为目录穿越参数。 依据:templates/index.html:215–248、app.py:63–105,593–605、make_homepage_bg.py:36–50。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-08 # 09 TTS:分段、流控制、重试与MP3发布 听文视频工作台 · 技术架构与实现 · 1.0.2 图示:正文分段 → 受控流 → 验证 → 合并 正文分段 → 受控流 → 验证 → 合并 否 是 失败 split_text最多2000字符 按空行合并/长段硬切 当前part已存在? 同任务固定文案与音色 联网流写partial 30s idle/120s本次总等待 复用完成part 不重新请求同段 非空+FFprobe通过 rename最终part,累计段进度 异常则有限重试 最多2次 · 1.5s/3s 按序字节拼接MP3 检查暂停取消 · pending输出 探测后发布audio.mp3 ready+实际duration 图9|受控语音流与片段复用。语音片段串行,网络流失败最多重试两次;完成片段发布后可供任务重试复用。小屏可横向滚动查看图示 ## 语音请求链路 speech.synthesize接收任务正文、固定voice、任务目录、Control及progress/validate回调。默认factory为edge_tts.Communicate,每段调用Communicate(segment,voice).stream()。应用处理流中type=audio的字节,不保存WordBoundary/SentenceBoundary作为字幕。 应用分段以2000个Python字符为上限,按空行拆段并去段落首尾;短段合并时计入两个换行,超长段落直接每2000字符硬切,未做语义句末对齐。每个片段按顺序处理,语音内部没有并发池;图片准备与整个音频步骤并行是另一层调度。 参数/机制 | 实际实现 | 含义 | 应用分段上限 | 2000字符 | 与UI累计试用10000字符不是同一个概念 | 单段尝试次数 | range(3) | 首次请求+最多2次自动重试 | 重试退避 | 1.5秒、3秒 | 在等待期间仍尊重暂停/取消 | 无流事件时限 | 30秒 | 每次流事件重置idle,含元数据事件 | 单次总流等待 | 120秒 | 暂停时间不累计;不是整个任务120秒 | 控制检查 | 约0.1秒的asyncio等待循环 | 网络等待期间也可观察取消 | 最终片段 | part-0000.mp3等 | 非空并probe成功后才rename | 临时片段 | part-0000.partial等 | 失败残片不成为成功分段 | 合并 | 按顺序直接连接MP3字节 | 没有重新编码、交叉淡化或自动补静音 | 已有part最终文件会跳过重请求,保证同一固定任务重试可复用完成段。合并逐块读取1MiB,检查Control,先写audio.pending.mp3,最终probe后replace成audio.mp3。最终ready状态保存audio_duration,后续图片时间轴使用这个实际媒体时长。 ## 应用层与edge-tts库层 发布构建使用edge-tts7.2.3。库内部按字节限制切分SSML请求,并自动转义XML/生成voice与prosody;应用层2000字符段不保证只对应一条网络SSML。应用只传text与voice,不开放任意SSML、语速、音量或音调编辑。 构建库请求的音频格式为audio-24khz-48kbitrate-mono-mp3,上游WSS位于api.msedgeservices.com/tts/cognitiveservices。后续AAC192k/44.1k/stereo是容器制作参数,不能把源48kbit单声道语音升格为拥有更多原始信息的录音。多语言音色和语音质量最终取决于外部服务,源码无法证明其底层模型权重或全部语言行为。 本应用当前没有音频生成收费入口,不要求个人TTS API Key;edge-tts项目自身定位为使用Edge在线语音服务的Python接入。上游项目说明其联网方式;本文不据此承诺永久服务规则或访问权利。 ## 媒体探测与进度 probe通过包内FFprobe,请求format duration及stream codec_type/width/height,30秒子进程时限;返回非零或duration≤0拒绝。它是有效媒体探测,不是每个采样/每帧完整解码扫描。音频百分比按completed/total段数计算,合并与验证没有确定百分比,网络消息包含等待秒数/接收KB。进度不承诺等比例剩余时间。 依据:speech.py:8–166、app.py:136–160及发布构建edge_tts源码快照。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-09 # 10 图片导入、规范化与公网下载安全 听文视频工作台 · 技术架构与实现 · 1.0.2 ## 手机照片契约与技术保护 保护项 | 值 | 检查阶段 | 每批数量 | 50张 | 前端及local_photos;试用额外10张累计 | 单图原始字节 | 20MiB | File读取预检/Base64解码与下载保护 | 批次原始字节 | 40MiB | 整批解码前累计验证 | 总像素 | 50,000,000 | 图片头/实际解码检查 | 单边 | 16384像素 | 图片尺寸验证 | 请求体 | 64MiB | Flask MAX_CONTENT_LENGTH | 上传以JSON Base64字符串传入:前端先从FileReader的Data URL结果剥除data:image/...;base64,前缀,后端只接受严格Base64,不会自动替API调用者剥除此前缀。不能只因扩展名就把任意数据当成图片。图片解码先校正EXIF方向、取第一帧、透明图铺白底、转换RGB并重编码PNG,删除原始元数据。整批先验证,某张失败提示对应位置,不部分保存并替换已有任务。 常见JPEG/PNG/WebP/GIF/BMP/TIFF由Pillow读取。遇到ISO BMFF的ftyp类数据且Pillow失败时,Android路径尝试系统ImageDecoder,再把Bitmap压成PNG重新规范化,检查像素并recycle。ImageDecoder是API28能力,minSdk24设备未必具有该类或相应格式解码,异常会给出读取失败;APK没有强制打包pillow-heif解码器。 输入大小限制是压缩原始字节,不限制转换后所有PNG总大小或精确解码峰值。规范化源图保留像素,直到cover阶段才缩成1080p;高像素PNG、许多照片和长任务仍可能增加内存/空间压力。 ## 公网URL校验与连接 URL必须http/https、host非空、无user/password、无空白控制字符,长度最多8192,端口仅80或443,拒绝host中的zone编码。DNS结果中的每个IP都需公网global且非multicast/reserved,拒绝私网、回环、IPv4映射绕过、6to4、Teredo和NAT64特殊前缀;全部安全后优先IPv4。 下载将连接绑定到已验证IP;HTTPS仍以原域名做SNI和证书校验,减少DNS重绑定风险。每次跳转重新验证,最多4次请求即最多3个有效跳转,拒绝HTTPS降级HTTP。socket等待20秒不等于整个下载总时长保证20秒;代码没有另一个全过程总计时器。 响应要求200、非明显HTML,大小最多20MiB。请求不携带用户Cookie、云Key或账号,Accept-Encoding=identity;兼容gzip/deflate时还限制解压大小,拒绝异常或未支持编码。下载结束仅保存规范化图片与最终来源域名元数据,不持久保存完整URL。 网址任务的URL只在Control内存中,处理finally清空;重启后的失败网址任务无法从job恢复原直链,需要用户重新提供。图片直链能力不含文章解析、登录绕过、网页多图提取或后台爬取。 依据:photo_import.py:17–192、android_runtime.py:272–289、app.py:198–209。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-10 # 11 Seedream云端图片适配与费用保护 听文视频工作台 · 技术架构与实现 · 1.0.2 Android环境在SOURCES中移除Draw Things,AI来源仅Seedream;manual代表用户照片/网址,不是另一AI供应商。没有在某个来源失败后自动切换收费云端的逻辑。 ## 固定配置 { "endpoint": "https://ark.cn-beijing.volces.com/api/v3/images/generations", "models": [ "doubao-seedream-5-0-pro-260628", "doubao-seedream-5-0-flash-260915" ], "request": { "model": "doubao-seedream-5-0-pro-260628", "prompt": "用户填写的图片要求", "size": "2K", "response_format": "b64_json", "output_format": "png", "watermark": true } } 这些模型ID和参数是APK固定配置,不表示本次文档编制执行过真实付费调用或确认所有账户都已开通。当前界面不提供size、水印、输出格式或数量的可调开关。 请求必须具备有效Key和payment_consent is True。Key可由JSON输入或运行环境ARK_API_KEY提供,代码拒绝空、换行或超过2048字符;APK不内置预设Key。HTTP请求使用Authorization Bearer,单次timeout180秒,读取响应最多48MiB。解析要求恰好一张图片、Base64文本≤44MiB、宽高至少64且像素≤1600万,重编码为RGB PNG,不依赖不可信临时下载URL。 ## 已知失败与结果未知 分类 | 示例 | 应用处理 | 明确参数/权限/额度失败 | 400、401、403、404、部分429及官方code | 转换中文原因,隐藏Key/Bearer/远程URL;不自动改账户限额 | 余额/模型状态 | InsufficientBalance、Arrearage、SetLimitExceeded、NotOpen等 | 按官方code区分,要求用户处理控制台 | SubmissionUnknown | HTTP5xx、连接/超时、JSON异常、响应过大或不可用单图 | 保留可能已计费的未知状态,禁止自动重发 | 提交前保存submitting=true,返回正常图片后保存素材。用户在云请求途中取消时,已经提交的请求不能由手机撤回;若图片返回,仍尽量落盘,不继续视频制作。手动重试已知结果未知的Seedream任务要求confirm_resubmit,同时重新验证Key及费用同意。切换为手机照片不能证明之前云请求没有计费,风险标识继续保留。 Key仅在Control与运行内存中,不写job、草稿或日志;错误消息替换当前Key,取消且步骤结束清Key。代码没有安全零化所有内存副本的机制,故“只在内存”应理解为未持久写入,而不是绝对没有任何内存观察风险。 依据:seedream.py:11–94、app.py:501–528,216–225,777–804、image_sources.py:6–19。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-11 # 12 1080p画面、字体与主副标题布局 听文视频工作台 · 技术架构与实现 · 1.0.2 ## 画面算法 Pillow在应用Python进程内打开规范化图片,EXIF转正并RGB化。背景直接resize至1920×1080,GaussianBlur(60)形成铺满画面;前景按min(1920/source_width,1080/source_height)等比缩放并ceil像素,居中贴到背景。前景保持整张图可见,背景可因拉伸而改变比例,但只承担模糊填充。 每张照片生成一个cover文件:首张cover.png携带任务title/title_secondary,后续cover-1.png等不加标题。任务图像预览为原素材,不在预览接口提前写入海报标题;最终标题需在生成的视频中查看。 ## 海报标题参数 项目 | 当前poster路径 | 字体优先级 | 随包NotoSansCJKsc-Bold.otf,随后系统/兼容回退 | 深色底板 | #031127,画面x32%~68%,满高,宽度36% | 文本安全区 | x33.5%~66.5%,y13%~79% | 主标题自动分行 | 每行最多6字符,保留有效手动分行 | 副标题自动分行 | 每行最多7字符,副标题全行统一字号 | 主标题颜色 | 所有非换行字符前ceil(n/2)红#E1261C,余下黄#F7DE00;跨行连续统计 | 副标题颜色 | 全黄#F7DE00 | 主字号上界 | 画高×21%,实际按字形边界拟合 | 副字号上界 | min(画高×11.5%,最小主字号×0.9) | 总高度调整 | 超限时按0.96比例缩放直到符合区域 | 字形效果 | 水平压缩0.88,同色实心加粗,无黑色描边 | 标题完全留空时不加底板/文字。新任务固定poster;历史非poster任务可走legacy中央三色路径,用于兼容旧数据,不是当前提供的样式切换。某些PC历史文档提及macOS W6字体,不应作为手机默认字体说明。 源码提供基于字形像素边界的布局验证;当前实现没有提供用户手动拖拽标题、改色、改字号、调整底板位置的控件。维护时需保证前端规范化与后端30字符计数保持相同含义。 依据:android_runtime.py:37–55,113–125、make_homepage_bg.py:19–158、app.py:595–598,627。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-12 # 13 时间轴、FFmpeg命令与成片验证 听文视频工作台 · 技术架构与实现 · 1.0.2 图示:90秒三图时间轴示例 均分示例:D=90秒、N=3张;每张30秒 首张:主副标题+图片 0~30 秒 第二张:图片 30~60 秒 第三张:图片 60~90 秒 完整MP3音轨持续播放;图片硬切,无字幕和背景音乐 实际时间轴由FFconcat及输出帧率量化;这不是生成速度或逐采样对齐承诺。 图11|图片时间轴示例。使用完整音频时长除以保留照片数量,与正文段落或图像语义无绑定。小屏可横向滚动查看图示 ## 图片时间轴 设实际audio_duration为D,当前保留照片数为N。每张分配D/N,以原图库顺序写ffconcat,duration写九位小数;最后重复最后一个文件条目,让其duration生效。它不多加一个独立照片段。多图切换按5fps帧时间量化,不能描述成逐音频采样精确对齐;也不根据文案语义或图像内容智能配时。 ffconcat version 1.0 file '/私有任务目录/cover.png' duration 30.000000000 file '/私有任务目录/cover-1.png' duration 30.000000000 file '/私有任务目录/cover-2.png' duration 30.000000000 file '/私有任务目录/cover-2.png' 以上是90秒、3张图的机制示例,不是实际用户文件。路径由任务内部生成,不直接接受用户自由拼接。 ## Android实际编码参数 /libffmpeg.so -y -progress /encode-progress.txt -nostats -f concat -safe 0 -i /image_sequence.ffconcat -i /audio.mp3 -filter_complex <按单图或多图生成的滤镜> -map [v] -map 1:a -c:v libx264 -preset veryfast -crf 21 -threads 2 -c:a aac -b:a 192k -ar 44100 -ac 2 -r <单图1/多图5> -shortest -t -movflags +faststart /video.pending.mp4 单图: [0:v]loop=loop=-1:size=1:start=0,trim=duration=D, setpts=N/(1*TB)[base];[base]format=yuv420p[v] 多图: [0:v]fps=5,tpad=stop_mode=clone:stop_duration=2, trim=duration=D[base];[base]format=yuv420p[v] 单图loop重复首帧减少反复解码,多图tpad延续末帧避免-shortest提前截尾;-t限制到音频时长。libx264为软件编码,veryfast和两线程是当前资源取舍,不存在“调用Android硬件加速”的分支。faststart调整MP4索引布局以便播放;格式机制参考FFmpeg格式文档,本项目参数以代码为准。 ## 编码控制和实际进度 subprocess.Popen(...,start_new_session=True)启动独立进程组,循环约0.15秒检查Control并调用进度更新。暂停发SIGSTOP,继续发SIGCONT。异常/取消收尾先恢复停止态,再SIGTERM,等待3秒仍未退出则SIGKILL,防止只停止父进程而遗留编码子进程。 FFmpeg向encode-progress.txt输出out_time_us;读取文件尾8192字节,求out_time_seconds/D×100,编码阶段cap99。stdout/stderr追加到video-log.txt,非零退出时取日志尾用于中文异常说明。当前未实现整个视频编码的独立总超时或无进度watchdog,不能把TTS的120秒套到长视频。 ## 最终验证与原子发布 编码成功后再check_cancel,FFprobe核对存在audio stream、视频尺寸恰为1920×1080、format duration有效且与D差不超过1.5秒。通过后replace临时视频到任务video_filename,设video_state=done、percent=100、保存video_duration和各图duration数组。这个规格检查不能替代完整逐帧解码或人工审核内容;回归用例中的完整主机解码是另外的测试证据。 依据:android_runtime.py:58–165、app.py:228–238、compose_video.py:104–123。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-13 # 14 素材确认、暂停取消和进程恢复时序 听文视频工作台 · 技术架构与实现 · 1.0.2 图示:版本+内容摘要保护 版本+内容摘要保护 状态/版本失败 摘要不一致 用户检查当前素材 MP3 ready+图片 ready POST confirm 发送当前image_version 后端状态与版本校验 无暂停/取消/活动冲突 记录确认版本与SHA256 当前有序图片字节摘要 视频worker再次核对 版本一致+内容摘要一致 开始本机编码 通过后发布MP4 换图/删图/重生成 新image_version · 清确认 拒绝旧确认或变更素材 重新查看图片并再次确认 图4|素材确认双闸门。客户端版本、服务端版本和worker内容摘要必须一致;变化后回到重新预览。小屏可横向滚动查看图示 确认既检查状态,又固定当前素材版本:音频和图片ready、未暂停/取消、客户端image_version等于当前、无ACTIVE,计算当前图片按顺序连接字节的SHA256,保存confirmed_version与confirmed_digest。video若已queued/working/done,重复confirm直接返回状态,不启动第二编码。 worker开始再次核对version与digest。换图、删图、重生成均使旧确认失效。这个闸门避免客户端旧预览确认新文件,也避免确认后磁盘素材变化;它不是对图片内容是否合适的自动审核。 ## 控制语义 - Control共享paused与cancelled线程事件,音频异步流与合并步骤在检查点等待/退出;本机画面循环和编码循环也检查取消。 - pause不撤销已经提交Seedream请求。返回已付费素材时尽量保存,后续成片仍停止。 - cancel令正在处理步骤响应取消,并将未运行但busy的步骤改cancelled;真正终止以worker退出和ACTIVE清除为准。 - resume只清暂停/取消标志;不会自动launch cancelled/interrupted步骤。用户分别选择重试音频、重新选图、图片重试或confirm恢复视频。 ## recover与重启 Python服务启动调用recover扫描job.json,原queued/working改interrupted并提示手动重试,paused清false;ready/done及实际文件保留,submitting等未知收费信息保留。不自动TTS、不自动重新编码、更不会因重启自动重发收费图。 已成功part可在音频重试复用。failed/manual URL需要用户重新提供URL,因为Control.photo_url只在内存;历史图片则可直接读取。进程死亡时ACTIVE与Control不持久保存,只能根据任务JSON把活动状态改为待恢复。 源码中的recover/jobs扫描未对每个损坏job.json分别捕获错误,坏JSON可能使恢复或历史列表失败;文档不能承诺所有磁盘损坏自动修复。前台服务START_STICKY也不等于自动恢复每个任务步骤。 图示:正常制作时序 用户/WebView Flask+调度 语音/图片 视频worker 私有文件 1 创建任务,验证并冻结快照 2 写job.json并准备本机图片 3 启动语音/网络配图步骤 4 片段和图片验证后发布 5 轮询返回ready,用户预览 6 confirm当前图片版本 7 保存确认摘要,launch视频 8 cover/ffconcat/MP4临时编码 9 probe通过,replace成片 10 done与作品入口;主动导出 图12|一次正常制作的调用时序示意。网络配图可与TTS并行;这里展示阶段依赖,不表达精确耗时。小屏可横向滚动查看图示 依据:app.py:48–58,747–819,871–880、android_runtime.py:58–110、speech.py:46–89,118–166。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-14 # 15 数据目录、schema与持久化一致性 听文视频工作台 · 技术架构与实现 · 1.0.2 图示:用户输入与文件保留关系 用户输入与文件保留关系 历史保留 主动导出 私有数据清除 编辑草稿 白名单字段 · 不保存Key 建立任务快照 正文/标题/音色/图片配置 完成素材和成片 part/MP3/PNG/cover/MP4 应用私有workbench JSON/媒体/日志/试用账本 清空工作区 改空草稿 · 不取消不删任务 普通重开/覆盖升级 保留素材 · busy变待恢复 用户另存到系统文档 副本由目标提供方保存 卸载/清除应用数据 删除私有任务和本机账本 图7|数据生命周期。清空只改草稿/当前显示;覆盖升级保留私有数据;卸载/清数据删除私有数据和本机试用计数。小屏可横向滚动查看图示 根目录由AndroidgetFilesDir()/workbench获得。常见路径可示意为/data/user/0//files/workbench,实际应以系统API返回为准,不能在APK写死某个用户或设备路径。 workbench/ ├── templates/index.html ├── static/mobile.js、mobile.css ├── assets/fonts/NotoSansCJKsc-Bold.otf ├── assets/previews/.mp3 # 26段 ├── licenses/ ├── draft.json # 写入中draft.pending ├── trial-usage.json # 仅试用版;写入中trial-usage.pending ├── jobs/<规范UUID>/ │ ├── job.json # 写入中job.pending │ ├── part-0000.mp3 ... # 写入中part-0000.partial │ ├── audio.mp3 # 写入中audio.pending.mp3 │ ├── image-.png │ ├── image--.png # 多图 │ ├── cover.png、cover-1.png ... │ ├── image_sequence.ffconcat │ ├── encode-progress.txt、video-log.txt │ ├── <正文前30字符清理后>.mp4 │ └── video.pending.mp4 └── records/ ├── events.jsonl └── tingwen-records.json # 导出时生成 ## job核心字段字典 字段组 | 字段 | 说明 | 标识/时间 | id、created、updated | 规范UUID、创建/更新时间戳 | 原始创作快照 | title、title_secondary、title_style、text、voice | 创建任务后固定,编辑草稿不回写 | 当前配图要求 | prompt | 创建时保存;regenerate/change-source可更新任务配图要求,单纯编辑草稿不回写 | 来源配置 | provider、model、image_mode | manual为手机图/网址;AI当前Seedream;历史可保留兼容配置 | 输出名 | video_filename | 正文命名,历史可回退video.mp4 | 图片版本 | image_version、confirmed_version、confirmed_digest | 当前图与确认闸门 | 图库 | image_gallery、image_metadata | 多图entry含filename/metadata/source_id;单图gallery可为空 | 状态 | audio_state、image_state、video_state | 分别维护 | 消息/进度 | 各阶段_message、各阶段_progress | 进度含stage、percent或completed/total | 控制/收费状态 | paused、cancelled、submitting、remote_id | remote_id为兼容字段,不实现SeedreamID恢复轮询 | 媒体时长 | audio_duration、video_duration、image_durations | 成功后写,时间轴依据audio_duration | job_view响应额外附gallery(index、metadata、preview_url)、output_folder、audio_path、video_path、video_url;这些是视图便利字段,不必一概理解为job落盘schema。video_path来自独立实际文件检查,所以状态重置后仍可访问上次成片。 ## 原子写入与局限 文件 | 写入机制 | 一致性边界 | job.json | RLock内写job.pending,replace正式文件 | 原子替换,未见job写入fsync;不构成数据库事务 | draft.json | pending、flush、fsync文件、replace | 字段白名单;与试用账本不是跨文件事务 | 试用ledger | pending、flush、fsync、replace、fsync目录 | 进程内RLock串行;非跨进程文件锁 | 图像/最终音频/视频 | 先临时后replace | 只有达到对应验证条件才发布为完成 | events.jsonl | 锁内追加安全字段 | 日志坏行可跳过,写失败标warning而不阻断媒体任务 | 原子rename和fsync改善持久化,不代表所有断电、介质损坏或空间耗尽都绝不会丢数据。任务文件未加密,必要正文与提示词保存在应用私有JSON;allowBackup=false关闭自动Android备份。没有用户级项目打包恢复、容量轮转或自动清理机制。 ## 日志schema 白名单为event/job_id/import_id/call_id/part/status/provider/model/duration_ms/count,再加time/version。model字段进行安全格式检查;不接受任意error文本,避免把密钥、网址或完整内容当日志写入。读取逐行忽略坏行、时间倒序、默认分页100条。一次调用started/completed是生命周期两条记录,不代表两次云端收费,应用日志也不替代云端账单。 依据:app.py:63–129,427–498,626–659、records.py:75–113、试用trial_limits.py:61–197。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-15 # 16 原生桥、系统保存与只读分享 听文视频工作台 · 技术架构与实现 · 1.0.2 图示:读取已有成品 → 多层校验 → 用户选择目标 读取已有成品 → 多层校验 → 用户选择目标 保存 分享 用户点保存/分享 任务或作品页 原生桥解析URL或路径 当前本机源 · 固定媒体路由 Python文件白名单 任务媒体/导出记录 · 非空非pending Java再次canonical校验 允许目录/类型/文件 ACTION_CREATE_DOCUMENT 64KiB复制到用户所选URI ACTION_SEND+content URI 随机映射 · 只读grant · Provider复核 图6|安全导出链。保存是复制到用户URI;分享是通过只读内容URI授予目标应用访问,不开放任意私有文件。小屏可横向滚动查看图示 ## NativeBridge接口 方法 | 正式版用途 | 试用附加情况 | saveDraft(json) | Python persist_draft,boolean返回 | 仍受累计计数,不能绕过额度 | exportUrl(url,share) | 将允许媒体URL解析成安全文件,保存或分享 | 到期也可导出已有成品 | exportPath(path) | 路径导出,先Python再Java检查 | 相同 | openLibrary() | 打开作品列表 | 相同 | appInfo() | 返回platform/sdk/真实APK version | 返回1.0.2-trial | trialUpgradeShown() | 不提供 | 读取首次成片购买提示标记 | showTrialUpgrade(completed) | 不提供 | true首次成片提示,false实际到期 | copyWechat() | 不提供 | 复制wzqy2019 | finishAfterDraft() | 不提供这一试用专属配合方法 | 保存队列成功完成后才后退/finish | 桥没有任意shell执行入口,其安全依赖主WebView只加载可信本机内容,并在导出时再次限制来源和路径。不能仅凭桥方法的@JavascriptInterface就认为任何远端页面都可获得相同能力。 ## 多层导出校验 - URL必须当前本机源,只识别日志导出、任务媒体、图库图和已归档MP4的固定路由结构。 - Python checked_export解析文件路径,只允许root/jobs或root/records内现有非空文件,拒绝链接、未完成文件和其他扩展。 - resolve_export_path再检查任务三级路径:audio.mp3必须ready,MP4经archive_video_path,图必须当前image_paths或允许cover;records只能tingwen-records.json。不能通过桥导出job.json、任意私有文件或partial语音片段。 - Java ExportPolicy再次canonical路径验证,确认目录范围、类型和非空。 - 保存发ACTION_CREATE_DOCUMENT,按64KiB块向用户URI复制;取消选择不删除原文件,保存中保留pendingExport状态。 - 分享生成随机token,私有SharedPreferences保存安全路径映射,发content URI并授予只读权限/ClipData;Provider每次访问复核路径,只允许r模式,无增删改。 分享token映射代码中没有固定时间过期或回收器,故不能承诺“数分钟后自动失效”;系统URI读取授权与文件仍存在/合法共同决定能否读取。 Android系统文件选择和文档创建属于SAF机制;Android SAF文档解释通过系统选择器访问用户选定文件。项目实际导入还会按API版本优先系统照片选择器,且无需Manifest中的全盘存储权限。 归档视频接口和任务media/video条件不同:任务media/video只在done可用,/api/videos//media?filename=...按实际成片文件校验,可以在换图后访问保留旧MP4。兼容reveal接口在Android返回android_export_path或android_library,再由移动JS转换为保存/作品页,而不是启动Finder。 依据:MainActivity.java:277–360、ExportPolicy.java:29–47、ExportProvider.java:15–59、android_runtime.py:23–34,207–269、app.py:530–581,820–861。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-16 # 17 累计试用:算法、持久化和到期联动 听文视频工作台 · 技术架构与实现 · 1.0.2 图示:全试用期累计:文字 OR 照片 全试用期累计:文字 OR 照片 否 是/坏账保护 新增/替换正文 Unicode差异计数 新选择/URL/AI配图 手机图有效批次+选择凭据 私有TrialUsage账本 RLock · pending · fsync · replace 达到任一上限? text_used ≥ 10000 OR photos_used ≥ 10 尚有两项余额 允许制作 · 重复提交不重扣 expired持久锁定 取消在途本机处理 · 停止新制作 保留成品导出与联系 微信wzqy2019 · 不自动付款 图5|累计试用的“任一耗尽”判定。恰好10000字或第10张的记账可返回成功,但随即失效;删除不返额。小屏可横向滚动查看图示 ## 额度定义与饱和边界 全安装共用TrialUsage实例,text上限10000个Unicode码点、photos上限10。expired为持久停止标志,text_used≥10000或photos_used≥10任一即可触发。恰好到边界的计数/选图请求可HTTP200返回expired=true,随后制作入口全部关闭;超过余额的请求HTTP400并将计数饱和至上限。没有“第10张还可再生成一次”的宽限。 到期回调设置所有Control.cancelled并清paused,每个worker入口/关键check_cancel和launch也检查试用。编码循环约0.15秒观察并终止进程组;不能撤回已提交远端收费请求。已有成品/素材仍可读取、保存、分享,pause/cancel/reveal等保留动作不是重新制作。 ## 新增文字算法 added_characters(previous, current): 相同字符串或current为空 → 0 current是previous子序列(纯删除) → 0 previous是current子序列(纯插入) → len(current)-len(previous) 否则去公共前后缀 SequenceMatcher(autojunk=False) 对insert/replace累计当前一侧字符数量 累计已用 = min(10000, 之前已用 + 新增数量) 删除/清空不减少已用,snapshot更新至已接受的当前正文 这是一套内容差异口径,不识别人的移动/替换编辑意图。相同草稿、相同提交不重复扣;删后恢复为新增,清洗只删除时不加不退,撤销恢复可能加额。只有朗读text计数,title/prompt不计本项。Unicode码点不是UTF-16长度或视觉字形;组合emoji可包含多个码点。 正常短MD先做导入格式处理再对处理正文计数;原始文件文本超过10000码点会先发超限计数令到期。input队列逐次计数而非防抖丢掉编辑动作;生成先等textQueue。IME composition期间跳过预编辑计数,compositionend计最终提交内容。恢复草稿先锁控件并初始化accepted snapshot,不重复扣旧草稿。 ## 照片选择凭据 有效手机照片批次经读取/完整图像校验后消费新选张数,返回32位随机hex的photo_receipt。ledger将receipt映射到每项原Base64字符串SHA256列表,不含文件名,不是感知图像哈希。创建/换图带receipt时先检查仍active,然后按有序子序列匹配内容;原批或删减后原顺序子集重复提交不加额,乱序、伪造、增加原批没有内容或超重数重复被拒绝。 不带receipt的兼容直接上传重新消费;未知receipt不能偷偷退化为新扣一次。重新从系统选同图是新选择,删除预选/取消不退款。常规≤10张批次先完整校验再扣,失败不部分替换;单批>10是例外,在解码前按试用超额令到期。 URL/AI新图及AI图重试/重生成/切来源计1,在实际下载/配置/模型调用前完成;因此通过基本校验的新尝试即使远端失败或配置失败也可能已经消耗。图片重试/重生成/切来源及换图的前置在途冲突拒绝,以及空重生成要求、缺少未知收费重发明确同意等前置拒绝,不新扣。新建/api/jobs不同:文字/照片计数发生在ACTIVE检查之前,最终返回409仍可能已扣额,不能泛称所有失败或冲突都不消费。文字不增加照片额度,音频重试、现有图库筛选、confirm不新扣图。 ## 账本结构与写入 { "version": 1, "text_used": 1500, "photos_used": 2, "text_snapshot": "此处为上次已接受正文;示例并非真实用户数据", "receipts": { "<32位随机hex凭据>": ["<每张Base64文本的64位SHA256>"] }, "expired": false } 可加migration_note说明保守迁移/异常原因。账本使用模块级RLock进行进程内读—改—写与凭据验证,pending写入、flush、fsync文件、replace、fsync父目录。计数写在草稿之前,两文件不组成原子事务;若账已写而草稿后续失败,可能已扣额而草稿未保存,代码没有退款机制。 损坏JSON、版本/schema错误、计数类型/范围错误、snapshot/expired/receipts不合法或凭据异常,采取满额+expired安全状态,保留坏文件,不当成新装空账。它不是加密防篡改账本、跨进程锁或远端授权;可阻止正常UI/接口并发漏账,不能宣称无法破解或卸载重置。 ## 旧1.0.1迁移 无新账时,读取现存任务正文合计、最近任务正文与草稿新增差异;按每任务的现存图片数、图库/单图、创建/更换照片事件及图片模型调用次数进行保守照片估计,取必要最大值,裁到额度。缺任务而仍有创建事件等不确定情况fail closed。旧版没有记录每次历史编辑/删除,完全删除且不留证据的输入无法恢复,不能保证精确追溯。 ## 前端锁与退出一致性 恢复中、额度未知、到期和退出pending均锁creationControls。updateUsage对迟到响应采用expired OR、used max、remaining min,使旧活跃响应不能重新解锁。换图的读取、选图计数和提交共用动作锁,避免任务切换和重复计数。 flushDraft先排队正文计数,再保存完整白名单草稿,返回本次saving Promise;尾部catch仅保持队列可用,不掩盖本次保存失败。真正返回退出时exitPending锁输入/清空,等待保存链成功结束后调用finishAfterDraft;失败则留在页面显示错误并恢复控制。到期时flushDraft返回已有保存链,不再执行新计数/草稿写入;等待链结束不等于到期后写入了一份新空草稿。IME未提交候选不作为草稿新内容。 ## 完成联系提示与实际到期 trial-status的completed表示存在符合归档规则的已保存非空MP4,并非重新probe每个文件;completed与expired独立。首次成片联系提示经原生SharedPreferences记录“已实际显示”,跨随机服务端口保持一次性;真正到期优先显示并停止制作。关闭弹窗不解锁。联系微信wzqy2019;无支付、激活、续期或重置接口。 本机卸载/清数据删除账本与提示偏好;另一设备安装没有账号总额共享。正式试用独立包无自动任务迁移。原1.0.1正式版71文件隔离基线现在从Git标签android-v1.0.1核验,因为用户另行授权正式1.0.2更新,不代表当前正式源永远未变。 依据:试用trial_limits.py:10–271、app.py:49–96,469–507,603–647,680–929、static/mobile.js:36–135、试用MainActivity相应桥与退出代码。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-17 # 18 全量HTTP接口目录与动作契约 听文视频工作台 · 技术架构与实现 · 1.0.2 以下目录由当前两版app.py AST提取装饰器生成,列出显式注册路由;Flask自动静态路由、HEAD/OPTIONS不作为业务入口另行展开。接口属于APK内部协议,不是对外公开云API;示例不包含真实密钥或运行token。 版本 | 方法 | 路径 | 作用/主要字段 | 源码定位 | 两版 | GET | / | 应用首页与同源Cookie | app/src/main/python/app.py:405 | 两版 | GET | /api/session | 恢复本机会话;不进入模型业务 | app/src/main/python/app.py:414 | 两版 | GET | /api/health | 产品版本与可用来源 | app/src/main/python/app.py:422 | 两版 | GET / POST | /api/mobile/draft | 读取/保存白名单草稿 | app/src/main/python/app.py:451 | 两版 | GET | /api/records | 版本及分页日志;kind、offset | app/src/main/python/app.py:467 | 两版 | GET | /api/records/export | JSON导出全部记录 | app/src/main/python/app.py:481 | 两版 | GET | /api/jobs | 历史任务摘要,创建时间倒序 | app/src/main/python/app.py:492 | 两版 | GET | /api/videos | 实际非空非pending成片列表 | app/src/main/python/app.py:542 | 两版 | GET | /api/videos//media | 按filename读取保留MP4;download=1另存 | app/src/main/python/app.py:560 | 两版 | POST | /api/videos//reveal | 兼容定位,在Android返回导出路径 | app/src/main/python/app.py:567 | 两版 | POST | /api/videos/reveal-root | Android作品库入口 | app/src/main/python/app.py:576 | 两版 | POST | /api/drawthings/check | 兼容路由;Android已移除该来源,拒绝配置 | app/src/main/python/app.py:584 | 两版 | POST | /api/jobs | 创建任务;正文/标题/音色/图片方式 | app/src/main/python/app.py:590 | 两版 | GET | /api/jobs/ | 完整job_view与三个阶段状态 | app/src/main/python/app.py:662 | 两版 | POST | /api/jobs//use-image | 换手机/URL照片,保留MP3并清确认 | app/src/main/python/app.py:667 | 两版 | POST | /api/jobs//select-images | 保留非空照片子集;版本检查 | app/src/main/python/app.py:709 | 两版 | GET | /api/jobs//images/ | 当前图库指定索引图片 | app/src/main/python/app.py:732 | 两版 | POST | /api/jobs// | 动态动作:pause/resume/cancel/重试/确认等 | app/src/main/python/app.py:741 | 两版 | GET | /api/jobs//media/ | 当前ready音频/图片或done视频 | app/src/main/python/app.py:847 | 两版 | GET | /api/preview/ | 读取26种内置离线样音 | app/src/main/python/app.py:864 | 仅试用 | GET | /api/mobile/trial-status | 累计额度+是否有已保存成片 | app/src/main/python/app.py:603 | 仅试用 | POST | /api/mobile/trial/text | 正文差异计数并保存草稿正文 | app/src/main/python/app.py:616 | 仅试用 | POST | /api/mobile/trial/photos | 手机照片预选计数,返回内容绑定凭据 | app/src/main/python/app.py:633 | ## 动态action完整枚举 POST /api/jobs//在服务端只接受下表动作;其他action为404,不能随意推断任意命令执行。请求必须JSON,暂无额外字段时也使用{}。 action | 请求关键字段 | 成功行为/注意 | pause | 无 | 暂停标记,不撤云端提交 | resume | 无 | 清暂停/取消,不自动重启中断步骤 | cancel | 无 | 请求停止,素材保留 | retry-audio | 无 | 用任务快照复用已完成语音分段 | retry-image | api_key、payment_consent、必要时confirm_resubmit | 沿用任务AI模型,manual不提供AI重试 | regenerate | prompt及费用认证 | 更新要求,沿用任务模型重新生成 | change-source | provider、model、prompt、费用认证 | 从创作页配置更换可用AI来源/模型 | confirm | image_version | ready、版本一致、无ACTIVE后启动视频 | reveal | 可选kind=audio/video | Android返回导出路径;无kind打开作品库 | 共用GET媒体需应用密钥/Cookie,不需POST local token。POST统一令牌和来源保护,即使非收费动作也适用。无法直接在桌面浏览器随意使用APK随机端口接口,不存在无鉴权远程访问方式。 ## 兼容路由的含义 /api/drawthings/check残留于共享业务代码,但Android SOURCES已移除drawthings,配置先拒绝来源,不可作为手机本机模型功能宣传。reveal类路由保留桌面分支,Android返回库/导出结构。remote_id字段兼容历史任务,Seedream当前直接b64返回单张,没有远端ID轮询恢复接口。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-18 # 19 请求、响应、数据示例与错误码 听文视频工作台 · 技术架构与实现 · 1.0.2 ## 创建本机照片任务 { "title": "6G 通信", "title_secondary": "产业协同与应用路径", "text": "这是用于解释接口契约的合成朗读示例。", "voice": "zh-CN-YunjianNeural", "image_mode": "upload", "photos": [ {"photo_name": "example.png", "photo_data": "<有效PNG字节的Base64,非data URI>"} ] } 成功201返回job_view。试用版应先调用trial/photos取得photo_receipt并附加;已到期即使凭据有效也不能创建。photos数组为新多图契约,也兼容单图顶层photo_data/photo_name。所有图片在活动任务创建前校验,不因半批成功就启动任务。 ## URL/AI任务差异字段 { "text": "用于演示URL任务的正文", "image_mode": "url", "photo_url": "https://example.org/example.png" } 上面example.org是说明占位,不执行下载。URL模式不需prompt/Key。AI模式使用以下差异字段,Key必须真实由用户提供,不应写在文档、日志或源码中: { "text": "用于演示AI任务的正文", "image_mode": "generate", "provider": "seedream", "model": "doubao-seedream-5-0-pro-260628", "prompt": "横向构图的科技城市,蓝色光线,主体明确", "api_key": "<由用户在运行时填写,不作为文档凭据>", "payment_consent": true } ## 素材筛选与确认 // POST /api/jobs//select-images {"image_version": "<当前版本>", "selected_indices": [0, 2]} // POST /api/jobs//confirm {"image_version": "<筛选后的当前版本>"} 索引必须真实int、合法、非重复、非空;筛选仍按原图库顺序保存,不能当任意排序API。全选不改变版本;有变化会更新版本并清确认。confirm使用最新版本,不提交客户端自造摘要,SHA256由后端计算。 ## 通用草稿字段 { "title": "示例", "titleSecondary": "副标题", "text": "朗读正文", "prompt": "图片要求", "voice": "zh-CN-YunxiNeural", "imageMode": "upload", "provider": "seedream", "selectedId": "" } 注意草稿字段titleSecondary/imageMode为前端驼峰,任务title_secondary/image_mode为后端下划线。GET缺失/不可读草稿返回{},POST成功为{"ok":true};非法音色回默认、非法imageMode回upload、provider固定seedream、selectedId非法UUID回空。试用草稿保存会再次经过统一计数,不能绕过账本。 ## 试用usage实际合成样例 下面样例来自独立临时目录中的Flask test_client调用,不包含个人内容,没有发起在线合成或收费请求。输入字符串“中😀,空格换行”用转义JSON表达实际5个码点,同文再次发送不增加。 // POST /api/mobile/trial/text {"text": "中😀, \n"} // HTTP 200 { "expired": false, "max_photos": 10, "max_text_characters": 10000, "photos_remaining": 10, "photos_used": 0, "text_remaining": 9995, "text_used": 5, "wechat": "wzqy2019" } trial-status额外有completed;trial/photos额外有photo_receipt;migration_note是可选说明。恰好10000字或10张HTTP200但expired=true,后续制作HTTP400。text非string如{"text":1}返回400“文案格式无效”;trial/photos仅upload模式,url不接受。 { "error": "试用已到期:累计输入最多 10000 字(含标点、空格和换行)或累计选择 10 张照片;获取正式版请联系微信:wzqy2019" } ## HTTP结果分类 状态码 | 主要含义 | 处理建议 | 200 | 状态/读取/动作接受 | 仍需检查job状态或expired,不把200当制作一定成功 | 201 | 新任务已建立 | 继续轮询素材步骤 | 400 | 格式、参数、标题、图片或试用到期 | 显示error,按原因处理 | 403 | Android密钥、Host、Origin或本机会话不合法 | 仅明确过期拒绝可恢复一次会话 | 404 | 未知任务、动作、媒体或文件 | 不试图扩大路径范围 | 409 | 活动冲突、未就绪、素材版本变化、未知付费重发未确认 | 等处理结束或重新预览/明确决定 | 413 | 超64MiB请求体 | 压缩或减少照片 | 415 | 非JSON POST | 使用正确内容类型;可能为Flask默认HTML错误,不保证统一JSON | 500/其他异常 | 未被业务捕获的服务错误或环境故障 | 保留输入/素材,检查诊断,不自动重发收费动作 | 注册的400/403/404/409/413通常返回{"error":...};会话拒绝另有code。不是所有HTTP异常均有统一结构,文档/客户端应保留非JSON失败分支。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-19 # 20 异常分类、可靠性与安全设计评估 听文视频工作台 · 技术架构与实现 · 1.0.2 场景 | 已实现保护 | 剩余边界 | 前端绕过限制 | 后端验证标题/音色/图片/状态;worker重核素材/额度 | 仍依赖可信安装和本机进程,非远程防破解授权 | 双击/同时操作 | 前端动作锁、ACTIVE、RLock、确认幂等 | 没有跨进程事务队列 | Seedream结果未知 | 提交标志、单次请求、明确人工重发同意 | 云端实际费用需用户查账户,不能本机撤回 | 残缺音频 | partial与最终part分开、非空probe、有限重试 | 已有part复用不逐个做完整采样验证 | 确认后换图 | 版本与内容digest双闸门 | 不审核图片含义、版权或适宜性 | 非法网络目标 | 全部DNS结果公网检查、IP绑定、跳转重校验 | 服务可用性/网站授权由外部决定 | 非法私有文件导出 | 同源、Python/Java目录类型复核、只读Provider | 无数据库加密或固定时间share token清理 | 进程中断 | 已完成素材保存、busy→interrupted、不重发收费 | 用户需手动恢复,损坏job JSON可能阻断恢复 | 磁盘写失败 | 临时替换、部分文件fsync、日志warning | 账本/草稿非跨文件事务;无自动数据修复 | 长任务/后台 | FGS、WakeLock、低帧率/两线程编码 | OS清理、温度、资源、无编码总watchdog | 应用自动日志不收正文/prompt/Key,任务JSON确实保存作品必要内容。业务控制令牌与密钥恒时比较、回环监听、主WebView同源、导出白名单共同形成边界;不应把某一个层次单独当成完整保护。 主机测试的恶意URL、目录穿越、令牌过期与费用路径检查说明相应业务分支被测试,但不等同全面渗透评估或所有Android机型上的系统安全验收。本章记录实现及明确限制,不引入未实现的“零风险”承诺。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-20 # 21 工具链、依赖、原生兼容与许可证 听文视频工作台 · 技术架构与实现 · 1.0.2 ## 实际打包依赖 组件 | 固定配置/版本 | 用途 | Android Gradle Plugin | 8.9.3 | APK编译打包 | Gradle | 8.13 | 构建执行 | Java | 编译/目标17;保留Zulu17.0.14工具链 | 原生宿主编译 | Chaquopy | 17.0.0 | CPython和Python依赖打包 | Python | 3.11系列 | 业务运行时 | Flask | 3.1.2 | 本机服务与模板 | Pillow | 11.0.0 | 图像解码、加工、字体 | edge-tts | 7.2.3 | 在线TTS协议接入 | aiohttp | 3.10.10 | 异步网络依赖 | FFmpeg | 7.1.2 | 编码/探测 | x264 | 保留stable精确快照,API165 | 软件H.264编码 | NDK | 28.2.13676358 | 两种Android原生ABI构建 | CMake | 3.22.1(Pillow兼容库构建) | FreeType/JPEG构建 | 字体 | NotoSansCJKsc-Bold.otf | 中文大标题 | 一级pip依赖用精确版本pin,但未发现传递依赖的完整hash lock,不能声称整个Python依赖图在任意新环境字节完全可重现。旧docs/PC回归测试.md写aiohttp3.9.5已陈旧;当前app/build.gradle和实际release staging均为3.10.10。主机测试虚拟环境的依赖版本可能更高,不应拿来填APK依赖表。 ## 原生媒体构建 保留FFmpeg7.1.2与x264精确上游源归档及SHA256SUMS,不依赖会移动的stable分支重新取源码。NDK交叉编译默认API24、arm64-v8a/x86_64;ARM64使用NEON汇编,x86_64禁汇编以避NASM依赖。FFmpeg静态链接x264,Android libc/libm/libz等系统库动态链接。 构建启用GPL/libx264并用disable-everything配白名单:文件/pipe协议、concat/image2及必要音频/MP4解复用、PNG/JPEG/MP3/PCM/AAC/H.264解码、libx264/AAC编码、MP4/MOV封装、loop/tpad/fps/trim等滤镜。没有网络媒体解码protocol,也未启用Android硬件编码器;图片网络行为在Python执行。 ## 16KB兼容:两个不同层次 - ELF层:各原生对象的LOAD段以0x4000对齐。FFmpeg/FFprobe可执行程序另核对PIE及Android64位动态链接器interpreter;Pillow依赖共享库核对SONAME、ABI、导入/导出符号与版本节点,不能要求共享库也具备可执行入口。 - APK ZIP层:用zipalign的-P 16核对打包对齐;解包或zip对齐通过不能替代原生ELF和Python扩展的加载兼容。 FFmpeg/x264链接器传max-page-size/common-page-size=16384。Pillow原wheel部分FreeType/JPEG库较旧,项目保留对应API/SONAME的FreeType2.9.1与libjpeg-turbo1.5.3源码,NDK重建16KB兼容库,核对导出符号及Pillow所需符号。JPEG portable C关闭SIMD是兼容取舍,不能承诺性能等于原平台库。 Gradle跟踪native-compat输入,在installPythonRequirements任务完成后按ABI覆盖生成staging中的库;不手改pip生成目录后假装可重建。静态verify-binaries报告runtime_verified=false,说明不是设备加载测试。Android官方说明了含原生库应用的16KB适配背景:16KB页大小支持。 ## 许可证和对应源 本FFmpeg构建因启用libx264/GPL按GPLv2或更高版本分发,x264也有相应GPL许可;项目保存许可证、精确源归档、构建脚本与来源SHA。Pillow依赖保留FreeType FTL及GPL替代说明、JPEG相关notice;Noto字体附OFL文本。APK资源同步包含需要的许可说明。 本节陈述打包组件的许可与保留资料,不能将其误解为完整法律审定。分发原生组件时,应保留对应源、通知和构建说明给接收方;不应只交一个无对应资料的媒体可执行程序。 依据:build.gradle、app/build.gradle、gradle-wrapper.properties、native-sources/README.md、licenses/README.md、native-compat/README.md、scripts/build-media.sh、scripts/build-pillow-libs.sh。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-21 # 22 构建、签名、核验与GitHub发布流程 听文视频工作台 · 技术架构与实现 · 1.0.2 图示:源码与工具链到签名发布 源码与工具链到签名发布 版本化业务源码 Java/Python/HTML/测试 精确原生源归档 FFmpeg/x264/Pillow兼容库 Gradle+Chaquopy构建 SDK36 · Java17 · CPython3.11 NDK构建与ELF核验 ABI/16KB LOAD/符号 原签名release APK 包名与code · 禁止私钥入库 内容/签名/ZIP16KB 45资源+4媒体程序+Python归档 桌面交付APK SHA256与构建一致 GitHub源码与Release 源提交/附件digest一致 图10|可审计的构建发布链。原生ELF、APK ZIP、签名和资源一致性分别核验;只有核验后的APK发布并与桌面/远端摘要比对。小屏可横向滚动查看图示 ## 环境与输入 需要JDK17、Android SDK compile36、对应NDK、Python3.11、Gradle8.13。重建原生媒体还需Bash/make/tar/Perl,Pillow兼容库需要相应CMake。已有原生输出时可以只构建APK;全新环境的AGP/Gradle/Python依赖需缓存或仓库访问,只有保留原生源归档部分明确支持无网络重建,不能声称整APK在任意空环境离线构建。 APK release构建需要原签名文件和安全提供的TINGWEN_SIGNING_PASSWORD。脚本若缺原签名或密码会直接失败,不随意创建新密钥替换;该密钥未上传GitHub。调试构建使用调试签名,不可覆盖原正式发布。 ## 可复核的构建步骤 # 从相应Android工程根目录执行,路径按实际环境提供 export ANDROID_SDK_ROOT=/path/to/android/sdk export ANDROID_NDK_HOME=/path/to/android/ndk/28.2.13676358 export TINGWEN_NDK_ROOT="$ANDROID_NDK_HOME" export TINGWEN_CMAKE_BIN="$ANDROID_SDK_ROOT/cmake/3.22.1/bin/cmake" bash scripts/build-media.sh bash scripts/build-pillow-libs.sh python3 native-compat/verify_libraries.py # 原签名及密码由维护人员安全恢复,本文不展示密钥值 bash scripts/build-apk.sh release 以上重建脚本按当前工程保留的macOS工具链路径编写;Linux/Windows不能仅改环境变量便假定原生重建可用,需要适配对应NDK host路径。build-pillow-libs读取TINGWEN_NDK_ROOT及ANDROID_SDK_ROOT/ANDROID_HOME,CMake可由TINGWEN_CMAKE_BIN指定。build-apk选择环境TINGWEN_JAVA_HOME或保留Zulu工具链,设置项目Gradle缓存;存在保留Gradle则使用,否则wrapper。release执行assembleRelease,debug执行assembleDebug及assembleDebugAndroidTest。产物默认在app/build/outputs/apk/release/app-release.apk;脚本本身不自动复制到dist、桌面或GitHub。 ## APK核验顺序 - aapt读取applicationId、versionName/code、应用标签与Manifest provider。 - apksigner验证实际签名,核对原证书公开指纹。 - zipalign -c -P 16 4核对ZIP对齐;另执行原生ELF/符号检查。 - 解包比较45项资源与最终源文件、4个ABI媒体程序及Python归档业务;正式版检查无trial_limits,试用版检查额度常量与专属路由。 - 保存SHA256和实际字节数,再复制桌面、比对桌面与构建完全一致。 - 完成源/文档归档,排除jks、密码、Key、用户任务、草稿、ledger、日志及缓存;不重写原Git历史。 - 推main,Release指定已验证源码提交,上传ASCII文件名APK、SHA256SUMS与验证JSON。 - 用GitHubAPI核对Release非draft、目标提交、附件uploaded和服务端SHA256与桌面一致;正式版作为latest,试用版独立发布。 ## 本次实际产物 版本 | 文件/Release下载 | 字节数 | SHA256 | 正式 | tingwen-android-v1.0.2.apk | 44,472,826 | aaa415bd54c1d48c3fd67099d12e37ca240ba4814fb60b7e2e2273182bd53b9a | 试用 | tingwen-android-trial-v1.0.2.apk | 44,492,954 | 0357aa2c91858797e2f87ef426a324b33fb00795c602d2295d7b9e1b5b3dbab1 | 公开证书SHA256为88184f3d44642ff29c1dba48018fa123ba8d2dcded94d83b6ad26e67a1a865f7,RSA3072,APK v2核验通过。该指纹不是私钥;它可帮助判断是否沿用原发布身份。同一应用覆盖升级须保持包名/密钥并提高versionCode。 项目GitHub为私有仓库;版本源码和附件链接需对应权限。本轮源归档不含用户作品或敏感运行资料,APK仅包含产品资源和代码。正式/试用独立包可并存;两者同code10002不相互覆盖。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-22 # 23 验证证据、测试方法与验收边界 听文视频工作台 · 技术架构与实现 · 1.0.2 ## 已交付1.0.2证据 维度 | 正式版1.0.2 | 试用版1.0.2 | 离线PC/Android业务回归 | 78项(70原PC快照+8安卓契约) | 76项(68原PC快照+8安卓契约) | Python专项主机检查 | 2项正式版API专项 | 45项接口/运行时/累计账本 | Chrome界面 | 3项,关于及360/390px紧凑布局 | 21项,含IME、恢复锁、迟到响应、换图锁、退出保存 | 合计 | 83项通过 | 142项通过 | Release内容/签名 | 原签名、45资源、4媒体程序、包/provider/ABI、ZIP16KB | 相应独立包、额度模块/路由、同类检查 | 新设备完整流程 | 本轮未追加 | 本轮未追加 | 试用回归因累计规则改变排除两个原PC精确界面/批次模拟断言,并用真实累计接口及Chrome检查覆盖新行为;原PC测试快照SHA未改,不以关闭后端额度来“让测试通过”。正式版专项验证反复保存12000字符以上草稿,12000字新任务配11和50张照片返回201,无trial ledger/路由、无云端配图调用。 主机媒体回归用Androidworker逻辑,但以桌面FFmpeg/FFprobe替代设备程序,验证单图/多图/标题/时长/音轨和完整解码;网络/付费路径使用mock,不产生真实Seedream费用。原生程序曾在Android14 ARM64模拟器执行版本命令,这与安装APK、WebView、系统选择器、真实TTS、分享和整条设备MP4验收不同。 ## 后续设备验收建议(未执行项) 验收场景 | 判断标准 | 冷启动与失败恢复 | 首帧计时、pageReady条件、重试可用、通知不遮开场 | 实际联网语音 | 选定音色生成、全文结尾、超时/取消、重试复用 | 系统照片选择器 | 单选/多选、取消、系统上限、HEIC/AVIF按机型能力 | 完整本机视频 | 单图/多图1080p、标题、切图顺序、音轨、末尾播放 | 长任务与后台 | 锁屏、通知返回、系统清理、强停后待恢复,无收费自动重发 | SAF与分享 | 另存实际文件完整、取消保存保留源、接收应用只读读取 | 16KB设备 | Python扩展与两类原生程序实际加载,不仅ZIP检查 | 试用边界 | 9999→10000、9→10、任一耗尽在途编码停止、成品仍能导出 | 这些是维护验收方案,不是本次文档编制新跑过的检查。本文没有启动用户APK进行真机全流程,没有发起真实收费请求,也没有读取签名私钥。 ## 测试执行入口 # 使用带所需依赖的主机Python虚拟环境,避免写入真实任务目录 python -B scripts/test-parity.py python -B tests/test_formal_edition.py # 浏览器检查需Playwright及可用Chromium/Chrome node --test tests/test_about_ui.js # 试用工程另有累计接口/UI及APK核验脚本 python -B scripts/verify-trial-apk.py 脚本依赖测试配置、主机FFmpeg、隔离临时根以及浏览器工具环境。不能只执行一个API单测便宣布设备编码、WebView和云服务全部通过。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-23 # 24 维护、故障定位、性能和当前限制 听文视频工作台 · 技术架构与实现 · 1.0.2 ## 定位顺序 - 启动层:查看Activity/Service的starting/ready/error、资源拷贝、Python初始化与baseUrl;不能先把3秒动画慢解释为TTS问题。 - 会话层:确认当前源、Android密钥Cookie和local token;仅明确过期拒绝可恢复一次。 - 任务层:核对保存快照、三阶段state、paused/cancelled、ACTIVE冲突及image_version。 - 语音层:看part完成数量、partial、等待消息和最后错误;分段重试遵守有限请求,不改旧任务正文。 - 图片层:区别decode/尺寸、URL公网与内容校验、云配置/未知结果;Seedream错误看官方code而不是只看429。 - 编码层:看cover、ffconcat、progress与video-log尾;确认尺寸/音轨/时长检查,pending不当成品。 - 导出层:确认文件已完成、路径白名单、系统URI选择和目标可写;分享目标支持MIME。 - 试用层:核对usage/migration_note、差异snapshot、receipt、是否已expired;不要自动删坏账重新发额度。 ## 性能事实与容量 低静态帧率、veryfast和threads2减少编码负担是当前取舍,没有跨机型基准测试给出统一耗时。规范化高像素图片仍可能大,PNG背景/字体绘制在CPU上,软件编码耗时受时长、CPU与温度影响。语音依赖网络速度和服务响应,累计分段进度不代表剩余时间。 目前没有作业队列、自动媒体清理、容量水位控制、数据库压缩或日志轮转;每个任务保存原文/图片/分段/画面/成片,长时间使用会增加磁盘占用。设备磁盘满既可能影响任务保存,也可能影响试用账本/草稿,必须保留用户可读错误和现有素材。 ## 未提供的功能与已知实现边界 - 没有离线TTS模型、IndexTTS/OmniVoice或Android系统TTS分支;没有克隆声音、任意SSML、语速音调UI。 - 没有字幕、ASR、按段落智能配图/配时、视频素材剪辑、背景音乐或转场编辑;保留CLI字幕选项不是APK功能。 - 没有PC本机Draw Things接入;保留检查路由在Android来源校验被拒绝。 - 没有账号登录、跨设备云同步、支付、激活/续期、设备永久试用绑定。 - 没有每次成片永久多版本快照;同任务最终路径可能被成功新成片替换。 - 无所有格式在API24均可读保证,无后台永不退出保证,无全编码总时限/无进度watchdog。 - 无整条数据的加密数据库,ledger是私有JSON;卸载/清数据会重置本机试用。 - 任务损坏JSON没有普遍逐文件恢复,依赖传递图未全hash锁定,share token映射无固定TTL清理。 Android前台服务类型和系统约束随版本变化,项目实际声明specialUse,不能因为存在前台通知而宣称通过所有应用商店政策审核或可无限后台运行。Android前台服务类型文档提供平台背景,实际交付仍需目标系统验收。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-24 # 25 来源索引、术语与追溯资料 听文视频工作台 · 技术架构与实现 · 1.0.2 ## 源码定位索引 下表由本次实际文件计算SHA256,并列代码行数。行号引用对应这一版本基线;后续源代码变化会使行号移动。用户任务、密钥、签名私钥和缓存没有进入索引。 版本 | 文件/代码位置 | 行数 | SHA256 | 正式 | app/build.gradle:1 | 80 | 9947b673daa3af8f383577f1b6de6399994dd2ae33c01a6a8b8450621666e354 | 正式 | build.gradle:1 | 4 | 09a91ee8bb9da6698ebcfc5a6550ba6b20821d20a62a0f7be83f6a70cc2bf2b4 | 正式 | app/src/main/AndroidManifest.xml:1 | 28 | f3845ce72f2830e2af677b346c018d8c69e42a5affd3eafdc4f2d61778315154 | 正式 | app/src/main/python/image_sources.py:1 | 19 | 52760db3913d01607ecc13a09323a29ec8a827544e0057fff57ef9af37172127 | 正式 | app/src/main/python/records.py:1 | 113 | 32c51c994243d4e75a3fada5f04c2c6a28df514a4fa7e4e11b43fbfb09004a4e | 正式 | app/src/main/python/android_runtime.py:1 | 289 | 5c71c5cee50ac78bf52d38c2256ffc47b9c47daa0ce608832cf84b14a22d2707 | 正式 | app/src/main/python/seedream.py:1 | 94 | a8f240662d6aa0206c0c428bc94ab1a6a9aa0d558e2610466c713de0f26ec78b | 正式 | app/src/main/python/app.py:1 | 889 | 90b8acf478c99375ef0a02945b456517074f874bf97f030bb6a7c39f7ff1485b | 正式 | app/src/main/python/speech.py:1 | 166 | f5ba01373d1944e7a94d9550c96f26c0011c4962b7abcf8369f1f9fb0a5b0491 | 正式 | app/src/main/python/photo_import.py:1 | 192 | 3f462ad8036d8e9e7c526c544555def922fe729d804eb46ee41cabf0f7c32913 | 正式 | app/src/main/python/drawthings.py:1 | 87 | cfff78c103391a6896cd0afd4c105ed7753f0fad6e2f5613f0a96dfec408b0ce | 正式 | app/src/main/python/scripts/compose_video.py:1 | 351 | cb1286191e725a881c39bf7dec575d16bb02f0e38d66fd94408831da80156785 | 正式 | app/src/main/python/scripts/make_homepage_bg.py:1 | 365 | 8913b24dddc3441c2eb9f54ba959a083ab081530da4d798a9162149b7f19d75c | 正式 | app/src/main/java/cn/tingwen/workbench/ExportProvider.java:1 | 60 | f93953234a1a139a7452b3eb01114215d6a748b6310d2ec8b1076c646d81bfe5 | 正式 | app/src/main/java/cn/tingwen/workbench/StartupTiming.java:1 | 14 | cdf5905c9736b04eba66e182ec6f06e83ab90b856adbf3dcc703395184be6097 | 正式 | app/src/main/java/cn/tingwen/workbench/MainActivity.java:1 | 389 | 4a5a4285552ff0bb87f0fecdb314e77825e571d9e6104e20a80228c921050304 | 正式 | app/src/main/java/cn/tingwen/workbench/ExportPolicy.java:1 | 50 | 217beee04c9a44ae11c1f1b7f452b1c2c7d9b4476b3e5aa7d7342278bf404e15 | 正式 | app/src/main/java/cn/tingwen/workbench/WorkbenchService.java:1 | 105 | 7480ffe1e2d413f7b3beee91e50aff31f7e10fc78e786518ac9b8ab5318dd86e | 正式 | app/src/main/java/cn/tingwen/workbench/StartupAnimationView.java:1 | 102 | d45a15aa0648ba946a2c4c5b5d7fc4d3ec404f9e7abbb5f68f89d5d85542ab84 | 正式 | app/src/main/assets/workbench/templates/index.html:1 | 284 | 4581eb0e945b530bf917b328b90c093c2252697213ea9bff275fc2d5f7ae3eeb | 正式 | app/src/main/assets/workbench/static/mobile.js:1 | 102 | 7a8f6fb62a6c96c4b1e18a85fd24c9394f5f81436672643012692efbbb229547 | 正式 | app/src/main/assets/workbench/static/mobile.css:1 | 19 | e1129160377f265f815c0699babfbc359c625192f9379147ddf9844ceb27a678 | 正式 | scripts/build-apk.sh:1 | 27 | 88626ca5ef65c76cf097f767d6703e3f6969a7257b324dc2933a0b5af7170ecc | 正式 | scripts/build-media.sh:1 | 86 | d2548b0ff2aa4add35bee41dc30a0ecbc94f5cf9020b3d22aefc4359613874f6 | 正式 | scripts/build-pillow-libs.sh:1 | 82 | 73b9c4605066cd4fd656aa13c1b7b4b682ca317169b36db82599c61b9e410ecd | 正式 | scripts/test-parity.py:1 | 198 | 28bb7e8ff1be4e8cbfec14b9e954f6d37606f8d273ca295ab02721f14048c3c7 | 试用 | app/build.gradle:1 | 80 | 43bdb0dd1e3690cd7fef42b92724346c33d055dba4aa249576779e5b36858985 | 试用 | build.gradle:1 | 4 | 09a91ee8bb9da6698ebcfc5a6550ba6b20821d20a62a0f7be83f6a70cc2bf2b4 | 试用 | app/src/main/AndroidManifest.xml:1 | 28 | d389a4a2652adca5ac0bf8bea08237cacdd9404da323e6a53a2c2ce261c82a0f | 试用 | app/src/main/python/trial_limits.py:1 | 271 | 3f87b1e6508a104143287384f00e05a5627f5dd2eaf749e72bbb8d6b912f41c4 | 试用 | app/src/main/python/app.py:1 | 1023 | acf97199f41937f1d61fad890495eb3278dee26e0f89aea567d1d41ddcdbd220 | 试用 | app/src/main/assets/workbench/templates/index.html:1 | 307 | 85c806e86019ea624ade9ab86190c328c9a26c04c376008495b00428f87607a8 | 试用 | app/src/main/assets/workbench/static/mobile.js:1 | 136 | 1d7bd99597ab28db2a6c18f8863f00ea3e3e57151526a4f71e7e0153c8fb7d5d | 试用 | app/src/main/java/cn/tingwen/workbench/MainActivity.java:1 | 443 | 5d6a8be6f49e3eb279b2a4ac1604fc9c825c3cb476f5f0706bb66d1dbc35d6d9 | ## 原始交付证据 - 正式docs/1.0.2交付验证.json、docs/1.0.2-PC回归结果.json、docs/1.0.2更新说明.md和截图。 - 试用docs/1.0.2交付记录.json、docs/累计试用版回归结果.json、docs/试用版APK验证.json及其研究合成接口样例。 - 两版docs/GitHub1.0.2发布核验.json:远端附件状态、字节数、服务端SHA256与桌面一致的核验。 - 原生native-sources、native-compat、licenses、tooling/media/provenance:精确源归档、编译配置及静态检查。 - HTML随附研究依据稿、源Markdown、生成脚本和HTML阅读核验记录;这些用于解释资料来源,不取代源码。 ## 外部一手参考 以下用于核对平台/组件机制,不用来证明本APK已通过设备全流程。本文主体实现事实来自本项目源码和交付报告。 参考 | 用途 | Chaquopy17 Gradle | Python运行时/Java接入和打包机制 | Android SAF | 文档选择、用户URI与创建文件机制 | Android16KB支持 | 原生库和页大小适配背景 | Android前台服务类型 | specialUse等平台机制 | FFmpeg格式文档 | concat和MP4索引机制 | edge-tts上游 | 在线语音接入组件及其使用边界 | 参考访问日期2026-10-10。外部文档未来可能变化,APK固定依赖和本次代码基线以本页版本表与源哈希为准。 ## 技术术语 术语 | 本项目定义 | Loopback | 手机本机127.0.0.1;不经过PC,也不对局域网监听 | NativeBridge | 主Activity内部受限JavaScript接口,与Python业务通过Chaquopy调用 | ACTIVE/Control | 运行中步骤集合/任务共享暂停取消和内存凭据对象 | image_version/digest | 图片集标识/当前有序图片字节摘要,用于确认一致性 | pending/partial | 尚未完成的写入文件,不能作为可导出成品 | SubmissionUnknown | 云端结果可能完成/计费但本机不确定,禁止自动重发 | receipt | 试用照片预选内容绑定凭据,避免同批提交重复扣额 | code point | Unicode码点,与视觉字形/UTF-16码元不同 | ABI/PIE/ELF | Android架构接口/位置无关可执行程序/原生程序文件格式 | SAF/content URI | 系统文档访问框架/受授权内容文件地址 | fsync/replace | 尽力持久同步/临时文件到正式文件的原子替换;非全局数据库事务 | FGS/WakeLock | 前台服务/部分CPU唤醒机制;不是后台永不终止承诺 | 维护或分发时,应同时保留版本基线、对应源码、许可证、构建步骤和实际验证范围;升级不能把旧文档的测试结论自动继承为新APK设备全流程已通过。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-25