Fix iOS video playback in list views

Use video_src_for_request() for iOS MP4 transcoding in:
- ui_runs partial
- ui_cache_list partial
- ui_run_partial (also added request parameter)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
gilesb
2026-01-07 20:58:40 +00:00
parent 1e95badddb
commit 3436a22a94

View File

@@ -1426,7 +1426,8 @@ async def ui_runs(request: Request):
<div class="flex justify-center">
''')
if input_media_type == "video":
html_parts.append(f'<video src="/cache/{input_hash}" controls muted loop playsinline class="max-h-32 rounded"></video>')
input_video_src = video_src_for_request(input_hash, request)
html_parts.append(f'<video src="{input_video_src}" controls muted loop playsinline class="max-h-32 rounded"></video>')
elif input_media_type == "image":
html_parts.append(f'<img src="/cache/{input_hash}" alt="input" class="max-h-32 rounded">')
html_parts.append('</div></div>')
@@ -1441,7 +1442,8 @@ async def ui_runs(request: Request):
<div class="flex justify-center">
''')
if output_media_type == "video":
html_parts.append(f'<video src="/cache/{output_hash}" controls autoplay muted loop playsinline class="max-h-32 rounded"></video>')
output_video_src = video_src_for_request(output_hash, request)
html_parts.append(f'<video src="{output_video_src}" controls autoplay muted loop playsinline class="max-h-32 rounded"></video>')
elif output_media_type == "image":
html_parts.append(f'<img src="/cache/{output_hash}" alt="output" class="max-h-32 rounded">')
html_parts.append('</div></div>')
@@ -1551,7 +1553,8 @@ async def ui_cache_list(
''')
if media_type == "video":
html_parts.append(f'<video src="/cache/{content_hash}" controls muted loop playsinline class="max-h-32 rounded"></video>')
video_src = video_src_for_request(content_hash, request)
html_parts.append(f'<video src="{video_src}" controls muted loop playsinline class="max-h-32 rounded"></video>')
elif media_type == "image":
html_parts.append(f'<img src="/cache/{content_hash}" alt="{content_hash[:16]}" class="max-h-32 rounded object-contain">')
else:
@@ -1871,7 +1874,7 @@ async def ui_detail_page(run_id: str, request: Request):
@app.get("/ui/run/{run_id}", response_class=HTMLResponse)
async def ui_run_partial(run_id: str):
async def ui_run_partial(run_id: str, request: Request):
"""HTMX partial: single run (for polling updates)."""
run = load_run(run_id)
if not run:
@@ -1942,7 +1945,8 @@ async def ui_run_partial(run_id: str):
<div class="flex justify-center">
'''
if input_media_type == "video":
html += f'<video src="/cache/{input_hash}" controls muted loop playsinline class="max-h-32 rounded"></video>'
input_video_src = video_src_for_request(input_hash, request)
html += f'<video src="{input_video_src}" controls muted loop playsinline class="max-h-32 rounded"></video>'
elif input_media_type == "image":
html += f'<img src="/cache/{input_hash}" alt="input" class="max-h-32 rounded">'
html += '</div></div>'
@@ -1956,7 +1960,8 @@ async def ui_run_partial(run_id: str):
<div class="flex justify-center">
'''
if output_media_type == "video":
html += f'<video src="/cache/{output_hash}" controls autoplay muted loop playsinline class="max-h-32 rounded"></video>'
output_video_src = video_src_for_request(output_hash, request)
html += f'<video src="{output_video_src}" controls autoplay muted loop playsinline class="max-h-32 rounded"></video>'
elif output_media_type == "image":
html += f'<img src="/cache/{output_hash}" alt="output" class="max-h-32 rounded">'
html += '</div></div>'