diff --git a/docs/agents/skills/README.md b/docs/agents/skills/README.md index 18afbc68..82b2aad8 100644 --- a/docs/agents/skills/README.md +++ b/docs/agents/skills/README.md @@ -2,7 +2,7 @@ A "skill" is a markdown recipe an agent loads on demand for a specialized task. Each file in this directory is a copy of a `SKILL.md` from our local skills library, sanitized of operator-private info. -> **Note:** Some skills below are general-purpose / non-CoreScope (media tools, personal-project helpers). They're listed for completeness — they're available in the same skills library but won't fire on CoreScope work. Skills are agent-stack-agnostic in concept; the specific commands assume an OpenClaw-style runtime, translate as needed. +Skills are agent-stack-agnostic in concept; the specific commands assume an OpenClaw-style runtime, translate as needed. ## Core CoreScope pipeline skills @@ -38,18 +38,3 @@ A "skill" is a markdown recipe an agent loads on demand for a specialized task. | Skill | When to use | |---|---| | [subagent-brief-template](subagent-brief-template.md) | The standard task-brief template — required reading before any sub-agent spawn. See [SUBAGENT-BRIEF-TEMPLATE.md](../SUBAGENT-BRIEF-TEMPLATE.md) at top level for the same content. | - -## General-purpose / non-CoreScope (available in the library) - -These are unrelated to CoreScope but ship in the same skills library. Listed for completeness: - -| Skill | What it does | -|---|---| -| [instagram-reel](instagram-reel.md) | Download an Instagram reel/post by URL via yt-dlp. | -| [instagram-reels-coach](instagram-reels-coach.md) | Evidence-based advice for Instagram Reels strategy. | -| [photo-slideshow](photo-slideshow.md) | Build a photo slideshow video with music + transitions. | -| [project-planner](project-planner.md) | Spec/refine a personal project portfolio + budgeting tool. | -| [softball-scout](softball-scout.md) | Evaluate a softball player against NCSA recruiting benchmarks. | -| [srt-calibrate](srt-calibrate.md) | Sync/calibrate SRT subtitle timing using Whisper as reference. | -| [usenet-movie](usenet-movie.md) | End-to-end movie download via NZBgeek + SABnzbd + GDrive. | -| [video-subtitle](video-subtitle.md) | Add translated subtitles to video clips with optional logo overlay. | diff --git a/docs/agents/skills/instagram-reel.md b/docs/agents/skills/instagram-reel.md deleted file mode 100644 index f007ed65..00000000 --- a/docs/agents/skills/instagram-reel.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -name: instagram-reel -description: Download an Instagram reel/post/video by URL using yt-dlp and send it back to the requester. Triggers on phrases like "download reel", "ig reel", "instagram reel", "grab this reel", or just an instagram.com/reel/ URL pasted in chat. NOT for: TikTok (different host), YouTube, or batch scraping accounts. ---- - -# instagram-reel - -Download a single Instagram reel/post and deliver it. - -## When to use -- User pastes an `instagram.com/reel/...`, `instagram.com/p/...`, or `instagram.com/tv/...` URL. -- User says "download this reel" / "grab this IG" / similar. - -## Steps - -1. Extract the URL from the message. -2. Run yt-dlp into the workspace (media must live under an allowed directory): - ```bash - cd - yt-dlp "" -o "ig_%(id)s.%(ext)s" --no-playlist - ``` -3. If yt-dlp fails with a login/age/private error, retry once with the chromium cookie jar: - ```bash - yt-dlp --cookies-from-browser chromium "" -o "ig_%(id)s.%(ext)s" --no-playlist - ``` - (Note: chromium jar is often empty — anonymous fetch works for most public reels.) -4. Send the resulting mp4 back via the `message` tool with the file path under `/`. Include a short caption (reel id is fine). -5. After delivery, reply with `NO_REPLY` (avoid duplicate messages). -6. Clean up the file afterwards if it's >20MB to keep the workspace tidy: `trash `. - -## Notes -- `yt-dlp --version` should be ≥ 2026.x; older versions break on IG often. -- Only handles single posts. For carousels yt-dlp returns multiple files — send them all. -- If URL has tracking params (`?igsh=...`), strip or leave them; yt-dlp tolerates both. -- Do NOT push downloaded media to any public location. diff --git a/docs/agents/skills/instagram-reels-coach.md b/docs/agents/skills/instagram-reels-coach.md deleted file mode 100644 index 29c98be5..00000000 --- a/docs/agents/skills/instagram-reels-coach.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -name: instagram-reels-coach -description: Give evidence-based advice for creating effective Instagram Reels and growing engagement — especially for 's softball recruiting project. Use when or asks about reels strategy, hooks, captions, hashtags, posting cadence, algorithm tips, or "what should we post next" for 's account. Draws from Hootsuite, Sprinklr, usevisuals guides (2025-2026). NOT for: downloading reels (use instagram-reel skill), or buying ads/paid promotion advice. ---- - -# instagram-reels-coach - -Tactical Instagram Reels playbook. Distilled from Hootsuite (Mar 2026), Sprinklr (2025), and usevisuals (May 2025). Optimized for the softball recruiting use case but the fundamentals apply anywhere. - -## Context for this skill - -Primary user: **** (Class of 2030, Extreme Fastpitch 2030, Bay Area). Goal: D1/D2 softball recruiting visibility. Research lives at `/instagram-softball-research.md`. Model accounts studied include (Stanford '29) — clean, curated, bio-forward. - -## Core principles (ranked by impact) - -### 1. The hook owns everything -- **First 1-3 seconds decide if the reel lives or dies.** Motion, text overlay, or a stated payoff must land before the 1s mark. -- No title cards. No logo intros. No "hi guys". The scroll is ruthless. -- Good hooks: a swing at full speed, a scoreboard in frame, "4 pitches in 8 seconds", a PR number, pitcher's grip close-up. -- Example: mainelove's top reel broke the news in 5 seconds and hit 30k views on an 8-month-old account. - -### 2. Watch time > everything else in the algorithm -- Instagram ranks on: watch time, completion rate, sends (shares), likes, saves, comments — in that order. -- **Sends matter more for reaching NEW audiences; likes matter more for reaching FOLLOWERS.** (Mosseri, 2025) -- Loops back to frame 1 at the end → replays count as watch time. Big multiplier. - -### 3. Shorter is better -- Mosseri: "the shorter the better" for reels. -- Sweet spot: 7-30s for pure engagement content. -- Go 30-90s only if there's actual narrative (highlight reel, game story, tournament recap). -- Max is 3 minutes (since Jan 2025) but don't use it unless needed. - -### 4. Quality signals -- 9:16 vertical, 1080×1920, min 30fps, min 720p. -- **Never upload content with TikTok or CapCut watermarks** — Instagram actively suppresses them. -- Natural light > ring light > overhead fluorescent. -- Stable footage (tripod, gimbal, or brace the phone). -- Clean the lens. Seriously. - -### 5. Audio strategy -- **80%+ of reels are now watched with sound ON** (different from TikTok assumptions). -- But captions/text still required — many first impressions are muted. -- Trending audio: look for the ↑ arrow next to sounds. Catch trends early (first 3-5 days) or skip them. -- Adapt trends to your niche, don't copy-paste. -- Original sound (your own voiceover or game audio) can become a trend itself. - -### 6. Post cadence -- **3-5 reels/week** is the consistency band that trains the algorithm on your niche. -- Posting daily doesn't beat posting 3× with strong hooks. -- Post when YOUR audience is active — check IG Insights, not generic "best times". - -## Softball recruiting-specific playbook - -### Content pillars (pick 3-4, rotate) -1. **Skill showcase** — swing reps, pitching sequences, fielding drills, exit velo, pop time. Show the number on screen. -2. **Game highlights** — hits, plays, at-bats with scoreboard/opponent visible. Date stamps build credibility. -3. **Behind-the-scenes training** — early morning cages, bullpen work, weight room. Shows work ethic. -4. **Team & personality** — tournament travel, dugout moments, friends, family. Humanizes the athlete. -5. **Milestones/announcements** — camp invites, PGF rankings, commitments, awards. - -### Bio is recruiting gold ( model) -Template: -``` -[Class] '30 | @[current travel team] -[Position] | #[jersey] -[Height] | [bats/throws] -Email: [recruiting email] -``` -Add: HUDL link, PGF/Softball America profile, TPW (Top Prospect Watch) link — all via Linktree or similar. - -### Hooks that work for recruit reels -- On-screen text in frame 1: "2030 | SS/2B | #12" -- Stat first: "75 mph exit velo | 13 years old" -- Question: "Can a 2030 grad do this?" → hit/play → answer -- Compare: side-by-side old vs new technique -- Time: "60 swings in 60 seconds" - -### Captions for recruits -- **Always include:** grad year, position(s), event/tournament name, opponent, score/result if favorable -- Tag: travel team, event organizer, major showcases, college accounts you're targeting (sparingly — don't spam) -- Short > long. 1-2 sentences of context + key data. -- Example: "2030 | SS | PGF Nationals Pool Play vs Batbusters | 3-for-3, 2 RBI. #extremefastpitch2030" - -### Hashtag strategy for recruits -Mix of 8-12 hashtags (quality over quantity): -- Class year: `#2030softball` `#classof2030` -- Position: `#shortstop` `#middleinfield` -- Event: `#PGFNationals` `#TripleCrown` -- Region: `#norcalsoftball` `#bayareasoftball` -- Team/club: `#extremefastpitch2030` -- Generic but high-volume: `#softballrecruit` `#uncommitted` - -### CTAs that convert -- "Save this for later" (strong save signal) -- "Tag a coach who needs to see this" (share signal — strongest for new reach) -- "Who's next?" / "Weekend tournament?" (comment bait) -- Avoid: "Follow for more" — lowest-performing CTA per Hootsuite data. - -## Common mistakes to NEVER make - -1. ❌ Uploading TikTok/CapCut-watermarked content -2. ❌ Slow or silent intros (any pause in first 2s) -3. ❌ Vertical letterboxed 16:9 footage (always 9:16) -4. ❌ Reel cover = random mid-action frame nobody recognizes — always set a custom cover with stats/name -5. ❌ Posting and ghosting — respond to comments in first 60 min (algo loves this) -6. ❌ Chasing irrelevant trends just because they're trending (weakens niche signal) -7. ❌ More than 15 hashtags (spammy, diminishing returns past ~12) -8. ❌ Long captions that bury the key info (lead with grad year/position/event) - -## Publish-day checklist - -Before hitting post: -- [ ] Hook lands in 1-3s (watch with sound OFF, then ON) -- [ ] 9:16, ≥1080p, no watermarks -- [ ] Captions burned in or text overlays (muted viewers) -- [ ] Custom cover photo set (shows name + position or headline stat) -- [ ] Caption leads with grad year / position / event -- [ ] 8-12 targeted hashtags (mix class/position/region/event) -- [ ] Share to Story immediately after publish ( does this) -- [ ] Reply to first 5-10 comments within an hour -- [ ] Check Insights 24h later — save/send ratio is the key metric - -## Measuring what works - -Don't obsess over likes. Weekly review these instead: -- **Reach** (accounts shown to, especially non-followers) -- **Completion rate** (watched to end — aim for >50%) -- **Shares/sends** (biggest reach multiplier) -- **Saves** (signals value → more algo push) -- **Profile visits from reel** (quality of audience attracted) -- **Follower growth from reel** (recruiting pipeline metric) - -A reel with 500 views, 50 saves, 30 sends > a reel with 5000 views and zero saves. Quality > quantity. - -## Iteration loop - -1. Post reel -2. Wait 72 hours -3. Note: hook used, content type, length, sound, top metric -4. Log in `workspace-petia/maya-reels-log.md` (or similar) -5. Every 10 reels: identify top 2 and bottom 2, replicate what worked -6. Double down on the winning pattern for 2-3 weeks, then evolve - -## When asked for reel ideas - -Ask first: -- What happened this week? (tournament, practice breakthrough, milestone, camp) -- Any new footage available? -- Who's the target audience? (D1 coaches, D2/D3, travel team peers) -- Trending sound in softball circles right now? (check the Reels tab briefly) - -Then propose 2-3 specific reel concepts with: -- Opening hook (exact first-frame text or visual) -- Shot list (3-6 clips) -- Caption draft -- Hashtag set -- CTA - -Don't dump generic advice — make it concrete and usable. - -## Sources - -- Hootsuite "Instagram Reels for business in 2026" — https://blog.hootsuite.com/instagram-reels/ -- Sprinklr "Instagram Reels Algorithm: 5 Best Practices" — https://www.sprinklr.com/blog/instagram-reels-algorithm/ -- usevisuals "17+ Proven Instagram Reels Best Practices for 2025" — https://usevisuals.com/blog/instagram-reels-best-practices-2025 -- Softball account research — `/instagram-softball-research.md` diff --git a/docs/agents/skills/photo-slideshow.md b/docs/agents/skills/photo-slideshow.md deleted file mode 100644 index e54848bb..00000000 --- a/docs/agents/skills/photo-slideshow.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -name: photo-slideshow -description: > - Create photo slideshow videos with music, dissolve transitions, and animated logo overlay. - Supports TV (1920x1080) and Phone (1080x1920) variants, splitting into parts. - Triggers: "направи слайдшоу", "slideshow", "make slideshow", "slideshow from photos". - NOT for: video editing or subtitle work. ---- - -# Photo Slideshow - -## Workflow - -1. Collect photos (local paths or download from URLs) -2. Run `scripts/make_slideshow.sh` to generate slideshow -3. Optionally create Phone variant (1080x1920) -4. Optionally split into parts (ALWAYS re-encode, NEVER `-c copy`) - -## Usage - -```bash -bash scripts/make_slideshow.sh [options] -``` - -Options set via env vars: -- `DURATION=5` — seconds per photo -- `RESOLUTION=1920x1080` — target resolution (use 1080x1920 for phone) -- `MUSIC=/path/to/music.mp3` — background music file -- `LOGO=1` — include logo (default: 1, always on) -- `LOGO_POS=br` — logo position (br/bl/tr/tl) -- `TRANSITION_DURATION=1` — crossfade duration in seconds - -## Defaults - -| Parameter | Value | -|-----------|-------| -| Duration per photo | 5 seconds | -| Transition | Dissolve (xfade crossfade) | -| Logo | **ALWAYS included** (`.mp4`) | -| Resolution (TV) | 1920×1080 | -| Resolution (Phone) | 1080×1920 | - -## Output Format (MANDATORY) - -``` --c:v libx264 -profile:v main -level 4.0 -pix_fmt yuv420p --c:a aac -ar 44100 -movflags +faststart -``` - -## Splitting into Parts - -When splitting a long slideshow: -- **ALWAYS re-encode** at cut points -- **NEVER use `-c copy`** — causes black frames at cuts -- Use `-ss` and `-t` with full re-encode - -```bash -# Example: split into 60-second parts -ffmpeg -i full.mp4 -ss 0 -t 60 $ENC part1.mp4 -ffmpeg -i full.mp4 -ss 60 -t 60 $ENC part2.mp4 -``` - -## Logo - -- File: `/.mp4` (480×480, 15s animated, loops) -- Oval mask, scaled to ~100px, positioned like artist signature -- Included by default — user must explicitly say "без лого" to skip - -## Photo Preparation - -Photos are auto-resized and padded (black bars) to target resolution, preserving aspect ratio. diff --git a/docs/agents/skills/project-planner.md b/docs/agents/skills/project-planner.md deleted file mode 100644 index 18dc87e3..00000000 --- a/docs/agents/skills/project-planner.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -name: project-planner -description: Help design and spec her project portfolio management and budgeting tool. Use when she mentions "project planner", "the tool", "power apps project", "budget tool", or wants to work on the Visa project planning tool. Triggers on phrases like "let's work on the project", "project planner", "the budget tool", "power apps", "spec the tool". ---- - -# Project Planner Skill - -Help design a project portfolio management and budgeting tool for her Finance team at Visa. - -## Context -- **Repo:** github.com/Kpa-clawbot/petia-project-planner (private) -- **Local clone:** /tmp/petia-project-planner -- **Personas:** `personas/spec-refiner.md` and `personas/doshi.md` in the repo - -## The Tool -Users submit projects with background, risks, and financial info. Finance reviews and decides funding (full/partial/none). Reports export to Excel. - -### Access Roles -- **User** — sees only their own projects -- **Manager** — sees their team's projects -- **Finance** — sees all projects, approves/declines funding - -## Constraints - -### Platform -- **Target platform:** Microsoft Power Apps (SharePoint backend likely) -- All designs and prototypes MUST respect Power Apps capabilities and limitations -- Do NOT design features that require technologies unavailable in Power Apps (3D libraries, custom JS frameworks, etc.) -- Research Power Apps limitations BEFORE designing any feature - -### Data Security -- **ZERO Visa proprietary data.** No real financial figures, project names, employee names, or internal processes. -- Use only dummy/fictional data in all specs, mockups, and prototypes -- If shares anything that looks like real Visa data, **immediately flag it** and ask her to substitute with dummy data -- Specs should describe data structures generically (e.g., "project budget field" not "FY26 Q3 marketing allocation") - -### No Real Visa Data Checklist (run mentally before every commit) -- No real project names or codes -- No real employee names or org structure -- No real financial figures -- No real Visa processes or internal tool names - -## Workflow - -### Feature Request Process -1. Any new feature request → create a **GitHub issue** on the repo -2. Run the issue through **Doshi persona** — is this worth building? L/N/O classification? -3. Run through **Spec Refiner persona** — is the spec tight? Numbered decisions needed? -4. Run through **DJB persona** — any security concerns? Data exposure risks? Access control gaps? -5. Present to ** for final sign-off** — she is the decision maker, not the personas -5. Record all decisions in a numbered **ADR file** in `decisions/` (e.g., `002-role-model.md`) -6. Write the final spec as an `.md` file in `specs/` -7. Update the original GitHub issue with the final spec and link to the ADR -8. Commit and push after every significant update - -### Design & Prototyping -- Screen designs and data models go in `design/` -- All mockups/prototypes must be buildable in Power Apps -- When unsure if Power Apps supports something, research first, document the finding -- Clickable prototypes can be hosted on **GitHub Pages** (github.io) for to review -- **Prototype URLs MUST include a hard-to-guess random component** (e.g., `/petia-project-planner/preview-a7f3x9k2/`) to keep them private -- Never use predictable paths like `/demo/` or `/preview/` - -### Code & Build Process -- All code changes go on a **feature branch**, never direct to main -- Open a **PR** against main for review -- Run PR through persona review (Spec Refiner, Tufte, DJB as applicable) **BEFORE asking for human approval** -- ** approves** code PRs ( can override if unavailable) -- Merge to main only after approval -- No YOLO pushes to main -- **NO SHORTCUTS** — do not skip expert review even if it feels like it'll be fine -- When says "let's build it at Visa," generate a complete handoff document: - - Final specs (all `.md` files from `specs/`) - - All ADRs - - Data model - - Screen descriptions - - Step-by-step instructions for Copilot/Codex to rebuild inside Visa's Power Apps environment - -## Key Rules -- ** is the product owner** — all final decisions are hers -- **Personas advise, decides** -- **Every decision gets an ADR** — no undocumented decisions -- **Every feature gets an issue** — no skipping the process -- **Push to repo after every update** — the repo is the source of truth -- **When in doubt about data sensitivity, ask ** diff --git a/docs/agents/skills/softball-scout.md b/docs/agents/skills/softball-scout.md deleted file mode 100644 index 1e59947c..00000000 --- a/docs/agents/skills/softball-scout.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -name: softball-scout -description: Evaluate a softball player's recruiting viability against real NCSA/college benchmarks by position and division level. Use when asked to assess a player's stats, project their college level, identify gaps, or build a development plan. Takes stats (batting, fielding, measurables) and outputs a scouting report with division-level projections and prioritized development areas. Triggers on "scout report", "evaluate player", "what level can she play", "recruiting assessment", "where does she project", "scouting report". NOT for: swing mechanics analysis (use video), recruiting outreach/emails, or schedule management. ---- - -# softball-scout - -Evaluate a softball player against real college recruiting benchmarks. Output honest, evidence-based scouting reports. - -## When to use -- Player stats are available and someone asks "what level can she play?" -- Building or updating a recruiting profile -- Comparing a player's trajectory to college benchmarks -- Identifying development priorities - -## Required inputs -At minimum: position, batting average, and 2-3 other stats. The more data, the better the report. Flag what's missing. - -## Process - -### 1. Load benchmarks -Read `references/ncsa-benchmarks.md` for position-specific standards by division. - -### 2. Map player stats to benchmarks -For each available stat, determine which division level the player meets: -- ✅ D1 — meets or exceeds D1 standard -- ✅ D2 — meets D2 but not D1 -- ✅ D3 — meets D3/NAIA but not D2 -- ❌ Below D3 — doesn't meet minimum college standard -- ❓ Unknown — stat not available - -### 3. Context-adjust the raw numbers -- **Competition level matters.** .300 against elite 16U > .400 against weak 12U. State the competition context. -- **Age matters.** A 14U player doesn't need to hit D1 numbers today. Project trajectory. -- **Stats ≠ tools.** Batting average doesn't measure bat speed. Fielding % doesn't measure range. Call out what stats CAN'T tell you. -- **BABIP regression.** If BABIP > .350, flag that batting average may regress. If BABIP < .280, flag that it may improve. -- **Fielding % for outfielders is misleading.** High-range outfielders accumulate more errors because they reach more balls. A low FPCT + high putouts/game may indicate great range, not bad defense. Always note this caveat for OF. - -### 4. Identify gaps (be blunt) -- What benchmarks does the player NOT meet? -- What measurables are missing entirely? -- What would a skeptical college coach question? - -### 5. Build development priorities (ranked) -Order by: impact on recruiting viability × feasibility of improvement. Don't list 10 things — pick the top 3-5 that matter most. - -### 6. Project realistic college targets -- Be specific: name division levels, types of programs (academic vs. athletic powerhouse), and conference tiers. -- The 4.0 GPA / high-academic angle is a REAL recruiting lever — Ivy and high-academic D1/D3 have lower athletic thresholds. Factor this in. -- Don't say "D1" unless the numbers actually support it. False hope wastes time and money. - -## Output format - -**[PLAYER NAME] — Scouting Report** -**Position | Class | Team | Season** - -**Stat Line:** (one-line slash line + key counting stats) - -**Division Projection Table:** (stat → D1/D2/D3/below/unknown for each metric) - -**What's Genuinely Good:** (2-4 strengths with evidence) - -**What Needs Work:** (2-4 gaps with evidence) - -**Missing Data:** (what we can't evaluate without measurables or video) - -**Development Priorities:** (ranked 1-5) - -**Realistic College Targets:** (division levels + types of programs) - -## Hard rules -- Never inflate. If a number is average, say average. -- Always state what you're comparing to and where the benchmark comes from. -- If competition level is weak or mixed, discount the stats and say so. -- Distinguish between "is" (current level) and "could be" (projection with development). -- If you don't have enough data, say so instead of guessing. -- GPA is a recruiting tool. Always factor it into the target list. diff --git a/docs/agents/skills/srt-calibrate.md b/docs/agents/skills/srt-calibrate.md deleted file mode 100644 index 0b95b94e..00000000 --- a/docs/agents/skills/srt-calibrate.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -name: srt-calibrate -description: > - Sync/calibrate subtitle timing using Whisper as reference. Compares user's SRT against - Whisper transcription, calculates average time offset, shifts all timestamps. - Handles Windows-1251 → UTF-8 encoding. Supports LRC → SRT conversion. - Triggers: "субтитрите не съвпадат", "sync srt", "калибрирай субтитри", - "fix subtitle timing", "srt offset". NOT for: adding/translating subs (use video-subtitle). ---- - -# SRT Calibrate - -## Workflow - -1. **Whisper reference** — Transcribe first 3 minutes of video via SSH to Windows -2. **Compare** — Match 5+ dialogue lines between user SRT and Whisper SRT -3. **Calculate offset** — Average time difference across matched lines -4. **Shift** — Apply offset to entire SRT -5. **Encoding** — Convert Windows-1251 → UTF-8 if needed - -## Step 1: Get Whisper Reference - -```bash -# Extract first 3 minutes -ffmpeg -i video.mp4 -t 180 -c copy /tmp/first3min.mp4 - -# Transcribe on Windows (force English to avoid Russian) -scp /tmp/first3min.mp4 @:"C:\\Temp\\first3min.mp4" -ssh @ "py -3.10 C:\\Temp\\whisper_srt.py C:\\Temp\\first3min.mp4 --language en" -scp @:"C:\\Temp\\first3min.srt" /tmp/whisper_ref.srt -``` - -## Step 2: Compare and Calculate Offset - -```bash -python3 scripts/compare_timing.py user_subs.srt /tmp/whisper_ref.srt -# Output: average offset in seconds (e.g., +2.35 or -1.80) -``` - -Algorithm: match dialogue lines (skip music cues like ♪, [Music]), find text similarity > 60%, average time differences. Need 5+ matches for reliable offset. - -## Step 3: Shift SRT - -```bash -python3 scripts/shift_srt.py user_subs.srt output.srt -# Example: python3 scripts/shift_srt.py subs.srt -2.35 subs_fixed.srt -``` - -## Encoding - -Bulgarian SRTs from Windows often use Windows-1251. Scripts auto-detect and convert to UTF-8. - -## LRC Files (Song Lyrics) - -1. Convert LRC → SRT: parse `[mm:ss.xx] text` lines into SRT format -2. Then calibrate with same Whisper comparison method diff --git a/docs/agents/skills/usenet-movie.md b/docs/agents/skills/usenet-movie.md deleted file mode 100644 index b8268d42..00000000 --- a/docs/agents/skills/usenet-movie.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -name: usenet-movie -description: "End-to-end movie download pipeline: search NZBgeek, download via SABnzbd, monitor, upload to GDrive, notify user. Use for any movie download request. Shorthand triggers: 'dm QUERY' (download movie), 's QUERY' (search only), 'q' (queue status), 'gd' (gdrive link), 'del FILE' (delete from gdrive), 'link FILE' (share link). Full triggers: 'свали филм', 'download movie', 'търси филм', 'search movie', 'dm', 'movie download'. NOT for: TV shows, music, or non-movie downloads." ---- - -# Usenet Movie Download Pipeline - -All commands use the existing script at `/usenet.py`. Do NOT recreate it. - -## Shorthand Dispatch - -| Input | Action | -|-------|--------| -| `dm ` | Full pipeline: search → user picks → download → track | -| `s ` | Search only, show results | -| `q` | Show SABnzbd queue status | -| `gd` | Send GDrive folder link | -| `del ` | Delete file from GDrive | -| `link ` | Get share link for file | - -## Commands - -```bash -python3 /usenet.py search "" # Search NZBgeek -python3 /usenet.py download # Send to SABnzbd -python3 /usenet.py queue # Queue status -python3 /usenet.py history # Completed downloads -python3 /usenet.py list # List GDrive movies -python3 /usenet.py link "" # Get share link -``` - -## Workflow - -### `dm ` — Full Download Pipeline - -1. **Search**: Run `usenet.py search ""`. For 4K requests, append "2160p" to the query. -2. **Present results** to user with numbered list (title, size, quality info). -3. **User picks** a result → run `usenet.py download `. -4. **Track** in `/memory/movie-downloads.json` under `"pending"`. -5. **Monitor**: SABnzbd auto-uploads to GDrive on completion. Check with `usenet.py queue` / `usenet.py history`. -6. **Notify** user with GDrive link when upload completes. - -### `del ` — Delete from GDrive - -ALWAYS use `--drive-use-trash=false` to avoid filling quota: -```bash -rclone purge --drive-use-trash=false "gdrive:Movie downloads/" -``` - -To empty trash: `rclone cleanup gdrive:` - -## Tracking - -Maintain `/memory/movie-downloads.json`: -- **pending**: Downloads in progress or waiting for upload -- **watching**: Movies not yet available on usenet (check periodically) - -## Key Links - -- GDrive folder: https://drive.google.com/open?id=1sBhE-sW--bS39dQvnrN32Kw2EbXI2WIS -- GDrive remote: `gdrive:Movie downloads/` -- For full pipeline details, see [references/movie-workflow.md](references/movie-workflow.md). diff --git a/docs/agents/skills/video-subtitle.md b/docs/agents/skills/video-subtitle.md deleted file mode 100644 index 1b6ed6be..00000000 --- a/docs/agents/skills/video-subtitle.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -name: video-subtitle -description: > - Add translated subtitles to video clips with optional logo overlay. - Transcribes via Whisper (SSH to Windows), translates to Bulgarian, hardcodes subs with ffmpeg. - Handles songs via LRC files. Triggers: "сложи субтитри", "add subs", "translate subs", - "subtitle this video", "BG subs". NOT for: subtitle timing fixes (use srt-calibrate). ---- - -# Video Subtitle - -## Workflow - -1. **Transcribe** — Run Whisper on Windows via SSH (see scripts/whisper_transcribe.sh) -2. **Translate** — Translate SRT to Bulgarian. Unknown words → English. **NEVER Russian.** -3. **Hardcode subs** — Burn subtitles into video with ffmpeg (see scripts/hardcode_subs.sh) -4. **Logo overlay** — Optional animated logo on top - -## Whisper Transcription - -```bash -# Copy video to Windows first, then run: -bash scripts/whisper_transcribe.sh /path/to/video.mp4 -``` - -- Whisper machine: `@` -- Script: `C:\Temp\whisper_srt.py` -- **ALWAYS force `language="en"`** to prevent Russian detection -- Output: SRT file on Windows, SCP back - -### Songs (Whisper won't work) - -Music drowns vocals. Instead: -1. Find LRC lyrics online (web search `"song title" lrc lyrics`) -2. Convert LRC → SRT format -3. Use srt-calibrate skill to sync timing with Whisper offset - -## Translation Rules - -- Target language: **Bulgarian** (always) -- Unknown/untranslatable words → keep in **English** -- **NEVER output Russian** — if unsure, use English -- Proper nouns stay as-is - -## Subtitle Styling (FIXED — DO NOT CHANGE) - -- Font: DejaVu Sans, size 20 -- Color: white text, semi-transparent gray background -- Position: **bottom** if no existing subs; **TOP** (Alignment=6, MarginV=10) if original subs at bottom - -## Hardcoding Subs - -```bash -bash scripts/hardcode_subs.sh input.mp4 subs.ass output.mp4 [logo_position] -``` - -## Logo Overlay - -- File: `/.mp4` (480×480, 15s animated, loops) -- Apply oval mask, scale down (~100px), position flexibly (like artist signature) -- Default position: bottom-right. Override with parameter. - -## Output Format (MANDATORY) - -``` --c:v libx264 -profile:v main -level 4.0 -pix_fmt yuv420p --c:a aac -b:a 192k -ar 44100 --movflags +faststart -```