Skill: bytesagain1/comic-script (version 2.0.1)

--- version: "2.0.0" name: Comic Script description: "Draft comic storyboards with panels, dialogue, and scene pacing. Use when designing panels, writing dialogue, structuring comic chapters." author: BytesAgain homepage: https://bytesagain.com source: https://github.com/bytesagain/ai-skills --- # Comic Script Content creation and optimization assistant for drafting, outlining, SEO, scheduling, and repurposing content — all from the terminal. ## Commands | Command | Description | |---------|-------------| | `comic-script draft <topic> [words]` | Create a content draft (default 800 words) | | `comic-script headline <topic>` | Generate headline variations for a topic | | `comic-script outline <topic>` | Produce a structured content outline (Intro → Problem → Solution → Examples → CTA) | | `comic-script seo <keyword>` | Get SEO tips: keywords, title tags, meta descriptions, headings, internal links | | `comic-script schedule` | Generate a weekly content schedule (Mon–Fri) | | `comic-script hooks` | Suggest opening hooks: question, statistic, story, bold claim, controversy | | `comic-script cta` | Generate call-to-action ideas: subscribe, share, comment, try it, learn more | | `comic-script repurpose` | Suggest content repurposing pipeline: blog → thread → video → carousel → newsletter | | `comic-script metrics` | List key content metrics: views, clicks, shares, time on page, conversions | | `comic-script ideas` | Brainstorm content formats: how-to, listicle, case study, interview, comparison | | `comic-script help` | Show help and all available commands | | `comic-script version` | Show current version | ## Data Storage - All activity is logged to `$COMIC_SCRIPT_DIR` (defaults to `~/.local/share/comic-script/`) - History log: `$DATA_DIR/history.log` — timestamped record of every command executed - Override the storage directory by setting the `COMIC_SCRIPT_DIR` environment variable ## Requirements - Bash 4+ (uses `set -euo pipefail`) - No external dependencies or API keys required - Works offline, entirely local ## When to Use 1. **Drafting content quickly** — Kick off a blog post or article draft with a target word count directly from the terminal 2. **Generating headline ideas** — Brainstorm multiple headline variations for a topic before committing to one 3. **Building content outlines** — Get a structured five-section outline to organize your thoughts before writing 4. **Optimizing for SEO** — Get a checklist of SEO essentials (keywords, meta tags, headings, internal links) for any target keyword 5. **Repurposing existing content** — Plan how to turn a single blog post into a thread, video, carousel, and newsletter ## Examples ```bash # Create a draft about AI productivity tools (default 800 words) comic-script draft "AI productivity tools" # Create a longer draft with a custom word count comic-script draft "remote work tips" 1500 # Generate headline options for a topic comic-script headline "machine learning for beginners" # Get a structured outline comic-script outline "how to start a newsletter" # SEO checklist for a keyword comic-script seo "best project management tools" # Suggest opening hooks for content comic-script hooks # Plan content repurposing comic-script repurpose ``` ## How It Works Each command outputs structured suggestions to stdout and logs the action with a timestamp to `history.log`. The tool is designed as a quick-reference content companion — run a command, get ideas, and move on with your writing workflow. ## Tips - Combine commands in a pipeline: run `outline` first, then `draft`, then `seo` to build a full content workflow - Use `schedule` to plan your content week and `metrics` to decide what to track - All output is plain text — easy to pipe, redirect, or paste into any editor - Run `comic-script help` for the complete command list at any time --- Powered by BytesAgain | bytesagain.com | [REDACTED_SECRET]

