{ "_comment": "SWF Converter Configuration File. Keys with _ prefix are comments/metadata.", "_schema_reference": "See config_manager.py for full schema documentation.", "_defaults": { "_comment": "These apply to ALL SWF files unless overridden per-file.", "emulator": "ruffle", "loop_detection": "hash", "loop_grace": 5.0, "max_duration": 600.0, "fps": 30, "crf": 18, "window_size": "800x600", "startup_delay": 3.0, "audio": true }, "simple_animation.swf": { "_comment": "A basic non-interactive animation with a known loop point.", "end_seconds": 45.0, "interactions": [] }, "looping_intro.swf": { "_comment": "An animation that loops endlessly. Use hash detection + grace period.", "loop_detection": "hash", "loop_grace": 5.0, "interactions": [] }, "interactive_lesson.swf": { "_comment": "An interactive lesson with two choice buttons appearing at t=12.5s.", "loop_detection": "hash", "loop_grace": 5.0, "interactions": [ { "t": 12.5, "x": 320, "y": 240, "label": "button_yes", "_comment": "Clicking 'Yes' at the choice screen" }, { "t": 12.5, "x": 320, "y": 340, "label": "button_no", "_comment": "Clicking 'No' at the choice screen" } ] }, "quiz.swf": { "_comment": "A quiz with multiple questions. Each question has clickable answer areas.", "loop_detection": "hash", "loop_grace": 3.0, "interactions": [ { "t": 8.0, "x": 200, "y": 300, "label": "q1_answer_a" }, { "t": 8.0, "x": 200, "y": 380, "label": "q1_answer_b" }, { "t": 8.0, "x": 200, "y": 460, "label": "q1_answer_c" } ] }, "menu.swf": { "_comment": "A menu SWF with known end time. No loop detection needed.", "loop_detection": "none", "end_seconds": 30.0, "interactions": [] }, "problematic.swf": { "_comment": "A SWF that Ruffle struggles with — use Lightspark as fallback.", "emulator": "lightspark", "loop_detection": "freeze", "loop_grace": 5.0, "interactions": [] }, "high_quality_export.swf": { "_comment": "Export at higher quality for archival purposes.", "crf": 12, "fps": 60, "window_size": "1280x720", "loop_detection": "hash", "interactions": [] } }