memories/config/index.html

1135 lines
42 KiB
HTML
Raw Normal View History

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Steps to configure Memories for the best experience and performance">
<link rel="canonical" href="https://memories.gallery/config/">
<link rel="prev" href="../install/">
<link rel="next" href="../file-types/">
<link rel="icon" href="../assets/favicon.ico">
<meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.5.3">
<title>Configuration - Memories</title>
<link rel="stylesheet" href="../assets/stylesheets/main.50c56a3b.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<meta property="og:type" content="website" >
<meta property="og:title" content="Configuration - Memories" >
<meta property="og:description" content="Steps to configure Memories for the best experience and performance" >
<meta property="og:image" content="https://memories.gallery/assets/images/social/config.png" >
<meta property="og:image:type" content="image/png" >
<meta property="og:image:width" content="1200" >
<meta property="og:image:height" content="630" >
<meta property="og:url" content="https://memories.gallery/config/" >
<meta name="twitter:card" content="summary_large_image" >
<meta name="twitter:title" content="Configuration - Memories" >
<meta name="twitter:description" content="Steps to configure Memories for the best experience and performance" >
<meta name="twitter:image" content="https://memories.gallery/assets/images/social/config.png" >
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#configuration" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="Memories" class="md-header__button md-logo" aria-label="Memories" data-md-component="logo">
<img src="../assets/app.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Memories
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Configuration
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
</form>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/pulsejet/memories" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
pulsejet/memories
</div>
</a>
</div>
</nav>
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href=".." class="md-tabs__link">
Home
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../install/" class="md-tabs__link">
Getting started
</a>
</li>
<li class="md-tabs__item">
<a href="../faq/" class="md-tabs__link">
Support
</a>
</li>
</ul>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="Memories" class="md-nav__button md-logo" aria-label="Memories" data-md-component="logo">
<img src="../assets/app.svg" alt="logo">
</a>
Memories
</label>
<div class="md-nav__source">
<a href="https://github.com/pulsejet/memories" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
pulsejet/memories
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
<span class="md-ellipsis">
Getting started
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Getting started
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../install/" class="md-nav__link">
<span class="md-ellipsis">
Installation
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Configuration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Configuration
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#recommended-apps" class="md-nav__link">
<span class="md-ellipsis">
Recommended Apps
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#storage-support" class="md-nav__link">
<span class="md-ellipsis">
Storage Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#transcoding" class="md-nav__link">
<span class="md-ellipsis">
Transcoding
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#reverse-geocoding" class="md-nav__link">
<span class="md-ellipsis">
Reverse Geocoding
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#preview-storage" class="md-nav__link">
<span class="md-ellipsis">
Preview Storage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#header-logo" class="md-nav__link">
<span class="md-ellipsis">
Header Logo
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#migration" class="md-nav__link">
<span class="md-ellipsis">
Migration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#other-notes" class="md-nav__link">
<span class="md-ellipsis">
Other notes
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../file-types/" class="md-nav__link">
<span class="md-ellipsis">
File Type Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hw-transcoding/" class="md-nav__link">
<span class="md-ellipsis">
Hardware Transcoding
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../troubleshooting/" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../system-config/" class="md-nav__link">
<span class="md-ellipsis">
config.php options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../occ-commands/" class="md-nav__link">
<span class="md-ellipsis">
OCC commands
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
<span class="md-ellipsis">
Support
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Support
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../faq/" class="md-nav__link">
<span class="md-ellipsis">
Help and FAQ
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../changelog/" class="md-nav__link">
<span class="md-ellipsis">
Changelog
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../memories-vs-photos/" class="md-nav__link">
<span class="md-ellipsis">
Memories vs Photos
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../privacy/" class="md-nav__link">
<span class="md-ellipsis">
Privacy
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#recommended-apps" class="md-nav__link">
<span class="md-ellipsis">
Recommended Apps
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#storage-support" class="md-nav__link">
<span class="md-ellipsis">
Storage Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#transcoding" class="md-nav__link">
<span class="md-ellipsis">
Transcoding
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#reverse-geocoding" class="md-nav__link">
<span class="md-ellipsis">
Reverse Geocoding
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#preview-storage" class="md-nav__link">
<span class="md-ellipsis">
Preview Storage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#header-logo" class="md-nav__link">
<span class="md-ellipsis">
Header Logo
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#migration" class="md-nav__link">
<span class="md-ellipsis">
Migration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#other-notes" class="md-nav__link">
<span class="md-ellipsis">
Other notes
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/pulsejet/memories/blob/master/docs/config.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg>
</a>
<h1 id="configuration">Configuration</h1>
<div class="admonition success">
<p class="admonition-title">Use the admin interface</p>
<p>Starting with v5.0.0, you can fully configure memories using the admin panel. With an admin account in Nextcloud, go to <code>Settings -&gt; Memories</code>.
Using the admin interface for configuration is <strong>strongly recommended</strong> in most cases.</p>
</div>
<p>Memories runs a background indexing job to extract EXIF metadata from photos and videos, as well as immediately on every upload.</p>
<p>If you just installed memories and want to speed up indexing, run the following commands. For usage of the <code>occ</code> command line, refer <a href="https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/occ_command.html">here</a> for more information.</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>occ<span class="w"> </span>memories:places-setup<span class="w"> </span><span class="c1"># set up reverse geocoding, will force re-indexing</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>occ<span class="w"> </span>memories:index<span class="w"> </span><span class="c1"># index existing photo files (can run in parallel, refer to admin panel)</span>
</span></code></pre></div>
<div class="admonition question">
<p class="admonition-title">Cron</p>
<p>You <strong>DO NOT</strong> need to set up a cron job or run <code>occ memories:index</code> periodically, since this is handled internally.
Any subsequently uploaded files will be indexed automatically with hooks. In case you upload files externally and run
<code>files:scan</code>, the background job will index these files. Make sure Nextcloud cron is configured correctly.</p>
</div>
<div class="admonition tip">
<p class="admonition-title">OCC with Docker</p>
<p>If you are using docker, make sure you run these commands with an interactive TTY. For example,</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>docker<span class="w"> </span><span class="nb">exec</span><span class="w"> </span>-it<span class="w"> </span>my_nc_container<span class="w"> </span>php<span class="w"> </span>occ<span class="w"> </span>memories:index
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="c1"># ^^^ &lt;-- this is required</span>
</span></code></pre></div>
<p>If you are using Nextcloud AIO, see <a href="https://github.com/nextcloud/all-in-one#how-to-run-occ-commands">this documentation</a>.</p>
</div>
<h2 id="recommended-apps">Recommended Apps</h2>
<p>For the best experience and performance, the following apps are recommended.</p>
<ul>
<li><a href="https://github.com/nextcloud/previewgenerator">Preview Generator</a> - For pre-generating image previews (<strong>required</strong> for performance)</li>
<li><a href="https://github.com/nextcloud/recognize">Recognize</a> - The official Nextcloud app for AI tagging of images and people.</li>
<li><a href="https://github.com/nextcloud/photos">Photos</a> - The official Nextcloud Photos app, required for albums support.</li>
<li><a href="https://github.com/matiasdelellis/facerecognition">Face Recognition</a> - An alternative face recognition app, which offers more fine-tuning. Alpha stage integration.</li>
</ul>
<h2 id="storage-support">Storage Support</h2>
<p>Memories works out-of-the-box with most Nextcloud setups, including with external storage.</p>
<ul>
<li>If you upload any photos from outside of Nextcloud, you may need to run the <code>occ files:scan</code> and <code>occ memories:index</code> commands.</li>
<li>With external storage, indexing may be slow since all files must be downloaded.</li>
</ul>
<div class="admonition warning">
<p class="admonition-title">Transcoding with external storage</p>
<p>Video transcoding requires the entire file to be available locally for ffmpeg. To prevent downloading the
entire for every playback, transcoding is disabled for external storage.</p>
</div>
<h2 id="transcoding">Transcoding</h2>
<p>Memories bundles a <a href="https://github.com/pulsejet/memories/tree/master/go-vod">transcoding server</a> with HLS capabilites for adaptive streaming. You need to configure transcoding to be able to play any videos. HLS enables the browser to download the video as small chunks and in resolutions adaptive to the connection speed. As a result, this is usually expected to have a major boost in video experience and performance.</p>
<p>You can configure transcoding from the admin panel. Make sure to test all settings carefully on different kinds of videos.</p>
<p>Read the following considerations carefully regarding transcoding:</p>
<ol>
<li>In general, transcoding can be very compute intensive. If you run Nextcloud on an RPi, it will not work for you.</li>
<li>If you use external storage, transcoding might be very slow or not work at all. In this case, you should disable it.</li>
<li>Make sure there is a lot of space available in <code>/tmp</code> for the transcoded files.</li>
<li>If transcoding fails, the video player will fall back to the original video stream. Check the output of <code>/tmp/go-vod/&lt;instanceid&gt;.log</code></li>
<li>For better performance, you may configure the transcoder to use hardware acceleration. See <a href="../hw-transcoding/">this page</a>.</li>
</ol>
<div class="admonition tip">
<p class="admonition-title">Hardware Acceleration</p>
<p>Memories supports hardware acceleration for transcoding using VA-API and NVENC.
If you have compatible hardware, using acceleration can significantly improve performance.
See the instructions on <a href="../hw-transcoding/">this page</a> for more information.</p>
</div>
<h2 id="reverse-geocoding">Reverse Geocoding</h2>
<p>Reverse geocoding to find the location of photos. To set up geocoding you need to download the planet boundary dataset and store it in the database. This works only on MySQL / MariaDB / Postgres (no SQLite support). To set up reverse geocoding, go to the Memories admin panel.</p>
<div class="admonition info">
<p class="admonition-title">World map of photos</p>
<p>Reverse geocoding and the map of photos are <strong>two separate features</strong> and do not depend on each other.</p>
</div>
<h2 id="preview-storage">Preview Storage</h2>
<p>By default, previews upto <code>4096px</code> size are generated by Nextcloud. Each of the largest previews might be a few megabytes in size. This may not be ideal if you have limited storage space, since the preview size may become larger than the originals (especially if you use efficient image formats like HEIC). In this case, you can limit previews to a smaller size like <code>2048px</code>.</p>
<p>Note that Memories will, by default, load the full image upon zooming in. If you are okay with this, you may use a even smaller size like <code>1024px</code> to save more space as well as faster preview generation time. Non-JPEG files will be converted on the server when loading in full-res, which may lead to some server load. These options are also configurable through the admin panel.</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>occ<span class="w"> </span>config:system:set<span class="w"> </span>preview_max_x<span class="w"> </span>--value<span class="o">=</span><span class="s2">&quot;2048&quot;</span>
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>occ<span class="w"> </span>config:system:set<span class="w"> </span>preview_max_y<span class="w"> </span>--value<span class="o">=</span><span class="s2">&quot;2048&quot;</span>
</span></code></pre></div>
<p>You can also set the preview JPEG quality to 80 to save more space.</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>occ<span class="w"> </span>config:app:set<span class="w"> </span>preview<span class="w"> </span>jpeg_quality<span class="w"> </span>--value<span class="o">=</span><span class="s2">&quot;80&quot;</span>
</span></code></pre></div>
<p>If you already generated previews and want to regenerate, run the following (at your own risk; have backups)</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>rm<span class="w"> </span>-rf<span class="w"> </span>&lt;nextcloud-data-dir&gt;/appdata_*/preview
</span><span id="__span-4-2"><a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>occ<span class="w"> </span>files:scan-app-data
</span></code></pre></div>
<h2 id="header-logo">Header Logo</h2>
<p>Nextcloud supports customizing the logo for your instance. To properly theme the logo to match the user's theme, the logo you use in <code>Admninistration =&gt; Theming</code> must follow the following criteria:</p>
<ul>
<li>It must be an SVG file.</li>
<li>The <code>viewBox</code> attribute on the <code>&lt;svg&gt;</code> element must be set appropriately.</li>
<li>All paths that correspond to white areas must have the <code>fill</code> attribute set to <code>currentColor</code>. These areas will then automatically be colored according to the user's theme.</li>
<li>Since Nextcloud doesn't support <code>currentColor</code>, you must set the default value for the color (e.g. <code>white</code>) as an inline style on the <code>&lt;svg&gt;</code> element (<code>&lt;svg style="color:white"&gt;</code>).</li>
</ul>
<p>A sample SVG that follows these criteria is shown below (from <a href="https://github.com/pulsejet/memories/blob/master/src/assets/nextcloud.svg">here</a>):</p>
<div class="language-xml highlight"><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="nt">&lt;svg</span><span class="w"> </span><span class="na">viewBox=</span><span class="s">&quot;0 0 256 128&quot;</span><span class="w"> </span><span class="na">style=</span><span class="s">&quot;color:white&quot;</span><span class="w"> </span><span class="na">width=</span><span class="s">&quot;256&quot;</span><span class="w"> </span><span class="na">height=</span><span class="s">&quot;128&quot;</span><span class="w"> </span><span class="na">version=</span><span class="s">&quot;1.1&quot;</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">&quot;http://www.w3.org/2000/svg&quot;</span><span class="nt">&gt;</span>
</span><span id="__span-5-2"><a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="nt">&lt;path</span><span class="w"> </span><span class="na">fill=</span><span class="s">&quot;currentColor&quot;</span><span class="w"> </span><span class="na">d=</span><span class="s">&quot;m128 7c-25.871 0-47.817 17.485-54.713 41.209-5.9795-12.461-18.642-21.209-33.287-21.209-20.304 0-37 16.696-37 37s16.696 37 37 37c14.645 0 27.308-8.7481 33.287-21.209 6.8957 23.724 28.842 41.209 54.713 41.209s47.817-17.485 54.713-41.209c5.9795 12.461 18.642 21.209 33.287 21.209 20.304 0 37-16.696 37-37s-16.696-37-37-37c-14.645 0-27.308 8.7481-33.287 21.209-6.8957-23.724-28.842-41.209-54.713-41.209zm0 22c19.46 0 35 15.54 35 35s-15.54 35-35 35-35-15.54-35-35 15.54-35 35-35zm-88 20c8.4146 0 15 6.5854 15 15s-6.5854 15-15 15-15-6.5854-15-15 6.5854-15 15-15zm176 0c8.4146 0 15 6.5854 15 15s-6.5854 15-15 15-15-6.5854-15-15 6.5854-15 15-15z&quot;</span><span class="w"> </span><span class="nt">/&gt;</span>
</span><span id="__span-5-3"><a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="nt">&lt;/svg&gt;</span>
</span></code></pre></div>
<p>Note that you may skip these steps and also use a PNG file, but the logo will not be colored according to the user's theme. This can be especially troublesome since Nextcloud mostly shows the logo on a dark background while Memories uses both light and dark backgrounds.</p>
<h2 id="migration">Migration</h2>
<p>Memories directly uses EXIF metadata from files, so migration to and from other apps should be generally easy. The file structure of your photos is preserved as-is.</p>
<p>If you are migrating from Nextcloud Photos, you don't need to do anything. Your albums and tags will be carried to Memories as-is.</p>
<p>If you are migrating from Google Takeout, you may run the following command to move JSON metadata to EXIF.</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>occ<span class="w"> </span>memories:migrate-google-takeout
</span></code></pre></div>
<h2 id="other-notes">Other notes</h2>
<ul>
<li>Make sure your server timezone is configured correctly. If a photo does not contain an EXIF date, the server time is used.</li>
<li>Perform additional server tuning for Nextcloud. See <a href="/troubleshooting/#performance">performance</a> section of troubleshooting.</li>
<li>The archive feature moves photos to a separate folder called <code>.archive</code> at the root of your timeline or the current storage. You can, for example, mount this folder to a cold storage.</li>
</ul>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright &copy; 2022 - 2023 <a href="https://github.com/pulsejet">Varun Patil</a>
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a href="https://discord.gg/7Dr9f9vNjJ" target="_blank" rel="noopener" title="discord.gg" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M524.531 69.836a1.5 1.5 0 0 0-.764-.7A485.065 485.065 0 0 0 404.081 32.03a1.816 1.816 0 0 0-1.923.91 337.461 337.461 0 0 0-14.9 30.6 447.848 447.848 0 0 0-134.426 0 309.541 309.541 0 0 0-15.135-30.6 1.89 1.89 0 0 0-1.924-.91 483.689 483.689 0 0 0-119.688 37.107 1.712 1.712 0 0 0-.788.676C39.068 183.651 18.186 294.69 28.43 404.354a2.016 2.016 0 0 0 .765 1.375 487.666 487.666 0 0 0 146.825 74.189 1.9 1.9 0 0 0 2.063-.676A348.2 348.2 0 0 0 208.12 430.4a1.86 1.86 0 0 0-1.019-2.588 321.173 321.173 0 0 1-45.868-21.853 1.885 1.885 0 0 1-.185-3.126 251.047 251.047 0 0 0 9.109-7.137 1.819 1.819 0 0 1 1.9-.256c96.229 43.917 200.41 43.917 295.5 0a1.812 1.812 0 0 1 1.924.233 234.533 234.533 0 0 0 9.132 7.16 1.884 1.884 0 0 1-.162 3.126 301.407 301.407 0 0 1-45.89 21.83 1.875 1.875 0 0 0-1 2.611 391.055 391.055 0 0 0 30.014 48.815 1.864 1.864 0 0 0 2.063.7A486.048 486.048 0 0 0 610.7 405.729a1.882 1.882 0 0 0 .765-1.352c12.264-126.783-20.532-236.912-86.934-334.541ZM222.491 337.58c-28.972 0-52.844-26.587-52.844-59.239s23.409-59.241 52.844-59.241c29.665 0 53.306 26.82 52.843 59.239 0 32.654-23.41 59.241-52.843 59.241Zm195.38 0c-28.971 0-52.843-26.587-52.843-59.239s23.409-59.241 52.843-59.241c29.667 0 53.307 26.82 52.844 59.239 0 32.654-23.177 59.241-52.844 59.241Z"/></svg>
</a>
<a href="https://github.com/pulsejet/memories" target="_blank" rel="noopener" title="github.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://help.nextcloud.com/c/apps/memories/" target="_blank" rel="noopener" title="help.nextcloud.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z"/></svg>
</a>
<a href="https://play.google.com/store/apps/details?id=gallery.memories" target="_blank" rel="noopener" title="play.google.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M325.3 234.3 104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "content.action.edit"], "search": "../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../assets/javascripts/bundle.d7c377c4.min.js"></script>
</body>
</html>