Comeback agent plugin walkthrough video ​

Source of the illustrated walkthrough submitted with the Comeback ChatGPT/MCP plugin (plugins/comeback) for OpenAI's plugin review. It renders a silent, captioned 1920×1080 MP4 of 3:21 to landing/public/images/videos/comeback-plugin-walkthrough.mp4, which the landing site serves at https://comebackloyalty.com/images/videos/comeback-plugin-walkthrough.mp4 once it deploys.

The video is an animation of the plugin's expected behavior with sample data. It is not a recording of live tests, ChatGPT or a production account. An opening disclosure says so and the "Illustrated walkthrough · sample data" badge stays on screen in every chat scene.

Render ​

From the repository root, with Google Chrome and ffmpeg installed:

bash
node landing/video-src/mcp-plugin/render.cjs video landing/public/images/videos/comeback-plugin-walkthrough.mp4
node landing/video-src/mcp-plugin/render.cjs still 77 /tmp/frame.jpg

Opening index.html in a browser plays a preview (space pauses, arrow keys seek, ?t=77 starts at 77 s). In that page, window.TIMINGS() returns the start and end of every section and how long each completed result stays still before the next item appears.

Files ​

  • index.html holds the storyboard: SCENES lists each scene's prompts, tool calls, answers, captions and clicks, with times relative to the scene, and ORDER sets the sequence and the length of the title sections.
  • components.js builds the chat panel, the tool cards and the browser pages.
  • styles.css styles them.
  • render.cjs captures window.renderFrame(t) frame by frame with Playwright and pipes the frames to ffmpeg.

Sources of truth ​

  • Tool names, inputs and results: server/src/mcp/tools.js.
  • Account linking: server/src/mcp/auth.js and routes.js, admin/src/components/LoginPage.vue and AgentConnectPage.vue with the English locale.
  • Review prompts and expected behavior: plugins/comeback/plugin.json and plugins/comeback/README.md.
  • Draft handoff: admin/src/components/CampaignEditor.vue.

Readability rules ​

  • Sized for 960×540 viewing: prompts are 36 px, tool names 34 px, result values 32 px and captions 34 px at 1080p.
  • One focal point per beat: a prompt, a tool result or an answer. A single caption line states the outcome once the result has fully appeared.
  • No side cards, raw JSON, UUIDs or footnotes. Tool results are labelled summaries of the fields tools.js returns.
  • Every completed tool result stays still for at least 3.2 s before anything new appears, measured from the later of its fade-in and the chat scroll. The consent screen is fully visible for 8.1 s, the proposed WhatsApp message stays still for 9.8 s before the user confirms, and the final draft for 11.2 s.

Scenes and coverage ​

TimeSceneTools shownOutcome on screen
0:00IntroComeback plugin for ChatGPT and other MCP clients
0:04DisclosureIllustrated animation of expected behavior, sample data, no real customers, credentials or tokens
0:10.8Account linkingComeback sign-in, then the real consent text: no feature scopes, existing permissions, no session token for the agent
0:34.4Positive 1list_organizationsOnly the account's organizations, with locations and permissions; no credentials or location tokens
0:49.4Positive 2list_organizations, search_customers, get_customerTwo customers named Ana, so the agent asks; then contact details and 120 points, within allowed passes
1:10.4Positive 3list_organizations, get_reportSeptember 2026 aggregates in cents and UTC dates; the agent converts cents to euros; no individual orders
1:24.2Positive 4list_organizations, create_segment"Inactive 60 days" with lastVisitDate · minimumDaysSinceDate · 60 and a new request ID; the returned segment ID and admin.comeback.es/segments link; a retry with the same request ID returns the same segment
1:39.0Positive 5list_organizations, list_segments, create_campaign_draftThe agent proposes a subject and message and asks first; the WhatsApp draft is saved, not sent or scheduled, with its editor link; a retry returns the same draft
2:09.2Also coveredlist_campaigns, get_campaign_performanceLatest sent campaign and its aggregate results, no recipient lists
2:24.6Guardrails titlePermissions are checked on every call
2:27.2Negative 1get_customerMCP_ORGANIZATION_ACCESS_DENIED, no customer data
2:39.0Negative 3list_organizations, get_reportMCP_LOCATION_ACCESS_DENIED, no report data; the agent asks for an authorized location
2:51.6Negative 2noneNo tool is called; the agent points to the admin panel, which shows the WhatsApp draft still unsent; Send is never clicked
3:11.2Recapall nineThe nine tool names and the three guardrails
3:17.2Outrocomebackloyalty.com

Illustrated details ​

  • The chat window is a neutral, simplified client, not ChatGPT's interface.
  • The consent page names "ChatGPT" and https://chatgpt.com as the requesting client for illustration. The real page shows the client name and redirect origin that the client registered.
  • The campaign editor's live preview is drawn as a WhatsApp message labelled "Draft · not sent" so the channel is unmistakable. The real editor shows a generic notification card for WhatsApp.
  • Organization, customer, campaign names and figures are invented. Emails use example.com and the account uses the reserved .example domain. The password field only shows dots.

Validation ​

The committed MP4 was rendered with render.cjs (6,042 frames at 30 fps) and checked from the encode itself:

  • ffprobe reports H.264, yuv420p, 1920×1080, 30 fps, 201.4 s and 10.8 MB, and a full ffmpeg -v error -i … -f null - decode reports no errors.
  • Frames were extracted from the encode for every completed result, every agent answer and both sides of every section boundary, at full size and at 960×540. A frame from each scene and the transitions were reviewed by eye, and all of them were checked numerically as below.
  • For each hold listed by window.TIMINGS(), the first and last frames of the hold differ by at most 0.31/255 in mean luma inside the chat area, which is encoder noise. The consent and draft screens differ only where a highlight ring appears.
  • Hold timings, measured from the later of the fade-in and the scroll: list_organizations 4.0 s, search_customers 3.7 s, get_customer 3.7 s, get_report 3.9 s, create_segment 4.4 s, list_segments 3.5 s, create_campaign_draft 4.0 s, list_campaigns 3.2 s, get_campaign_performance 3.7 s, denied get_customer 3.9 s, denied get_report 3.8 s.