{"id":19687165,"url":"https://github.com/trinitronx/phototimer-script","last_synced_at":"2025-10-10T18:17:11.205Z","repository":{"id":43252355,"uuid":"114698654","full_name":"trinitronx/phototimer-script","owner":"trinitronx","description":null,"archived":false,"fork":false,"pushed_at":"2023-10-03T22:04:05.000Z","size":55,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-10T18:17:10.760Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trinitronx.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["trinitronx"],"liberapay":"trinitronx","custom":["https://paypal.me/JamesCuzella"]}},"created_at":"2017-12-18T23:43:19.000Z","updated_at":"2023-07-27T11:40:50.000Z","dependencies_parsed_at":"2024-11-11T18:48:27.667Z","dependency_job_id":null,"html_url":"https://github.com/trinitronx/phototimer-script","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/trinitronx/phototimer-script","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trinitronx%2Fphototimer-script","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trinitronx%2Fphototimer-script/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trinitronx%2Fphototimer-script/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trinitronx%2Fphototimer-script/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trinitronx","download_url":"https://codeload.github.com/trinitronx/phototimer-script/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trinitronx%2Fphototimer-script/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279004913,"owners_count":26083802,"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-10-10T02:00:06.843Z","response_time":62,"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":[],"created_at":"2024-11-11T18:33:17.519Z","updated_at":"2025-10-10T18:17:11.189Z","avatar_url":"https://github.com/trinitronx.png","language":"Shell","funding_links":["https://github.com/sponsors/trinitronx","https://liberapay.com/trinitronx","https://paypal.me/JamesCuzella","https://liberapay.com/trinitronx/donate"],"categories":[],"sub_categories":[],"readme":"# phototimer-scripts\n\nHelper scripts to process [phototimer][1] images.\n\n- *`phototimer-images-to-mp4.sh`*:\n  - Sort a path of timestamped phototimer images by frame timestamp, create a symlinked directory structure. Then, optionally add a timestamp overlay to each frame. Finally convert into a time-lapse `.mp4` (x264) video.\n- *`phototimer-images-timestamp-overlay-multithreaded.py`*:\n  - Python helper script to add timestamp overlay to each frame.  Uses multithreading to speed up image processing.  Dependencies are listed in `requirements.txt`.\n- *`phototimer-images-timestamp.py`*:\n  - Alternate python helper script to add timestamp overlay to each frame.  Does *_NOT_* use multithreading.  Dependencies are listed in `requirements.txt`, minus `multithreading`.\n\n## Sponsor\n\nIf you find this project useful and appreciate my work,\nwould you be willing to click one of the buttons below to Sponsor this project and help me continue?\n\n- \u003cnoscript\u003e\u003ca href=\"https://github.com/sponsors/trinitronx\"\u003e:heart: Sponsor\u003c/a\u003e\u003c/noscript\u003e\n- \u003cnoscript\u003e\u003ca href=\"https://liberapay.com/trinitronx/donate\"\u003e\u003cimg alt=\"Donate using Liberapay\" src=\"https://liberapay.com/assets/widgets/donate.svg\"\u003e\u003c/a\u003e\u003c/noscript\u003e\n- \u003cnoscript\u003e\u003ca href=\"https://paypal.me/JamesCuzella\"\u003e\u003cimg src=\"https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif\" border=\"0\" alt=\"Donate with PayPal\" /\u003e\u003c/a\u003e\u003c/noscript\u003e\n\nEvery little bit is appreciated! Thank you! 🙏\n\n\n# Dependencies / Requirements\n\n- *`phototimer-images-timestamp-overlay-multithreaded.py`*:\n  - `python3`: `\u003e= 3.7` preferred ([for threading bugfixes][2])\n    - `os`\n    - `datetime`\n    - `threading`\n  - `pip` packagess:\n    - multiprocess\n    - Pillow\n    - pytz\n- *`phototimer-images-timestamp.py`*:\n  - `python3`\n    - `os`\n    - `datetime`\n  - `pip` packagess:\n    - Pillow\n    - pytz\n- *`phototimer-images-to-mp4.sh`*:\n  - `bash`\n  - `ffmpeg`\n  - `find`\n  - CPU core detection requires one of the following commands:\n    - `sysctl -n hw.ncpu`\n    - `nproc --all`\n\n# Usage\n\n\n    ./phototimer-images-to-mp4.sh  Copyright (C) 2017  James Cuzella\n    This program comes with ABSOLUTELY NO WARRANTY; for details type './phototimer-images-to-mp4.sh -l'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; See 'LICENSE' file for details.\n    \n    Usage: ./phototimer-images-to-mp4.sh [-h] [-l] [-t] (-i input_phototimer_dir | ./path/to/phototimer )  (-o /path/to/output.mp4 | /path/to/output.mp4 )\n    \n    Sort a path of timestamped phototimer images by frame timestamp, create a symlinked directory structure, \n    optionally add a timestamp overlay to each frame, and convert into a time-lapse .mp4 (x264) video.\n    \n    All arguments except input directory and output file path are optional and have defaults.\n    \n    \n        -h                              Help. Display this usage message and exit.\n    \n        -l                              Show LICENSE file and exit.\n    \n        -v                              Output verbose debug messages.\n    \n        -n                              Dry run.\n                                        Echo all processing operations, but do not actually do anything.\n    \n        -t                              Add timestamp image overlay to each frame based on image naming scheme.\n                                        The default configuration is to add time \u0026 date stamp to bottom left of \n                                        all image frames before transcoding.\n                                        NOTE: This is an irreversible process and will edit \u0026 overwrite the original images!\n                                              It is recommended to run this on a copy of the originals\n                                        See Example below for timestamp file path naming scheme\n    \n        -i /path/to/phototimer/images/  Input path to directory containing time-lapse phototimer 'images/*'\n    \n        -o /path/to/output.mp4          Output filename to use for .mp4 time-lapse video\n                                        NOTE: This script will overwrite the output file without asking!\n    \n    \n        The phototimer directory should have strftime pattern: \n    \n            'images/%YYYY/%M/%d/%H/%YYYY_%M_%d_%H_%r.jpg'\n    \n        Example:\n    \n            'images/2017/6/9/18/2017_6_9_18_1497034611561.jpg'\n    \n        Note that this script is very minimal and will NOT handle every ordering case correctly\n    \n        It will also overwrite /path/to/output.mp4 without asking!\n\n\n# License\n\n[GPLv3][gplv3]\n\n[1]: https://github.com/alexellis/phototimer\n[2]: https://codewithoutrules.com/2017/08/16/concurrency-python/\n[gplv3]: https://choosealicense.com/licenses/gpl-3.0/\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrinitronx%2Fphototimer-script","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrinitronx%2Fphototimer-script","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrinitronx%2Fphototimer-script/lists"}