Skip to content

Proposal:一键从图片生成草案 #27

Description

@gac0812

Proposal:一键从图片生成草案

1 功能描述

一键从图片生成草案负责回答一个问题:用户已经在外部场景截图或保存图片后,如何不打开 TimeFlow,通过一次通知栏点击把最近一张可用图片送入 OCR 和草案生成链路。

本能力采用“用户先截图/存图 → 点击通知栏 → 定位最近一张图片 → OCR → CreateDraft”的固定路径。它不后台监听截图流,不自动创建正式事项,也不处理多图批量导入。

2 用户

目标用户

用户分层 特征 取图需求
先截后记型 已在外部场景截图/存图,希望尽快进草案 点通知读最近图,不必回 App 上传
知情触发型 不接受未点击就后台接截图流 先截/存、再自己点通知才处理
轻量固定路径型 不愿先分类,只要固定闭环 固定「先有图 → 点通知 → 从图生成草案」

用户故事

用户在微信群、学校通知等外部场景里已经截图或存了图,若还要切回 App 手动上传,场景会被打断;若 App 后台持续监听截图流,则会在用户未点击时自动接图、感知差。用户需要的是:先主动截图/存图,再主动点通知栏,由 App 定位最近一张图并进入「从图生成草案」——全程是用户显式操作,不后台盯截图流。

故事 A — 先有图,再一点生成草案

我在微信群/学校通知里截了任务图,不想切 App 重新导入。而是让我在不打开app的情况下用最少的操作来帮我生成任务草稿,下拉通知栏点入口 → App 自动定位最近图 → 提文字 → 从图生成草案。

故事 B — 不要后台偷听截图流

我不接受开启后后台一直监听系统截图流,这样会读取到我的隐私图,泄露我的隐私。本路径是我先截/存、再自己点通知才处理,不是静默接流。

故事 C — 轻量用户固定一条路径

我不想先判断日程/待办/提醒,只想用固定流程:先截图/存图 → 再点通知 → 从图生成草案;确认前不创建正式任务。

共性需求提炼

流程固定为「用户先截图/存图 → 再点通知栏 → 从图生成草案」。相对旧持续监听(不选):多一次主动点击、不再后台盯截图流;取图对象是用户已产出的图,不依赖后台接流。

3 现有做法以及不足

当前产品内缺少「先有图、再点通知即从图生成草案」的轻量闭环:要么步骤多,要么取图时机不可控。

现有做法 不足
看截图后手动创建任务 输入成本高,易漏时间/地点
截图堆在相册稍后处理 未进时间管理闭环,易忘
聊天收藏/置顶 留在原 App,难进今日页/草稿确认
复制文字到备忘录 仍需人工筛标题/时间/地点
App 内手动上传图片 多一步;难覆盖微信等即时场景
开启后后台持续监听系统截图(旧持续监听) 零额外操作,但未点击就接截图流,感知差、风险高

共同不足:操作足够轻 vs 取图时机可控(须用户显式触发)——本提案选「先截图/存图 → 再点通知 → 从图生成草案」。

4 产品范围

