{"id":18143270,"url":"https://github.com/zhykos/autophoto","last_synced_at":"2026-05-04T11:40:31.707Z","repository":{"id":260525664,"uuid":"859460177","full_name":"Zhykos/autophoto","owner":"Zhykos","description":"📸 autophoto  ✨ A native application to automatically publish your photos","archived":false,"fork":false,"pushed_at":"2025-06-27T20:47:30.000Z","size":5291,"stargazers_count":0,"open_issues_count":19,"forks_count":0,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-06-27T21:32:14.404Z","etag":null,"topics":["automation","bluesky","bot","deno","native","photo","screenshot","typescript","video-game"],"latest_commit_sha":null,"homepage":"https://bsky.app/profile/galleryvideogames.bsky.social","language":"TypeScript","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/Zhykos.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":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-09-18T17:41:20.000Z","updated_at":"2025-06-27T20:47:21.000Z","dependencies_parsed_at":"2024-10-31T20:29:42.686Z","dependency_job_id":"22a6becb-3d96-49d1-935e-1bd696db5eac","html_url":"https://github.com/Zhykos/autophoto","commit_stats":null,"previous_names":["zhykos/autophoto"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/Zhykos/autophoto","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zhykos%2Fautophoto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zhykos%2Fautophoto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zhykos%2Fautophoto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zhykos%2Fautophoto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Zhykos","download_url":"https://codeload.github.com/Zhykos/autophoto/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zhykos%2Fautophoto/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273233240,"owners_count":25068725,"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-02T02:00:09.530Z","response_time":77,"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":["automation","bluesky","bot","deno","native","photo","screenshot","typescript","video-game"],"created_at":"2024-11-01T19:06:18.368Z","updated_at":"2026-05-04T11:40:31.675Z","avatar_url":"https://github.com/Zhykos.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cimg src=\"./doc/header.webp\" alt=\"\" width=\"200\"\u003e\n\u003c/h1\u003e\n\n# autophoto\n\n\u003ch4 align=\"center\"\u003eAn application to automatically publish your photos\u003c/h4\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"GitHub Actions Workflow Status\" src=\"https://img.shields.io/github/actions/workflow/status/Zhykos/autophoto/deno.yml?branch=main\u0026style=for-the-badge\"\u003e\n  \u003cimg alt=\"GitHub Release\" src=\"https://img.shields.io/github/v/release/Zhykos/autophoto?display_name=release\u0026style=for-the-badge\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#key-features\"\u003eKey Features\u003c/a\u003e •\n  \u003ca href=\"#how-to-use\"\u003eHow To Use\u003c/a\u003e •\n  \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e •\n  \u003ca href=\"#credits\"\u003eCredits\u003c/a\u003e •\n  \u003ca href=\"#authors\"\u003eAuthors\u003c/a\u003e •\n  \u003ca href=\"#license\"\u003eLicense\u003c/a\u003e •\n  \u003ca href=\"#projects-using-autophoto\"\u003eProjects using autophoto\u003c/a\u003e •\n  \u003ca href=\"#changelog\"\u003eChangelog\u003c/a\u003e\n\u003c/p\u003e\n\n![bluesky](doc/bluesky-post.webp)\n\n## Key Features\n\n* Publish photos (or images) to a remote server\n  - Only supports Bluesky\n  - Randomly select 4 photos and publish them\n* Pre-scan your directories for photos\n  - Photos are detected by a path pattern\n  - Check all detected photos if they are valid (for instance BlueSky has size limitations)\n* Scan your directory for photos\n  - For now only suppose to work with video game screenshots\n  - Photos are detected by a path pattern\n  - Save them into a file database\n* Publish database statistics\n* Application is build as native desktop app\n  - CLI based\n\n## How To Use\n\nFind the latest release [here](https://github.com/Zhykos/autophoto/releases).\nDownload the latest release for your platform and run the executable.\n\nRead the following instructions to use it with command lines.\n\n### Scan directories to save photos in a database\n\n#### Configuration file\n\nFirst, you need to configure the application to scan your directory for photos with a YAML configuration file.\n\nExample configuration file:\n\n```yaml\nautophoto:\n  scan:\n    - directory: ./test/resources/video-game\n      type: video-game\n      data-pattern:\n        regex: '^(.+) \\((\\d{4})\\)/(.+)/.+\\.webp$'\n        groups:\n          - title\n          - release-year\n          - platform\n```\n\nAs you can scan multiple directories, you can add multiple `scan` entries.\n\nA `scan` entry has the following properties:\n- `directory`: The directory to scan for photos\n- `type`: The type of photos to scan for (V1 only supports `video-game`)\n- `data-pattern`: The pattern to extract data from the photo path\n  - `regex`: The regex to match the photo path\n  - `groups`: The groups to extract from the regex (only the following groups are supported for now: `title`, `release-year`, `platform`)\n\nIn the example above, the application will scan the `./test/resources/video-game` directory for photos with the following path pattern:\n`{video game title} ({release-year})/{platform}/photo-name.webp`\n\n#### Run the application to pre-scan your directories (check)\n\nOnce you have your configuration file, you can run the application with the configuration file as argument: :\n\n```shell\nautophoto --prescan=./path/to/your/configuration-file.yaml\n```\n\nYou'll see the detected photos and if they are valid or not in the console.\n\n#### Run the application to scan your directories\n\nOnce you have your configuration file, you can run the application with the configuration file as argument: :\n\n```shell\nautophoto --scan=./path/to/your/configuration-file.yaml\n```\n\nThe scanned data are stored in a SQLite database in the `db.autophoto.sqlite3` file.\n\n### Publish your photos on Bluesky\n\nYou need a Bluesky account to publish your photos: [Bluesky](https://bsky.app/).\n\nThen run the application with the `--publish` option and your mandatory Bluesky credentials:\n\n```shell\nautophoto --publish --bluesky_login=your_login --bluesky_password=your_password\n```\n\nOptionnally, you can also specify the Bluesky URL with the `--bluesky_host` option:\n\n```shell\nautophoto --publish --bluesky_login=your_login --bluesky_password=your_password --bluesky_host=https://bsky.app\n```\n\n### Publish statistics (about your gallery) on Bluesky\n\nYou need a Bluesky account to publish statistics: [Bluesky](https://bsky.app/).\n\nThen run the application with the `--stats` option and your mandatory Bluesky credentials:\n\n```shell\nautophoto --stats --bluesky_login=your_login --bluesky_password=your_password\n```\n\nOptionnally, you can also specify the Bluesky URL with the `--bluesky_host` option:\n\n```shell\nautophoto --stats --bluesky_login=your_login --bluesky_password=your_password --bluesky_host=https://bsky.app\n```\n\n### Command line options and arguments for autophoto\n\nFor all actions (pre-scan, publish scan or stats), you can set other options in the command line.\n\n#### Specify where the database file is stored (to be written for scan or read for publish)\n\nYou can specify the path to the database file with the `--database` option:\n\n```shell\nautophoto --scan=./path/to/your/configuration-file.yaml --database=./path/to/your/database-file.sqlite3\n```\n\nThis option is not used for the pre-scan action.\n\n#### Debug mode\n\nYou also activate the debug mode with the `--debug` option:\n* When scanning, this will print the video games and photos detected.\n* When pusblishing, this will print the photos published.\n\nExample:\n\n```shell\nautophoto --publish --bluesky_login=your_login --bluesky_password=your_password --debug\n```\n\n#### Change the logger style\n\nYou can change the logger style with the `--logger` option:\n\n```shell\nautophoto --scan=./path/to/your/configuration-file.yaml --logger=batch\n```\n\nThe following styles are available:\n- `batch`: print only the essential and raw information\n- `console`: print all the information with style and colors\n\n`console` is the default style.\n\n## Contributing\n\n### Install the project\n\n#### Deno\n\nDeno is a runtime for JavaScript and TypeScript that is based on the V8 JavaScript engine and the Rust programming language.\n\nYou need to install Deno to run the project: https://docs.deno.com/runtime/getting_started/installation/.\n\n#### Lint and format\n\nActivate the linter and formater with Biome:\n\n```shell\ndeno add npm:@biomejs/biome@1.9.4\ndeno install --allow-scripts=npm:@biomejs/biome@1.9.4\n```\n\nYou'll be able to run the lint with the following command (Deno linter and Biome linter will be executed):\n\n```shell\ndeno task lint\n```\n\nYou'll be able to run the format with the following command (only use Biome formatter):\n\n```shell\ndeno task format\n```\n\n#### Git hooks\n\nYou can install the git hooks with the following command:\n\n```shell\ndeno task hook install\n```\n\nIt will run the linter and tests before each commit.\n\n### Run the app within the development environment and execute tasks into the real world\n\n#### Run the pre-scanner\n\nYou can execute a scan with the following command:\n\n```shell\ndeno task e2e:prescan\n```\n\n#### Run the scanner\n\nYou can execute a scan with the following command:\n\n```shell\ndeno task e2e:scan\n```\n\nIt will use the configuration files `config.yml` and `./test/resources/config2.yml`, and create a local database `./test/e2e-debug.sqlite3`.\n\n#### Publish images\n\n\u003e Careful this section will publish a message on a real Bluesky account!\n\nThere is a small debug database in this project (created with the previous paragraph `Run the scanner`). If you want to publish a statistics message, follow these instructions. Be sure to have your Bluesky credentials (email and password).\n\nYou can execute a publication with the following command:\n\n```shell\nLOGIN=your_login PASSWORD=your_password deno task e2e:publish\n```\n\n#### Publish statistics\n\n\u003e Careful this section will publish a message on a real Bluesky account!\n\nThere is a small debug database in this project (created with the previous paragraph `Run the scanner`). If you want to publish a statistics message, follow these instructions. Be sure to have your Bluesky credentials (email and password).\n\nYou can check a real execution with the following command line:\n\n```shell\nLOGIN=your_login PASSWORD=your_password deno task e2e:stats\n```\n\n### Run the tests\n\nYou can run the unit tests with the following command:\n\n```shell\ndeno task test\n```\n\nYou can run the coverage with the following command:\n\n```shell\ndeno task coverage\n```\n\nIt will generate a coverage report in the `coverage` directory and open it in your browser.\n\n### Send a contribution\n\nYou can optionnally create an issue to describe a new feature, a bug or something else.\n\nThen create a Pull Request (see non existing yet CONTRIBUTING.md file).\n\n## Credits\n\nThis software uses the following open source packages:\n\n- JavaScript runtime: [Deno 2](https://deno.com/)\n- Lint and format: [Biome](https://biomejs.dev/)\n- JavaScript Standards: [jsr.io](https://jsr.io/@std)\n- To publish on Bluesky: [atproto - For Bluesky](https://atproto.com/)\n- Multiformats library: [Multiformats](https://multiformats.io/)\n- Git hook: [Hook](https://deno.land/x/deno_hooks)\n- Diagrams: [Chart.js](https://www.chartjs.org/)\n- README template by [Amit Merchant](https://github.com/amitmerchant1990)\n- I wish to not generate a header with IA so I used an image by \u003ca href=\"https://unsplash.com/fr/@enikoo\"\u003eeniko kis\u003c/a\u003e on \u003ca href=\"https://unsplash.com/fr/photos/appareil-photo-instantane-polaroid-one-step-2-blanc-et-noir-sur-tableau-blanc-KsLPTsYaqIQ\"\u003eUnsplash\u003c/a\u003e\n\n## Authors\n\n- **Thomas Cicognani** - *Original creator* - [Zhykos](https://github.com/Zhykos)\n- **Andrea Valentini** - *Contributor* - [AndreVale69](https://github.com/AndreVale69)\n\n## License\n\n[MIT](https://opensource.org/license/MIT)\n\n## Projects using autophoto\n\n- [🖼️ Gallery of video games screenshots: more than 15.000 photos](https://bsky.app/profile/galleryvideogames.bsky.social)\n\n---\n\nThis project is also a space to learn and experiment with Deno, TypeScript, DDD and TDD.\nSo, if you have any suggestions, questions or want to chat, feel free to contact me.\nSome things already need to be improved, like the error handling, the architecture,\nthe domains, the performance, etc. So, if you want to help me, I will be happy to work with you.\n\n\u003e [zhykos.fr](https://www.zhykos.fr) \u0026nbsp;\u0026middot;\u0026nbsp;\n\u003e GitHub [@zhykos](https://github.com/Zhykos) \u0026nbsp;\u0026middot;\u0026nbsp;\n\u003e Bluesky [@zhykos](https://bsky.app/profile/zhykos.fr)\n\n---\n\n## Scripts\n\nIf you need to update the database or something else, some scripts exist because the application does not support some features yet.\n\nYou can find those scripts in the `scripts` directory:\n  - `setPublished.ts` updates the `published` property of an image: set a video game name and all its images will be set as published\n\nTo use a script, run this command (replace `xxx.ts` with an actual name):\n\n```shell\ncd scripts\ndeno run --allow-all --unstable-kv xxx.ts\n```\n\n---\n\n## Changelog\n\n* 1.0.0\n  - Initial release\n* Forgot to add the changelog\n* 2.1.0\n  - Remove the pick priority of directories which have at least 4 photos to publish\n* 2.2.0\n  - Fix number formats in logs (thanks to @AndreVale69)\n  - Add a logger style option (batch or console)\n  - Check PRs with GitHub Actions\n* 2.3.0\n  - Add \"PlayStation 4 (demo)\" platform\n* 2.4.0\n  - Add \"Xbox One (beta)\" platform\n  - New CLI option to publish statistics\n* 2.5.0\n  - Add \"Nintendo Switch (demo)\" platform\n  - Diagrams for statistics\n* 2.6.0\n  - Add some scripts to update the database\n  - Add \"Nintendo Switch 2\" platform\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhykos%2Fautophoto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhykos%2Fautophoto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhykos%2Fautophoto/lists"}