How to create a shared photo gallery for a private group?

Support intro

Sorry to hear you’re facing problems. :slightly_frowning_face:

The community help forum (help.nextcloud.com) is for home and non-enterprise users. Support is provided by other community members on a best effort / “as available” basis. All of those responding are volunteering their time to help you.

If you’re using Nextcloud in a business/critical setting, paid and SLA-based support services can be accessed via portal.nextcloud.com where Nextcloud engineers can help ensure your business keeps running smoothly.

Getting help

In order to help you as efficiently (and quickly!) as possible, please fill in as much of the below requested information as you can.

Before clicking submit: Please check if your query is already addressed via the following resources:

(Utilizing these existing resources is typically faster. It also helps reduce the load on our generous volunteers while elevating the signal to noise ratio of the forums otherwise arising from the same queries being posted repeatedly).

Some or all of the below information will be requested if it isn’t supplied; for fastest response please provide as much as you can. :heart:

The Basics

  • Nextcloud Server version (e.g., 29.x.x):
    • 34.0.2
  • Operating system and version (e.g., Ubuntu 24.04):
    • Linux 4.18.0-553.141.2.lve.el8.x86_64 x86_64
  • Web server and version (e.g, Apache 2.4.25):
    • Litespeed
  • Reverse proxy and version _(e.g. nginx 1.27.2)
    • N/A
  • PHP version (e.g, 8.3):
    • 8.5.7
  • Is this the first time you’ve seen this error? (Yes / No):
    • N/A
  • When did this problem seem to first start?
    • N/A
  • Installation method (e.g. AlO, NCP, Bare Metal/Archive, etc.)
    • AIO
  • Are you using CloudfIare, mod_security, or similar? (Yes / No)
    • N/A

Summary of the issue you are facing:

I want to create a shared photo gallery for extended family. Here’s how I’d like it to work.
Users who wish to store their images in the gallery would get their own accounts. Others would use a read-only account to view images without any write privileges. The gallery would not be publicly accessible (without a login of some sort).
Users could create as many albums as they need to organize their photos.
All photos and albums would automatically be viewable (read-only) by all other accounts. Multiple users could collaborate on specific albums, presumably via the use of groups.
I want to do all this within the Memories app, primarily because of its metadata capabilities.
That’s what I’d like, but I haven’t yet figured out the sharing and access parts.
How close to this scenario can I get with Nextcloud?

Steps to replicate it (hint: details matter!):

  1. N/A

Log entries

Nextcloud

Please provide the log entries from your Nextcloud log that are generated during the time of problem (via the Copy raw option from Administration settings->Logging screen or from your nextcloud.log located in your data directory). Feel free to use a pastebin/gist service if necessary.

N/A

Web Browser

If the problem is related to the Web interface, open your browser inspector Console and Network tabs while refreshing (reloading) and reproducing the problem. Provide any relevant output/errors here that appear.

N/A

Web server / Reverse Proxy

The output of your Apache/nginx/system log in /var/log/____:

N/A

Configuration

Nextcloud

The output of occ config:list system or similar is best, but, if not possible, the contents of your config.php file from /path/to/nextcloud is fine (make sure to remove any identifiable information!):

