mirror of
				https://github.com/immich-app/immich
				synced 2025-10-17 18:19:27 +00:00 
			
		
		
		
	feat: move community projects and guides to immich-aweseome (#23016)
This commit is contained in:
		
							parent
							
								
									8b8012f89d
								
							
						
					
					
						commit
						3ea8d140a2
					
				
					 9 changed files with 8 additions and 298 deletions
				
			
		| 
						 | 
				
			
			@ -1,12 +0,0 @@
 | 
			
		|||
# Community Guides
 | 
			
		||||
 | 
			
		||||
This page lists community guides that are written around Immich, but not officially supported by the development team.
 | 
			
		||||
 | 
			
		||||
:::warning
 | 
			
		||||
This list comes with no guarantees about security, performance, reliability, or accuracy. Use at your own risk.
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
import CommunityGuides from '../src/components/community-guides.tsx';
 | 
			
		||||
import React from 'react';
 | 
			
		||||
 | 
			
		||||
<CommunityGuides />
 | 
			
		||||
| 
						 | 
				
			
			@ -1,12 +0,0 @@
 | 
			
		|||
# Community Projects
 | 
			
		||||
 | 
			
		||||
This page lists community projects that are built around Immich, but not officially supported by the development team.
 | 
			
		||||
 | 
			
		||||
:::warning
 | 
			
		||||
This list comes with no guarantees about security, performance, reliability, or accuracy. Use at your own risk.
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
import CommunityProjects from '../src/components/community-projects.tsx';
 | 
			
		||||
import React from 'react';
 | 
			
		||||
 | 
			
		||||
<CommunityProjects />
 | 
			
		||||
| 
						 | 
				
			
			@ -3,7 +3,6 @@ import { mdiCloudOffOutline, mdiCloudCheckOutline } from '@mdi/js';
 | 
			
		|||
import MobileAppDownload from '/docs/partials/_mobile-app-download.md';
 | 
			
		||||
import MobileAppLogin from '/docs/partials/_mobile-app-login.md';
 | 
			
		||||
import MobileAppBackup from '/docs/partials/_mobile-app-backup.md';
 | 
			
		||||
import { cloudDonePath, cloudOffPath } from '@site/src/components/svg-paths';
 | 
			
		||||
 | 
			
		||||
# Mobile App
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,108 +0,0 @@
 | 
			
		|||
import Link from '@docusaurus/Link';
 | 
			
		||||
import React from 'react';
 | 
			
		||||
 | 
			
		||||
interface CommunityGuidesProps {
 | 
			
		||||
  title: string;
 | 
			
		||||
  description: string;
 | 
			
		||||
  url: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const guides: CommunityGuidesProps[] = [
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Cloudflare Tunnels with SSO/OAuth',
 | 
			
		||||
    description: `Setting up Cloudflare Tunnels and a SaaS App for Immich.`,
 | 
			
		||||
    url: 'https://github.com/immich-app/immich/discussions/8299',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Database backup in TrueNAS',
 | 
			
		||||
    description: `Create a database backup with pgAdmin in TrueNAS.`,
 | 
			
		||||
    url: 'https://github.com/immich-app/immich/discussions/8809',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Unraid backup scripts',
 | 
			
		||||
    description: `Back up your assets in Unraid with a pre-prepared script.`,
 | 
			
		||||
    url: 'https://github.com/immich-app/immich/discussions/8416',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Sync folders with albums',
 | 
			
		||||
    description: `synchronize folders in imported library with albums having the folders name.`,
 | 
			
		||||
    url: 'https://github.com/immich-app/immich/discussions/3382',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Podman Quadlets Handbook',
 | 
			
		||||
    description:
 | 
			
		||||
      'A rewrite of the original Immich Docker Compose file using Podman Quadlets, with a set of extra guides in the repository’s wiki.',
 | 
			
		||||
    url: 'https://github.com/linux-universe/immich-podman-quadlets/blob/main/README.md',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Podman/Quadlets Install',
 | 
			
		||||
    description: 'Documentation for simple podman setup using quadlets.',
 | 
			
		||||
    url: 'https://github.com/tbelway/immich-podman-quadlets/blob/main/docs/install/podman-quadlet.md',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Google Photos import + albums',
 | 
			
		||||
    description: 'Import your Google Photos files into Immich and add your albums.',
 | 
			
		||||
    url: 'https://github.com/immich-app/immich/discussions/1340',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Access Immich with custom domain',
 | 
			
		||||
    description: 'Access your local Immich installation over the internet using your own domain.',
 | 
			
		||||
    url: 'https://github.com/ppr88/immich-guides/blob/main/open-immich-custom-domain.md',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Nginx caching map server',
 | 
			
		||||
    description: 'Increase privacy by using nginx as a caching proxy in front of a map tile server.',
 | 
			
		||||
    url: 'https://github.com/pcouy/pcouy.github.io/blob/main/_posts/2024-08-30-proxying-a-map-tile-server-for-increased-privacy.md',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'fail2ban setup instructions',
 | 
			
		||||
    description: 'How to configure an existing fail2ban installation to block incorrect login attempts.',
 | 
			
		||||
    url: 'https://github.com/immich-app/immich/discussions/3243#discussioncomment-6681948',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich remote access with NordVPN Meshnet',
 | 
			
		||||
    description: 'Access Immich with an end-to-end encrypted connection.',
 | 
			
		||||
    url: 'https://meshnet.nordvpn.com/how-to/remote-files-media-access/immich-remote-access',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Trust Self Signed Certificates with Immich - OAuth Setup',
 | 
			
		||||
    description:
 | 
			
		||||
      'Set up Certificate Authority trust with Immich, and your private OAuth2/OpenID service, while using a private CA for HTTPS commication.',
 | 
			
		||||
    url: 'https://github.com/immich-app/immich/discussions/18614',
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
function CommunityGuide({ title, description, url }: CommunityGuidesProps): JSX.Element {
 | 
			
		||||
  return (
 | 
			
		||||
    <section className="flex flex-col gap-4 justify-between dark:bg-immich-dark-gray bg-immich-gray dark:border-0 border-gray-200 border border-solid rounded-2xl px-4 py-6">
 | 
			
		||||
      <div className="flex flex-col gap-2">
 | 
			
		||||
        <p className="m-0 items-start flex gap-2 text-2xl font-bold text-immich-primary dark:text-immich-dark-primary">
 | 
			
		||||
          <span>{title}</span>
 | 
			
		||||
        </p>
 | 
			
		||||
 | 
			
		||||
        <p className="m-0 text-sm text-gray-600 dark:text-gray-300">{description}</p>
 | 
			
		||||
        <p className="m-0 text-sm text-gray-600 dark:text-gray-300 my-4">
 | 
			
		||||
          <a href={url}>{url}</a>
 | 
			
		||||
        </p>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div className="flex">
 | 
			
		||||
        <Link
 | 
			
		||||
          className="px-4 py-2 bg-immich-primary/10 dark:bg-gray-300 rounded-xl text-sm hover:no-underline text-immich-primary dark:text-immich-dark-bg font-semibold"
 | 
			
		||||
          to={url}
 | 
			
		||||
        >
 | 
			
		||||
          View Guide
 | 
			
		||||
        </Link>
 | 
			
		||||
      </div>
 | 
			
		||||
    </section>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default function CommunityGuides(): JSX.Element {
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="grid grid-cols-1 xl:grid-cols-2 gap-4">
 | 
			
		||||
      {guides.map((guides) => (
 | 
			
		||||
        <CommunityGuide {...guides} />
 | 
			
		||||
      ))}
 | 
			
		||||
    </div>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,158 +0,0 @@
 | 
			
		|||
import Link from '@docusaurus/Link';
 | 
			
		||||
import React from 'react';
 | 
			
		||||
 | 
			
		||||
interface CommunityProjectProps {
 | 
			
		||||
  title: string;
 | 
			
		||||
  description: string;
 | 
			
		||||
  url: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const projects: CommunityProjectProps[] = [
 | 
			
		||||
  {
 | 
			
		||||
    title: 'immich-go',
 | 
			
		||||
    description: `An alternative to the immich-CLI that doesn't depend on nodejs. It specializes in importing Google Photos Takeout archives.`,
 | 
			
		||||
    url: 'https://github.com/simulot/immich-go',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'ImmichFrame',
 | 
			
		||||
    description: 'Run an Immich slideshow in a photo frame.',
 | 
			
		||||
    url: 'https://github.com/3rob3/ImmichFrame',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'API Album Sync',
 | 
			
		||||
    description: 'A Python script to sync folders as albums.',
 | 
			
		||||
    url: 'https://git.orenit.solutions/open/immichalbumpull',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich-Tools',
 | 
			
		||||
    description: 'Provides scripts for handling problems on the repair page.',
 | 
			
		||||
    url: 'https://github.com/clumsyCoder00/Immich-Tools',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Lightroom Publisher: mi.Immich.Publisher',
 | 
			
		||||
    description: 'Lightroom plugin to publish photos from Lightroom collections to Immich albums.',
 | 
			
		||||
    url: 'https://github.com/midzelis/mi.Immich.Publisher',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Lightroom Immich Plugin: lrc-immich-plugin',
 | 
			
		||||
    description:
 | 
			
		||||
      'Lightroom plugin to publish, export photos from Lightroom to Immich. Import from Immich to Lightroom is also supported.',
 | 
			
		||||
    url: 'https://blog.fokuspunk.de/lrc-immich-plugin/',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich-Tiktok-Remover',
 | 
			
		||||
    description: 'Script to search for and remove TikTok videos from your Immich library.',
 | 
			
		||||
    url: 'https://github.com/mxc2/immich-tiktok-remover',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Android TV',
 | 
			
		||||
    description: 'Unofficial Immich Android TV app.',
 | 
			
		||||
    url: 'https://github.com/giejay/Immich-Android-TV',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Create albums from folders',
 | 
			
		||||
    description: 'A Python script to create albums based on the folder structure of an external library.',
 | 
			
		||||
    url: 'https://github.com/Salvoxia/immich-folder-album-creator',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Powershell Module PSImmich',
 | 
			
		||||
    description: 'Powershell Module for the Immich API',
 | 
			
		||||
    url: 'https://github.com/hanpq/PSImmich',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Distribution',
 | 
			
		||||
    description: 'Snap package for easy install and zero-care auto updates of Immich. Self-hosted photo management.',
 | 
			
		||||
    url: 'https://immich-distribution.nsg.cc',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Kiosk',
 | 
			
		||||
    description: 'Lightweight slideshow to run on kiosk devices and browsers.',
 | 
			
		||||
    url: 'https://github.com/damongolding/immich-kiosk',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Power Tools',
 | 
			
		||||
    description: 'Power tools for organizing your immich library.',
 | 
			
		||||
    url: 'https://github.com/varun-raj/immich-power-tools',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Public Proxy',
 | 
			
		||||
    description:
 | 
			
		||||
      'Share your Immich photos and albums in a safe way without exposing your Immich instance to the public.',
 | 
			
		||||
    url: 'https://github.com/alangrainger/immich-public-proxy',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Kodi',
 | 
			
		||||
    description: 'Unofficial Kodi plugin for Immich.',
 | 
			
		||||
    url: 'https://github.com/vladd11/immich-kodi',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Downloader',
 | 
			
		||||
    description: 'Downloads a configurable number of random photos based on people or album ID.',
 | 
			
		||||
    url: 'https://github.com/jon6fingrs/immich-dl',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Upload Optimizer',
 | 
			
		||||
    description: 'Automatically optimize files uploaded to Immich in order to save storage space',
 | 
			
		||||
    url: 'https://github.com/miguelangel-nubla/immich-upload-optimizer',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Machine Learning Load Balancer',
 | 
			
		||||
    description: 'Speed up your machine learning by load balancing your requests to multiple computers',
 | 
			
		||||
    url: 'https://github.com/apetersson/immich_ml_balancer',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Drop Uploader',
 | 
			
		||||
    description: 'A tiny, zero-login web app for collecting photos/videos from anyone into your Immich server.',
 | 
			
		||||
    url: 'https://github.com/Nasogaa/immich-drop',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Birthday Sync',
 | 
			
		||||
    description: 'Bulk-upload and -download birthdays, with CardDAV sync support',
 | 
			
		||||
    url: 'https://github.com/sid3windr/immich-birthday',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Stack',
 | 
			
		||||
    description: 'Auto-stack photos with identical filenames and differing extensions (i.e. JPG+RAW)',
 | 
			
		||||
    url: 'https://github.com/sid3windr/immich-stack',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Immich Stack',
 | 
			
		||||
    description: 'Automatically groups similar photos into stacks within the Immich photo management system.',
 | 
			
		||||
    url: 'https://github.com/Majorfi/immich-stack/',
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element {
 | 
			
		||||
  return (
 | 
			
		||||
    <section className="flex flex-col gap-4 justify-between dark:bg-immich-dark-gray bg-immich-gray dark:border-0 border-gray-200 border border-solid rounded-2xl px-4 py-6">
 | 
			
		||||
      <div className="flex flex-col gap-2">
 | 
			
		||||
        <p className="m-0 items-start flex gap-2 text-2xl font-bold text-immich-primary dark:text-immich-dark-primary">
 | 
			
		||||
          <span>{title}</span>
 | 
			
		||||
        </p>
 | 
			
		||||
 | 
			
		||||
        <p className="m-0 text-sm text-gray-600 dark:text-gray-300">{description}</p>
 | 
			
		||||
        <p className="m-0 text-sm text-gray-600 dark:text-gray-300 my-4">
 | 
			
		||||
          <a href={url}>{url}</a>
 | 
			
		||||
        </p>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div className="flex">
 | 
			
		||||
        <Link
 | 
			
		||||
          className="px-4 py-2 bg-immich-primary/10 dark:bg-gray-300 rounded-xl text-sm hover:no-underline text-immich-primary dark:text-immich-dark-bg font-semibold"
 | 
			
		||||
          to={url}
 | 
			
		||||
        >
 | 
			
		||||
          View Link
 | 
			
		||||
        </Link>
 | 
			
		||||
      </div>
 | 
			
		||||
    </section>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default function CommunityProjects(): JSX.Element {
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="grid grid-cols-1 xl:grid-cols-2 gap-4">
 | 
			
		||||
      {projects.map((project) => (
 | 
			
		||||
        <CommunityProject {...project} />
 | 
			
		||||
      ))}
 | 
			
		||||
    </div>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +0,0 @@
 | 
			
		|||
export const discordPath =
 | 
			
		||||
  'M81.15,0c-1.2376,2.1973-2.3489,4.4704-3.3591,6.794-9.5975-1.4396-19.3718-1.4396-28.9945,0-.985-2.3236-2.1216-4.5967-3.3591-6.794-9.0166,1.5407-17.8059,4.2431-26.1405,8.0568C2.779,32.5304-1.6914,56.3725.5312,79.8863c9.6732,7.1476,20.5083,12.603,32.0505,16.0884,2.6014-3.4854,4.8998-7.1981,6.8698-11.0623-3.738-1.3891-7.3497-3.1318-10.8098-5.1523.9092-.6567,1.7932-1.3386,2.6519-1.9953,20.281,9.547,43.7696,9.547,64.0758,0,.8587.7072,1.7427,1.3891,2.6519,1.9953-3.4601,2.0457-7.0718,3.7632-10.835,5.1776,1.97,3.8642,4.2683,7.5769,6.8698,11.0623,11.5419-3.4854,22.3769-8.9156,32.0509-16.0631,2.626-27.2771-4.496-50.9172-18.817-71.8548C98.9811,4.2684,90.1918,1.5659,81.1752.0505l-.0252-.0505ZM42.2802,65.4144c-6.2383,0-11.4159-5.6575-11.4159-12.6535s4.9755-12.6788,11.3907-12.6788,11.5169,5.708,11.4159,12.6788c-.101,6.9708-5.026,12.6535-11.3907,12.6535ZM84.3576,65.4144c-6.2637,0-11.3907-5.6575-11.3907-12.6535s4.9755-12.6788,11.3907-12.6788,11.4917,5.708,11.3906,12.6788c-.101,6.9708-5.026,12.6535-11.3906,12.6535Z';
 | 
			
		||||
export const discordViewBox = '0 0 126.644 96';
 | 
			
		||||
							
								
								
									
										6
									
								
								docs/static/_redirects
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								docs/static/_redirects
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -27,8 +27,10 @@
 | 
			
		|||
/administration/password-login /administration/system-settings 307
 | 
			
		||||
/features/search /features/searching 307
 | 
			
		||||
/features/smart-search /features/searching 307
 | 
			
		||||
/guides/api-album-sync /community-projects 307
 | 
			
		||||
/guides/remove-offline-files /community-projects 307
 | 
			
		||||
/guides/api-album-sync https://awesome.immich.app/ 307
 | 
			
		||||
/guides/remove-offline-files https://awesome.immich.app/ 307
 | 
			
		||||
/community-guides https://awesome.immich.app/ 307
 | 
			
		||||
/community-projects https://awesome.immich.app/ 307
 | 
			
		||||
/overview/introduction /overview/quick-start 307
 | 
			
		||||
/overview/welcome /overview/quick-start 307
 | 
			
		||||
/docs/* /:splat 307
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,9 @@ export async function up(db: Kysely<any>): Promise<void> {
 | 
			
		|||
      rows: [lastMigration],
 | 
			
		||||
    } = await lastMigrationSql.execute(db);
 | 
			
		||||
    if (lastMigration?.name !== 'AddMissingIndex1744910873956') {
 | 
			
		||||
      throw new Error('Invalid upgrade path. For more information, see https://immich.app/errors#typeorm-upgrade');
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        'Invalid upgrade path. For more information, see https://docs.immich.app/errors/#typeorm-upgrade',
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    logger.log('Database has up to date TypeORM migrations, skipping initial Kysely migration');
 | 
			
		||||
    return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -115,7 +115,7 @@ export class StorageService extends BaseService {
 | 
			
		|||
 | 
			
		||||
          if (!path.startsWith(previous)) {
 | 
			
		||||
            throw new Error(
 | 
			
		||||
              'Detected an inconsistent media location. For more information, see https://immich.app/errors#inconsistent-media-location',
 | 
			
		||||
              'Detected an inconsistent media location. For more information, see https://docs.immich.app/errors#inconsistent-media-location',
 | 
			
		||||
            );
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue