StreamClipper AI Faz 1: ingestion + sinyal analizi + STT + altyapı iskeleti
yt-dlp headless capture (15dk segmentleme), ses peak + chat velocity sinyal tespiti, OpenAI Whisper STT (kelime zaman damgalı), BullMQ/Redis/Postgres altyapısı ve kanal durumu + transkript kütüphanesi gösteren Next.js panel. LLM virality skorlama, render/crop/altyazı ve multi-platform dağıtım bu fazın kapsamı dışında. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
enum RawSegmentStatus {
|
||||
PENDING
|
||||
PROCESSED
|
||||
DISCARDED
|
||||
}
|
||||
|
||||
enum CandidateSegmentStatus {
|
||||
PENDING_STT
|
||||
TRANSCRIBED
|
||||
FAILED
|
||||
}
|
||||
|
||||
model Channel {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
youtubeHandle String @map("youtube_handle")
|
||||
channelId String @unique @map("channel_id")
|
||||
isActive Boolean @default(true) @map("is_active")
|
||||
lastCheckedAt DateTime? @map("last_checked_at")
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
|
||||
sessions StreamSession[]
|
||||
|
||||
@@map("channels")
|
||||
}
|
||||
|
||||
model StreamSession {
|
||||
id String @id @default(cuid())
|
||||
channelId String @map("channel_id")
|
||||
channel Channel @relation(fields: [channelId], references: [id])
|
||||
liveVideoId String? @map("live_video_id")
|
||||
startedAt DateTime @default(now()) @map("started_at")
|
||||
endedAt DateTime? @map("ended_at")
|
||||
totalSegments Int @default(0) @map("total_segments")
|
||||
|
||||
segments RawSegment[]
|
||||
|
||||
@@map("stream_sessions")
|
||||
}
|
||||
|
||||
model RawSegment {
|
||||
id String @id @default(cuid())
|
||||
sessionId String @map("session_id")
|
||||
session StreamSession @relation(fields: [sessionId], references: [id])
|
||||
filePath String @map("file_path")
|
||||
duration Int
|
||||
startedAt DateTime @map("started_at")
|
||||
status RawSegmentStatus @default(PENDING)
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
|
||||
candidates CandidateSegment[]
|
||||
|
||||
@@map("raw_segments")
|
||||
}
|
||||
|
||||
model CandidateSegment {
|
||||
id String @id @default(cuid())
|
||||
rawSegmentId String @map("raw_segment_id")
|
||||
rawSegment RawSegment @relation(fields: [rawSegmentId], references: [id])
|
||||
startSec Int @map("start_sec")
|
||||
endSec Int @map("end_sec")
|
||||
audioPeakScore Float? @map("audio_peak_score")
|
||||
chatVelocityScore Float? @map("chat_velocity_score")
|
||||
transcriptJson Json? @map("transcript_json")
|
||||
status CandidateSegmentStatus @default(PENDING_STT)
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
|
||||
@@map("candidate_segments")
|
||||
}
|
||||
Reference in New Issue
Block a user