{"id":25255507,"url":"https://github.com/razvanfilea/FamilyPhotosServer","last_synced_at":"2025-10-27T01:31:26.037Z","repository":{"id":167357203,"uuid":"376744017","full_name":"TheLuckyCoder/FamilyPhotosServer","owner":"TheLuckyCoder","description":"Self hosted alternative to Google Photos written in Rust","archived":false,"fork":false,"pushed_at":"2025-01-27T17:59:52.000Z","size":577,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-27T18:47:15.623Z","etag":null,"topics":["axum","rust","self-hosted"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/TheLuckyCoder.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}},"created_at":"2021-06-14T07:46:22.000Z","updated_at":"2025-01-07T20:17:56.000Z","dependencies_parsed_at":"2024-01-02T01:48:03.249Z","dependency_job_id":"a49ccebe-9a86-4d38-a0fa-e33118406c9e","html_url":"https://github.com/TheLuckyCoder/FamilyPhotosServer","commit_stats":null,"previous_names":["theluckycoder/familyphotosserver"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheLuckyCoder%2FFamilyPhotosServer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheLuckyCoder%2FFamilyPhotosServer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheLuckyCoder%2FFamilyPhotosServer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheLuckyCoder%2FFamilyPhotosServer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TheLuckyCoder","download_url":"https://codeload.github.com/TheLuckyCoder/FamilyPhotosServer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238422549,"owners_count":19469548,"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":["axum","rust","self-hosted"],"created_at":"2025-02-12T05:56:31.963Z","updated_at":"2025-10-27T01:31:26.032Z","avatar_url":"https://github.com/TheLuckyCoder.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FamilyPhotos Server\n\nAn open source self-hosted photo and video server for your family written in Rust.\n\n## How to set up\n\nBuild the docker image, set up the environment variables and run the image.\u003cbr\u003e\n\nIt's expected that you run a proxy like Nginx to handle TLS if you need it.\n\n### Docker\n\nClone the repository and run the following command to build a docker image:\n\n```shell\ndocker build -t familyphotos .\n```\n\n### Docker Compose\n\nHere is an example of a Docker compose file\n\n```\nservices:\n   familyphotos:\n     container_name: familyphotos\n     image: familyphotos\n     volumes:\n       - /path/to/photos/folder/:/mnt/photos/\n     restart: always\n     ports:\n        8080:3000\n     environment:\n       SERVER_PORT: 3000\n       STORAGE_PATH: /mnt/photos/\n```\n\nBelow you can see all the environment variables that can be configured\n\n### Env Variables\n\nVariables in bold **must** be specified.\n\n- **SERVER_PORT**: The port the server should listen on\n- **STORAGE_PATH**: The path to the folder where the photos will be stored\n- DATABASE_URL: Alternative path for the database.\n  Must have the format \"sqlite:://path/to/database.db\" [default: in ${STORAGE_PATH}/.familyphotos.db]\n- PREVIEWS_PATH: Alternative storage path for photo previews (this, for example is useful when you want to store the\n  photos on an HDD but the previews on an SSD) [default: in ${STORAGE_PATH}/.preview]\n- SCAN_NEW_FILES: Scan the storage for external changes at startup and periodically [default: true]\n- BACKGROUND_THREADS_COUNT: Number of threads to use for background tasks [default: number of logical CPUs]\n\n### Creating user accounts\n\nTo create new user accounts, run the following command using the CLI:\u003cbr\u003e\n\n```shell\nfamilyphotos user create -u \u003cuser_name\u003e -d \u003cdisplay_name\u003e [-p \u003cpassword\u003e]\n```\n\nThis will generate a new user with the given username, display name and password or a random one if not provided.\u003cbr\u003e\n\n### Example Nginx Config with HTTPS\n\n```\nhttp {\n    upstream familyphotos {\n        zone upstreams 1M;\n        server 127.0.0.1:3000;\n        keepalive 2;\n    }\n\n    server {\n        # HTTPS Config\n        listen 443 ssl http2;\n        listen [::]:443 ssl http2;\n        ssl_certificate /path/to/certificate.pem;\n        ssl_certificate_key /path/to/privkey.pem;\n        ssl_protocols TLSv1.2 TLSv1.3;\n\n        server_name example.com;\n\n        # Recommended for Performance (optional)\n        sendfile on;\n        tcp_nopush on;\n        tcp_nodelay on;\n        proxy_http_version 1.1;\n        proxy_set_header \"Connection\" \"\";\n        proxy_buffers 4 2M;\n        proxy_buffer_size 1M;\n        proxy_busy_buffers_size 2M;\n\n        \n        location ~ ^/(.*)$ {\n            client_max_body_size 1G;\n            proxy_set_header X-Real-IP $remote_addr;\n            proxy_pass http://familyphotos/$1$is_args$args;\n            proxy_redirect off;\n        }\n    }\n}\n```\n\n## Folder structure\n\nThe server will generate the following folder structure in the STORAGE_PATH folder:\n\n```\n├───.familyphotos.db # Database (if not specified elsewhere)\n│\n├───.previews/ # Folder for previews (if not specified elsewhere)\n│\n├───public/ # The folder of the \"public\" user, alas photos who belong to everyone\n│   ├───\u003calbum_name\u003e/ # Folder for albums aka \"folders\"\n│   │   └───\u003cphoto_name\u003e # Photo files\n│   └───\u003cphoto_name\u003e # Photo files\n│\n└───\u003cuser_name\u003e/ # Folder for each individual user\n    ├───\u003calbum_name\u003e/ # Folder for albums aka \"folders\"\n    │   └───\u003cphoto_name\u003e # Photo files\n    └───\u003cphoto_name\u003e # Photo files\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frazvanfilea%2FFamilyPhotosServer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frazvanfilea%2FFamilyPhotosServer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frazvanfilea%2FFamilyPhotosServer/lists"}