daedalus-cli 3.83.0 → 3.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [3.84.0](https://github.com/bgill55/daedalus/compare/v3.83.0...v3.84.0) (2026-11-03)
2
+
3
+
4
+ ### Features
5
+
6
+ * **skills:** add YouTube Factory clip-pipeline production skill ([3b586f5](https://github.com/bgill55/daedalus/commit/3b586f56758fbcd918e1a8132dbbaa4ab6c27b9f))
7
+
1
8
  # [3.83.0](https://github.com/bgill55/daedalus/compare/v3.82.0...v3.83.0) (2026-11-03)
2
9
 
3
10
 
@@ -0,0 +1,154 @@
1
+ ---
2
+ name: clip-pipeline
3
+ description: Run the YouTube Factory Viral Clipping Studio pipeline from a production brief. Parses the brief, fills Studio fields via REST API, triggers pre-flight and render, polls until complete, and outputs the final deliverable path for human QA.
4
+ trigger: clip pipeline|run the pipeline|process a brief|cut a clip|render a clip|youtube factory clip
5
+ safety: instructions
6
+ ---
7
+
8
+ # Clip Pipeline Skill
9
+
10
+ Drive the **YouTube Factory Viral Clipping Studio** (`http://localhost:5000`) end-to-end from a production brief markdown file. You handle automation through rendering. A human does QA. You never publish.
11
+
12
+ ## Boundary Rules
13
+ - **You do:** Parse brief, verify Studio health, invoke preflight, trigger render, poll until finished, report deliverable paths.
14
+ - **You do NOT:** QA video/audio, publish to social platforms, edit captions or copy, invent missing timestamps.
15
+ - **Stop on completion:** Once rendered, report the output MP4 and metadata text file path, then stop.
16
+
17
+ ---
18
+
19
+ ## Step 1: Parse the Production Brief
20
+
21
+ The brief is a markdown file with the following exact format:
22
+
23
+ | Field | Format | Example |
24
+ | :--- | :--- | :--- |
25
+ | **URL** | `URL: <youtube-link>` | `URL: https://youtu.be/BEULMc2QdnY` |
26
+ | **Keep** | `Keep: HH:MM:SS -> HH:MM:SS` | `Keep: 00:16:30 -> 00:17:45` |
27
+ | **Middle cuts** | `Cut out: HH:MM:SS -> HH:MM:SS` (repeatable) | `Cut out: 00:17:00 -> 00:17:10` |
28
+ | **Headline** | `Headline: <text>` | `Headline: THE $60 CALL THAT BOOKED AN INTERNET PARIAH` |
29
+ | **Guest line** | `Guest: <text>` | `Guest: JULIAN DOREY x MIKE CLUM // BEHIND THE SCENES` |
30
+ | **BGM prompt** | `BGM: <prompt>` | `BGM: dark investigative synth pulse, 80 bpm` |
31
+ | **Pinned comment** | `Pinned: <text>` | `Pinned: Would you pay $60 for that call?` |
32
+ | **Captions** | Lines starting with `IG:`, `TikTok:`, `YT:` | (Copy verbatim, do not reword) |
33
+
34
+ ### Parsing Rules:
35
+ 1. **Slug generation:** Generate `clip_name` from Headline: lowercase alphanumeric with underscores, prefixed with `clip_` (e.g. `clip_the_60_dollar_call`). Max 30 chars.
36
+ 2. **Timestamps:** Extract `start` and `end` from `Keep`. If `Cut out:` lines exist, parse them into a list of pairs: `[["00:17:00", "00:17:10"]]`.
37
+
38
+ ---
39
+
40
+ ## Step 2: Health Check & Reset
41
+
42
+ Studio Base URL: `http://localhost:5000`
43
+
44
+ 1. **Verify Studio is up:**
45
+ ```bash
46
+ curl -s http://localhost:5000/api/clipper/status
47
+ ```
48
+ If connection is refused: report that YouTube Factory web server (`app.py`) is offline on port 5000 and stop.
49
+
50
+ 2. **Check for running job:**
51
+ If `status == "running"`, report that another job is active and stop.
52
+ If previous job was completed or errored, clear state:
53
+ ```bash
54
+ curl -s -X POST http://localhost:5000/api/clipper/reset
55
+ ```
56
+
57
+ ---
58
+
59
+ ## Step 3: Trigger Pre-Flight
60
+
61
+ Pre-flight performs audio extraction, Whisper transcription, and face framing tracking.
62
+
63
+ ```bash
64
+ curl -s -X POST http://localhost:5000/api/clipper/preflight \
65
+ -H "Content-Type: application/json" \
66
+ -d '{
67
+ "url": "<URL>",
68
+ "start": "<KEEP_START>",
69
+ "end": "<KEEP_END>",
70
+ "name": "<CLIP_NAME>",
71
+ "title": "<HEADLINE>",
72
+ "cut_segments": [["<CUT_START>", "<CUT_END>"]],
73
+ "style": "facecam",
74
+ "censor": true
75
+ }'
76
+ ```
77
+
78
+ *Note: If no cuts exist, pass `"cut_segments": null`.*
79
+ Wait for the HTTP response (Pre-flight runs synchronously and returns the preflight report JSON). If it returns an error `{"error": ...}`, report and stop.
80
+
81
+ ---
82
+
83
+ ## Step 4: Trigger Render
84
+
85
+ Initiate the asynchronous render worker:
86
+
87
+ ```bash
88
+ curl -s -X POST http://localhost:5000/api/clipper/render \
89
+ -H "Content-Type: application/json" \
90
+ -d '{
91
+ "url": "<URL>",
92
+ "start": "<KEEP_START>",
93
+ "end": "<KEEP_END>",
94
+ "name": "<CLIP_NAME>",
95
+ "title": "<HEADLINE>",
96
+ "sub_title": "<GUEST_LINE>",
97
+ "cut_segments": [["<CUT_START>", "<CUT_END>"]],
98
+ "bgm_prompt": "<BGM_PROMPT>",
99
+ "style": "facecam",
100
+ "censor": true,
101
+ "title_bar": true,
102
+ "enable_cta": true,
103
+ "enable_transitions": true
104
+ }'
105
+ ```
106
+
107
+ Expected response: `{"status": "started", "clip_name": "<CLIP_NAME>"}`.
108
+
109
+ ---
110
+
111
+ ## Step 5: Poll Status Until Done
112
+
113
+ Poll every 20-30 seconds:
114
+ ```bash
115
+ curl -s http://localhost:5000/api/clipper/status
116
+ ```
117
+
118
+ Response structure:
119
+ ```json
120
+ {
121
+ "clip_name": "clip_the_60_dollar_call",
122
+ "status": "running" | "completed" | "error",
123
+ "step": "Transcribing & framing vertical video...",
124
+ "progress": 55,
125
+ "output_file": "D:\\Youtube_Factory\\workspace\\julian_clips\\clip_...\\clip_....mp4",
126
+ "error": null
127
+ }
128
+ ```
129
+
130
+ - **Loop:** Keep polling while `status == "running"`.
131
+ - **Timeout:** If elapsed time exceeds 20 minutes without progress changes, report a stall and stop. Do NOT trigger a second render.
132
+ - **On Error:** If `status == "error"` or `error` is not null, log the error message and stop.
133
+
134
+ ---
135
+
136
+ ## Step 6: Report Deliverables
137
+
138
+ When `status == "completed"`:
139
+ 1. Locate the clip directory: `D:\Youtube_Factory\workspace\julian_clips\<CLIP_NAME>\`
140
+ 2. Deliverable files:
141
+ - **Rendered Video:** `<output_file>`
142
+ - **Metadata Package:** `D:\Youtube_Factory\workspace\julian_clips\<CLIP_NAME>\clip_metadata.txt`
143
+ - **JSON Metadata:** `D:\Youtube_Factory\workspace\julian_clips\<CLIP_NAME>\metadata.json`
144
+ 3. Output the summary report:
145
+ ```markdown
146
+ ### Render Complete & Ready for QA
147
+ - **Clip Name:** <CLIP_NAME>
148
+ - **Video File:** <output_file>
149
+ - **Metadata File:** <path to clip_metadata.txt>
150
+ - **Brief Processed:** <brief_filename>
151
+
152
+ Human QA required before any publishing.
153
+ ```
154
+ 4. Stop immediately.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "daedalus-cli",
3
- "version": "3.83.0",
3
+ "version": "3.84.0",
4
4
  "description": "Local-first AI coding CLI with embedded model router, multi-agent orchestration, and codebase indexing",
5
5
  "type": "module",
6
6
  "bin": {