{"id":28322349,"url":"https://github.com/moi15moi/fontcollector","last_synced_at":"2025-09-05T12:35:41.322Z","repository":{"id":37215210,"uuid":"479879883","full_name":"moi15moi/FontCollector","owner":"moi15moi","description":"FontCollector for Advanced SubStation Alpha file.","archived":false,"fork":false,"pushed_at":"2025-04-21T14:44:25.000Z","size":24470,"stargazers_count":42,"open_issues_count":5,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-18T05:19:41.451Z","etag":null,"topics":["advanced-substation-alpha","aegisub","ass","automation","fonts","python","subtitle","variable-fonts"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/FontCollector/","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/moi15moi.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,"zenodo":null}},"created_at":"2022-04-10T00:59:32.000Z","updated_at":"2025-06-01T13:06:51.000Z","dependencies_parsed_at":"2023-12-31T19:21:59.063Z","dependency_job_id":"93cb5acd-7b75-47a8-b42f-0beba1f0dfd5","html_url":"https://github.com/moi15moi/FontCollector","commit_stats":{"total_commits":134,"total_committers":2,"mean_commits":67.0,"dds":"0.31343283582089554","last_synced_commit":"96b636309efb0940bd001e538d37714c66218a63"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/moi15moi/FontCollector","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moi15moi%2FFontCollector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moi15moi%2FFontCollector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moi15moi%2FFontCollector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moi15moi%2FFontCollector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/moi15moi","download_url":"https://codeload.github.com/moi15moi/FontCollector/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moi15moi%2FFontCollector/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273758357,"owners_count":25162773,"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","status":"online","status_checked_at":"2025-09-05T02:00:09.113Z","response_time":402,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["advanced-substation-alpha","aegisub","ass","automation","fonts","python","subtitle","variable-fonts"],"created_at":"2025-05-25T14:09:42.546Z","updated_at":"2025-09-05T12:35:41.313Z","avatar_url":"https://github.com/moi15moi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FontCollector\n[![FontCollector - Version](https://img.shields.io/pypi/v/fontcollector.svg)](https://pypi.org/project/FontCollector)\n[![FontCollector - Python Version](https://img.shields.io/pypi/pyversions/fontcollector.svg)](https://pypi.org/project/FontCollector)\n[![FontCollector - Downloads](https://img.shields.io/pypi/dm/fontcollector.svg)](https://pypistats.org/packages/fontcollector)\n[![FontCollector - Coverage](https://img.shields.io/codecov/c/github/moi15moi/FontCollector)](https://app.codecov.io/github/moi15moi/FontCollector)\n[![FontCollector - mypy](https://img.shields.io/badge/mypy-checked-blue)](https://github.com/moi15moi/FontCollector/actions?query=branch:main)\n\nFontCollector for Advanced SubStation Alpha file.\nThis tool allows to recover and/or mux the fonts necessary in an mkv.\n## Installation\n```\npip install FontCollector\n```\n## Dependencies\n-  [MKVToolNix](https://www.fosshub.com/MKVToolNix.html)\n\n## Usage\n```console\n$ fontcollector --help\nusage: fontcollector [-h] --input [INPUT ...] [-mkv MKV] [--output OUTPUT] [-mkvpropedit MKVPROPEDIT] [--delete-fonts] [--additional-fonts ADDITIONAL_FONTS [ADDITIONAL_FONTS ...]]\n                     [--additional-fonts-recursive ADDITIONAL_FONTS_RECURSIVE [ADDITIONAL_FONTS_RECURSIVE ...]] [--exclude-system-fonts] [--collect-draw-fonts] [--dont-convert-variable-to-collection]\n                     [--logging [LOGGING]]\n\nFontCollector for Advanced SubStation Alpha file.\n\noptions:\n  -h, --help            show this help message and exit\n  --input [INPUT ...], -i [INPUT ...]\n                        Subtitles file. Must be an ASS file/directory. You can specify more than one .ass file/path.\n  -mkv MKV\n                        Video where the fonts will be merge. Must be a Matroska file.\n  --output OUTPUT, -o OUTPUT\n                        Destination path of the font. If -o and -mkv aren't specified, it will be the current path.\n  -mkvpropedit MKVPROPEDIT\n                        Path to mkvpropedit.exe if not in variable environments. If -mkv is not specified, it will do\n                        nothing.\n  --delete-fonts, -d\n                        If -d is specified, it will delete the font attached to the mkv before merging the new needed\n                        font. If -mkv is not specified, it will do nothing.\n  --additional-fonts ADDITIONAL_FONTS [ADDITIONAL_FONTS ...], -add-fonts ADDITIONAL_FONTS [ADDITIONAL_FONTS ...]\n                        May be a directory containing font files or a single font file. You can specify more than one\n                        additional-fonts.\n                        If it is a directory, it won't search recursively for fonts\n  --additional-fonts-recursive ADDITIONAL_FONTS_RECURSIVE [ADDITIONAL_FONTS_RECURSIVE ...], -add-fonts-rec ADDITIONAL_FONTS_RECURSIVE [ADDITIONAL_FONTS_RECURSIVE ...]\n                        Path to font directory, which will be recursively searched for fonts.\n  --exclude-system-fonts\n                        If specified, FontCollector won't use the system font to find the font used by an .ass file.\n  --collect-draw-fonts\n                        If specified, FontCollector will collect the font used by the draw. For more detail when this\n                        is usefull, see: https://github.com/libass/libass/issues/617\n  --dont-convert-variable-to-collection\n                        If specified, FontCollector won't convert variable font to a font collection. see: https://github.com/libass/libass/issues/386\n  --logging [LOGGING], -log [LOGGING]\n                        Destination path of log. If it isn't specified, it will be YYYY-MM-DD--HH-MM-SS_font_collector.log.\n```\n## Examples\nRecover fonts from 2 .ass files and save them in the current folder\n```\nfontCollector -i \"file1.ass\" \"file2.ass\"\n```\nTake all the .ass files from the current folder and save the font in the current folder\n```\nfontCollector -i .\n```\nMux font from .ass file into an mkv\n```\nfontCollector -i \"file1.ass\" -mkv \"example.mkv\" -mkvpropedit \"C:\\Program Files\\MKVToolNix\\mkvpropedit.exe\"\n```\n\nMux the font from the .ass file into an mkv and delete the currently attached fonts.\n```\nfontCollector -i \"file1.ass\" -mkv \"example.mkv\" -mkvpropedit \"C:\\Program Files\\MKVToolNix\\mkvpropedit.exe\" -d\n```\n## Variable Font\nSince [Libass](https://github.com/libass/libass/issues/386) does not support [variable font](https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview), this tool will automatically generate a [OpenType Font Collection](https://docs.microsoft.com/en-us/typography/opentype/spec/otff#font-collections). The generated collection is designed to simulate how [VSFilter](https://en.wikipedia.org/wiki/DirectVobSub)/[GDI](https://en.wikipedia.org/wiki/Graphics_Device_Interface) handles variable font.\n## Acknowledgments\n - [fontmerge](https://github.com/WheneverDev/fontmerge) for the idea to automatically merge the font into the mkv.\n - [Myaamori-Aegisub-Scripts](https://github.com/TypesettingTools/Myaamori-Aegisub-Scripts) Without this tool, I probably could never have created the fontCollector. I got a lot of inspiration from his work.\n - [PyonFX](https://github.com/CoffeeStraw/PyonFX) I inspired myself from his setup.py to create mine.\n - [rcombs](https://github.com/rcombs) for her help with how VSFilter pick font when faux-bold need to be applied.\n - [assfc](https://github.com/tp7/assfc) for all the idea behind the font_loader.\n - [Christopher Leung](https://www.linkedin.com/in/christopher-leung-755a291) for his help on how GDI handle variable font.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoi15moi%2Ffontcollector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoi15moi%2Ffontcollector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoi15moi%2Ffontcollector/lists"}