{"id":13592967,"url":"https://github.com/hermanho/MMM-GooglePhotos","last_synced_at":"2025-04-09T02:32:01.012Z","repository":{"id":45972708,"uuid":"141707756","full_name":"hermanho/MMM-GooglePhotos","owner":"hermanho","description":"Display your photos on MagicMirror from Google Photos.","archived":false,"fork":false,"pushed_at":"2025-03-27T00:40:03.000Z","size":3153,"stargazers_count":182,"open_issues_count":27,"forks_count":63,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-04-03T22:11:12.639Z","etag":null,"topics":["google-photos","googlephotos","javascript","magicmirror","magicmirror2","nodejs","photos","raspberry-pi"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/hermanho.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2018-07-20T12:09:50.000Z","updated_at":"2025-04-03T19:16:14.000Z","dependencies_parsed_at":"2023-11-09T00:22:06.158Z","dependency_job_id":"b6acdf5c-fda7-46d9-9d4b-9debff8ee82d","html_url":"https://github.com/hermanho/MMM-GooglePhotos","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hermanho%2FMMM-GooglePhotos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hermanho%2FMMM-GooglePhotos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hermanho%2FMMM-GooglePhotos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hermanho%2FMMM-GooglePhotos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hermanho","download_url":"https://codeload.github.com/hermanho/MMM-GooglePhotos/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247965608,"owners_count":21025407,"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":["google-photos","googlephotos","javascript","magicmirror","magicmirror2","nodejs","photos","raspberry-pi"],"created_at":"2024-08-01T16:01:15.171Z","updated_at":"2025-04-09T02:31:56.001Z","avatar_url":"https://github.com/hermanho.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# MMM-GooglePhotos\n\nDisplay your photos from album of Google Photos on [MagicMirror²](https://github.com/MagicMirrorOrg/MagicMirror).\n\n## Screenshot\n\n![screenshot](images/screenshot.png)\n\n![screenshot](images/screenshot2.png)\n\n## Installation \u0026 Upgrade\n\n[INSTALL.md](INSTALL.md)\n\n## Configuration\n\n```javascript\n{\n  module: \"MMM-GooglePhotos\",\n  position: \"top_right\",\n  config: {\n    albums: [], // Set your album name. like [\"My wedding\", \"family share\", \"Travle to Paris\"]\n    updateInterval: 1000 * 60, // minimum 10 seconds.\n    sort: \"new\", // \"old\", \"random\"\n    uploadAlbum: null, // Only album created by `create_uploadable_album.js`.\n    condition: {\n      fromDate: null, // Or \"2018-03\", RFC ... format available\n      toDate: null, // Or \"2019-12-25\",\n      minWidth: null, // Or 400\n      maxWidth: null, // Or 8000\n      minHeight: null, // Or 400\n      maxHeight: null, // Or 8000\n      minWHRatio: null,\n      maxWHRatio: null,\n      // WHRatio = Width/Height ratio ( ==1 : Squared Photo,   \u003c 1 : Portraited Photo, \u003e 1 : Landscaped Photo)\n    },\n    showWidth: 1080, // These values will be used for quality of downloaded photos to show. real size to show in your MagicMirror region is recommended.\n    showHeight: 1920,\n    timeFormat: \"YYYY/MM/DD HH:mm\", // Or `relative` can be used.\n  }\n},\n```\n\n## Usage\n\n### `albums`\n\nNow this module can access not only your owns but also shared. You can specify album title like this.\n\n```js\nalbums: [\"My wedding\", \"family share\", \"Travle to Paris\", \"from Tom\"],\n```\n\n- Caution. Too many albums and photos could make long bootup delay.\n- Remember this. You can only show max 8640 photos in a day. Manage your album what to show, it will make better performance.\n\n### `updateInterval`\n\n- Minimum `updateInterval` is 10 seconds. Too often update could makes API quota drains or network burden.\n\n### `sort`\n\n- `new`, `old`, `random` are supported.\n\n#### **`uploadAlbum`**\n\n- If you set this, you can upload pictures from MagicMirror to Google Photos through `GPHOTO_UPLOAD` notification.\n\n```js\nthis.sendNotification(\"GPHOTO_UPLOAD\", path);\n```\n\n- This album **SHOULD** be created by `create_uploadable_album.js`.\n\n```sh\nnode create_uploadable_album.js MyMagicMirrorAlbum\n```\n\n- At this moment, `MMM-Selfieshot` and `MMM-TelegramBot` can upload their pictures through this feature.\n\n### `condition`\n\n- You can filter photos by this object.\n- `fromDate` : If set, The photos which was created after this value will be loaded. (e.g: `fromDate:\"2015-12-25\"` or `fromDate:\"6 Mar 17 21:22 UT\"`)\n- `toDate` : If set, The photos which was created before this value will be loaded. (e.g: `toDate:\"Mon 06 Mar 2017 21:22:23 z\"` or `toDate:\"20130208\"`)\n- ISO 8601 and RFC 2822 is supported for `fromDate` and `toDate`.\n- `minWidth`, `maxWidth`, `minHeight`, `maxHeight` : If set, the photos have these value as original dimensiont will be loaded. You can use these values to avoid too big or too small pictures(like icons)\n- `minWHRatio`, `maxWHRatio` : With these values, you can get only portrait photos(or landscaped, or squared)\n- **WHRatio** is `width / height`. So `=1` will be squared dimension. `\u003e1` will be landscaped. `\u003c1` will be portrait.\n- Example:\n\n```js\ncondition: {\n  fromDate: \"2018-01-01\", // I don't want older photos than this.\n  minWidth: 600, // I don't want to display some icons or meme-pictures from my garbage collecting albums.\n  maxWHRatio: 1, // I want to display photos which are portrait.\n}\n```\n\n### `showWidth`, `showHeight`\n\n- Specify your real resolution to show.\n\n### `timeFormat`\n\n- Specify time format for photo info. You can also use `relative` to show more humanized.\n\n### `debug`\n\n- If set, more detailed info will be logged.\n\n### `autoInfoPosition`\n\n- For preventing LCD burning, Photo info can be relocated by condition.\n  - `true` : automatically change position to each corner per 15 minutes.\n  - `false` : not using.\n  - callbackfunction (album, photo) : User can make his own position. It should return `[top, left, bottom, right]`\n\n```js\nautoInfoPosition: true, // or false\n\n// User custom callback\nautoInfoPosition: (album, photo)=\u003e {\n return ['10px', '10px', 'none', 'none'] // This will show photo info top-left corner.\n}\n\n```\n\n## Tip\n\n- Not to show photo info : Add this into your `css/custom.css`.\n\n```css\n#GPHOTO_INFO {\n  display: none;\n}\n```\n\n- To move photo info to other position (e.g: top-left corner): Add this into your `css/custom.css`.\n\n```css\n#GPHOTO_INFO {\n  top: 10px;\n  left: 10px;\n  bottom: inherit;\n  right: inherit;\n}\n```\n\n- Not to show blurred Background : Add this into your `css/custom.css`.\n\n```css\n#GPHOTO_BACK {\n  display: none;\n}\n```\n\n- To cover whole region with image : Add this into your `css/custom.css`.\n\n```css\n#GPHOTO_CURRENT {\n  background-size: cover;\n}\n```\n\n- To shrink image and be fully visible on smaller screens : Add this into your `css/custom.css`.\n\n```css\n#GPHOTO_CURRENT {\n  background-size: contain;\n}\n```\n\n- To display `clock` more clearly on showing in `fullscreen_below` : Add this into your `css/custom.css`.\n\n```css\n.clock {\n  padding: 10px;\n  background-color: rgba(0, 0, 0, 0.5);\n}\n```\n\n- To give opacity to photos:\n\n```CSS\n@keyframes trans {\n  from {opacity: 0}\n  to {opacity: 0.5}\n}\n#GPHOTO_CURRENT {\n  background-size:cover;\n  opacity:0.5;\n}\n```\n\n## Notice\n\n- First scanning will take a few (~dozens) seconds. Don't panic.\n- If there are 1000s of photos, this scan could take minutes(over 10). longer scans increase the probablity of an error happening. If a single error happens in the scan, it will retry after 1 hour. After first successful scan, subsequent startups should go very quickly(seconds).\n-\n\n## Last Tested\n\n- MagicMirror : v2.26.0\n- node.js : required over v18.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhermanho%2FMMM-GooglePhotos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhermanho%2FMMM-GooglePhotos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhermanho%2FMMM-GooglePhotos/lists"}