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 +7 -0
- package/dist/skills/clip-pipeline/SKILL.md +154 -0
- package/package.json +1 -1
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.
|