# This file contains policies for full-stack tests, which include both # info.json generation and the subsequent download step. --- # Policy: TV client with profile rotation. # This test uses multiple parallel workers. Each worker gets its own profile # that is automatically rotated (e.g., from tv_user_0_0 to tv_user_0_1) after # a certain number of requests to simulate user churn. name: tv_simply_profile_rotation settings: mode: full_stack urls_file: "urls.txt" info_json_script: "bin/ytops-client get-info" save_info_json_dir: "fetched_info_jsons/tv_simply_rotation" # Use the modern profile management system. profile_mode: per_worker_with_rotation profile_management: prefix: "tv_simply" # Rotate to a new profile generation after 250 requests. max_requests_per_profile: 250 execution_control: run_until: { cycles: 1 } workers: 8 # Run with 8 parallel workers. sleep_between_tasks: { min_seconds: 2, max_seconds: 5 } # Optional: Override assumptions to improve rate estimation. # assumptions: # fetch_task_duration: 10 # Est. seconds to get info.json # download_task_duration: 20 # Est. seconds to download all formats for one video info_json_generation_policy: client: tv_simply download_policy: formats: "18,140" extra_args: "--cleanup --output-dir downloads/tv_simply_rotation" proxy: "socks5://127.0.0.1:1087" downloader: "aria2c" downloader_args: "aria2c:-x 8 -k 1M" sleep_between_formats: { min_seconds: 2, max_seconds: 2 } stop_conditions: on_cumulative_403: { max_errors: 5, per_minutes: 2 } --- # Policy: TV Simply, full-stack test with per-worker profile rotation. # Generates info.json using tv_simply and immediately attempts to download. # This combines the fetch and download steps into a single workflow. name: tv_simply_full_stack_rotation settings: mode: full_stack urls_file: "urls.txt" info_json_script: "bin/ytops-client get-info" profile_mode: per_worker_with_rotation profile_management: prefix: "tv_simply_worker" max_requests_per_profile: 240 execution_control: workers: 10 run_until: { cycles: 1 } sleep_between_tasks: { min_seconds: 5, max_seconds: 5 } info_json_generation_policy: client: "tv_simply" request_params: context_reuse_policy: { enabled: false } download_policy: formats: "18,140" extra_args: "--output-dir downloads/tv_simply_downloads" --- # Policy: MWeb client with multiple profiles, each with its own cookie file. # This demonstrates how to run an authenticated test with a pool of accounts. # The orchestrator will cycle through the cookie files, assigning one to each profile. name: mweb_multi_profile_with_cookies settings: mode: full_stack urls_file: "urls.txt" info_json_script: "bin/ytops-client get-info" # Use the dynamic profile pool management system. profile_management: prefix: "mweb_user" initial_pool_size: 3 # Start with 3 profiles. auto_expand_pool: true # Create new profiles if the initial 3 are all rate-limited. max_requests_per_profile: 100 # Let each profile make 100 requests... sleep_minutes_on_exhaustion: 15 # ...then put it to sleep for 15 minutes. # Assign a different cookie file to each profile in the pool. # The tool will cycle through this list. cookie_files: - "/path/to/your/mweb_cookies_0.txt" - "/path/to/your/mweb_cookies_1.txt" - "/path/to/your/mweb_cookies_2.txt" execution_control: run_until: { cycles: 1 } workers: 3 # Match workers to the number of initial profiles. sleep_between_tasks: { min_seconds: 1, max_seconds: 3 } info_json_generation_policy: client: mweb # This client uses youtubei.js, which generates PO tokens. download_policy: formats: "18,140" extra_args: "--cleanup --output-dir /tmp/downloads" --- # Policy: TV client with profile rotation and aria2c RPC download. # This test uses multiple parallel workers. Each worker gets its own profile # that is automatically rotated. Downloads are submitted to an aria2c daemon # via its RPC interface. name: tv_simply_profile_rotation_aria2c_rpc settings: mode: full_stack urls_file: "urls.txt" info_json_script: "bin/ytops-client get-info" save_info_json_dir: "fetched_info_jsons/tv_simply_rotation_aria" profile_mode: per_worker_with_rotation profile_management: prefix: "tv_simply_aria" max_requests_per_profile: 250 execution_control: run_until: { cycles: 1 } workers: 8 sleep_between_tasks: { min_seconds: 2, max_seconds: 5 } info_json_generation_policy: client: tv_simply download_policy: formats: "18,140" # Use the aria2c RPC downloader downloader: "aria2c_rpc" # RPC server connection details aria_host: "localhost" aria_port: 6800 # aria_secret: "your_secret" # Uncomment and set if needed # Set to true to wait for each download and get a success/fail result. # This is the default and recommended for monitoring success/failure. # Set to false for maximum submission throughput ("fire-and-forget"), # but you will lose per-download status reporting. aria_wait: true # The output directory is on the aria2c host machine output_dir: "/downloads/tv_simply_rotation_aria" # Pass custom arguments to aria2c in yt-dlp format for better performance. # -x: max connections per server, -k: min split size. downloader_args: "aria2c:[-x 8, -k 1M]" sleep_between_formats: { min_seconds: 1, max_seconds: 2 } stop_conditions: on_cumulative_403: { max_errors: 5, per_minutes: 2 }