playbook/antigravity-awesome-skills/skills/linkedin-content-generator/scripts/generate_carousel.py

70 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
generate_carousel.py — LinkedIn Carousel Prompt Builder
Usage:
python generate_carousel.py --topic "<topic>" --niche "<niche>" [--slides <n>] [--style <style>]
Style: how-to | listicle | myth-busting | framework | story-arc
"""
import argparse
import sys
import os
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, SCRIPT_DIR)
from utils import get_base_prompt_context
CAROUSEL_STYLES = {
"how-to": "Step-by-step guide. Slide 1 = problem, slides 2-N = steps, last = result/CTA.",
"listicle": "Curated list. Each slide = one item with bold title + 1-2 sentence explanation.",
"myth-busting": "Each slide = one myth debunked. Format: 'MYTH: [belief]''TRUTH: [reality]'.",
"framework": "Introduce a proprietary framework. Each slide = one component of the framework.",
"story-arc": "Transformation story. Slide 1 = before, middle = journey, last = after + CTA.",
}
def main():
parser = argparse.ArgumentParser(description="Generate a LinkedIn Carousel prompt")
parser.add_argument("--topic", required=True)
parser.add_argument("--niche", required=True)
parser.add_argument("--slides", required=False, type=int, default=7)
parser.add_argument("--style", required=False, default="listicle", choices=list(CAROUSEL_STYLES.keys()))
args = parser.parse_args()
slides = max(3, min(args.slides, 12))
style_instruction = CAROUSEL_STYLES.get(args.style, CAROUSEL_STYLES["listicle"])
context = get_base_prompt_context(args.niche, "LinkedIn Carousel")
prompt = f"""{context}
<TASK>
Generate a complete LinkedIn Carousel with exactly {slides} slides.
**Topic**: {args.topic}
**Niche**: {args.niche}
**Style**: {args.style.upper()}{style_instruction}
Slide structure:
- Slide 1 (Cover): Massive hook headline (max 8 words) + optional 1-sentence sub-headline
- Slides 2{slides-1}: Follow the "{args.style}" style. Bold Title + 2-3 lines per slide.
- Slide {slides} (CTA): One clear action (e.g., "Follow for more", "Save this for later")
After the slides, provide:
---
📝 LinkedIn Caption:
- Hook line (different wording from Slide 1, same energy)
- 2-3 lines of teaser context
- "Swipe to see all {slides}"
- 3-5 hashtags
Output slides numbered clearly. No extra commentary.
</TASK>"""
print(prompt)
if __name__ == "__main__":
main()