path: scripts/comic.sh
content: #!/usr/bin/env bash
set -euo pipefail
CMD="${1:-help}"; shift 2>/dev/null || true; INPUT="$*"
run_python() {
python3 << 'PYEOF'
import sys
cmd = sys.argv[1] if len(sys.argv) > 1 else "help"
inp = " ".join(sys.argv[2:]) if len(sys.argv) > 2 else ""

def cmd_storyboard():
    if not inp:
        print("Usage: storyboard <scene_count> [title]")
        print("Example: storyboard 6 Hero-Journey")
        return
    parts = inp.split()
    scenes = int(parts[0]) if parts else 4
    title = parts[1] if len(parts) > 1 else "Untitled"
    print("=" * 60)
    print("  Storyboard — {} ({} panels)".format(title, scenes))
    print("=" * 60)
    for i in range(1, scenes + 1):
        print("")
        print("  Panel {} / {}".format(i, scenes))
        print("  +" + "-" * 40 + "+")
        print("  |" + " " * 40 + "|")
        print("  |  [Visual Description]" + " " * 16 + "|")
        print("  |" + " " * 40 + "|")
        print("  |" + " " * 40 + "|")
        print("  +" + "-" * 40 + "+")
        print("  Shot: [wide/medium/close-up/extreme close]")
        print("  Dialogue: ___")
        print("  SFX: ___")
        print("  Note: ___")

def cmd_character():
    if not inp:
        print("Usage: character <name> [archetype]")
        print("Archetypes: hero, villain, mentor, sidekick, love-interest")
        return
    parts = inp.split()
    name = parts[0]
    arch = parts[1] if len(parts) > 1 else "hero"
    visual_traits = {
        "hero": ["Determined eyes","Athletic build","Distinctive hair/scar","Primary colors"],
        "villain": ["Sharp features","Dark palette","Exaggerated expressions","Imposing silhouette"],
        "mentor": ["Wise eyes","Aged features","Calm posture","Muted tones"],
        "sidekick": ["Expressive face","Smaller stature","Bright accent color","Dynamic poses"],
    }
    traits = visual_traits.get(arch, visual_traits["hero"])
    print("=" * 50)
    print("  Character Sheet: {} ({})".format(name, arch))
    print("=" * 50)
    print("")
    print("  Name: {}".format(name))
    print("  Archetype: {}".format(arch))
    print("  Age: ___")
    print("  Height: ___")
    print("")
    print("  Visual Design:")
    for t in traits:
        print("    - {}".format(t))
    print("")
    print("  Expression Sheet (draw these):")
    for expr in ["Neutral","Happy","Angry","Surprised","Sad","Determined"]:
        print("    [ ] {}".format(expr))
    print("")
    print("  Signature Pose: ___")
    print("  Color Palette: #___ #___ #___ #___")

def cmd_dialogue():
    print("=" * 50)
    print("  Comic Dialogue Tips")
    print("=" * 50)
    print("")
    rules = [
        ("Bubble Types", ["Round: normal speech","Cloud: thought","Spiky: shouting","Whisper: dashed outline","Narration: rectangular box"]),
        ("Writing Rules", ["Max 25 words per bubble","2-3 bubbles per panel max","Read order: top-left to bottom-right","Each character gets distinct voice","Show, do not tell"]),
        ("SFX Examples", ["BOOM! POW! CRASH!","*knock knock*","~sigh~","WHOOOOSH","...silence..."]),
    ]
    for title, items in rules:
        print("  {}:".format(title))
        for item in items:
            print("    - {}".format(item))
        print("")

def cmd_layout():
    layouts = [
        ("Standard Grid", "2x3 or 3x3 equal panels\nBest for: calm scenes, dialogue"),
        ("Splash Page", "One big panel = full page\nBest for: dramatic reveals, action peaks"),
        ("L-Shape", "One tall panel + 2-3 small\nBest for: establishing shot + details"),
        ("Diagonal", "Tilted panel borders\nBest for: action, tension, movement"),
        ("Borderless", "No panel borders, bleeding art\nBest for: emotional, dreamlike moments"),
    ]
    print("=" * 50)
    print("  Page Layout Templates")
    print("=" * 50)
    print("")
    for name, desc in layouts:
        print("  {}".format(name))
        for line in desc.split("\n"):
            print("    {}".format(line.strip()))
        print("")

commands = {"storyboard": cmd_storyboard, "character": cmd_character, "dialogue": cmd_dialogue, "layout": cmd_layout}
if cmd == "help":
    print("Comic Script Writer")
    print("")
    print("Commands:")
    print("  storyboard <panels> [title] — Panel-by-panel template")
    print("  character <name> [type]     — Character design sheet")
    print("  dialogue                    — Dialogue writing tips")
    print("  layout                      — Page layout templates")
elif cmd in commands:
    commands[cmd]()
else:
    print("Unknown: {}".format(cmd))
print("")
print("Powered by BytesAgain | bytesagain.com")
PYEOF
}
run_python "$CMD" $INPUT


