""" variations.py --------------------------------------- Hook & Script Variation Engine (V8) Purpose: - Generate multiple viral hooks - Create alternative script directions - Support A/B testing of edits - Enable Multi-Version Render pipeline Works fully CPU-only. No external API required. """ import random import hashlib # ===================================================== # HOOK TEMPLATES (VIRAL PATTERNS) # ===================================================== HOOK_PATTERNS = [ "You are not going to believe this...", "This is what nobody tells you about {}", "Stop scrolling if you want to understand {}", "The truth about {} will shock you", "Most people get {} wrong", "If you understand this, your {} changes forever", "I wish I knew this before about {}", "This is how you actually win at {}", "Everyone is lying about {}", "Watch this before it's too late..." ] # ===================================================== # TEXT CLEANER # ===================================================== def extract_keywords(words): """ Extract simple keyword candidates from transcript """ freq = {} for w in words: word = w["word"].lower().strip() if len(word) < 3: continue freq[word] = freq.get(word, 0) + 1 sorted_words = sorted(freq.items(), key=lambda x: x[1], reverse=True) return [w[0] for w in sorted_words[:5]] # ===================================================== # HOOK GENERATION # ===================================================== def generate_hooks(words, count=5): """ Generate multiple viral hooks from transcript """ keywords = extract_keywords(words) hooks = [] for i in range(count): template = random.choice(HOOK_PATTERNS) keyword = random.choice(keywords) if keywords else "this" try: hook = template.format(keyword) except: hook = template hooks.append(hook) return hooks # ===================================================== # SCRIPT VARIATION ENGINE # ===================================================== def generate_script_variations(words): """ Creates alternative narrative directions """ base_text = " ".join([w["word"] for w in words]) variations = [] variations.append({ "style": "direct", "script": base_text }) variations.append({ "style": "emotional", "script": "Imagine this... " + base_text }) variations.append({ "style": "urgent", "script": "You need to hear this: " + base_text }) variations.append({ "style": "story", "script": "Let me tell you something important. " + base_text }) return variations # ===================================================== # CAPTION VARIATION ENGINE # ===================================================== def generate_caption_variations(captions): """ Creates multiple caption styles for rendering """ styles = [] for c in captions: styles.append({ "style": "bold_center", "text": c["text"].upper() }) styles.append({ "style": "minimal", "text": c["text"] }) styles.append({ "style": "emphasis_words", "text": highlight_keywords(c["text"]) }) return styles # ===================================================== # KEYWORD HIGHLIGHTER # ===================================================== def highlight_keywords(text): """ Emphasizes strong words in captions """ keywords = ["you", "this", "stop", "now", "secret", "important"] words = text.split() output = [] for w in words: if w.lower() in keywords: output.append(w.upper()) else: output.append(w) return " ".join(output) # ===================================================== # MULTI VERSION RENDER ENGINE # ===================================================== def generate_render_variations(video_path, hooks=None): """ Creates multiple render variants metadata (actual rendering happens in render.py) """ if not hooks: hooks = ["Hook 1", "Hook 2", "Hook 3"] outputs = [] for i, hook in enumerate(hooks): outputs.append({ "version": i + 1, "hook": hook, "output_file": f"render_variant_{i+1}.mp4" }) return outputs # ===================================================== # DETERMINISTIC VIRAL HASH # ===================================================== def viral_signature(text): """ Creates deterministic ID for A/B testing consistency """ return hashlib.md5(text.encode()).hexdigest()[:10] # ===================================================== # PUBLIC API # ===================================================== def generate_hooks_only(words): return generate_hooks(words) def generate_full_variations(words): """ Full pipeline for V8 Multi-Version system """ hooks = generate_hooks(words) scripts = generate_script_variations(words) return { "hooks": hooks, "scripts": scripts }