wip: estado de trabajo pendiente antes de la vista grid (suite 230 verde)

This commit is contained in:
urieljareth
2026-08-22 19:37:23 -06:00
parent 4f5a68b572
commit 8a59b39c98
103 changed files with 70954 additions and 1825 deletions
+67
View File
@@ -0,0 +1,67 @@
channel_url: "https://www.youtube.com/@Nostal-Vlad/videos"
languages:
es: any
es-419: any
en: any
prefer_manual: true
include_shorts: false
include_live: true
min_duration_sec: 30
# --------------------------------------------------------------------------
# Ritmo contra YouTube.
#
# El unico techo publicado que existe es el de la wiki de yt-dlp: una sesion
# sin cuenta aguanta ~300 videos/hora (~1000 peticiones/hora) antes del muro
# de bot. Google no documenta limites para acceso sin API, asi que ese numero
# es la referencia menos mala. Los valores de abajo apuntan deliberadamente
# por debajo.
#
# Cuentas: un video cuesta 3 peticiones a youtube.com
# 1. la pagina /watch
# 2. la llamada InnerTube /youtubei/v1/player (separada de la anterior por
# sleep_subrequests)
# 3. /api/timedtext, la transcripcion
# (la miniatura va a i.ytimg.com, que es CDN estatico y no cuenta contra esto)
#
# Esas 3 son irreducibles: se midio si se podia bajar de ahi restringiendo
# player_client o saltando la pagina /watch, y no se puede. Con solo
# web_safari, o con player_skip=webpage, yt-dlp devuelve CERO pistas de
# subtitulos y pierde duration/channel_id/tags. El default de yt-dlp
# (android_vr + web_safari, 2 peticiones) ya es el optimo. No re-litigar.
#
# Medido con estos valores: 12.4 s/video => ~870 peticiones/hora, ~290
# videos/hora. Por debajo del techo, con margen.
#
# Si vas con prisa y aceptas el riesgo, baja delay.min/max_seconds y
# min_request_interval. Si aun asi te topas con el muro, subelos:
# min_request_interval es el unico ajuste que aplica a la vez a los jobs y
# a los /api/tools/*, que corren fuera del JobManager.
# --------------------------------------------------------------------------
delay:
min_seconds: 5.0
max_seconds: 10.0
backoff_base: 2.0 # tras un rate-limit: min(2 * 2**n + jitter, cap)
backoff_cap: 60.0
throttle_threshold: 3 # 3 rate-limits seguidos y el job para
min_request_interval: 2.5
audio_rate_limit: 0
yt_dlp:
retries: 10
sleep_subrequests: 3.0 # -> sleep_interval_requests de yt-dlp
extractor_retries: 3
socket_timeout: 30.0
sync:
incremental: true
window: 30
max_window: 300
overlap: 3
database_path: "data/state.db"
output_dir: "data/markdown"
template_path: "templates/video.md.j2"
filename_template: "{upload_date}_{slug}"