Summary
A single run_capability job that returns multiple outputs (e.g. Flux Schnell with num_images: 4) correctly persists every image as mcp_assets and shows as one history row. User history detail then stages only the first output. There is no way to page or open the rest.
This is a user-drawer gap, not a persistence or billing bug.
Expected
- One history row per execution (one
runs row / gateway_request_id).
- User detail can inspect every stored output (gallery, pager, or output list).
- Cost stays the joined PymtHouse receipt/manifest for that run (not
num_images × unit price).
Actual
- History list: one row. Correct.
- Sidebar still shows
num_images: 4. Correct.
extractRunOutputs walks images[] and persist writes all public media URLs. Correct — MCP returned four asset IDs for the Schnell batch.
CallDetailDrawer MediaStage is a single slot. It picks selectedAsset, else the first image/video/audio output, else assets[0]:
// components/console/CallDetailDrawer.tsx
const outputAssets = activeDetail?.assets.filter((item) => item.role !== "input");
const asset =
outputAssets?.find(/* selected */) ??
outputAssets?.find((item) => /^(?:image|video|audio)(?:\/|$)/i.test(item.mediaType ?? "")) ??
outputAssets?.[0];
- Click-to-switch asset list is admin-only.
- User variant never renders result
images[] — only submitted params plus inference.
- Usage-ticket attachment also keeps one URL per gateway job (
lib/console/activity-assets.ts).
Not a defect
| Observation |
Verdict |
| One history row |
Correct — history is execution-scoped |
Cost $0.0030 for the Schnell job |
Correct unless a receipt billed 4×. Schnell is a fixed job price; the label is the run total |
Repro
- Run Flux Schnell once with
num_images: 4 (MCP livepeer-example/fal-flux-schnell).
- Open
/home history and the resulting row.
- Confirm the sidebar says Num Images 4 and the stage shows only one image.
- Compare admin run detail: asset list can switch outputs.
Example run from local MCP: 4a18002c-c778-4416-a2b1-41ccb5885c60 (job_7fa2242c6d634f8f).
Suggested fix
Expose the already-persisted outputs on the user drawer (thumb strip / prev-next on MediaStage, or the same asset list admin already has). Keep one history row. Do not invent per-image cost unless billing evidence says so.
Summary
A single
run_capabilityjob that returns multiple outputs (e.g. Flux Schnell withnum_images: 4) correctly persists every image asmcp_assetsand shows as one history row. User history detail then stages only the first output. There is no way to page or open the rest.This is a user-drawer gap, not a persistence or billing bug.
Expected
runsrow /gateway_request_id).num_images × unit price).Actual
num_images: 4. Correct.extractRunOutputswalksimages[]and persist writes all public media URLs. Correct — MCP returned four asset IDs for the Schnell batch.CallDetailDrawerMediaStageis a single slot. It picksselectedAsset, else the first image/video/audio output, elseassets[0]:images[]— only submitted params plus inference.lib/console/activity-assets.ts).Not a defect
$0.0030for the Schnell jobRepro
num_images: 4(MCPlivepeer-example/fal-flux-schnell)./homehistory and the resulting row.Example run from local MCP:
4a18002c-c778-4416-a2b1-41ccb5885c60(job_7fa2242c6d634f8f).Suggested fix
Expose the already-persisted outputs on the user drawer (thumb strip / prev-next on
MediaStage, or the same asset list admin already has). Keep one history row. Do not invent per-image cost unless billing evidence says so.