import json import yaml # Custom list class to force inline (flow style) YAML formatting class InlineList(list): pass def inline_list_representer(dumper, data): return dumper.represent_sequence('tag:yaml.org,2002:seq', data, flow_style=True) yaml.add_representer(InlineList, inline_list_representer) # Load the channels from channels.json with open("channels.json", "r") as f: channels = json.load(f) compose = { "services": {} } # For each channel, create a service entry for channel in channels: service_name = f"scanner_{channel['name']}" compose["services"][service_name] = { "image": "t0is/madmonq-transcriptor-image:cuda", "environment": [ f"CHANNEL_NAME={channel['name']}", f"CHANNEL_LANGUAGE={channel['language']}", "TIMEDELTA_DAYS=10", "TIMEDELTA_DAYS_EXACT=false", "CLIP_CREATE_FROM_CHAT=false", "TWITCH_CLIENT_ID=a0fuj6tm5ct79clvim9816orphqkov", "TWITCH_CLIENT_SECRET=h7whj3yspxgj1909sgcafx6iz1p1es" ], "volumes": [ "/shared/transcriptor/clips:/app/clips", "/shared/transcriptor/vods:/app/vods", "/shared/transcriptor/audio:/app/audio", "/shared/transcriptor/chat:/app/chat", "/shared/transcriptor/models:/app/models", "/shared/transcriptor/transcripts:/app/transcripts" ], "deploy": { "resources": { "reservations": { "devices": [ { "driver": "nvidia", "count": "all", "capabilities": InlineList(["gpu"]) } ] } } } } # Write the docker-compose file with open("docker-compose.yml", "w") as f: yaml.dump(compose, f, default_flow_style=False) print("docker-compose.yml generated successfully.")