{"id":27872400,"url":"https://github.com/thisloke/google-photo-sync-immich","last_synced_at":"2025-05-05T01:01:43.244Z","repository":{"id":289115185,"uuid":"970109766","full_name":"thisloke/google-photo-sync-immich","owner":"thisloke","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-21T16:01:55.000Z","size":8,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-21T16:37:35.899Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thisloke.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-04-21T13:42:01.000Z","updated_at":"2025-04-21T16:01:59.000Z","dependencies_parsed_at":"2025-04-21T16:48:45.309Z","dependency_job_id":null,"html_url":"https://github.com/thisloke/google-photo-sync-immich","commit_stats":null,"previous_names":["thisloke/google-photo-sync-immich"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisloke%2Fgoogle-photo-sync-immich","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisloke%2Fgoogle-photo-sync-immich/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisloke%2Fgoogle-photo-sync-immich/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisloke%2Fgoogle-photo-sync-immich/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thisloke","download_url":"https://codeload.github.com/thisloke/google-photo-sync-immich/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252420975,"owners_count":21745152,"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":[],"created_at":"2025-05-05T01:00:54.792Z","updated_at":"2025-05-05T01:01:43.236Z","avatar_url":"https://github.com/thisloke.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sincronizzazione Google Photos → Immich (TypeScript)\n\nQuesto progetto permette di sincronizzare automaticamente gli album condivisi di Google Photos con il tuo server Immich locale, scritto in TypeScript per una migliore manutenibilità e type safety.\n\n## Caratteristiche\n\n- Sincronizza foto da album specifici di Google Photos verso Immich\n- Forte tipizzazione con TypeScript per evitare errori comuni\n- Memorizza le foto già sincronizzate per evitare duplicati\n- Crea automaticamente gli album in Immich se non esistono\n- Supporta l'aggiornamento del token di autenticazione Google\n\n## Prerequisiti\n\n- Node.js (v14 o superiore)\n- TypeScript installato globalmente o localmente\n- Un server Immich funzionante\n- Un account Google con accesso agli album condivisi\n- Credenziali OAuth2 di Google Cloud Platform\n\n## Installazione\n\n1. Clona o scarica questo repository\n2. Installa le dipendenze:\n\n```bash\nnpm install\n```\n\n## Configurazione\n\n### 1. Ottenere le credenziali OAuth2 di Google\n\n1. Vai alla [Console Google Cloud](https://console.cloud.google.com/)\n2. Crea un nuovo progetto o seleziona uno esistente\n3. Vai a \"API e servizi\" \u003e \"Credenziali\"\n4. Clicca su \"Crea credenziali\" e seleziona \"ID client OAuth\"\n5. Configura l'applicazione come \"App web\"\n6. Aggiungi `http://localhost:3000/oauth2callback` come URI di reindirizzamento\n7. Salva il Client ID e il Client Secret\n\n### 2. Abilitare l'API di Google Photos\n\n1. Nella Console Google Cloud, vai a \"API e servizi\" \u003e \"Libreria\"\n2. Cerca \"Photos Library API\" e abilitala\n\n### 3. Ottenere l'API key di Immich\n\n1. Accedi alla tua interfaccia web di Immich\n2. Vai alle impostazioni del profilo\n3. Nella sezione \"API Keys\", genera una nuova chiave\n\n### 4. Configurare lo script\n\nModifica il file `google-photos-to-immich-sync.ts` e aggiorna la sezione `CONFIG`:\n\n```typescript\nconst CONFIG: Config = {\n  // Configurazione Google Photos\n  googlePhotos: {\n    clientId: 'TUO_CLIENT_ID', // Inserisci il tuo Client ID\n    clientSecret: 'TUO_CLIENT_SECRET', // Inserisci il tuo Client Secret\n    redirectUri: 'http://localhost:3000/oauth2callback',\n    scopes: ['https://www.googleapis.com/auth/photoslibrary.readonly'],\n    tokenPath: path.join(__dirname, 'google_token.json'),\n    // IDs degli album da sincronizzare\n    albumIds: [\n      'ID_ALBUM_1', // Puoi trovare questi ID nell'URL quando apri un album su Google Photos\n      'ID_ALBUM_2'\n    ]\n  },\n  // Configurazione Immich\n  immich: {\n    apiKey: 'TUA_API_KEY_IMMICH', // Inserisci la tua API key di Immich\n    serverUrl: 'http://localhost:3001/api', // Modifica con l'URL del tuo server Immich\n    albumNames: {\n      'ID_ALBUM_1': 'Nome Album 1 in Immich',\n      'ID_ALBUM_2': 'Nome Album 2 in Immich'\n    }\n  },\n  tempDir: path.join(__dirname, 'temp'),\n  syncedPhotosFile: path.join(__dirname, 'synced_photos.json')\n};\n```\n\n## Come trovare gli ID degli album di Google Photos\n\n1. Apri Google Photos nel browser\n2. Vai all'album di cui desideri l'ID\n3. L'URL avrà un formato simile a: `https://photos.google.com/album/ABC123XYZ`\n4. L'ID dell'album è la parte dopo `/album/` (in questo esempio, `ABC123XYZ`)\n\n## Utilizzo\n\n### Compilazione del codice TypeScript\n\nPrima di eseguire lo script, compila il codice TypeScript:\n\n```bash\nnpm run build\n```\n\n### Esecuzione\n\nPer eseguire lo script compilato:\n\n```bash\nnpm start\n```\n\nOppure, per sviluppo e test, puoi eseguirlo direttamente con ts-node:\n\n```bash\nnpm run dev\n```\n\n### Prima esecuzione\n\nLa prima volta che esegui lo script, ti verrà chiesto di autorizzare l'accesso a Google Photos:\n\n1. Ti verrà mostrato un URL da visitare\n2. Accedi con il tuo account Google e autorizza l'applicazione\n3. Copia il codice fornito e incollalo nella console\n4. Lo script inizierà la sincronizzazione\n\n### Esecuzioni successive\n\nNelle esecuzioni successive, lo script utilizzerà il token salvato in `google_token.json` e sincronizzerà solo le nuove foto.\n\n## Automatizzazione\n\nPer automatizzare la sincronizzazione, puoi configurare un cron job:\n\n```bash\n# Esempio: esegui la sincronizzazione ogni giorno alle 3:00\n0 3 * * * cd /percorso/al/progetto \u0026\u0026 npm start \u003e\u003e sync.log 2\u003e\u00261\n```\n\n## Estensione del codice\n\nIl codice TypeScript è strutturato con interfacce ben definite, rendendo facile l'estensione per aggiungere nuove funzionalità. Puoi facilmente:\n\n- Aggiungere supporto per filtri basati su metadata delle foto\n- Implementare la sincronizzazione bidirectionale\n- Creare una versione con interfaccia grafica\n\n## Risoluzione dei problemi\n\n- **Errore di compilazione TypeScript**: Verifica che tutte le dipendenze siano installate con `npm install` e che TypeScript sia installato\n- **Errore di autenticazione**: Elimina il file `google_token.json` e riavvia lo script\n- **Errore nel caricamento delle foto**: Verifica che l'API key di Immich sia corretta e che il server sia raggiungibile\n- **Errore nel recupero delle foto da Google**: Verifica che gli ID degli album siano corretti\n\n## Contributi\n\nContributi e miglioramenti sono benvenuti! Sentiti libero di inviare pull request o segnalare problemi.\n\n## Licenza\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthisloke%2Fgoogle-photo-sync-immich","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthisloke%2Fgoogle-photo-sync-immich","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthisloke%2Fgoogle-photo-sync-immich/lists"}