{#if showTokenSetup}

API Token Required

This app requires an API token to save notes and manage videos. Please enter the token configured on the server.

e.key === 'Enter' && setupToken()} />
{/if}
T YouTube text feed
{#if !isSyncing} {/if}
{#if showBatchBar}
{selectedVideoIds.size} selected
{/if}
{#if activeTab === '🤖 Agent'}

🤖 Agent Queue

{#if agentItems.length === 0}

Queue empty. Watch a video, press n to write a note, check "Send to Agent", and save.

{:else}
{#each agentItems as item}

{item.title || 'Unknown'}

{item.channel_name}

PROMPT:

{item.user_prompt}

{item.status} {formatDate(item.created_at)} ▶ Watch {#if item.status === 'pending'} {/if}
{/each}
{/if}
{:else if selectedVideo}
{ channelFilter = selectedVideo.channel_name; }} title="Filter by this channel">{selectedVideo.channel_name}

{selectedVideo.title}

{selectedVideo.publish_date || ''} {#if selectedVideo.duration} • {formatDuration(selectedVideo.duration)} {/if} {#if selectedVideo.view_count} • {formatViews(selectedVideo.view_count)} views {/if}
▶ Watch
{#if activeNote === selectedVideo.video_id}
{:else if notes[selectedVideo.video_id]}
activeNote = selectedVideo.video_id} title="Click to edit">{notes[selectedVideo.video_id]}
{/if}

AI Digest

{#if !selectedVideo.summary || selectedVideo.summary.includes("Error")} {/if}
{@html formatMarkdown(selectedVideo.summary)}
{#if selectedVideo.transcript && selectedVideo.transcript !== "No transcript available"}
showTranscript = !showTranscript}>

Video Transcript

{#if showTranscript}
{selectedVideo.transcript}
{/if}
{/if}
{:else}

Select a video to read its summary

{/if}
{#if showHelp}
showHelp = false}>
e.stopPropagation()}>

Keyboard Shortcuts

Navigatej
Navigate upk
Mark Readr / Enter
Skips
Noten
Save noteEnter / Esc

Press ? to toggle

{/if}