path: scripts/script.sh
content: #!/usr/bin/env bash
# comic-script - Content creation and optimization assistant
set -euo pipefail
VERSION="2.0.0"
DATA_DIR="${COMIC_SCRIPT_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/comic-script}"
DB="$DATA_DIR/data.log"
mkdir -p "$DATA_DIR"

show_help() {
    cat << EOF
comic-script v$VERSION

Content creation and optimization assistant

Usage: comic-script <command> [args]

Commands:
  draft                Create draft
  headline             Generate headlines
  outline              Content outline
  seo                  SEO tips
  schedule             Content schedule
  hooks                Opening hooks
  cta                  Call to action
  repurpose            Repurpose content
  metrics              Content metrics
  ideas                Content ideas
  help                 Show this help
  version              Show version

Data: \$DATA_DIR
EOF
}

_log() { echo "$(date '+%m-%d %H:%M') $1: $2" >> "$DATA_DIR/history.log"; }

cmd_draft() {
    echo "  Draft: $1
      Target: ${2:-800} words"
    _log "draft" "${1:-}"
}

cmd_headline() {
    echo "  1. How to $1
      2. $1: Complete Guide
      3. Why $1 Matters"
    _log "headline" "${1:-}"
}

cmd_outline() {
    echo "  1. Intro | 2. Problem | 3. Solution | 4. Examples | 5. CTA"
    _log "outline" "${1:-}"
}

cmd_seo() {
    echo "  Keywords: $1 | Title tag | Meta desc | H1-H3 | Internal links"
    _log "seo" "${1:-}"
}

cmd_schedule() {
    echo "  Mon: Research | Tue: Write | Wed: Edit | Thu: Publish | Fri: Promote"
    _log "schedule" "${1:-}"
}

cmd_hooks() {
    echo "  Question | Statistic | Story | Bold claim | Controversy"
    _log "hooks" "${1:-}"
}

cmd_cta() {
    echo "  Subscribe | Share | Comment | Try it | Learn more"
    _log "cta" "${1:-}"
}

cmd_repurpose() {
    echo "  Blog -> Thread -> Video -> Carousel -> Newsletter"
    _log "repurpose" "${1:-}"
}

cmd_metrics() {
    echo "  Views | Clicks | Shares | Time on page | Conversions"
    _log "metrics" "${1:-}"
}

cmd_ideas() {
    echo "  How-to | Listicle | Case study | Interview | Comparison"
    _log "ideas" "${1:-}"
}

case "${1:-help}" in
    draft) shift; cmd_draft "$@" ;;
    headline) shift; cmd_headline "$@" ;;
    outline) shift; cmd_outline "$@" ;;
    seo) shift; cmd_seo "$@" ;;
    schedule) shift; cmd_schedule "$@" ;;
    hooks) shift; cmd_hooks "$@" ;;
    cta) shift; cmd_cta "$@" ;;
    repurpose) shift; cmd_repurpose "$@" ;;
    metrics) shift; cmd_metrics "$@" ;;
    ideas) shift; cmd_ideas "$@" ;;
    help|-h) show_help ;;
    version|-v) echo "comic-script v$VERSION" ;;
    *) echo "Unknown: $1"; show_help; exit 1 ;;
esac


path: tips.md
content: # Comic Script - tips.md
## Quick Reference


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)