-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.py
More file actions
70 lines (62 loc) · 3.26 KB
/
main.py
File metadata and controls
70 lines (62 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import argparse
import sys
import os
from clawcut import ClawcutEngine
# Try to load environment variables from .env if python-dotenv is installed
try:
from dotenv import load_dotenv
# Load .env from the same directory as main.py
load_dotenv(os.path.join(os.path.dirname(os.path.abspath(__file__)), ".env"))
except ImportError:
pass
def main():
parser = argparse.ArgumentParser(description="Clawcut Engine v2.2.0 - Modular Package")
parser.add_argument("--url", help="URL to download")
parser.add_argument("--start", help="Start time")
parser.add_argument("--duration", help="Duration")
parser.add_argument("--preset", help="Built-in preset name or JSON filename")
parser.add_argument("--zoom", type=float, help="Override zoom factor")
parser.add_argument("--mode", choices=["cover", "fit"], help="Override render mode")
parser.add_argument("--title", help="Title text to overlay")
parser.add_argument("--fontsize", type=int, help="Font size for title")
parser.add_argument("--margin", type=int, help="Margin left/right for title")
parser.add_argument("--watermark", action="store_true", help="Add watermark")
parser.add_argument("--wm_pos", choices=["top-left", "top-right", "top-center", "bottom-left", "bottom-right", "bottom-center"], help="Shorthand watermark position")
parser.add_argument("--wm_x", help="Watermark X position (overrides pos)")
parser.add_argument("--wm_y", help="Watermark Y position (overrides pos)")
parser.add_argument("--wm_opacity", type=float, help="Watermark opacity (0.0-1.0)")
parser.add_argument("--output", default="clawcut_render.mp4", help="Output filename")
args = parser.parse_args()
engine = ClawcutEngine()
render_options = {"width": 1080, "height": 1920, "zoom": 1.0, "mode": "cover", "watermark": False}
# 1. Load Preset
if args.preset:
loaded = engine.presets.load(args.preset)
if loaded:
render_options.update(loaded)
else:
print(f"Warning: Preset '{args.preset}' not found. Using defaults.")
# 2. CLI Overrides
if args.zoom: render_options["zoom"] = args.zoom
if args.mode: render_options["mode"] = args.mode
if args.title: render_options["title"] = args.title
if args.fontsize: render_options["font_size"] = args.fontsize
if args.margin: render_options["margin"] = args.margin
if args.watermark: render_options["watermark"] = True
if args.wm_pos: render_options["watermark_pos"] = args.wm_pos
if args.wm_x: render_options["watermark_x"] = args.wm_x
if args.wm_y: render_options["watermark_y"] = args.wm_y
if args.wm_opacity: render_options["watermark_opacity"] = args.wm_opacity
# 3. Execution
if args.url:
clip_path = engine.download_clip(args.url, args.start, args.duration, "temp_clip.mp4")
if clip_path:
final = engine.build_render([clip_path], args.output, render_options)
if final:
print(f"OUTPUT: {final}")
# For Pendig Tunnel Compatibility
if "media/clawcut" in final:
public_url = "https://claw-br1dg3.penadigital.tech/editor/media/clawcut/" + os.path.basename(final)
print(f"MEDIA: {public_url}")
if __name__ == "__main__":
main()