- Web scraper (platforms/threads/scraper.py) with div-based card parsing
- Multi-source discovery: For You feed + configurable search queries
- Engagement filtering (min_engagement) and post age filter (max_post_age)
- Shared Playwright auth module (platforms/threads/auth.py)
- Migrated ffmpeg-python to av (PyAV) for in-process media probing
- Video composition uses subprocess ffmpeg (av filter graph segfault workaround)
- Updated CLAUDE.md with Threads scraping and macOS-specific notes
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
## Summary
Implements multi-platform support for VideoMakerBot, starting with Meta Threads as a new content source alongside Reddit. Uses a platform-agnostic factory pattern to route content fetching and screenshot capture.
## Changes
### New Files
- platforms/__init__.py: Factory dispatch for platform selection
- platforms/threads/__init__.py: Threads package marker
- platforms/threads/fetcher.py: Threads Graph API integration
- platforms/threads/screenshot.py: Playwright-based Threads screenshotter
- CLAUDE.md: Comprehensive development guide
- AGENT.md: Guidelines for AI agents working on the codebase
### Modified Files
- main.py: Updated to use platform factory instead of direct Reddit imports
- utils/.config.template.toml: Added [settings].platform, [settings].post_lang, [threads.*] sections
- utils/videos.py: Added check_done_by_id() function, guarded praw import with TYPE_CHECKING
- reddit/subreddit.py: Added thread_category field to content dict
- TTS/engine_wrapper.py: Fixed post_lang to use fallback chain
- video_creation/final_video.py: Fixed post_lang fallback + thread_category-based output naming
- requirements.txt: Fixed yt-dlp version to 2025.10.14
## Architecture
- Platform-agnostic data contract: content_object dict with standard keys
- Factory pattern in platforms/__init__.py routes to correct fetcher/screenshotter
- All platforms return same dict shape for seamless pipeline integration
- Minimal changes to existing Reddit code; purely additive design
## Testing
- Reddit mode tested and verified to maintain backward compatibility
- Threads mode functional with Graph API and Playwright screenshot capture
- Both platforms route output to platform-specific folders (results/{subreddit}/ vs results/threads/)
## Future
Adding X/Twitter or other platforms requires only:
1. New platform module (fetcher + screenshot)
2. Config section in .config.template.toml
3. Two elif branches in platforms/__init__.py
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
* feat: tiktok sessionId can be specified in the config.toml
* feat: tiktok sessionId can be specified in the config.toml
* Various improvements and optimizations
* Add default argument
* Remove an used variable
* Code reformatted with black
* Fixed all problems pointed out by pylint
* Update TTS/TikTok.py
* Apply suggestions from code review
Co-authored-by: Simon <65854503+OpenSourceSimon@users.noreply.github.com>
* chore: add default value for tiktok_voice
Co-authored-by: Jose Collado <jose@collado.pw>
Co-authored-by: Simon <65854503+OpenSourceSimon@users.noreply.github.com>
Co-authored-by: Callum Leslie <github@cleslie.uk>
Co-authored-by: Callum Leslie <git@cleslie.uk>
* Added new gameplay options
Added:
- minecraft-2
- multiversus
- fall-guys
- steep
as options for background gameplay
* Added new gameplay options
Added:
- minecraft-2
- multiversus
- fall-guys
- steep
as options for background gameplay
also CONSTANTS.py didn't seem to exist in the develop branch
* Made sure all commited videos are free to use
`fall-guys` and `multiversus` where changed
* Deleted for backgrounds.json
Deleted for backgrounds.json
* Added and reformatted new gameplay into backgrounds.json
Just took the new entries from the old `CONSTANTS.py` and moved them here (and changed the format so that it works!)
* Added new entries and reformatted
(Removed something that was commented out (in python)