{{ $row['title'] ?? ('Import #'.($row['import_id'] ?? '')) }}
{{ $row['summary'] ?? 'Needs attention' }} @if(! empty($row['deferred'])) Waiting on Omni @endif
@if($videoOnly) {{ $repairVideoMissing }} product(s) have an original video and no AI version. Photos/Shopify are already done — this pass only runs Omni → crop → sync. @if($omniPaused) Omni is paused until {{ $omniResumeAt ?: 'reset' }} (Miami). @endif @elseif($repairTotal > 0) {{ $repairTotal }} product(s) need work (photos / sync / Omni video). Omni fail → that product is left unchanged; 3 generate fails in a row stops the queue. @else {{ $repairVideoMissing }} product(s) still use the original video (no AI). Omni is paused — counts stay visible until you can run Enhance pending videos. @endif
Needs attention
ProductsDone removes the product from this backlog (no Fix & sync / Omni). It comes back only if you change its media later.
@php $repairListBlocks = [ 'redo' => ['rows' => $repairListRedo, 'empty' => 'No products need photos redone.'], 'sync' => ['rows' => $repairListSync, 'empty' => 'No products waiting on Prepare / Shopify push.'], 'video' => ['rows' => $repairListVideo, 'empty' => 'No products waiting on Omni video.'], ]; @endphp @foreach($repairListBlocks as $listKey => $block){{ $row['summary'] ?? 'Needs attention' }} @if(! empty($row['deferred'])) Waiting on Omni @endif
{{ $block['empty'] }}
@endforelseClick a count box to review products. Use Done to leave a product alone. {{ $repairVideoMissing }} still have an original video with no AI video. @if($repairCapped && $repairQueued > 0) This run takes the first {{ $repairQueued }} of {{ $repairTotal }} — press again for the rest. @endif Progress appears in Improve existing.