状态 事项 依据
常驻通知栏作为入口;用户截图/存图,点击触发 全程显式操作;无点击不查库、不提文字、不进草案
点击后定位 MediaStore 最近一张系统截图/相册最近图 本提案取图方式:读用户已产出的图
提文字(OCR)→ 从图生成草案(CreateDraft 点击触发的就是这条链路;确认前不创建正式任务
MVP 可先验证到提文字/草案入口;默认无 INTERNET 先验证入口与链路,再完整接入多模态
不做 用户开启后后台持续自动监听系统截图 / MediaStore 新增事件流 旧持续监听——不选;未点击就接流,风险与感知不可接受
不做 跳过草案自动创建正式任务;远程强制上传原图作为主路径 正式数据须经草案确认
不做 iOS;来源 App 判定;无通知静默常驻;多图批量;OCR 准确率专项 超出本期
不做 多模态内部 AI 提取模型与正式落库细节 承接《多模态处理模块 Proposal》

边界一句话:本提案流程是「先截图/存图 → 再点通知 → 从图生成草案」;点击触发的是定位最近图并处理用户已产出的图,不触发后台接流,也不停在「只打开文件」。

5 关键决策

决策:取图与触发方式

方案 描述 选择
A. 开启后后台持续监听系统截图流 零额外操作;未点击即接新截图 不选(未点击接流,感知差、风险高)
B. 用户先截图/存图 → 再点通知 → 读最近图 → 从图生成草案 全程用户显式操作;读用户已产出的图 采纳(本提案)

选择 B,理由:用户先主动截/存、再主动点通知,取图时机与意图对齐;相对 A 多一次知情点击、不后台盯流。

配套规则:

  • 用户须先产出图;无点击不查 MediaStore、不提文字、不进草案链路
  • 点击后查最近一张候选元数据再读 URI,定位最近图 → 提文字 → 从图生成草案;不加载整本相册,不后台 ContentObserver 常驻接流
  • 确认前不创建正式 Schedule/Todo/Goal;后续承接《多模态处理模块 Proposal》

替代 / 对照

路径 定位 说明
旧持续监听 不选 未点击就接截图流;隐私风险与感知问题落在此方案上
App 内手动上传 备选 可控,但无法验证本提案轻量闭环
AI 直接建正式任务(跳过草案) 不选 正式数据须经草案确认

取舍一句话:采纳便捷图生草案 = 先截图/存图 → 再点通知 → 从图生成草案;不选旧持续自动监听。

6 边界规则与异常处理

边界规则

  • 用户必须先主动截图或保存图片,再主动点击通知栏入口;无点击不查询 MediaStore。
  • 每次点击只处理查询时最新的一张可用图片,不扫描整本相册,不做多图批量处理。
  • 同一图片重复点击必须去重,不重复生成草案。
  • 图片只进入 OCR / 多模态草案链路;确认前不创建正式 ScheduleTodoGoal
  • 本期只覆盖 Android,不考虑 iOS,也不判断图片来自哪个 App。

异常场景与处理方式

情况 行为
先有图,点通知,定位到最近图 提文字 → 从图生成草案
无可用最近图 / IS_PENDING=1 提示无可处理图;可短延迟且要求写完
同一 URI 重复点击 去重,不重复从图生成草案
未授权媒体 /(Android 13+)通知权限 不提供稳定入口;提示授权
无用户点击却因新图进流程 非法(旧持续监听路径·不选)
状态 含义
idle 通知入口可见;未定位图
resolving 点击后查询最近候选
extracting 提文字 / 从图生成草案进行中
draft_ready 草案可展示/确认
empty / failed 无图或提文字失败;给原因与可重试/改路径提示

权限:媒体读权限 +(Android 13+)通知权限;MVP INTERNET

7 基本概念与信息结构

概念 含义
通知入口 通知栏点击触发「从图生成草案」;权限满足时可见;无点击不启动链路
最近图解析 点击后查 MediaStore 最近一张系统截图/相册最近图候选,得到 URI
提文字(OCR) 从定位到的图提取文字,进入后续草案链路
从图生成草案 NormalizedInputTextExtractedCandidateCreateDraft;用户确认后才落正式数据

处理流程

用户先截图/存图 → 点通知栏
→ 定位 MediaStore 最近一张候选
→ 提文字(OCR)
→ NormalizedInputText → ExtractedCandidate → CreateDraft
→ 用户确认 → Schedule / Todo / Goal

当前 MVP 可先验证提文字与草案入口,再接入完整 AI 提取与 CreateDraft

禁止:后台截图流(未点击)→ 自动接图 → AI 直接创建正式任务

关键信息结构(链路相关)

结构 要点
截图/存图记录 uri、显示名、路径/桶、mime、dateAdded、尺寸、去重键(id + size + dateAdded
提文字结果 状态 idle/running/success/empty/failed;提取文本;失败原因
草案输入 提文字结果进入多模态规范化与 CreateDraftsource 可标为截图/存图来源

8 验收标准

用例 操作 通过标准
最近图命中 先截图或保存一张图,再点击通知栏入口 系统定位该图,完成 OCR,并进入从图生成草案链路
无点击不处理 产生新截图但不点击通知栏 系统不查询图片、不 OCR、不生成草案
无可用图片 未产生可读图片时点击入口 明确提示无可处理图片,不创建空草案
图片仍在写入 图片处于 IS_PENDING=1 时点击 等待短暂写入完成或提示稍后重试,不读取不完整文件
重复点击去重 对同一张图片连续点击入口 同一去重键只生成一次处理结果和草案
权限缺失 未授予媒体或通知权限时触发 给出对应授权提示,不静默读取或处理
草案确认边界 OCR 和提取完成后查看正式数据 确认前没有正式事项;用户确认后才由既有模块创建
不启用后台监听 授权后连续新增多张截图但不点击入口 不存在常驻 ContentObserver 接流,也不会自动处理新图
离线 MVP 断网后验证通知入口与本地 OCR 路径 入口和本地验证链路可用,应用默认不要求 INTERNET 权限

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions