video
This commit is contained in:
62
tools/build_mountain_js.py
Normal file
62
tools/build_mountain_js.py
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Build static/js/mountain.js with all ASCII frames from a build/<name>/ dir
|
||||
embedded as a JS array.
|
||||
|
||||
Usage: build_mountain_js.py <src_dir> <dst_js_path>
|
||||
|
||||
Frames are read in sorted order, escaped for JS template literals, and
|
||||
concatenated into a window.TP_MOUNTAIN_FRAMES array.
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
def js_escape(s: str) -> str:
|
||||
return s.replace("\\", "\\\\").replace("`", "\\`").replace("${", "\\${")
|
||||
|
||||
|
||||
def main() -> int:
|
||||
if len(sys.argv) != 3:
|
||||
print(__doc__, file=sys.stderr)
|
||||
return 2
|
||||
|
||||
src = sys.argv[1]
|
||||
dst = sys.argv[2]
|
||||
|
||||
txts = sorted(p for p in os.listdir(src) if p.startswith("frame-") and p.endswith(".txt"))
|
||||
if not txts:
|
||||
print(f"no frame-*.txt files in {src}", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
frames = []
|
||||
for name in txts:
|
||||
with open(os.path.join(src, name)) as f:
|
||||
frames.append(f.read().rstrip("\n"))
|
||||
|
||||
header = """/* Autogenerated by tools/build_mountain_js.py
|
||||
ASCII frames from a video, chafa-rendered, concatenated into a JS array.
|
||||
Cycled at 12 fps by static/js/mountain-bg.js. */
|
||||
|
||||
window.TP_MOUNTAIN_FRAMES = [
|
||||
"""
|
||||
footer = f"""];
|
||||
|
||||
window.TP_MOUNTAIN_N_FRAMES = {len(frames)};
|
||||
window.TP_MOUNTAIN_FPS = 12;
|
||||
"""
|
||||
body = ",\n".join(f" `{js_escape(fr)}`" for fr in frames)
|
||||
|
||||
os.makedirs(os.path.dirname(dst), exist_ok=True)
|
||||
with open(dst, "w") as f:
|
||||
f.write(header)
|
||||
f.write(body)
|
||||
f.write("\n")
|
||||
f.write(footer)
|
||||
|
||||
print(f" {os.path.getsize(dst):>7d} bytes {dst} ({len(frames)} frames)")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user