{"id":23520065,"url":"https://github.com/jessielw/frameforge","last_synced_at":"2025-04-19T17:54:11.235Z","repository":{"id":218962439,"uuid":"747805139","full_name":"jessielw/FrameForge","owner":"jessielw","description":"A CLI that utilizes VapourSynth to generator frame accurate comparison images (mirror)","archived":false,"fork":false,"pushed_at":"2025-03-29T05:37:43.000Z","size":136,"stargazers_count":9,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-29T06:23:00.667Z","etag":null,"topics":["accurate","automatic","cli","comparison","frame","generator","images","subtitle","vapoursynth","video"],"latest_commit_sha":null,"homepage":"https://jessielw.com/gitea/jlw_4049/FrameForge","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jessielw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-24T17:13:45.000Z","updated_at":"2025-02-19T19:51:32.000Z","dependencies_parsed_at":"2024-03-01T22:31:00.582Z","dependency_job_id":"55c7ffd5-2911-4948-bd50-ecd536152db8","html_url":"https://github.com/jessielw/FrameForge","commit_stats":null,"previous_names":["jlw4049/frameforge","jessielw/frameforge"],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jessielw%2FFrameForge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jessielw%2FFrameForge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jessielw%2FFrameForge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jessielw%2FFrameForge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jessielw","download_url":"https://codeload.github.com/jessielw/FrameForge/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249753428,"owners_count":21320687,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accurate","automatic","cli","comparison","frame","generator","images","subtitle","vapoursynth","video"],"created_at":"2024-12-25T16:11:49.820Z","updated_at":"2025-04-19T17:54:11.228Z","avatar_url":"https://github.com/jessielw.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Image-Generator\n\nA CLI to generate comparison image sets utilizing the power of VapourSynth\n\n## Usage\n\n```\nusage: FrameForge [-h] [-v] [--source SOURCE] [--encode ENCODE] [--fpng-compression {0,1,2}] [--frames FRAMES]\n                  [--image-dir IMAGE_DIR] [--indexer {lsmash,ffms2}] [--img-lib {imwri,fpng}]\n                  [--source-index-path SOURCE_INDEX_PATH] [--encode-index-path ENCODE_INDEX_PATH]\n                  [--left-crop LEFT_CROP] [--right-crop RIGHT_CROP] [--top-crop TOP_CROP] [--bottom-crop BOTTOM_CROP]\n                  [--adv-resize-left ADV_RESIZE_LEFT] [--adv-resize-right ADV_RESIZE_RIGHT]\n                  [--adv-resize-top ADV_RESIZE_TOP] [--adv-resize-bottom ADV_RESIZE_BOTTOM] [--tone-map]\n                  [--re-sync RE_SYNC] [--comparison-count COMPARISON_COUNT] [--start-trim START_TRIM]\n                  [--end-trim END_TRIM] [--sub-color SUB_COLOR] [--sub-secondary-color SUB_SECONDARY_COLOR]\n                  [--sub-outline-color SUB_OUTLINE_COLOR] [--sub-back-color SUB_BACK_COLOR] [--sub-size SUB_SIZE]\n                  [--sub-alignment {1,2,3,4,5,6,7,8,9}] [--sub-font-name SUB_FONT_NAME] [--sub-bold {0,1}]\n                  [--sub-italic {0,1}] [--sub-underline {0,1}] [--sub-strikeout {0,1}] [--sub-scale-x SUB_SCALE_X]\n                  [--sub-scale-y SUB_SCALE_Y] [--sub-spacing SUB_SPACING] [--sub-border-style {0,1,3}]\n                  [--sub-outline-width SUB_OUTLINE_WIDTH] [--sub-shadow-depth SUB_SHADOW_DEPTH]\n                  [--sub-left-margin SUB_LEFT_MARGIN] [--sub-right-margin SUB_RIGHT_MARGIN]\n                  [--sub-vertical-margin SUB_VERTICAL_MARGIN] [--source-sub-title SOURCE_SUB_TITLE]\n                  [--encode-sub-title ENCODE_SUB_TITLE]\n\noptions:\n  -h, --help            show this help message and exit\n  -v, --version         show program's version number and exit\n  --source SOURCE       Path to source file\n  --encode ENCODE       Path to encode file\n  --fpng-compression {0,1,2}\n                        fpng compression level (0 - fast, 1 - slow [default], 2 - uncompressed)\n  --frames FRAMES       Only use this if you want to specify the frames to generate, this disables sync frames\n  --image-dir IMAGE_DIR\n                        Path to base image folder\n  --indexer {lsmash,ffms2}\n                        Indexer choice\n  --img-lib {imwri,fpng}\n                        Image library to use\n  --source-index-path SOURCE_INDEX_PATH\n                        Path to look/create indexes for source\n  --encode-index-path ENCODE_INDEX_PATH\n                        Path to look/create indexes for encode\n  --left-crop LEFT_CROP\n                        Left crop\n  --right-crop RIGHT_CROP\n                        Right crop\n  --top-crop TOP_CROP   Top crop\n  --bottom-crop BOTTOM_CROP\n                        crop\n  --adv-resize-left ADV_RESIZE_LEFT\n                        Advanced resize left\n  --adv-resize-right ADV_RESIZE_RIGHT\n                        Advanced resize right\n  --adv-resize-top ADV_RESIZE_TOP\n                        Advanced resize top\n  --adv-resize-bottom ADV_RESIZE_BOTTOM\n                        Advanced resize bottom\n  --tone-map            HDR tone-mapping\n  --re-sync RE_SYNC     Sync offset for image generation in frames (i.e. --re-sync=-3)\n  --comparison-count COMPARISON_COUNT\n                        Amount of comparisons to generate\n  --start-trim START_TRIM\n                        Percentage to trim from start of media [choices 0 - 100] (defaults to 12%)\n  --end-trim END_TRIM   Percentage to trim from end of media [choices 0 - 100] (defaults to 12%)\n  --sub-color SUB_COLOR\n                        Hex color code for subtitle color (i.e. --sub-color \"#fff000\")\n  --sub-secondary-color SUB_SECONDARY_COLOR\n                        Hex color code for subtitle secondary color (i.e. --sub-color \"#fff000\")\n  --sub-outline-color SUB_OUTLINE_COLOR\n                        Hex color code for subtitle outline color (i.e. --sub-color \"#fff000\")\n  --sub-back-color SUB_BACK_COLOR\n                        Hex color code for subtitle back color (i.e. --sub-color \"#fff000\")\n  --sub-size SUB_SIZE   Size of subtitles\n  --sub-alignment {1,2,3,4,5,6,7,8,9}\n                        Alignment of subtitles (Alignment values are based on the numeric keypad. 1 - bottom left, 2 -\n                        bottom center, 3 - bottom right, 4 - center left, 5 - center center, 6 - center right, 7 - top\n                        left, 8 - top center, 9 - top right. In addition to determining the position of the subtitle,\n                        this also determines the alignment of the text itself)\n  --sub-font-name SUB_FONT_NAME\n                        Font name for subtitles\n  --sub-bold {0,1}      Bold formatting for subtitles (0=off, 1=on)\n  --sub-italic {0,1}    Italic formatting for subtitles (0=off, 1=on)\n  --sub-underline {0,1}\n                        Underline formatting for subtitles (0=off, 1=on)\n  --sub-strikeout {0,1}\n                        Strikeout formatting for subtitles (0=off, 1=on)\n  --sub-scale-x SUB_SCALE_X\n                        Subtitle X scale [choices 1 - 100] (defaults to '100')\n  --sub-scale-y SUB_SCALE_Y\n                        Subtitle Y scale [choices 1 - 100] (defaults to '100')\n  --sub-spacing SUB_SPACING\n                        Subtitle spacing (defaults to '0')\n  --sub-border-style {0,1,3}\n                        Subtitle border style (0=off, 1=outline, 3=opaque box) [defaults to '0']\n  --sub-outline-width SUB_OUTLINE_WIDTH\n                        Subtitle outline width (defaults to '1')\n  --sub-shadow-depth SUB_SHADOW_DEPTH\n                        Subtitle shadow depth (defaults to '0')\n  --sub-left-margin SUB_LEFT_MARGIN\n                        Subtitle left margin (defaults to '10')\n  --sub-right-margin SUB_RIGHT_MARGIN\n                        Subtitle right margin (defaults to '10')\n  --sub-vertical-margin SUB_VERTICAL_MARGIN\n                        Subtitle vertical margin (defaults to '10')\n  --source-sub-title SOURCE_SUB_TITLE\n                        Source group subtitle name (this will show on the source images)\n  --encode-sub-title ENCODE_SUB_TITLE, --release-sub-title ENCODE_SUB_TITLE\n                        Release group subtitle name (this will show on the encode images)\n```\n\n## Supports\n\nWindows 8 and up (x64).\nTechnically could support Linux/MacOS but binaries will only be compiled for Windows for now.\n\n## Requirements\n\nYou will need lsmash, ffms2, libfpng, libimwri, and SubText vapoursynth plugins. For windows\nI have compiled an executable with the needed runtime libraries.\n\n## Example Usage\n\n```\nFrameForge.exe --source \"path/Ant-Man.2015.mkv\" --encode \"path/Ant-Man.2015.Encoded.mkv\" --sub-size 12 --indexer lsmash --top-crop 22 --bottom-crop 22 --subtitle-color #00FF00\n\nIndexing source\n...\nSource index completed\n\nIndexing encode\n...\nEncode index completed\n\nChecking if encode has been de-interlaced\nNo de-interlacing detected\n\nGenerating 20 'B' frames for comparison images\nFinished generating 20 'B' frames\n\nCreating folders for images\nFolder creation completed\n\nGenerating screenshots, please wait\nWriting file: 01a_source__%d.png, frame: 25270\nWriting file: 02a_source__%d.png, frame: 30590\n...\n\nGenerating a few sync frames\nWriting file: 01b_encode__%d.png, frame: 35910\nWriting file: 02b_encode__%d.png, frame: 25270\n...\n\nScreen generation completed\nOutput: path/Ant-Man.2015_images/\n```\n\n[![04a_source__41230.png](https://thumbs2.imgbox.com/8d/47/X3l54wjy_t.png)](https://imgbox.com/X3l54wjy)\n[![04b_encode__41230.png](https://thumbs2.imgbox.com/07/65/WvJ55AZp_t.png)](https://imgbox.com/WvJ55AZp)\n\n[![11a_source__41230.png](https://thumbs2.imgbox.com/59/bd/woQpbay2_t.png)](https://imgbox.com/woQpbay2)\n[![11b_encode__41230.png](https://thumbs2.imgbox.com/96/24/WzCtO3dY_t.png)](https://imgbox.com/WzCtO3dY)\n\n[![16a_source__41230.png](https://thumbs2.imgbox.com/a8/5b/GftN1tCw_t.png)](https://imgbox.com/GftN1tCw)\n[![16b_encode__41230.png](https://thumbs2.imgbox.com/c2/94/tFhRztHT_t.png)](https://imgbox.com/tFhRztHT)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjessielw%2Fframeforge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjessielw%2Fframeforge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjessielw%2Fframeforge/lists"}