appydave-tools 0.15.0 → 0.17.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +6 -0
- data/AGENTS.md +22 -0
- data/CHANGELOG.md +19 -0
- data/CLAUDE.md +318 -79
- data/README.md +390 -81
- data/bin/archive_project.rb +249 -0
- data/bin/configuration.rb +21 -1
- data/bin/generate_manifest.rb +357 -0
- data/bin/subtitle_manager.rb +18 -12
- data/bin/subtitle_processor.rb +158 -0
- data/bin/sync_from_ssd.rb +236 -0
- data/bin/vat +623 -0
- data/docs/README.md +169 -0
- data/docs/archive/codebase-audit-2025-01.md +424 -0
- data/docs/archive/documentation-framework-proposal.md +808 -0
- data/docs/archive/purpose-and-philosophy.md +110 -0
- data/docs/archive/test-coverage-quick-wins.md +342 -0
- data/docs/archive/tool-discovery.md +199 -0
- data/docs/archive/tool-documentation-analysis.md +592 -0
- data/docs/configuration/.env.example +19 -0
- data/docs/configuration/README.md +394 -0
- data/docs/configuration/channels.example.json +26 -0
- data/docs/configuration/settings.example.json +6 -0
- data/docs/development/CODEX-recommendations.md +123 -0
- data/docs/development/README.md +100 -0
- data/docs/development/cli-architecture-patterns.md +1604 -0
- data/docs/development/pattern-comparison.md +284 -0
- data/docs/prd-unified-brands-configuration.md +792 -0
- data/docs/project-brand-systems-analysis.md +934 -0
- data/docs/tools/bank-reconciliation.md +269 -0
- data/docs/tools/cli-actions.md +444 -0
- data/docs/tools/configuration.md +329 -0
- data/docs/{usage → tools}/gpt-context.md +118 -7
- data/docs/tools/index.md +324 -0
- data/docs/tools/move-images.md +295 -0
- data/docs/tools/name-manager.md +322 -0
- data/docs/tools/prompt-tools.md +209 -0
- data/docs/tools/subtitle-processor.md +242 -0
- data/docs/tools/youtube-automation.md +258 -0
- data/docs/tools/youtube-manager.md +248 -0
- data/docs/vat/dam-vision.md +123 -0
- data/docs/vat/session-summary-2025-11-09.md +297 -0
- data/docs/vat/usage.md +508 -0
- data/docs/vat/vat-testing-plan.md +801 -0
- data/lib/appydave/tools/configuration/models/brands_config.rb +238 -0
- data/lib/appydave/tools/configuration/models/config_base.rb +7 -0
- data/lib/appydave/tools/configuration/models/settings_config.rb +4 -0
- data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/clean.rb +1 -1
- data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/join.rb +5 -2
- data/lib/appydave/tools/vat/config.rb +153 -0
- data/lib/appydave/tools/vat/config_loader.rb +91 -0
- data/lib/appydave/tools/vat/manifest_generator.rb +239 -0
- data/lib/appydave/tools/vat/project_listing.rb +198 -0
- data/lib/appydave/tools/vat/project_resolver.rb +132 -0
- data/lib/appydave/tools/vat/s3_operations.rb +560 -0
- data/lib/appydave/tools/version.rb +1 -1
- data/lib/appydave/tools.rb +11 -5
- data/package.json +1 -1
- metadata +85 -14
- data/docs/dam/overview.md +0 -28
- data/lib/mj-paste-test/main.rb +0 -35
- data/lib/mj-paste-test/prompts.txt +0 -18
- data/lib/mj-paste-test/readme-leonardo.md +0 -0
- /data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/_doc-clean.md +0 -0
- /data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/_doc-join.md +0 -0
- /data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/_doc-todo.md +0 -0
data/README.md
CHANGED
|
@@ -1,157 +1,466 @@
|
|
|
1
|
-
#
|
|
1
|
+
# AppyDave Tools
|
|
2
2
|
|
|
3
|
-
> AppyDave YouTube
|
|
3
|
+
> **AppyDave's YouTube productivity toolkit** - Command-line utilities that automate the boring stuff so you can focus on creating content.
|
|
4
|
+
|
|
5
|
+
## Why This Exists
|
|
6
|
+
|
|
7
|
+
As a YouTuber, I got tired of repetitive tasks eating into my creative time. So I built tools to handle them.
|
|
8
|
+
|
|
9
|
+
Instead of managing dozens of separate repositories, everything lives here - one codebase, easier maintenance, and each tool can be featured in its own video tutorial.
|
|
10
|
+
|
|
11
|
+
**Quick wins:**
|
|
12
|
+
- 🤖 Feed entire codebases to AI assistants in seconds
|
|
13
|
+
- 📹 Batch update YouTube video metadata without clicking through the UI (update 50 videos in 5 minutes)
|
|
14
|
+
- 📝 Process subtitle files - clean formatting, merge multi-part recordings, synchronize timelines
|
|
15
|
+
- 🎬 Manage video projects across local/S3/SSD storage with smart sync (collaborate on 50GB+ projects)
|
|
16
|
+
- 🖼️ Organize downloaded images into project folders automatically (video asset workflow)
|
|
17
|
+
- ⚙️ Manage multi-channel configurations from the command line (team-shareable JSON configs)
|
|
4
18
|
|
|
5
19
|
## Installation
|
|
6
20
|
|
|
7
|
-
|
|
21
|
+
```bash
|
|
22
|
+
gem install appydave-tools
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Or add to your Gemfile:
|
|
8
26
|
|
|
9
27
|
```ruby
|
|
10
28
|
gem 'appydave-tools'
|
|
11
29
|
```
|
|
12
30
|
|
|
13
|
-
|
|
31
|
+
## Quick Start: Configuration
|
|
32
|
+
|
|
33
|
+
Most tools work out of the box, but some features (VAT, YouTube Manager, OpenAI tools) require configuration.
|
|
34
|
+
|
|
35
|
+
### First-Time Setup
|
|
36
|
+
|
|
37
|
+
**1. Create configuration files:**
|
|
14
38
|
|
|
15
39
|
```bash
|
|
16
|
-
|
|
40
|
+
ad_config -c
|
|
17
41
|
```
|
|
18
42
|
|
|
19
|
-
|
|
43
|
+
This creates empty configuration files at `~/.config/appydave/`:
|
|
44
|
+
- `settings.json` - Paths and preferences
|
|
45
|
+
- `channels.json` - YouTube channel definitions
|
|
46
|
+
- `youtube-automation.json` - Automation workflows
|
|
47
|
+
|
|
48
|
+
**2. Option A: Copy example files**
|
|
20
49
|
|
|
21
50
|
```bash
|
|
22
|
-
|
|
51
|
+
# Copy examples to your config directory
|
|
52
|
+
cp docs/configuration/settings.example.json ~/.config/appydave/settings.json
|
|
53
|
+
cp docs/configuration/channels.example.json ~/.config/appydave/channels.json
|
|
54
|
+
|
|
55
|
+
# Copy .env to project root (for API keys)
|
|
56
|
+
cp docs/configuration/.env.example .env
|
|
23
57
|
```
|
|
24
58
|
|
|
25
|
-
|
|
59
|
+
Then edit each file and replace placeholders with your actual values.
|
|
26
60
|
|
|
27
|
-
|
|
61
|
+
**2. Option B: Edit directly in VS Code**
|
|
28
62
|
|
|
29
|
-
|
|
63
|
+
```bash
|
|
64
|
+
ad_config -e
|
|
65
|
+
```
|
|
30
66
|
|
|
31
|
-
|
|
67
|
+
Opens `~/.config/appydave/` for editing.
|
|
32
68
|
|
|
69
|
+
**3. Add your values**
|
|
33
70
|
|
|
34
|
-
|
|
71
|
+
Update the configuration files with your specific paths and settings.
|
|
35
72
|
|
|
36
|
-
|
|
73
|
+
**Required for VAT (Video Asset Tools):**
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"video-projects-root": "/path/to/your/video-projects"
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Required for OpenAI tools:**
|
|
81
|
+
```bash
|
|
82
|
+
OPENAI_ACCESS_TOKEN=sk-your-actual-api-key
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Full configuration guide:** [docs/configuration/README.md](./docs/configuration/README.md)
|
|
86
|
+
|
|
87
|
+
## The Tools
|
|
37
88
|
|
|
38
|
-
|
|
89
|
+
### 🤖 GPT Context Gatherer
|
|
39
90
|
|
|
40
|
-
|
|
41
|
-
|
|
91
|
+
**The problem:** AI assistants need context about your code, but copying files is tedious.
|
|
92
|
+
|
|
93
|
+
**The solution:** Automatically collect and format project files for AI context.
|
|
42
94
|
|
|
43
95
|
```bash
|
|
44
|
-
#
|
|
45
|
-
gpt_context -i '**/*.rb' -e 'spec/**/*' -d
|
|
96
|
+
# Gather all Ruby files, skip tests, save to clipboard
|
|
97
|
+
gpt_context -i '**/*.rb' -e 'spec/**/*' -d
|
|
98
|
+
|
|
99
|
+
# Get project structure as a tree
|
|
100
|
+
gpt_context -i '**/*' -f tree -d
|
|
101
|
+
|
|
102
|
+
# Multiple file types with custom output
|
|
103
|
+
gpt_context -i 'apps/**/*.ts' -i 'apps/**/*.tsx' -e '**/node_modules/**/*' -o context.txt
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Use cases:** Working with ChatGPT, Claude, or any AI assistant on your codebase.
|
|
107
|
+
|
|
108
|
+
[Full documentation →](./docs/usage/gpt-context.md)
|
|
109
|
+
|
|
110
|
+
---
|
|
46
111
|
|
|
47
|
-
|
|
48
|
-
gpt_context -i 'lib/**/*.rb' -i 'bin/**/*.rb' -f tree,content -d
|
|
112
|
+
### 📹 YouTube Manager
|
|
49
113
|
|
|
50
|
-
|
|
51
|
-
gpt_context -i 'apps/**/*.ts' -i 'apps/**/*.tsx' -e '**/node_modules/**/*' -e '**/_generated/**/*' -d -f tree -o typescript-files.txt
|
|
114
|
+
**The problem:** Updating video metadata through YouTube Studio is slow and repetitive, especially for bulk operations.
|
|
52
115
|
|
|
53
|
-
|
|
54
|
-
|
|
116
|
+
**The solution:** Manage YouTube video metadata via API from your terminal - CRUD operations on videos.
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Get video details (title, description, tags, category, captions)
|
|
120
|
+
youtube_manager get --video-id YOUR_VIDEO_ID
|
|
121
|
+
|
|
122
|
+
# Update title and description
|
|
123
|
+
youtube_manager update --video-id YOUR_VIDEO_ID \
|
|
124
|
+
--title "New Title" \
|
|
125
|
+
--description "Updated description"
|
|
126
|
+
|
|
127
|
+
# Update tags (replaces existing tags)
|
|
128
|
+
youtube_manager update --video-id YOUR_VIDEO_ID --tags "tutorial,productivity,automation"
|
|
129
|
+
|
|
130
|
+
# Update category
|
|
131
|
+
youtube_manager update --video-id YOUR_VIDEO_ID --category-id 28
|
|
55
132
|
```
|
|
56
133
|
|
|
57
|
-
|
|
134
|
+
**Specific use cases:**
|
|
135
|
+
- **Post-rebrand updates**: Changed channel name? Update 50 video descriptions in minutes
|
|
136
|
+
- **Tag standardization**: Ensure consistent tagging across your entire catalog
|
|
137
|
+
- **Metadata retrieval**: Export video details for analysis or backup
|
|
138
|
+
- **Batch corrections**: Fix typos in titles across multiple videos
|
|
139
|
+
- **Category changes**: Recategorize videos when YouTube updates categories
|
|
140
|
+
- **Series updates**: Add series links to descriptions across episode batches
|
|
141
|
+
|
|
142
|
+
**What it does:**
|
|
143
|
+
- **Get**: Retrieves complete video metadata including captions
|
|
144
|
+
- **Update**: Modifies title, description, tags, or category via YouTube Data API v3
|
|
145
|
+
- **Authorization**: Handles OAuth2 flow with local callback server
|
|
146
|
+
- **Reporting**: Generates detailed reports of video metadata
|
|
147
|
+
|
|
148
|
+
**Why use this vs YouTube Studio:**
|
|
149
|
+
- **Speed**: Update 20 videos in 5 minutes vs 30+ minutes clicking through UI
|
|
150
|
+
- **Scriptable**: Integrate into automation workflows
|
|
151
|
+
- **Bulk operations**: Loop through video IDs from a CSV
|
|
152
|
+
- **Version control**: Track metadata changes in Git
|
|
153
|
+
- **Backup**: Export all video metadata as JSON
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
### 📝 Subtitle Processor
|
|
158
|
+
|
|
159
|
+
**The problem:** Raw subtitle files need cleanup, and multi-part recordings need merged subtitles.
|
|
160
|
+
|
|
161
|
+
**The solution:** Process and transform SRT files - clean formatting, merge duplicates, synchronize timelines.
|
|
58
162
|
|
|
59
|
-
#### YouTube Manager
|
|
60
163
|
```bash
|
|
61
|
-
#
|
|
62
|
-
|
|
164
|
+
# Clean auto-generated subtitles (removes HTML tags, merges duplicates, normalizes spacing)
|
|
165
|
+
subtitle_processor clean -f input.srt -o cleaned.srt
|
|
166
|
+
|
|
167
|
+
# Merge multiple subtitle files with timeline synchronization
|
|
168
|
+
subtitle_processor join -d ./parts -f "*.srt" -o final.srt
|
|
63
169
|
|
|
64
|
-
#
|
|
65
|
-
|
|
170
|
+
# Custom time buffer between merged sections (in milliseconds)
|
|
171
|
+
subtitle_processor join -f "part1.srt,part2.srt" -b 200 -o merged.srt
|
|
66
172
|
```
|
|
67
173
|
|
|
68
|
-
|
|
174
|
+
**What it does:**
|
|
175
|
+
- **Clean**: Removes `<u>` tags, merges duplicate entries, normalizes line breaks and spacing
|
|
176
|
+
- **Join**: Parses multiple SRT files, adjusts timestamps with buffers, merges into single timeline
|
|
177
|
+
|
|
178
|
+
**Use cases:** Cleaning messy YouTube auto-captions, merging FliVideo multi-part recording subtitles.
|
|
179
|
+
|
|
180
|
+
**Note:** CLI command is `subtitle_processor` (renamed from `subtitle_manager` for accuracy - this tool *processes* files, not manages state).
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
### 🎬 VAT (Video Asset Tools)
|
|
185
|
+
|
|
186
|
+
**The problem:** Managing large video files across local storage, cloud collaboration (S3), and archival storage (SSD) is complex and error-prone.
|
|
187
|
+
|
|
188
|
+
**The solution:** Unified CLI for multi-tenant video project management with smart sync, pattern matching, and workflow automation.
|
|
189
|
+
|
|
69
190
|
```bash
|
|
70
|
-
#
|
|
71
|
-
|
|
191
|
+
# List all brands
|
|
192
|
+
vat list
|
|
193
|
+
|
|
194
|
+
# List projects for AppyDave brand
|
|
195
|
+
vat list appydave
|
|
196
|
+
|
|
197
|
+
# Upload files to S3 for collaboration
|
|
198
|
+
vat s3-up appydave b65
|
|
199
|
+
|
|
200
|
+
# Download collaborator's edits from S3
|
|
201
|
+
vat s3-down appydave b65
|
|
202
|
+
|
|
203
|
+
# Check sync status
|
|
204
|
+
vat s3-status appydave b65
|
|
72
205
|
|
|
73
|
-
#
|
|
74
|
-
|
|
206
|
+
# Clean up S3 after project completion
|
|
207
|
+
vat s3-cleanup appydave b65 --force
|
|
75
208
|
```
|
|
76
209
|
|
|
77
|
-
|
|
210
|
+
**Configuration required:** Add `video-projects-root` to `settings.json` (see [Quick Start](#quick-start-configuration) above).
|
|
211
|
+
|
|
212
|
+
**Key Features:**
|
|
213
|
+
- **Multi-tenant**: Manages 6 brands (appydave, voz, aitldr, kiros, joy, ss)
|
|
214
|
+
- **Smart sync**: MD5-based file comparison (skip unchanged files)
|
|
215
|
+
- **Pattern matching**: `vat list appydave 'b6*'` (lists b60-b69)
|
|
216
|
+
- **Short names**: `b65` → `b65-guy-monroe-marketing-plan` (FliVideo workflow)
|
|
217
|
+
- **Auto-detection**: Run commands from project directory without args
|
|
218
|
+
- **Hybrid storage**: Local → S3 (collaboration) → SSD (archive)
|
|
219
|
+
|
|
220
|
+
**Workflows:**
|
|
221
|
+
- **FliVideo** (AppyDave): Sequential chapter-based recording with short name support
|
|
222
|
+
- **Storyline** (VOZ, AITLDR): Script-first narrative content with full project names
|
|
223
|
+
|
|
224
|
+
**Use cases:**
|
|
225
|
+
- Collaborate on video edits with team members via S3
|
|
226
|
+
- Archive completed projects to external SSD
|
|
227
|
+
- Manage video assets across multiple brands/clients
|
|
228
|
+
- Quick project discovery with pattern matching
|
|
229
|
+
|
|
230
|
+
[Full documentation →](./docs/usage/vat.md)
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
### 🎯 Prompt Tools *(Experimental - Not actively used)*
|
|
235
|
+
|
|
236
|
+
**The problem:** Running OpenAI prompts with placeholder substitution and output management.
|
|
237
|
+
|
|
238
|
+
**The solution:** Execute OpenAI completion API calls with template support.
|
|
239
|
+
|
|
78
240
|
```bash
|
|
79
|
-
# Run
|
|
80
|
-
|
|
241
|
+
# Run prompt from text
|
|
242
|
+
prompt_tools completion -p "Your prompt here" -o output.txt
|
|
243
|
+
|
|
244
|
+
# Run prompt from file with placeholders
|
|
245
|
+
prompt_tools completion -f prompt_template.md -k topic=Ruby,style=tutorial -c
|
|
246
|
+
|
|
247
|
+
# Options:
|
|
248
|
+
# -p, --prompt Inline prompt text
|
|
249
|
+
# -f, --file Prompt template file
|
|
250
|
+
# -k, --placeholders Key-value pairs for {placeholder} substitution
|
|
251
|
+
# -o, --output Save to file
|
|
252
|
+
# -c, --clipboard Copy to clipboard
|
|
253
|
+
# -m, --model OpenAI model to use
|
|
81
254
|
```
|
|
82
255
|
|
|
256
|
+
**What it does:**
|
|
257
|
+
- Sends prompts to OpenAI Completion API (older GPT-3 models)
|
|
258
|
+
- Supports template files with `{placeholder}` substitution
|
|
259
|
+
- Outputs to file, clipboard, or stdout
|
|
83
260
|
|
|
84
|
-
|
|
261
|
+
**Current status:** ⚠️ **Not in active use** - Uses deprecated OpenAI Completion API (`davinci-codex`). Modern alternative: Use ChatGPT or Claude directly, or migrate to Chat API.
|
|
262
|
+
|
|
263
|
+
**Potential use cases:** Template-based content generation, automated prompt workflows (if migrated to Chat API).
|
|
85
264
|
|
|
86
|
-
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
### ⚡ YouTube Automation *(Internal/Experimental)*
|
|
268
|
+
|
|
269
|
+
**The problem:** Video content creation workflows involve multiple steps: research → scripting → production.
|
|
270
|
+
|
|
271
|
+
**The solution:** Run predefined prompt sequences against OpenAI API to automate research and content generation steps.
|
|
87
272
|
|
|
88
273
|
```bash
|
|
89
|
-
|
|
274
|
+
# Run automation sequence (requires configuration)
|
|
275
|
+
youtube_automation -s 01-1
|
|
276
|
+
|
|
277
|
+
# With debug output
|
|
278
|
+
youtube_automation -s 01-1 -d
|
|
90
279
|
```
|
|
91
280
|
|
|
92
|
-
|
|
281
|
+
**What it does:**
|
|
282
|
+
- Loads sequence configuration from `~/.config/appydave/youtube_automation.json`
|
|
283
|
+
- Reads prompt templates from Dropbox (`_common/raw_prompts/`)
|
|
284
|
+
- Executes OpenAI API calls for each sequence step
|
|
285
|
+
- Saves responses to output files
|
|
286
|
+
|
|
287
|
+
**Configuration required:**
|
|
288
|
+
- Sequence definitions in `youtube_automation.json`
|
|
289
|
+
- Prompt template files in configured Dropbox path
|
|
290
|
+
- `OPENAI_ACCESS_TOKEN` environment variable
|
|
291
|
+
|
|
292
|
+
**Current status:** ⚠️ **Internal tool** - Hardcoded Dropbox paths, uses deprecated Completion API, not documented for external use.
|
|
293
|
+
|
|
294
|
+
**Relationship to other tools:** This is separate from **Move Images** tool (which organizes downloaded images into video project asset folders).
|
|
295
|
+
|
|
296
|
+
**Use cases:** Automated content research, script outline generation, multi-step prompt workflows.
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
### ⚙️ Configuration Manager
|
|
93
301
|
|
|
94
|
-
|
|
302
|
+
**The problem:** Managing settings for multiple YouTube channels, project paths, and automation sequences gets messy.
|
|
303
|
+
|
|
304
|
+
**The solution:** Centralized JSON-based configuration stored in `~/.config/appydave/`.
|
|
95
305
|
|
|
96
306
|
```bash
|
|
97
|
-
|
|
307
|
+
# List all configurations
|
|
308
|
+
ad_config -l
|
|
309
|
+
|
|
310
|
+
# Create missing config files (safe - won't overwrite existing files)
|
|
311
|
+
ad_config -c
|
|
312
|
+
|
|
313
|
+
# Edit configurations in VS Code
|
|
314
|
+
ad_config -e
|
|
315
|
+
|
|
316
|
+
# View specific configuration values
|
|
317
|
+
ad_config -p settings,channels
|
|
318
|
+
|
|
319
|
+
# View all configurations
|
|
320
|
+
ad_config -p
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**What it manages:**
|
|
324
|
+
|
|
325
|
+
| File | Purpose | Safe to Version Control? |
|
|
326
|
+
|------|---------|-------------------------|
|
|
327
|
+
| `settings.json` | Paths and preferences (video-projects-root, download folders, etc.) | ✅ Yes (after removing personal paths) |
|
|
328
|
+
| `channels.json` | YouTube channel definitions (code, name, youtube_handle, locations) | ✅ Yes (share structure, customize paths locally) |
|
|
329
|
+
| `youtube_automation.json` | Automation workflow configurations | ✅ Yes (if no sensitive data) |
|
|
330
|
+
| `.env` | **Secrets and API keys** | ❌ **NEVER** (gitignored) |
|
|
331
|
+
|
|
332
|
+
**Key Settings:**
|
|
333
|
+
|
|
334
|
+
- **video-projects-root** - Root directory for all video projects (required for VAT)
|
|
335
|
+
- **ecamm-recording-folder** - Where Ecamm Live saves recordings
|
|
336
|
+
- **download-folder** - General downloads directory
|
|
337
|
+
- **download-image-folder** - Image downloads (defaults to download-folder)
|
|
338
|
+
|
|
339
|
+
**Channel Configuration:**
|
|
340
|
+
|
|
341
|
+
Each channel defines:
|
|
342
|
+
- **code** - Short code for project naming (e.g., "ad" for AppyDave)
|
|
343
|
+
- **name** - Display name
|
|
344
|
+
- **youtube_handle** - YouTube @ handle
|
|
345
|
+
- **locations** - Four project location types:
|
|
346
|
+
- `content_projects` - Content planning/scripts
|
|
347
|
+
- `video_projects` - Active video projects (**required**)
|
|
348
|
+
- `published_projects` - Published video archives
|
|
349
|
+
- `abandoned_projects` - Abandoned projects
|
|
350
|
+
|
|
351
|
+
Use `"NOT-SET"` as a placeholder for unconfigured locations.
|
|
352
|
+
|
|
353
|
+
**Use cases:**
|
|
354
|
+
- **Multi-channel management**: Switch between different YouTube channels
|
|
355
|
+
- **Team collaboration**: Share configuration structure via Git (each developer customizes paths)
|
|
356
|
+
- **Workflow standardization**: Consistent channel codes/names across team
|
|
357
|
+
- **Automation setup**: Define reusable prompt sequences
|
|
98
358
|
|
|
99
|
-
|
|
100
|
-
|
|
359
|
+
**Safety Features:**
|
|
360
|
+
- **Automatic backups**: Every config save creates timestamped backup (`.backup.YYYYMMDD-HHMMSS`)
|
|
361
|
+
- **Safe creation**: `ad_config -c` only creates missing files, never overwrites existing ones
|
|
362
|
+
- **Secrets separation**: API keys stored in `.env` files (gitignored), not in configs
|
|
101
363
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
364
|
+
**Full configuration guide:** [docs/configuration/README.md](./docs/configuration/README.md)
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
### 🖼️ Move Images *(Development tool)*
|
|
369
|
+
|
|
370
|
+
**The problem:** Downloaded images need organizing with proper naming.
|
|
371
|
+
|
|
372
|
+
**The solution:** Batch move and rename to project folders.
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
# Organize intro images for video project
|
|
376
|
+
bin/move_images.rb -f b40 intro b40
|
|
377
|
+
# Result: b40-intro-1.jpg, b40-intro-2.jpg in assets/intro/
|
|
105
378
|
```
|
|
106
379
|
|
|
107
|
-
|
|
380
|
+
**Use cases:** B-roll organization, thumbnail preparation.
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## Philosophy
|
|
108
385
|
|
|
109
|
-
|
|
386
|
+
**One codebase, multiple tools.** Easier to maintain than dozens of repos.
|
|
387
|
+
|
|
388
|
+
**Single-purpose utilities.** Each tool does one thing well.
|
|
389
|
+
|
|
390
|
+
**YouTube workflow focus.** Built for content creators who code.
|
|
391
|
+
|
|
392
|
+
**Language-agnostic.** Currently Ruby, but could be rewritten if needed.
|
|
393
|
+
|
|
394
|
+
[Read the full philosophy →](./docs/purpose-and-philosophy.md)
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## Development
|
|
110
399
|
|
|
111
400
|
```bash
|
|
112
|
-
|
|
113
|
-
|
|
401
|
+
# Clone the repo
|
|
402
|
+
git clone https://github.com/appydave/appydave-tools
|
|
403
|
+
|
|
404
|
+
# Setup
|
|
405
|
+
bin/setup
|
|
406
|
+
|
|
407
|
+
# Run tests
|
|
408
|
+
rake spec
|
|
409
|
+
|
|
410
|
+
# Auto-run tests on file changes
|
|
411
|
+
guard
|
|
412
|
+
|
|
413
|
+
# Interactive console
|
|
414
|
+
bin/console
|
|
114
415
|
```
|
|
115
416
|
|
|
116
|
-
|
|
417
|
+
### Semantic Versioning
|
|
117
418
|
|
|
118
|
-
|
|
419
|
+
This project uses **automated versioning** via semantic-release. Don't manually edit version files.
|
|
119
420
|
|
|
421
|
+
**Commit message format:**
|
|
120
422
|
```bash
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
echo 'git pull'
|
|
128
|
-
git pull
|
|
129
|
-
echo 'git push'
|
|
130
|
-
git push
|
|
131
|
-
sleep 3
|
|
132
|
-
run_id="$(gh run list --limit 1 | grep -Eo "[0-9]{9,11}")"
|
|
133
|
-
gh run watch $run_id --exit-status && echo "run completed and successful" && git pull && git tag | sort -V | tail -1
|
|
134
|
-
}
|
|
135
|
-
function kchore () { kcommit "chore: $1" }
|
|
136
|
-
function kdocs () { kcommit "docs: $1" }
|
|
137
|
-
function kfix () { kcommit "fix: $1" }
|
|
138
|
-
function kfeat () { kcommit "feat: $1" }
|
|
139
|
-
function ktest () { kcommit "test: $1" }
|
|
140
|
-
function krefactor () { kcommit "refactor: $1" }
|
|
423
|
+
feat: add new feature # Minor version bump
|
|
424
|
+
fix: bug fix # Patch version bump
|
|
425
|
+
chore: maintenance # No version bump
|
|
426
|
+
|
|
427
|
+
# Breaking changes
|
|
428
|
+
feat!: breaking change
|
|
141
429
|
```
|
|
142
430
|
|
|
431
|
+
CI/CD automatically handles versioning, changelog, and RubyGems publishing.
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
143
435
|
## Contributing
|
|
144
436
|
|
|
145
|
-
|
|
437
|
+
**Welcome:**
|
|
438
|
+
- 🐛 Bug fixes
|
|
439
|
+
- 📝 Documentation improvements
|
|
440
|
+
- ⚡ Performance enhancements
|
|
441
|
+
- 🎯 New single-purpose tools that fit the workflow
|
|
442
|
+
|
|
443
|
+
**Not looking for:**
|
|
444
|
+
- ❌ Framework-style architectures
|
|
445
|
+
- ❌ Tools that create dependencies between utilities
|
|
446
|
+
- ❌ Enterprise complexity
|
|
447
|
+
|
|
448
|
+
[Code of Conduct →](./CODE_OF_CONDUCT.md)
|
|
449
|
+
|
|
450
|
+
---
|
|
146
451
|
|
|
147
452
|
## License
|
|
148
453
|
|
|
149
|
-
|
|
454
|
+
MIT License - Copyright (c) David Cruwys
|
|
455
|
+
|
|
456
|
+
See [LICENSE.txt](LICENSE.txt) for details.
|
|
150
457
|
|
|
151
|
-
|
|
458
|
+
---
|
|
152
459
|
|
|
153
|
-
|
|
460
|
+
## Connect
|
|
154
461
|
|
|
155
|
-
|
|
462
|
+
- 🌐 Website: [appydave.com](http://appydave.com)
|
|
463
|
+
- 📺 YouTube: [@AppyDave](https://youtube.com/@appydave)
|
|
464
|
+
- 🐙 GitHub: [appydave](https://github.com/appydave)
|
|
156
465
|
|
|
157
|
-
|
|
466
|
+
Built with ☕ by [David Cruwys](https://davidcruwys.com)
|