appydave-tools 0.16.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 +12 -0
- data/CLAUDE.md +206 -51
- data/README.md +144 -11
- data/bin/archive_project.rb +249 -0
- data/bin/configuration.rb +21 -1
- data/bin/generate_manifest.rb +357 -0
- data/bin/sync_from_ssd.rb +236 -0
- data/bin/vat +623 -0
- data/docs/README.md +169 -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/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/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 +9 -1
- data/package.json +1 -1
- metadata +57 -3
- data/docs/dam/overview.md +0 -28
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '0819e2db66666e4729144ba1a8dac0032a5b323f4475f9cdc84459aa9309cd49'
|
|
4
|
+
data.tar.gz: ce1185ecbf19793175fa91f4a5c3e401df36394349ec454c7c47fa38e2193727
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d1c6e936fa7d41f160152cf3e037485c9c0e509377f81970df9295cb38bdcc33bfea489da5ab666baa87042d645d609f35048b96826241bc636097c192525015
|
|
7
|
+
data.tar.gz: b4accc9229eda2cd3777f6828e2a3b6988208033a1a5df55f5c487519321a76845cf908fac1056598231973c26d8a9866ab311307157b30dcac472534d42465f
|
data/.rubocop.yml
CHANGED
data/AGENTS.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Repository Guidelines
|
|
2
|
+
|
|
3
|
+
## Project Structure & Module Organization
|
|
4
|
+
Core Ruby code lives in `lib/appydave/tools/` with one folder per CLI (gpt_context, youtube_manager, subtitle_processor, etc.). Executables in `bin/` are for development helpers, while packaged entrypoints reside in `exe/`. Specs mirror the library layout under `spec/`, supported by sample data in `spec/samples/`. Shared docs and walkthroughs are collected under `docs/`. Temporary or generated artifacts (`coverage/`, `tmp/`, `transient/`) should stay out of commits.
|
|
5
|
+
|
|
6
|
+
## Build, Test, and Development Commands
|
|
7
|
+
`bin/setup` installs gem dependencies and any Node helpers declared in `package.json`. Run `bundle exec rake spec` (aliased as `rake spec`) for the full test suite, and keep `guard` running during feature work to auto-rerun specs. Use `bundle exec rubocop` to enforce lint rules, and `bin/console` for an interactive Pry session preloaded with the gem. CLI binaries can be invoked directly, e.g., `bin/gpt_context.rb -i '**/*.rb' -d`.
|
|
8
|
+
|
|
9
|
+
## Coding Style & Naming Conventions
|
|
10
|
+
The codebase targets Ruby 2.7 with two-space indentation and descriptive method names. Follow `.rubocop.yml`: 200-character line limit, relaxed metrics inside `spec/`, and RuboCop RSpec/Rake plugins enabled. Namespaces follow `AppyDave::Tools::<Feature>` inside `lib/`, and CLI filenames stay snake_case (`bin/move_images.rb`). Prefer keyword args, early returns, and guard clauses over deeply nested conditionals.
|
|
11
|
+
|
|
12
|
+
## Testing Guidelines
|
|
13
|
+
RSpec is the canonical framework. Name files `*_spec.rb` that mirror lib paths (e.g., `spec/gpt_context/collector_spec.rb`). Isolate behavior with `describe '#method'` blocks, keep helpers in `spec/support`, and favor `let`/`let!` over global state. Run focused tests via `bundle exec rspec spec/path/to/file_spec.rb` when iterating, then finish with `rake spec`. Add regression tests for every bug fix to keep CLI behavior stable.
|
|
14
|
+
|
|
15
|
+
## Commit & Pull Request Guidelines
|
|
16
|
+
Commits follow conventional commits consumed by semantic-release (`feat:`, `fix:`, `chore:`, `feat!:`, etc.). Scope messages to a single tool when possible (`fix(subtitle_processor): correct offset buffer`). Before opening a PR, ensure `rake spec` and `rubocop` pass, summarize the change, link issues or YouTube scripts, and include CLI output or screenshots if user-facing behavior shifts. Leave follow-up tasks in checklists so reviewers can track outstanding work.
|
|
17
|
+
|
|
18
|
+
## Agent Coordination
|
|
19
|
+
Claude is the primary automation agent; align with the collaboration notes in `CLAUDE.md` before introducing new flows or prompt templates. When scripting repeatable tasks (gpt_context runs, metadata syncs), document the expected Claude inputs/outputs so the agent can reproduce them. Flag breaking CLI changes in PR descriptions with a dedicated **Claude Impact** subsection to keep downstream automations in sync.
|
|
20
|
+
|
|
21
|
+
## Security & Configuration Tips
|
|
22
|
+
Keep API keys and OAuth secrets in `.env` or `~/.config/appydave/` (managed via `ad_config`). Never commit those files; `.gitignore` already excludes them. Validate YouTube API changes against a test channel before touching production content, and rotate credentials when machines change owners.
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# [0.16.0](https://github.com/appydave/appydave-tools/compare/v0.15.0...v0.16.0) (2025-11-08)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* fix cops ([6c1d59b](https://github.com/appydave/appydave-tools/commit/6c1d59bd870af519825556f7304d6ca1677d8649))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* update documentation and general purpose rename and fixes via claude ([027c3df](https://github.com/appydave/appydave-tools/commit/027c3dff11e572359e6f2d1ebc17010dc3b8d7ee))
|
|
12
|
+
|
|
1
13
|
# [0.15.0](https://github.com/appydave/appydave-tools/compare/v0.14.1...v0.15.0) (2025-11-08)
|
|
2
14
|
|
|
3
15
|
|
data/CLAUDE.md
CHANGED
|
@@ -60,6 +60,7 @@ bin/console # Interactive Ruby console for experimentation
|
|
|
60
60
|
| **GPT Context** | `gpt_context` | Collect project files for AI context | ⭐ PRIMARY |
|
|
61
61
|
| **YouTube Manager** | `youtube_manager` | CRUD operations on YouTube video metadata | ✅ ACTIVE |
|
|
62
62
|
| **Subtitle Processor** | `subtitle_processor` | Transform SRT files (clean/merge) | ✅ ACTIVE |
|
|
63
|
+
| **VAT (Video Asset Tools)** | `vat` | Multi-tenant video project storage orchestration | ✅ ACTIVE |
|
|
63
64
|
| **Configuration** | `ad_config` | Manage JSON configs (channels, paths, sequences) | ✅ ACTIVE |
|
|
64
65
|
| **Move Images** | N/A (dev only) | Organize video asset images | ✅ ACTIVE |
|
|
65
66
|
| **Prompt Tools** | `prompt_tools` | OpenAI Completion API wrapper | ⚠️ DEPRECATED API |
|
|
@@ -142,7 +143,73 @@ bin/subtitle_processor.rb join -d ./subs -f "*.srt" -s inferred -b 200 -o output
|
|
|
142
143
|
|
|
143
144
|
**Note:** Renamed from `subtitle_manager` to `subtitle_processor` (accurate - processes files, doesn't manage state)
|
|
144
145
|
|
|
145
|
-
#### 4.
|
|
146
|
+
#### 4. VAT - Video Asset Tools (`bin/vat`)
|
|
147
|
+
Multi-tenant video project storage orchestration:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# List all brands
|
|
151
|
+
vat list
|
|
152
|
+
|
|
153
|
+
# List projects for a brand
|
|
154
|
+
vat list appydave
|
|
155
|
+
vat list appydave 'b6*' # Pattern matching
|
|
156
|
+
|
|
157
|
+
# Upload to S3 (collaboration)
|
|
158
|
+
vat s3-up appydave b65
|
|
159
|
+
vat s3-up voz boy-baker --dry-run
|
|
160
|
+
|
|
161
|
+
# Download from S3
|
|
162
|
+
vat s3-down appydave b65
|
|
163
|
+
vat s3-down --dry-run # Auto-detect from PWD
|
|
164
|
+
|
|
165
|
+
# Check sync status
|
|
166
|
+
vat s3-status appydave b65
|
|
167
|
+
|
|
168
|
+
# Clean up S3
|
|
169
|
+
vat s3-cleanup appydave b65 --force
|
|
170
|
+
|
|
171
|
+
# Archive to SSD
|
|
172
|
+
vat archive appydave b63
|
|
173
|
+
|
|
174
|
+
# Sync from SSD
|
|
175
|
+
vat sync-ssd appydave
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Core Features:**
|
|
179
|
+
- **Multi-tenant**: Manages 6 brands (appydave, voz, aitldr, kiros, joy, ss)
|
|
180
|
+
- **Smart sync**: MD5-based file comparison (skips unchanged files)
|
|
181
|
+
- **Pattern matching**: `'b6*'` expands to b60-b69 projects
|
|
182
|
+
- **Short names**: `b65` → `b65-guy-monroe-marketing-plan` (FliVideo pattern)
|
|
183
|
+
- **Auto-detection**: Detects brand/project from current directory
|
|
184
|
+
- **Hybrid storage**: Local → S3 (90-day collaboration) → SSD (archive)
|
|
185
|
+
|
|
186
|
+
**Brand Shortcuts:**
|
|
187
|
+
- `appydave` → `v-appydave`
|
|
188
|
+
- `voz` → `v-voz`
|
|
189
|
+
- `aitldr` → `v-aitldr`
|
|
190
|
+
- `kiros` → `v-kiros`
|
|
191
|
+
- `joy` → `v-beauty-and-joy`
|
|
192
|
+
- `ss` → `v-supportsignal`
|
|
193
|
+
|
|
194
|
+
**Workflows:**
|
|
195
|
+
- **FliVideo** (AppyDave): Sequential chapter recording, short name support (`b65`)
|
|
196
|
+
- **Storyline** (VOZ, AITLDR): Script-first content, full project names (`boy-baker`)
|
|
197
|
+
|
|
198
|
+
**Use cases:**
|
|
199
|
+
- Collaborate on video edits with team (upload → edit → download)
|
|
200
|
+
- Archive completed projects to external SSD
|
|
201
|
+
- Quick project discovery across multiple brands
|
|
202
|
+
- Manage 50GB+ video files with smart sync
|
|
203
|
+
|
|
204
|
+
**Configuration:**
|
|
205
|
+
- System: `video-projects-root` in `~/.config/appydave/settings.json` (**required**)
|
|
206
|
+
- Per-brand: `.video-tools.env` (AWS credentials, S3 bucket, SSD path)
|
|
207
|
+
|
|
208
|
+
**Migration note:** The old `~/.vat-config` file is deprecated. VAT now uses `settings.json`. See [Configuration Management](#configuration-management) section below.
|
|
209
|
+
|
|
210
|
+
See detailed usage guide: [docs/usage/vat.md](./docs/usage/vat.md)
|
|
211
|
+
|
|
212
|
+
#### 5. Prompt Tools (`bin/prompt_tools.rb`) ⚠️ DEPRECATED API
|
|
146
213
|
OpenAI Completion API wrapper with template support:
|
|
147
214
|
|
|
148
215
|
```bash
|
|
@@ -266,10 +333,12 @@ Bank transaction reconciliation tool - **DEPRECATED, DO NOT USE**
|
|
|
266
333
|
```bash
|
|
267
334
|
rake spec # Run all RSpec tests
|
|
268
335
|
rake # Default task: compile, spec (clobber compile spec)
|
|
269
|
-
guard
|
|
336
|
+
RUBYOPT="-W0" guard # Watch files and auto-run tests + rubocop (suppress Ruby 3.4 warnings)
|
|
270
337
|
bundle exec rspec -f doc # Run tests with detailed documentation format
|
|
271
338
|
```
|
|
272
339
|
|
|
340
|
+
**Note:** Ruby 3.4.2 shows platform constant warnings from Bundler. Use `RUBYOPT="-W0"` to suppress them.
|
|
341
|
+
|
|
273
342
|
### Linting & Style
|
|
274
343
|
```bash
|
|
275
344
|
rubocop # Run RubyGem style checks
|
|
@@ -365,94 +434,180 @@ gem build # Build gemspec into .gem file
|
|
|
365
434
|
## Configuration Management
|
|
366
435
|
|
|
367
436
|
### Configuration Overview
|
|
368
|
-
The gem uses JSON configuration files for managing YouTube channels,
|
|
437
|
+
The gem uses JSON configuration files for managing YouTube channels, settings, and automation workflows. All configuration files are stored in `~/.config/appydave/`.
|
|
369
438
|
|
|
370
|
-
**Configuration Tool:** `bin/configuration.rb`
|
|
439
|
+
**Configuration Tool:** `bin/configuration.rb` (installed as `ad_config`)
|
|
371
440
|
|
|
372
|
-
|
|
441
|
+
**Complete configuration guide:** [docs/configuration/README.md](./docs/configuration/README.md)
|
|
373
442
|
|
|
374
|
-
|
|
375
|
-
```bash
|
|
376
|
-
bin/configuration.rb -l
|
|
377
|
-
```
|
|
443
|
+
### Quick Start
|
|
378
444
|
|
|
379
|
-
|
|
445
|
+
**First-time setup:**
|
|
380
446
|
```bash
|
|
447
|
+
# Create empty configuration files (safe - won't overwrite existing files)
|
|
381
448
|
bin/configuration.rb -c
|
|
449
|
+
|
|
450
|
+
# Copy example files
|
|
451
|
+
cp docs/configuration/settings.example.json ~/.config/appydave/settings.json
|
|
452
|
+
cp docs/configuration/channels.example.json ~/.config/appydave/channels.json
|
|
453
|
+
cp docs/configuration/.env.example .env
|
|
454
|
+
|
|
455
|
+
# Edit your values
|
|
456
|
+
bin/configuration.rb -e
|
|
382
457
|
```
|
|
383
458
|
|
|
384
|
-
|
|
459
|
+
### Configuration Commands
|
|
460
|
+
|
|
385
461
|
```bash
|
|
462
|
+
# List all configurations
|
|
463
|
+
bin/configuration.rb -l
|
|
464
|
+
|
|
465
|
+
# Create missing configuration files (safe - won't overwrite)
|
|
466
|
+
bin/configuration.rb -c
|
|
467
|
+
|
|
468
|
+
# View configuration values
|
|
386
469
|
bin/configuration.rb -p settings,channels,youtube_automation
|
|
387
|
-
```
|
|
388
470
|
|
|
389
|
-
|
|
390
|
-
```bash
|
|
471
|
+
# Edit configurations in VS Code
|
|
391
472
|
bin/configuration.rb -e
|
|
392
473
|
```
|
|
393
474
|
|
|
394
475
|
### Configuration Types
|
|
395
476
|
|
|
396
|
-
#### 1. Settings Config
|
|
397
|
-
General application settings and paths.
|
|
477
|
+
#### 1. Settings Config (`~/.config/appydave/settings.json`)
|
|
478
|
+
General application settings and paths (non-secret configuration).
|
|
398
479
|
|
|
399
|
-
**
|
|
480
|
+
**Structure:**
|
|
400
481
|
```json
|
|
401
482
|
{
|
|
402
|
-
"
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
"abandoned": "/path/to/abandoned"
|
|
407
|
-
}
|
|
483
|
+
"video-projects-root": "/Users/yourname/dev/video-projects",
|
|
484
|
+
"ecamm-recording-folder": "/Users/yourname/ecamm",
|
|
485
|
+
"download-folder": "/Users/yourname/Downloads",
|
|
486
|
+
"download-image-folder": "/Users/yourname/Downloads/images"
|
|
408
487
|
}
|
|
409
488
|
```
|
|
410
489
|
|
|
411
|
-
|
|
490
|
+
**Key Settings:**
|
|
491
|
+
|
|
492
|
+
| Key | Purpose | Used By | Required |
|
|
493
|
+
|-----|---------|---------|----------|
|
|
494
|
+
| `video-projects-root` | Root directory for all video projects | VAT commands | ✅ For VAT |
|
|
495
|
+
| `ecamm-recording-folder` | Where Ecamm Live saves recordings | Move Images | Optional |
|
|
496
|
+
| `download-folder` | General downloads directory | Move Images | Optional |
|
|
497
|
+
| `download-image-folder` | Image downloads (defaults to `download-folder`) | Move Images | Optional |
|
|
498
|
+
|
|
499
|
+
**Safe to:**
|
|
500
|
+
- ✅ Version control (after removing personal paths)
|
|
501
|
+
- ✅ Share with team (as template)
|
|
502
|
+
- ✅ Commit to git (as `.example` file)
|
|
503
|
+
|
|
504
|
+
#### 2. Channels Config (`~/.config/appydave/channels.json`)
|
|
412
505
|
YouTube channel definitions for multi-channel management.
|
|
413
506
|
|
|
414
|
-
**
|
|
507
|
+
**Structure:**
|
|
415
508
|
```json
|
|
416
509
|
{
|
|
417
|
-
"channels":
|
|
418
|
-
{
|
|
419
|
-
"code": "
|
|
420
|
-
"name": "
|
|
421
|
-
"youtube_handle": "@
|
|
510
|
+
"channels": {
|
|
511
|
+
"appydave": {
|
|
512
|
+
"code": "ad",
|
|
513
|
+
"name": "AppyDave",
|
|
514
|
+
"youtube_handle": "@appydave",
|
|
515
|
+
"locations": {
|
|
516
|
+
"content_projects": "/path/to/content",
|
|
517
|
+
"video_projects": "/Users/yourname/dev/video-projects/v-appydave",
|
|
518
|
+
"published_projects": "/path/to/published",
|
|
519
|
+
"abandoned_projects": "/path/to/abandoned"
|
|
520
|
+
}
|
|
422
521
|
}
|
|
423
|
-
|
|
522
|
+
}
|
|
424
523
|
}
|
|
425
524
|
```
|
|
426
525
|
|
|
427
|
-
|
|
428
|
-
Automation workflow configurations and sequences.
|
|
526
|
+
**Channel Properties:**
|
|
429
527
|
|
|
430
|
-
|
|
431
|
-
|
|
528
|
+
| Property | Description | Example |
|
|
529
|
+
|----------|-------------|---------|
|
|
530
|
+
| `key` | Internal identifier (object key) | `"appydave"` |
|
|
531
|
+
| `code` | Short code for project naming | `"ad"` |
|
|
532
|
+
| `name` | Display name | `"AppyDave"` |
|
|
533
|
+
| `youtube_handle` | YouTube @ handle | `"@appydave"` |
|
|
432
534
|
|
|
433
|
-
|
|
434
|
-
# .env file
|
|
435
|
-
OPENAI_API_KEY=your_api_key_here
|
|
436
|
-
```
|
|
535
|
+
**Location Properties:**
|
|
437
536
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
537
|
+
| Location | Purpose | Can Use "NOT-SET" |
|
|
538
|
+
|----------|---------|-------------------|
|
|
539
|
+
| `content_projects` | Content planning/scripts | ✅ Yes |
|
|
540
|
+
| `video_projects` | Active video projects | ❌ No (required) |
|
|
541
|
+
| `published_projects` | Published video archives | ✅ Yes |
|
|
542
|
+
| `abandoned_projects` | Abandoned projects | ✅ Yes |
|
|
442
543
|
|
|
443
|
-
|
|
444
|
-
|
|
544
|
+
Use `"NOT-SET"` as a placeholder for unconfigured locations.
|
|
545
|
+
|
|
546
|
+
**Safe to:**
|
|
547
|
+
- ✅ Version control structure (remove personal paths first)
|
|
548
|
+
- ⚠️ Each developer customizes paths locally
|
|
549
|
+
- ✅ Share channel definitions (codes, names, handles)
|
|
550
|
+
|
|
551
|
+
#### 3. YouTube Automation Config (`~/.config/appydave/youtube_automation.json`)
|
|
552
|
+
Automation workflow configurations and sequences (internal use).
|
|
553
|
+
|
|
554
|
+
#### 4. Environment Variables (`.env` file - project root)
|
|
555
|
+
**⚠️ CRITICAL: Secrets and API keys stored here, NEVER commit to version control!**
|
|
445
556
|
|
|
446
557
|
```bash
|
|
447
|
-
#
|
|
448
|
-
|
|
449
|
-
|
|
558
|
+
# OpenAI API Configuration (required for prompt_tools and youtube_automation)
|
|
559
|
+
# Get your API key from: https://platform.openai.com/api-keys
|
|
560
|
+
OPENAI_ACCESS_TOKEN=sk-your-actual-api-key-here
|
|
561
|
+
OPENAI_ORGANIZATION_ID=org-your-actual-org-id
|
|
450
562
|
|
|
451
|
-
#
|
|
452
|
-
|
|
563
|
+
# Enable OpenAI tools (set to 'true' to enable)
|
|
564
|
+
TOOLS_ENABLED=false
|
|
453
565
|
```
|
|
454
566
|
|
|
455
|
-
**
|
|
567
|
+
**Environment Variables:**
|
|
568
|
+
|
|
569
|
+
| Variable | Purpose | Required For | Secret? |
|
|
570
|
+
|----------|---------|--------------|---------|
|
|
571
|
+
| `OPENAI_ACCESS_TOKEN` | OpenAI API key | prompt_tools, youtube_automation | ✅ SECRET |
|
|
572
|
+
| `OPENAI_ORGANIZATION_ID` | OpenAI org ID | prompt_tools, youtube_automation | ✅ SECRET |
|
|
573
|
+
| `TOOLS_ENABLED` | Enable OpenAI configuration | Optional | ❌ No |
|
|
574
|
+
|
|
575
|
+
**Safe to:**
|
|
576
|
+
- ❌ **NEVER** version control
|
|
577
|
+
- ❌ **NEVER** share
|
|
578
|
+
- ❌ **NEVER** commit to git
|
|
579
|
+
- ✅ Keep local only
|
|
580
|
+
- ✅ Share `.env.example` template
|
|
581
|
+
|
|
582
|
+
### Safety Features
|
|
583
|
+
|
|
584
|
+
**Automatic Backups:**
|
|
585
|
+
- Every config save creates timestamped backup: `filename.backup.YYYYMMDD-HHMMSS`
|
|
586
|
+
- Backups stored alongside config files in `~/.config/appydave/`
|
|
587
|
+
- Restore from backup: `cp settings.json.backup.20251109-203015 settings.json`
|
|
588
|
+
|
|
589
|
+
**Safe Configuration Creation:**
|
|
590
|
+
- `ad_config -c` only creates missing files, never overwrites existing ones
|
|
591
|
+
- Prevents accidental data loss from running setup commands
|
|
592
|
+
|
|
593
|
+
**Secrets Separation:**
|
|
594
|
+
- API keys stored in `.env` files (gitignored), not in JSON configs
|
|
595
|
+
- Configuration files can be safely version-controlled (after removing personal paths)
|
|
596
|
+
|
|
597
|
+
### Migration from Legacy Config
|
|
598
|
+
|
|
599
|
+
**From `~/.vat-config` (DEPRECATED):**
|
|
600
|
+
|
|
601
|
+
The old `~/.vat-config` file is no longer used. VAT now uses `settings.json`.
|
|
602
|
+
|
|
603
|
+
**Migration steps:**
|
|
604
|
+
1. Check your old config: `cat ~/.vat-config`
|
|
605
|
+
2. Add value to settings.json: `ad_config -e`
|
|
606
|
+
3. Add: `"video-projects-root": "/your/path/from/vat/config"`
|
|
607
|
+
4. Test VAT still works: `vat list`
|
|
608
|
+
5. Delete old file: `rm ~/.vat-config`
|
|
609
|
+
|
|
610
|
+
**Note:** The `vat init` command is deprecated. Use `ad_config -c` instead.
|
|
456
611
|
|
|
457
612
|
## Git Hooks & Security
|
|
458
613
|
|
data/README.md
CHANGED
|
@@ -12,6 +12,7 @@ Instead of managing dozens of separate repositories, everything lives here - one
|
|
|
12
12
|
- 🤖 Feed entire codebases to AI assistants in seconds
|
|
13
13
|
- 📹 Batch update YouTube video metadata without clicking through the UI (update 50 videos in 5 minutes)
|
|
14
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)
|
|
15
16
|
- 🖼️ Organize downloaded images into project folders automatically (video asset workflow)
|
|
16
17
|
- ⚙️ Manage multi-channel configurations from the command line (team-shareable JSON configs)
|
|
17
18
|
|
|
@@ -27,6 +28,62 @@ Or add to your Gemfile:
|
|
|
27
28
|
gem 'appydave-tools'
|
|
28
29
|
```
|
|
29
30
|
|
|
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:**
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
ad_config -c
|
|
41
|
+
```
|
|
42
|
+
|
|
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**
|
|
49
|
+
|
|
50
|
+
```bash
|
|
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
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Then edit each file and replace placeholders with your actual values.
|
|
60
|
+
|
|
61
|
+
**2. Option B: Edit directly in VS Code**
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
ad_config -e
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Opens `~/.config/appydave/` for editing.
|
|
68
|
+
|
|
69
|
+
**3. Add your values**
|
|
70
|
+
|
|
71
|
+
Update the configuration files with your specific paths and settings.
|
|
72
|
+
|
|
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
|
+
|
|
30
87
|
## The Tools
|
|
31
88
|
|
|
32
89
|
### 🤖 GPT Context Gatherer
|
|
@@ -124,6 +181,56 @@ subtitle_processor join -f "part1.srt,part2.srt" -b 200 -o merged.srt
|
|
|
124
181
|
|
|
125
182
|
---
|
|
126
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
|
+
|
|
190
|
+
```bash
|
|
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
|
|
205
|
+
|
|
206
|
+
# Clean up S3 after project completion
|
|
207
|
+
vat s3-cleanup appydave b65 --force
|
|
208
|
+
```
|
|
209
|
+
|
|
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
|
+
|
|
127
234
|
### 🎯 Prompt Tools *(Experimental - Not actively used)*
|
|
128
235
|
|
|
129
236
|
**The problem:** Running OpenAI prompts with placeholder substitution and output management.
|
|
@@ -200,7 +307,7 @@ youtube_automation -s 01-1 -d
|
|
|
200
307
|
# List all configurations
|
|
201
308
|
ad_config -l
|
|
202
309
|
|
|
203
|
-
# Create missing config files
|
|
310
|
+
# Create missing config files (safe - won't overwrite existing files)
|
|
204
311
|
ad_config -c
|
|
205
312
|
|
|
206
313
|
# Edit configurations in VS Code
|
|
@@ -214,21 +321,47 @@ ad_config -p
|
|
|
214
321
|
```
|
|
215
322
|
|
|
216
323
|
**What it manages:**
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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.
|
|
220
352
|
|
|
221
353
|
**Use cases:**
|
|
222
354
|
- **Multi-channel management**: Switch between different YouTube channels
|
|
223
|
-
- **Team collaboration**: Share configuration
|
|
224
|
-
- **Workflow standardization**: Consistent
|
|
355
|
+
- **Team collaboration**: Share configuration structure via Git (each developer customizes paths)
|
|
356
|
+
- **Workflow standardization**: Consistent channel codes/names across team
|
|
225
357
|
- **Automation setup**: Define reusable prompt sequences
|
|
226
358
|
|
|
227
|
-
**
|
|
228
|
-
-
|
|
229
|
-
-
|
|
230
|
-
-
|
|
231
|
-
|
|
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
|
|
363
|
+
|
|
364
|
+
**Full configuration guide:** [docs/configuration/README.md](./docs/configuration/README.md)
|
|
232
365
|
|
|
233
366
|
---
|
|
234
367
|
|