# Playbook de estilo y reglas del videopodcast AI4Managers # Fuente única: todo script de captions, placas, gráficos, ventanas, miniaturas y # verificación lee este archivo. Valores extraídos de lo aprobado en los episodios 1 y 2 # (doac1080.py, placas.html, _base.css, mapa2.html, win.html, verificar.py) el 2026-09-09. lienzo: ancho: 1920 alto: 1080 fps: 30 formato_pixel: yuv420p colores: verde: "#00ED91" # acento de toda la serie (captions, mapas, banda de miniaturas) verde_rgb: [0, 237, 145] verde_oscuro: "#0B7A45" # gráficos papel (texto clave) y placas blanco: "#FFFFFF" negro: "#141414" # texto sobre papel papel: "#F3EAD6" # fondo de gráficos papel y placas papel_claro: "#FBF8F0" # cajas sobre papel papel_gris: "#7D7365" # texto secundario sobre papel grilla_papel: "#93B4CD" # cuadrícula azul del papel mapa_fondo: "#0B0B0B" # gráficos mapa (concreto oscuro) y etiquetas rasgadas mapa_gris: "#5C5C59" terminal_barra: "#22D17C" terminal_fondo: "rgba(8,12,10,.86)" terminal_texto: "#F2F5F3" tipografias: captions: fonts/archivo.ttf # Archivo Black titulos: "'Archivo', sans-serif" datos: "'IBM Plex Mono', monospace" # números, notas pequeñas, timestamps terminal: "'JetBrains Mono', monospace" manuscrita: Caveat # documento del ciclo (caveat500/700.woff2) captions: # receta DOAC 1080 (doac1080.py) margen: 100 gap: 18 centro_y: 470 altos: [50, 190, 190] # línea de arranque, clave, clave bloque: 932 comp_arranque: 0.82 comp_min: 0.55 exp_max: 1.35 corrimiento_px: 300 # el plano se corre hacia la persona; siempre PAR corrimiento_en_planos_con_rotulo: 0 # los chyrons de Juan/Roberto no se tocan duracion_min_s: 1.45 duracion_min_tolerancia_s: 1.39 linea_clave_min_caracteres: 5 # 3 y 4 letras se estiran feo dos_lineas_usan_narr: 0 # caption de dos líneas = dos líneas grandes nunca_cruzan_corte: true margen_antes_de_corte_s: 0.10 holgura_min_px: 0 # medida contra la silueta en la franja del texto placas: # rótulos de nombre sobre la grilla del Meet top: 809 left: [6, 397, 913, 1428] anchos: [372, 492, 491, 484] fondo: papel texto: negro fuente: titulos fade_s: 0.3 requiere_grilla_estable: true # medir bordes de teselas antes de fijar la entrada graficos: # pantalla completa, alternar papel y mapa fade_in_s: 0.4 fade_out_s: 0.4 entran_y_salen_en_cortes: true tolerancia_corte_s: 0.05 max_seguidos_s: 26 # g5 fue el más largo aprobado (25,2 s) min_separacion_entre_graficos_s: 1.5 # dos pantallas completas seguidas con menos hueco se sienten pegadas etapas_min_s: 0.45 # una etapa más corta no se percibe (g3 e0) estilos: [papel, mapa] mapa: acento: verde camino_hecho: solido_con_brillo camino_pendiente: punteado_negro nodos: rombo etiquetas: negras_rasgadas ventanas: # ventana terminal para huecos (2:23 del ep2) fade_in_s: 0.35 fade_out_s: 0.40 barra: terminal_barra fondo: terminal_fondo fuente: terminal miniaturas: caras: reales_del_episodio # Juan: ~/uploads/juan.png (frontal); Roberto: persona Pikzels rostros_completos: true una_sola_idea: true max_palabras: 5 palabra_clave_en: banda_verde sin_tildes_en_prompt: true # Pikzels rompe el render con tildes max_letras_por_palabra: 8 # DOCUMENTAR se partió en "DOCU MEN TAR" sin_insignias: true firma: "AI4MANAGERS pequeño en una esquina" resolucion_min: [1280, 720] peso_max_mb: 2 prohibido_texto_de_duda: true # feedback_thumbnail_no_self_doubt edicion: deteccion_planos: "select='gt(scene,0.15)'" exclusion_por_solapamiento_min_s: 1.0 # tocar el borde de un overlay no excluye el plano hueco_max_sin_overlay_con_caras_s: 8.0 # el hueco de 0:12 del ep2 fue el aviso armado: por_tramos_con_cuadros_exactos # -frames:v N, concat -c copy, audio del base sin recodificar version_nueva_nombre_nuevo: true # Cloudflare cachea 4 h publicar_atomico: "cp .part + mv" verificacion: cuadros_iguales_al_base: true audio_md5_igual_al_base: true loudness_lufs: -14.0 loudness_tolerancia: 0.5 pico_dbtp_max: -1.3 presencia_diff_max: 12 # cuadro del punto medio vs preview aprobada ausencia_diff_min: 20 # 0,35 s antes de entrar ausencia_antes_s: 0.35 md5_servido_igual_al_local: true