@extends('layout', ['autoRefresh' => $series->videos->contains(fn($v) => $v->isProcessing())]) @section('title', $series->name) @section('content')
← {{ $series->channel->name }}
Topic: {{ $series->topic }}
@if(!empty($series->topic_pool))Rotating {{ count($series->topic_pool) }} topics (next: “{{ \Illuminate\Support\Str::limit($series->topic_pool[$series->topic_pool_cursor % count($series->topic_pool)], 60) }}”)
@endif{{ ucfirst($series->cadence) }}{{ $series->times() ? ' at ' . implode(', ', $series->times()) : '' }} · {{ $series->auto_publish ? 'auto-publish' : 'manual publish' }} · {{ $series->targets->count() }} channel target(s)
@if($series->next_run_at)Next run: {{ $series->next_run_at->diffForHumans() }} ({{ $series->next_run_at->format('M j, H:i') }})
@endif @php $costed = $series->videos->whereNotNull('cost'); @endphp @if($costed->isNotEmpty())Est. cost: {{ config('faceless.costs.currency', '$') }}{{ number_format($costed->sum('cost'), 2) }} total · {{ config('faceless.costs.currency', '$') }}{{ number_format($costed->avg('cost'), 2) }} avg over {{ $costed->count() }} videos
@endifEach target generates its own video in that language/voice and posts to that channel. Same topic, localized per channel.
@if($series->targets->isNotEmpty())🗣 {{ $target->language }}@if($target->voice_id) · voice {{ \Illuminate\Support\Str::limit($target->voice_id, 10) }}@endif
{{ $target->platforms ? implode(', ', array_map('ucfirst', $target->platforms)) : 'all connected' }}
None yet. Click “Run now” to generate the first one.
@else