This commit is contained in:
Vipin 2025-09-15 13:04:47 +05:30
parent c694b3a52a
commit cf0eecbaa1
4 changed files with 3 additions and 70 deletions

View file

@ -1,4 +1,4 @@
# RepoScribe YouTube 'Watch Later' Exporter & Cleaner
# YTmigrateWL YouTube 'Watch Later' Exporter & Cleaner
RepoScribe is a powerful two-step tool designed to help you rescue, archive, and manage your YouTube "Watch Later" playlist. If your "Watch Later" has become an unmanageable backlog of hundreds or thousands of videos, this tool is for you.

View file

@ -15,7 +15,7 @@
],
"license": "ISC",
"main": "src/js/index.js",
"name": "YTmigrateWL",
"name": "ytmigratewl",
"scripts": {
"fetch-videos": "python3 main.py",
"migrate-videos": "node src/js/index.js",

View file

@ -4,8 +4,4 @@ version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
"python-dotenv>=1.1.1",
"tqdm>=4.67.1",
"yt-dlp>=2025.9.5",
]
dependencies = ["python-dotenv>=1.1.1", "tqdm>=4.67.1", "yt-dlp>=2025.9.5"]

63
todo.md
View file

@ -1,63 +0,0 @@
Of course. Here is a detailed implementation plan based on your requirements, presented from the perspective of a Senior Technical Project Manager.
---
### **Project: RepoScribe - Q4 2025 Enhancement Initiative**
**Project Goal:** To evolve the RepoScribe tool from a functional script into a user-friendly, robust, and accessible open-source project. This initiative will focus on three core pillars: **Usability**, **Code Refinement**, and **Feature Expansion**.
**Lead:** Senior Technical Project Manager
**Stakeholders:** Open-Source Community, End-Users
---
### **Phase 1: Foundation & Usability (Estimated Effort: Medium)**
This phase is critical and addresses the highest-priority items required to make the project viable for external users. The goal is to lower the barrier to entry and provide a seamless "out-of-the-box" experience.
| Task ID | Task Name | Description | Priority | Effort | Success Criteria |
| :--- | :--- | :--- | :--- | :--- | :--- |
| **1.1** | **CRITICAL: Author Comprehensive README** | Create a `README.md` from scratch. It must include: a project description, a "Why?" section, prerequisites (Python, Node.js), detailed setup instructions, a comprehensive configuration guide (covering the `.env` file), usage steps, and a license (e.g., MIT). | **High** | **M** | A new user can successfully set up and run the project using only the README for guidance. |
| **1.2** | **Enhance `.env.example` Instructions** | Significantly improve the comments in the `.env.example` file. Provide explicit, copy-pasteable example paths for Firefox and Chrome profiles across macOS, Windows, and Linux to dramatically reduce user friction. | **High** | **S** | The comments clearly guide a user from any major OS to find their profile path without external searching. |
| **1.3** | **Unify Workflow with `npm start`** | Modify the `package.json` `scripts` section to combine the Python and Node scripts into a single command. The new `start` script will execute `fetch-videos` and then `migrate-videos` sequentially. | **High** | **S** | A user can run `npm start` to execute the entire workflow from start to finish. |
---
### **Phase 2: Code Refinement & Robustness (Estimated Effort: Small)**
This phase focuses on internal code quality and improving the user experience through more intelligent and forgiving script behavior. These are small changes with a high impact on perceived quality.
| Task ID | Task Name | Description | Priority | Effort | Success Criteria |
| :--- | :--- | :--- | :--- | :--- | :--- |
| **2.1** | **Implement Flexible Confirmation Prompt** | In `src/js/index.js`, modify the confirmation logic for clearing the "Watch Later" playlist to accept more variations, such as "y" and "YES", in a case-insensitive manner. | **High** | **S** | The script proceeds correctly if the user inputs `y`, `Y`, `yes`, or `YES`. |
| **2.2** | **Add Contextual Error Hints** | In `src/fetcher.py` and `main.py`, enhance the `except` blocks for `yt-dlp.utils.DownloadError`. Add user-friendly `print` statements that suggest common solutions (e.g., "Hint: Ensure your browser is closed..." or "Please double-check your profile path..."). | **Medium** | **S** | When a cookie-related error occurs, the user is given an actionable suggestion in the terminal output. |
| **2.3** | **Optimize Disk I/O in CsvWriter** | In `src/writer.py`, remove the `os.fsync()` call. This provides a minor performance boost by relying on the system's standard file buffering, which is sufficient for this application's needs. Add a code comment explaining why it was removed. | **Low** | **S** | The line `os.fsync(self.file_handle.fileno())` is removed from `writer.py`. |
---
### **Phase 3: Feature Expansion (Estimated Effort: Large)**
This phase introduces a significant new feature: support for the Google Chrome browser. This will broaden the project's user base considerably.
| Task ID | Task Name | Description | Priority | Effort | Success Criteria |
| :--- | :--- | :--- | :--- | :--- | :--- |
| **3.1** | **Research Chrome Cookie Integration** | Investigate how `yt-dlp`'s `cookiesfrombrowser` parameter works for Chrome. Determine the correct tuple format and required path specifications for it to function correctly. | **High** | **S** | The development team has a clear, proven method for passing Chrome cookie information to `yt-dlp`. |
| **3.2** | **Implement Browser Selection Logic** | 1. Add a `BROWSER` variable (e.g., `BROWSER="firefox"`) to the `.env.example` file. 2. In `main.py`, read this variable. 3. In `fetcher.py`, use an `if/else` statement to pass the correct arguments to `yt-dlp.YoutubeDL` based on whether `BROWSER` is "firefox" or "chrome". | **High** | **M** | The script successfully fetches data using cookies from either Firefox or Chrome based on the `.env` configuration. |
| **3.3** | **Update All Documentation for Chrome** | Update the `README.md` and `.env.example` to reflect the new Chrome support. This includes explaining the new `BROWSER` variable and providing the detailed instructions for finding Chrome's profile path on all major operating systems. | **High** | **S** | All documentation created in Phase 1 is updated to include clear instructions for Chrome users. |
### **Timeline & Sequencing**
The phases should be executed sequentially.
1. **Phase 1 (Foundation)** is the immediate priority. Without it, the project remains a personal script. This should be completed first to establish a solid baseline.
2. **Phase 2 (Refinement)** can be executed quickly afterward. Its tasks are small and can be batched together in a single development cycle.
3. **Phase 3 (Expansion)** is the most complex and should be tackled last. The research component (3.1) must be completed before implementation (3.2) begins.
### **Risks & Mitigation**
* **Risk:** Users may still struggle to locate browser profile paths, leading to support overhead.
* **Mitigation:** The enhanced documentation in tasks 1.1, 1.2, and 3.3 is the primary mitigation. If problems persist, a future enhancement could be a helper script (`find_profile.py`) to automate path detection.
* **Risk:** `yt-dlp`'s method for handling Chrome cookies may be complex or poorly documented.
* **Mitigation:** Task 3.1 is designed to front-load this risk. Allocate sufficient time for this research spike before committing to implementation.
* **Risk:** Upstream API changes from YouTube, `yt-dlp`, or `youtubei.js` could break functionality.
* **Mitigation:** Pin dependency versions in `pyproject.toml` and `package.json` to ensure a stable, reproducible build. Add a note in the README about potential breakage due to external changes.