flask-review

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Flask Review Loop

Flask审核循环

Flask is the feedback layer for video. Reviewers hit record and talk through the video (voice, camera, screen, drawing on frames) instead of typing; Flask turns the recording into individual timestamped comments with transcripts and summaries, so you can read every piece of feedback as text anchored to a video timestamp. Typed comments arrive the same way.
All access goes through the Flask MCP server (
flask
), included with this plugin (https://api.flask.do/api/mcp/mcp). If its tools are unavailable, the user needs to authenticate once: tell them to run
/mcp
, pick
flask
, and complete the browser sign-in.
Flask是视频的反馈层。审核者无需打字,只需录制并对着视频(语音、摄像头、屏幕、在帧上绘图)进行讲解;Flask会将录制内容转换为带时间戳的独立评论,并附带转录文本和摘要,因此你可以查看每条锚定到视频时间戳的文本形式反馈。文字评论也会以相同方式呈现。

The loop

循环流程

  1. Start the upload -
    upload_file_start(folder_id, file_size, title, content_type)
    . Find a folder with
    contents()
    if you do not have one. The response includes the shareable link.
  2. Give the user the link IMMEDIATELY - before uploading any bytes. They can open it right away and watch the upload and processing happen live. Never wait for "ready" to share the link.
  3. Upload the bytes with the exact curl command from the tool's
    next_step
    (a presigned PUT - the Content-Type header is required).
  4. Finalize with
    upload_file_complete(asset_id)
    . The video is watchable instantly via preview playback. Do not poll
    asset_status
    ; there is nothing to wait for.
  5. Listen for feedback -
    wait_for_feedback(asset_id)
    . It blocks up to ~45s and returns new feedback the moment it is left. Loop it, passing the returned
    next_since
    each time, while the user reviews.
  6. Read the feedback properly:
    • content
      is the verbatim text of a comment;
      timestamp
      is seconds into the video.
    • Recording items carry
      recording.transcript
      (what the reviewer said, sliced to this segment) and
      recording.ai_summary
      . Treat the transcript as the feedback.
    • When the transcript references something visually ("this", "here", "that button", "move it there", or describes a drawn arrow/circle), call
      get_annotated_frames(element_id)
      . It returns the actual frames the reviewer was pointing at WITH their drawing rendered in, plus the transcript marked
      [FRAME N]
      so you can see exactly what each reference means. This is the reliable way to resolve ambiguous references - prefer it over guessing from words alone.
    • (Local fallback for full-res, no drawing overlay: extract the frame yourself with
      ffmpeg -ss <timestamp> -i <file> -frames:v 1 /tmp/frame.png
      and read the image.)
  7. Implement the changes, re-render, and upload the revision as a NEW VERSION of the same asset: pass
    version_of: "<asset_id>"
    to
    upload_file_start
    AND
    upload_file_complete
    . Never create a separate asset for a revision.
  8. Share the
    version_stack_url
    - it permanently shows the newest version, so the user keeps one link for the whole iteration.
  9. Go back to step 5. Repeat until the user says they are done.
  1. 启动上传 - 调用
    upload_file_start(folder_id, file_size, title, content_type)
    。若没有可用文件夹,可通过
    contents()
    查找。响应结果包含可分享链接。
  2. 立即向用户提供链接 - 在上传任何字节之前就分享链接。用户可立即打开链接,实时查看上传和处理进度。绝不要等到“准备就绪”后再分享链接。
  3. 使用工具
    next_step
    中给出的精确curl命令上传字节
    (这是一个预签名PUT请求——必须包含Content-Type请求头)。
  4. 完成上传 - 调用
    upload_file_complete(asset_id)
    。视频可立即通过预览播放功能观看。无需轮询
    asset_status
    ;没有需要等待的内容。
  5. 等待反馈 - 调用
    wait_for_feedback(asset_id)
    。该操作最多阻塞约45秒,一旦有新反馈提交就会立即返回。在用户审核期间循环调用此方法,每次传入返回的
    next_since
    参数。
  6. 正确解读反馈
    • content
      是评论的原文文本;
      timestamp
      是视频中的秒数位置。
    • 录制类反馈包含
      recording.transcript
      (审核者针对该片段的发言内容)和
      recording.ai_summary
      。请将转录文本视为正式反馈内容。
    • 当转录文本中提及视觉内容(如“这个”“这里”“那个按钮”“移到那里”,或是描述了绘制的箭头/圆圈)时,调用
      get_annotated_frames(element_id)
      。该方法会返回审核者指向的实际帧,且已渲染好他们的绘图,同时转录文本会标记
      [FRAME N]
      ,以便你准确理解每个引用的含义。这是解决歧义引用的可靠方式——优先使用此方法,而非仅凭文字猜测。
    • (本地全分辨率 fallback方案,无绘图叠加:自行使用
      ffmpeg -ss <timestamp> -i <file> -frames:v 1 /tmp/frame.png
      提取帧并查看图片。)
  7. 实施修改,重新渲染,并将修订版本作为同一资产的新版本上传:在
    upload_file_start
    upload_file_complete
    中传入
    version_of: "<asset_id>"
    参数。绝不要为修订版本创建单独的资产。
  8. 分享
    version_stack_url
    - 该链接会永久显示最新版本,因此用户全程只需使用一个链接即可。
  9. 返回步骤5。重复操作直到用户表示完成。

Rules

规则

  • The share link exists from step 1. Surfacing it early is the whole point.
  • Quote feedback verbatim when reporting it to the user; include each item's
    url
    .
  • One asset per deliverable, versions for iterations,
    version_stack_url
    for sharing.
  • Uploads cap at 5GB. Requires edit access on the folder and a paid/trialing Flask team - if the server returns a subscription or entitlement error, relay it to the user verbatim.
  • 分享链接在步骤1时就已存在。提前展示链接是核心要点。
  • 向用户反馈时,需逐字引用反馈内容;同时包含每条反馈的
    url
  • 每个交付物对应一个资产,迭代内容作为版本,使用
    version_stack_url
    进行分享。
  • 上传文件大小上限为5GB。需要拥有文件夹的编辑权限,且所属Flask团队为付费版或试用版——若服务器返回订阅或权限错误,请直接将错误信息原样转达给用户。