============================================================
 HOLETEX TRANSCRIPTS — HƯỚNG DẪN (3 bước)
============================================================

Gói này tải PHỤ ĐỀ (transcript) của 163 video kênh @holetex.
Chỉ tải phụ đề, KHÔNG tải video/audio: cả kênh chỉ khoảng vài MB.
Chạy trên máy của bạn (Windows / macOS / Linux), cần mạng Internet.


BƯỚC 1 — GIẢI NÉN
------------------
Giải nén cả thư mục ra một chỗ bất kỳ. Trong đó phải có đủ 5 tệp:

    get.py
    urls.txt              <- danh sách 163 video
    run_windows.bat       <- dùng cho Windows
    run_mac_linux.sh      <- dùng cho macOS / Linux
    README.txt            <- tệp này

Đừng tách lẻ get.py ra khỏi urls.txt: hai tệp phải nằm cùng thư mục.


BƯỚC 2 — CHẠY
-------------
WINDOWS:
    Nhấp đúp vào  run_windows.bat
    (hoặc mở Command Prompt trong thư mục đó rồi gõ:  run_windows.bat )

    Nếu báo "Khong tim thay Python": cài Python từ
    https://www.python.org/downloads/windows/
    và nhớ TICK vào ô "Add python.exe to PATH" ở màn hình cài đặt đầu tiên,
    sau đó đóng cửa sổ và chạy lại.

macOS / LINUX:
    Mở Terminal, vào thư mục vừa giải nén, rồi:

        chmod +x run_mac_linux.sh
        ./run_mac_linux.sh

    (chmod chỉ cần gõ một lần)

Lần chạy đầu, script tự tạo môi trường Python riêng trong out/venv và tự
cài yt-dlp + youtube-transcript-api vào đó — không cài gì vào Python hệ
thống của máy bạn. Thời gian tải: khoảng 10–25 phút cho 163 video.

Muốn thử trước 3 video cho nhanh:
        python3 get.py --limit 3        (Windows:  py -3 get.py --limit 3)

KẾT QUẢ nằm trong thư mục out/:
    <video_id>.txt    một tệp cho mỗi video có phụ đề
    MANIFEST.json     id, ngôn ngữ, tự động hay không, số ký tự, trạng thái
    venv/             môi trường Python (có thể xoá, không gửi đi)

Và ở cuối, script tự đóng gói thành:
    holetex-transcripts.zip


BƯỚC 3 — GỬI LÊN
----------------
Mở trang upload:

    https://kl-yt-kit.pages.dev/

Dán mã gửi:  (8 ký tự — trợ lý gửi riêng trong chat, không nằm trong tệp này)

Chọn tệp holetex-transcripts.zip  ->  bấm "Gửi lên".

Trang sẽ báo "Gửi thành công" kèm một dòng khoá dạng
upload:1712345678901-holetex-transcripts.zip — chụp lại dòng đó báo cho
agent là xong.


DỪNG GIỮA CHỪNG THÌ SAO?
------------------------
Cứ bấm Ctrl+C (hoặc đóng cửa sổ). Hôm sau chạy lại đúng lệnh cũ:
video nào đã có out/<id>.txt dài hơn 200 ký tự sẽ được BỎ QUA, chỉ tải
phần còn thiếu. Không mất kết quả cũ, không tải lại từ đầu.

Muốn tải lại từ đầu một video cụ thể: xoá tệp out/<id>.txt rồi chạy lại,
hoặc chạy:  get.py --force --only <id>


NẾU CÓ VIDEO KHÔNG CÓ PHỤ ĐỀ
----------------------------
Script ghi trạng thái "no_subs" vào MANIFEST.json và chạy tiếp, không dừng.
Đó là video thật sự không có phụ đề (thường là video cũ hoặc shorts),
không phải lỗi.

Nếu rất nhiều video báo "blocked" (YouTube: "Sign in to confirm you're not
a bot") thì mạng/IP của bạn đang bị YouTube nghi ngờ — thử tắt VPN, hoặc
đăng nhập YouTube trên trình duyệt cùng máy rồi chạy lại. Đây là lý do gói
này phải chạy trên máy bạn thay vì máy chủ của agent.

Nếu bị "HTTP Error 429" (quá nhiều yêu cầu): đợi 15–30 phút rồi chạy lại,
phần đã tải vẫn được giữ.


TUỲ CHỌN NÂNG CAO (không cần dùng)
-----------------------------------
    --urls PATH     dùng danh sách khác
    --out DIR       đổi thư mục đầu ra
    --limit N       chỉ làm N video đầu
    --only ID,ID    chỉ làm vài id
    --force         tải lại cả video đã có
    --no-venv       không tạo venv, dùng Python hiện tại
    --no-zip        không đóng gói zip ở cuối
    --help          xem trợ giúp