{
    "system": {
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": [
            "cloud.olinfamilysociety.org"
        ],
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "dbtype": "mysql",
        "version": "34.0.2.1",
        "overwrite.cli.url": "https:\/\/cloud.olinfamilysociety.org",
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbtableprefix": "oc_",
        "mysql.utf8mb4": true,
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "forbidden_filename_basenames": [
            "con",
            "prn",
            "aux",
            "nul",
            "com0",
            "com1",
            "com2",
            "com3",
            "com4",
            "com5",
            "com6",
            "com7",
            "com8",
            "com9",
            "com\u00b9",
            "com\u00b2",
            "com\u00b3",
            "lpt0",
            "lpt1",
            "lpt2",
            "lpt3",
            "lpt4",
            "lpt5",
            "lpt6",
            "lpt7",
            "lpt8",
            "lpt9",
            "lpt\u00b9",
            "lpt\u00b2",
            "lpt\u00b3"
        ],
        "forbidden_filename_characters": [
            "<",
            ">",
            ":",
            "\"",
            "|",
            "?",
            "*",
            "\\",
            "\/"
        ],
        "forbidden_filename_extensions": [
            " ",
            ".",
            ".filepart",
            ".part"
        ],
        "mail_domain": "***REMOVED SENSITIVE VALUE***",
        "mail_from_address": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpmode": "smtp",
        "mail_smtpsecure": "ssl",
        "mail_smtphost": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpport": "465",
        "mail_sendmailmode": "smtp",
        "mail_smtpstreamoptions": {
            "ssl": {
                "allow_self_signed": false,
                "verify_peer": true,
                "verify_peer_name": true
            }
        },
        "maintenance": false,
        "maintenance_window_start": 5,
        "config_preset": 2,
        "default_phone_region": "US",
        "memcache.local": "\\OC\\Memcache\\Redis",
        "memcache.distributed": "\\OC\\Memcache\\Redis",
        "redis": {
            "host": "***REMOVED SENSITIVE VALUE***",
            "port": 0
        },
        "memcache.locking": "\\OC\\Memcache\\Redis",
        "app_install_overwrite": [],
        "memories.db.triggers.fcu": true,
        "memories.vod.path": "\/home\/olinfami\/cloud.olinfamilysociety.org\/apps\/memories\/bin-ext\/go-vod-amd64",
        "enabledPreviewProviders": [
            "OC\\Preview\\Image",
            "OC\\Preview\\HEIC",
            "OC\\Preview\\TIFF"
        ],
        "preview_max_x": 1024,
        "preview_max_y": 1024,
        "memories.vod.disable": false,
        "memories.vod.ffmpeg": "\/home\/olinfami\/cloud.olinfamilysociety.org\/apps\/recognize\/node_modules\/ffmpeg-static\/ffmpeg",
        "memories.gis_type": 1,
        "memories.exiftool": "\/home\/olinfami\/cloud.olinfamilysociety.org\/apps\/memories\/bin-ext\/exiftool\/exiftool",
        "memories.exiftool_no_local": true,
        "memories.viewer.high_res_cond_default": "always"
    }
}

Apps

The output of occ app:list (if possible).

Enabled:
  - activity: 7.0.0
  - appstore: 1.0.0
  - bruteforcesettings: 7.0.0
  - circles: 34.0.0
  - cloud_federation_api: 1.18.0
  - comments: 1.24.0
  - contactsinteraction: 1.15.0
  - dashboard: 7.14.0
  - dav: 1.39.0
  - federatedfilesharing: 1.24.0
  - files: 2.6.0
  - files_downloadlimit: 5.2.0
  - files_lock: 34.0.1
  - files_pdfviewer: 7.0.0-dev.0
  - files_reminders: 1.7.0
  - files_sharing: 1.26.0
  - files_trashbin: 1.24.0
  - files_versions: 1.27.0
  - firstrunwizard: 7.0.0-dev.0
  - guests: 4.9.0
  - logreader: 7.0.0
  - lookup_server_connector: 1.22.0
  - memories: 8.1.0
  - nextcloud_announcements: 6.0.0
  - notifications: 7.0.0-dev.1
  - oauth2: 1.22.0
  - office: 1.0.0
  - password_policy: 6.0.0-dev.0
  - photos: 7.0.0
  - previewgenerator: 5.14.0
  - privacy: 6.0.0-dev.1
  - profile: 1.3.0
  - provisioning_api: 1.24.0
  - recognize: 12.0.0
  - recommendations: 7.0.0
  - related_resources: 5.0.0-dev.0
  - serverinfo: 6.0.0
  - settings: 1.17.0
  - sharebymail: 1.24.0
  - support: 6.0.0
  - survey_client: 6.0.0-dev.0
  - systemtags: 1.24.0
  - text: 8.0.0
  - theming: 2.9.0
  - twofactor_backupcodes: 1.23.0
  - twofactor_totp: 16.0.0
  - updatenotification: 1.24.0
  - user_status: 1.14.0
  - viewer: 7.0.0-dev.0
  - webhook_listeners: 1.6.0
  - workflowengine: 2.16.0
