Download configs/pick_samples.py from AdwolfCzar/minih33-smoothloopv3: direct link, hf CLI and curl.
- Browser
- Download file 2.06 kB
-
https://huggingface.co/AdwolfCzar/minih33-smoothloopv3/resolve/main/configs/pick_samples.py
- Command line
-
hf download hf://AdwolfCzar/minih33-smoothloopv3/configs/pick_samples.py
-
curl -L -o pick_samples.py https://huggingface.co/AdwolfCzar/minih33-smoothloopv3/resolve/main/configs/pick_samples.py
2.06 kB
| #!/usr/bin/env python3 | |
| """Sorteia 3 clipes para os previews de acompanhamento do treino. | |
| Criterios (decididos com o usuario): | |
| - primeiro frame como imagem de condicao (a caption H3 ancora "<Picture 1> em 0.00s"); | |
| - tres aspect ratios visualmente diferentes, para o preview cobrir paisagem, | |
| retrato e algo intermediario/quadrado; | |
| - pixels quadrados de verdade: o preparador rejeita SAR anamorfico, entao so | |
| entram clipes com SAR 1:1 / N/A; | |
| - >= 124 frames, para o preview de 124f nao sair de um clipe mais curto. | |
| """ | |
| from __future__ import annotations | |
| import argparse, json, random | |
| from pathlib import Path | |
| OK_SAR = {"1:1", "0:1", "N/A"} | |
| def main() -> None: | |
| ap = argparse.ArgumentParser() | |
| ap.add_argument("--inventory", required=True, type=Path) | |
| ap.add_argument("--seed", type=int, default=42) | |
| a = ap.parse_args() | |
| rows = [r for r in json.loads(a.inventory.read_text()) if "error" not in r] | |
| rows = [r for r in rows if r["caption"] and r["frames"] >= 124 | |
| and r["sar"] in OK_SAR and r["w"] and r["h"]] | |
| # Faixas de aspect: paisagem larga, quadrado-ish, retrato. | |
| faixas = { | |
| "paisagem": lambda ar: ar >= 1.3, | |
| "quadrado": lambda ar: 0.8 <= ar < 1.3, | |
| "retrato": lambda ar: ar < 0.8, | |
| } | |
| rng = random.Random(a.seed) | |
| escolhidos = [] | |
| for nome, teste in faixas.items(): | |
| pool = [r for r in rows if teste(r["w"] / r["h"])] | |
| if not pool: | |
| print(f"# sem candidatos para {nome}") | |
| continue | |
| r = rng.choice(pool) | |
| escolhidos.append(r) | |
| cap = Path(r["path"]).with_suffix(".txt").read_text(encoding="utf-8-sig") | |
| gatilho = next((g for g in ("A static", "A slow", "A smooth", "An intense", | |
| "A turntable", "A chroma-key") if g + " looping" in cap), "?") | |
| print(f"# {nome:9s} {r['w']}x{r['h']} ar={r['w']/r['h']:.2f} " | |
| f"{r['frames']}f tipo={r['folder']} gatilho='{gatilho}'") | |
| for r in escolhidos: | |
| print(r["path"]) | |
| if __name__ == "__main__": | |
| main() | |