Disabled:
  - admin_audit: 1.24.0
  - app_api: 34.0.0 (installed 34.0.0)
  - encryption: 2.22.0
  - federation: 1.24.0 (installed 1.24.0)
  - files_external: 1.26.0
  - suspicious_login: 12.0.0-dev.0
  - twofactor_nextcloud_notification: 8.0.0
  - twofactor_webauthn: 2.7.0 (installed 2.7.0)
  - user_ldap: 1.25.0
  - user_migration: 10.4.0 (installed 10.4.0)
  - weather_status: 1.14.0 (installed 1.14.0)

Tips for increasing the likelihood of a response

  • Use the preformatted text formatting option in the editor for all log entries and configuration output.
  • If screenshots are useful, feel free to include them.
    • If possible, also include key error output in text form so it can be searched for.
  • Try to edit log output only minimally (if at all) so that it can be ran through analyzers / formatters by those trying to help you.

Anyone?

I’m still trying to figure out how close to this I can get, but I’m not there yet.

If you already know exactly what you want to achieve, then you’re practically there.
If I were you, I’d look into the “Guests” app. It allows you to set up very specific permissions and restrict which apps can be used. The best way to manage these permissions is by using groups: for example, a “Can Read Everything” group with read-only access to all posts, another group like “Can Edit Mike’s Photos” with editing rights for that specific folder, and so on. After that, you just need to add the right people to the right groups, and you’re almost done. You just have to think it through carefully once. You really can’t expect others to do it for you; all the tools are already there—you just have to implement it yourself.

Good luck!

h.t.h.


ernolf

Just my idea for you to look at Cloudparty its a shared filedrop.

I will try and setup a private Cloudparty, I’m interested in the outcome.

Cloudparty being public on the Internet may be compatible with this setup.

The important distinction is:

Publicly reachable ≠ publicly viewable.

You can have cloudparty reachable from the Internet while requiring a Nextcloud login before anybody can see the photographs. I would need to test this setup.

For your proposed setup, I’d structure it roughly like this:

  • User/admin — full administration.
  • Family members contributing photos — individual Nextcloud accounts with upload/write access.
  • View-only family — either individual accounts or a common family-viewer account.
  • Family group — everybody who should see the family collection.
  • Contributor group — people allowed to add/change photos.
  • Memories provides the photo browsing, timeline, metadata, albums, etc.
  • No public-share links unless you deliberately create one.

The one part I’d be cautious about is the idea that anything anybody uploads automatically becomes visible to every other family account. Nextcloud normally treats users’ files as private until they’re shared. Memories sits on top of Nextcloud’s file/sharing permissions rather than replacing them.

So the cleanest arrangement is probably a common Family Photos area rather than trying to make everyone’s entire private photo storage automatically cross-visible. Contributors could place family photographs into that shared area, while still retaining private storage elsewhere. Everybody in the family group gets read access to it, and selected contributors get write access.

That also gives you something quite nice:

cloudparty

├── my private files

├── Sister private files

├── Daughter private files

└── FAMILY PHOTOS

├── Mum & Dad

├── Childhood

├── Holidays

├── Weddings

├── WESDATA / Electronics

└── Family Albums

Memories can then index that shared photo collection and give you the metadata/timeline/photo-gallery experience you’re after.

And because cloudparty is Internet-facing, I’d keep anonymous/public shares disabled for this collection, enforce strong passwords, and ideally enable 2FA for the accounts that can upload or delete things. A read-only family account leaking its password is much less damaging than an account with delete/write permission.

So I’d say you’re quite close to the scenario you described. The main thing we need to design is the Nextcloud sharing structure underneath Memories.

I have spare Android TV Boxes to try Nextcloud on.

Hope that helps

Thanks. I’ll investigate further.

Interesting approach, but please don’t spend time on this on my behalf. I want to be able to hand this project off to someone likely with less technical proficiency, so I want to keep it as simple as possible. I’m pursuing some other suggestions I’ve received here and elsewhere.

Thanks again!

No problem at all. I understand — keeping it simple so somebody else can maintain it is a very good reason to go with a more conventional setup and supported setup.

I’ll probably continue experimenting with Cloudparty/Nextcloud anyway because I’m interested in seeing how far I can push it.

Good luck with the family gallery, and I’d be interested to hear what solution you eventually settle on.