> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kombify.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Copia de seguridad de fotos desde tu teléfono

> Conecta tu teléfono a tu servidor de fotos, desde el primer arranque de la app hasta tu primera foto subida.

export const PhotoGuideSummary = ({children, ...props}) => {
  const Tag = "summary";
  return <Tag {...props}>{children}</Tag>;
};

export const PhotoGuideStrong = ({children, ...props}) => {
  const Tag = "strong";
  return <Tag {...props}>{children}</Tag>;
};

export const PhotoGuideFooter = ({children, ...props}) => {
  const Tag = "footer";
  return <Tag {...props}>{children}</Tag>;
};

export const PhotoGuideFigure = ({children, ...props}) => {
  const Tag = "figure";
  return <Tag {...props}>{children}</Tag>;
};

export const PhotoGuideFigcaption = ({children, ...props}) => {
  const Tag = "figcaption";
  return <Tag {...props}>{children}</Tag>;
};

export const PhotoGuideDialog = ({children, ...props}) => {
  const Tag = "dialog";
  return <Tag {...props}>{children}</Tag>;
};

export const PhotoGuideDetails = ({children, ...props}) => {
  const Tag = "details";
  return <Tag {...props}>{children}</Tag>;
};

export const PhotoGuideAside = ({children, ...props}) => {
  const Tag = "aside";
  return <Tag {...props}>{children}</Tag>;
};

export const PhotoGuideArticle = ({children, ...props}) => {
  const Tag = "article";
  return <Tag {...props}>{children}</Tag>;
};

export const PhotoGuideIcon = ({name}) => {
  const icons = {
    icon0: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><rect height="20" rx="3" width="12" x="6" y="2"></rect><path d="M10 5h4M11 19h2"></path></svg>,
    icon1: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><rect height="7" rx="1.5" width="7" x="3" y="3"></rect><rect height="7" rx="1.5" width="7" x="14" y="3"></rect><rect height="7" rx="1.5" width="7" x="3" y="14"></rect><rect height="7" rx="1.5" width="7" x="14" y="14"></rect></svg>,
    icon2: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><path d="M12 5v15M3 4c4-1 6 0 9 1 3-1 5-2 9-1v15c-4-1-6 0-9 1-3-1-5-2-9-1Z"></path></svg>,
    icon3: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><path d="M6 8V3h12v5M6 17H3V8h18v9h-3M6 14h12v7H6Z"></path><path d="M17 11h.01"></path></svg>,
    icon4: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><path d="m5 12 4 4L19 6"></path></svg>,
    icon5: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg>,
    icon6: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><path d="M14 4h6v6m0-6L10 14"></path><path d="M10 4H5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-5"></path></svg>,
    icon7: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><path d="M16.7 1.8c0 2.1-1.7 4.4-3.7 4.2-.4-2.1 1.8-4.3 3.7-4.2ZM20.4 17.3c-.5 1.2-.8 1.7-1.5 2.7-1 1.5-2.4 3.3-4.2 3.3-1.6 0-2-1-4.1-.9-2.1 0-2.5 1-4.2.9-1.8-.1-3.1-1.7-4.1-3.2C-.5 15.9-.7 10.4 1 7.6c1.2-2 3.1-3.1 4.9-3.1 1.9 0 3.1 1 4.7 1 1.5 0 2.5-1 4.7-1 1.6 0 3.3.9 4.5 2.3-4 2.2-3.3 8 0 10.5Z" fill="currentColor" stroke="none" transform="translate(2 0) scale(.87)"></path></svg>,
    icon8: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><path d="M5 12a7 7 0 0 1 14 0v6H5Zm2-6L5 3m12 3 2-3M2 12v5m20-5v5M8 18v4m8-4v4"></path><path d="M8.5 9h.01M15.5 9h.01"></path></svg>,
    icon9: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><rect height="7" rx="2" width="18" x="3" y="3"></rect><rect height="7" rx="2" width="18" x="3" y="14"></rect><path d="M7 6.5h.01M7 17.5h.01M16 6.5h2M16 17.5h2"></path></svg>,
    icon10: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"></circle><path d="M12 11v5M12 7h.01"></path></svg>,
    icon11: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"></circle><path d="m8 12 3 3 5-6"></path></svg>,
    icon12: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><path d="M3 7h4l2-3h6l2 3h4v13H3Z"></path><circle cx="12" cy="13" r="4"></circle></svg>,
    icon13: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><circle cx="10.5" cy="10.5" r="6.5"></circle><path d="m16 16 5 5M7 10.5h7M10.5 7v7"></path></svg>,
    icon14: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><path d="M2 8a16 16 0 0 1 20 0M5 12a11 11 0 0 1 14 0M8.5 16a5 5 0 0 1 7 0M12 20h.01"></path></svg>,
    icon15: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><rect height="14" rx="2" width="20" x="2" y="3"></rect><path d="M8 22h8M12 17v5"></path></svg>,
    icon16: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><path d="m15 5-7 7 7 7"></path></svg>,
    icon17: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><path d="M12 3 3 7v6c0 5 9 9 9 9s9-4 9-9V7Z"></path><path d="m8 12 3 3 5-6"></path></svg>,
    icon18: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><path d="m12 3 2.8 6.2L21 12l-6.2 2.8L12 21l-2.8-6.2L3 12l6.2-2.8Z"></path></svg>,
    icon19: <svg aria-hidden="true" className="ico" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24"><path d="m6 6 12 12M6 18 18 6"></path></svg>
  };
  return icons[name] || null;
};

export const PhotoGuide = ({children}) => {
  const rootRef = useRef(null);
  useEffect(() => {
    const root = rootRef.current;
    if (!root) return;
    const $ = (selector, scope = root) => scope.querySelector(selector);
    const $$ = (selector, scope = root) => Array.from(scope.querySelectorAll(selector));
    const byId = id => $('[id="' + id + '"]');
    const abort = new AbortController();
    const listen = (node, event, handler) => node && node.addEventListener(event, handler, {
      signal: abort.signal
    });
    const storageKey = 'kombify-photo-guide-v3';
    let current = 0;
    let completed = [false, false, false, false];
    let verified = [false, false, false];
    let toastTimer;
    try {
      const saved = JSON.parse(localStorage.getItem(storageKey) || 'null');
      if (Array.isArray(saved?.completed) && saved.completed.length === 4) completed = saved.completed.map(Boolean);
      if (Array.isArray(saved?.verified) && saved.verified.length === 3) verified = saved.verified.map(Boolean);
    } catch (_) {}
    if (!verified.every(Boolean)) completed[3] = false;
    const save = () => {
      try {
        localStorage.setItem(storageKey, JSON.stringify({
          completed,
          verified
        }));
      } catch (_) {}
    };
    const toast = text => {
      const node = $('#kpg-toast');
      node.textContent = text;
      node.hidden = false;
      clearTimeout(toastTimer);
      toastTimer = setTimeout(() => {
        node.hidden = true;
      }, 3800);
    };
    const updateProgress = () => {
      $('#kpg-progress-label').textContent = `${completed.filter(Boolean).length} de 4 pasos completados`;
      $$('.progress-meter span').forEach((node, i) => node.classList.toggle('done', completed[i]));
      $$('.step-tab').forEach((node, i) => {
        node.classList.toggle('done', completed[i]);
        $('.step-dot', node).textContent = completed[i] ? '✓' : String(i + 1);
      });
      $('#kpg-done-message').hidden = !completed[3];
    };
    const selectStep = (index, focus = false) => {
      current = Math.max(0, Math.min(3, index));
      $$('.step-tab').forEach((node, i) => {
        node.setAttribute('aria-selected', String(i === current));
        node.tabIndex = i === current ? 0 : -1;
      });
      $$('.guide-panel').forEach((node, i) => {
        node.hidden = i !== current;
      });
      $('#kpg-prev').disabled = current === 0;
      $('#kpg-next span').textContent = current === 3 ? completed[3] ? 'Más temas' : 'Terminar la comprobación' : 'Hecho · siguiente';
      if (focus) $('[data-step="' + current + '"]').focus();
    };
    $$('[data-step]').forEach(node => listen(node, 'click', () => selectStep(Number(node.dataset.step))));
    listen($('.step-tabs'), 'keydown', event => {
      if (!['ArrowRight', 'ArrowLeft', 'Home', 'End'].includes(event.key)) return;
      event.preventDefault();
      selectStep(event.key === 'Home' ? 0 : event.key === 'End' ? 3 : (current + (event.key === 'ArrowRight' ? 1 : 3)) % 4, true);
    });
    listen($('#kpg-prev'), 'click', () => selectStep(current - 1));
    listen($('#kpg-next'), 'click', () => {
      if (current < 3) {
        completed[current] = true;
        save();
        updateProgress();
        selectStep(current + 1, true);
      } else if (completed[3]) {
        $('#kpg-more').scrollIntoView({
          block: 'start'
        });
        $('.more-card').focus({
          preventScroll: true
        });
      } else if (verified.every(Boolean)) {
        completed[3] = true;
        save();
        updateProgress();
        selectStep(3);
        toast('Tu comprobación está marcada como completada en este navegador.');
      } else {
        toast('Primero revisa los tres puntos en tu servidor de fotos.');
        $('#kpg-verify-' + verified.indexOf(false)).focus();
      }
    });
    $$('.verify-list input').forEach((node, i) => {
      node.checked = verified[i];
      listen(node, 'change', () => {
        verified[i] = node.checked;
        if (!verified.every(Boolean)) completed[3] = false;
        save();
        updateProgress();
        selectStep(current);
      });
    });
    listen($('#kpg-reset-progress'), 'click', () => {
      completed = [false, false, false, false];
      verified = [false, false, false];
      $$('.verify-list input').forEach(node => {
        node.checked = false;
      });
      save();
      updateProgress();
      selectStep(0);
      toast('Tu progreso en este navegador se ha restablecido.');
    });
    listen($('#kpg-print'), 'click', () => window.print());
    const openDialog = id => {
      const dialog = byId(id);
      if (dialog && !dialog.open) dialog.showModal();
    };
    $$('[data-open]').forEach(node => listen(node, 'click', event => {
      event.preventDefault();
      openDialog(node.dataset.open);
    }));
    $$('[data-close]').forEach(node => listen(node, 'click', () => node.closest('dialog').close()));
    $$('dialog').forEach(dialog => listen(dialog, 'click', event => {
      if (event.target !== dialog) return;
      const rect = dialog.getBoundingClientRect();
      if (event.clientX < rect.left || event.clientX > rect.right || event.clientY < rect.top || event.clientY > rect.bottom) dialog.close();
    }));
    $$('[data-zoom]').forEach(node => listen(node, 'click', () => {
      const image = $('img', node.closest('figure'));
      $('#kpg-zoom-image').src = image.currentSrc || image.src;
      $('#kpg-zoom-image').alt = image.alt;
      $('#kpg-zoom-source').href = image.src;
      openDialog('kpg-zoom-dialog');
    }));
    $$('[data-reveal]').forEach(node => listen(node, 'click', () => {
      const details = byId(node.dataset.reveal);
      if (details) details.open = true;
    }));
    const checkImage = image => image.closest('.screen-figure').classList.toggle('image-unavailable', !image.complete || !image.naturalWidth);
    $$('.screen-image > img').forEach(image => {
      listen(image, 'load', () => checkImage(image));
      listen(image, 'error', () => checkImage(image));
      if (image.complete) checkImage(image);
    });
    const imageTimer = setTimeout(() => $$('.screen-image > img').forEach(checkImage), 7000);
    updateProgress();
    selectStep(0);
    return () => {
      abort.abort();
      clearTimeout(toastTimer);
      clearTimeout(imageTimer);
      $$('dialog[open]').forEach(dialog => dialog.close());
    };
  }, []);
  return <div className="kombify-photo-guide not-prose" lang="es" ref={rootRef}>{children}</div>;
};

<PhotoGuide>
  <div className="guide-content" id="kpg-photo-guide-content">
    <div className="page-top">
      <div>
        <div className="intro-meta"><span><PhotoGuideIcon name="icon0" /> iPhone, iPad y Android</span><span><PhotoGuideIcon name="icon1" /> 4 pasos cortos</span><span><PhotoGuideIcon name="icon2" /> No hacen falta conocimientos previos</span></div>
      </div>

      <div className="page-tools">
        <button aria-label="Imprimir la guía" className="tool-button" id="kpg-print" type="button">
          <PhotoGuideIcon name="icon3" />
        </button>
      </div>
    </div>

    <div className="ready-strip"><strong>Lo que necesitas</strong><span><PhotoGuideIcon name="icon4" /> Un servidor Immich en funcionamiento</span><span><PhotoGuideIcon name="icon4" /> La dirección y la cuenta de tu servidor de fotos</span><a data-reveal="kpg-no-server" href="#kpg-help">¿Aún no está configurado? <PhotoGuideIcon name="icon5" /></a></div>

    <section aria-labelledby="kpg-apps-title" className="downloads" id="kpg-apps">
      <div className="section-top">
        <h2 id="kpg-apps-title">Primero, descarga la app adecuada.</h2><a className="small-link" href="https://immich.app" rel="noopener noreferrer" target="_blank">Directamente de Immich <PhotoGuideIcon name="icon6" /></a>
      </div>

      <div className="downloads-grid"><a className="download-card active" href="https://apps.apple.com/app/immich/id1613945652" rel="noopener noreferrer" target="_blank"><span className="platform-icon"><PhotoGuideIcon name="icon7" /></span><span className="download-text"><strong>iPhone y iPad</strong><small>Immich para iOS</small><span className="store-name">Abrir en la App Store <PhotoGuideIcon name="icon6" /></span></span></a><a className="download-card" href="https://play.google.com/store/apps/details?id=app.alextran.immich" rel="noopener noreferrer" target="_blank"><span className="platform-icon"><PhotoGuideIcon name="icon8" /></span><span className="download-text"><strong>Android</strong><small>Immich para Android</small><span className="store-name">Abrir en Google Play <PhotoGuideIcon name="icon6" /></span></span></a><a className="download-card" href="https://docs.immich.app/install/docker-compose/" rel="noopener noreferrer" target="_blank"><span className="platform-icon"><PhotoGuideIcon name="icon9" /></span><span className="download-text"><strong>¿Aún no tienes un servidor de fotos?</strong><small>Para quien lo administra</small><span className="store-name">Configurar un servidor <PhotoGuideIcon name="icon6" /></span></span></a></div>
      <p className="download-hint">Los pasos de abajo usan un iPhone o un iPad. <a className="" href="https://docs.immich.app/features/mobile-backup/#android" rel="noopener noreferrer" target="_blank">Notas para Android <PhotoGuideIcon name="icon6" /></a> · La app por sí sola no sustituye a un servidor.</p>
    </section>

    <section aria-labelledby="kpg-guide-title" className="guide-section" id="kpg-guide">
      <div className="guide-heading">
        <h2 id="kpg-guide-title">Conéctate paso a paso.</h2><span className="platform-label"><PhotoGuideIcon name="icon7" /> iPhone / iPad</span>
      </div>

      <div className="wizard">
        <div aria-label="Pasos de configuración" className="step-tabs" role="tablist"><button aria-controls="kpg-panel-0" aria-selected="true" className="step-tab" data-step="0" id="kpg-tab-0" role="tab" tabIndex="0" type="button"><span className="step-dot">1</span><span>Conectar</span></button><button aria-controls="kpg-panel-1" aria-selected="false" className="step-tab" data-step="1" id="kpg-tab-1" role="tab" tabIndex="-1" type="button"><span className="step-dot">2</span><span>Elegir álbumes</span></button><button aria-controls="kpg-panel-2" aria-selected="false" className="step-tab" data-step="2" id="kpg-tab-2" role="tab" tabIndex="-1" type="button"><span className="step-dot">3</span><span>Iniciar la subida</span></button><button aria-controls="kpg-panel-3" aria-selected="false" className="step-tab" data-step="3" id="kpg-tab-3" role="tab" tabIndex="-1" type="button"><span className="step-dot">4</span><span>Comprobar</span></button></div>

        <PhotoGuideArticle aria-labelledby="kpg-tab-0" className="guide-panel" id="kpg-panel-0" role="tabpanel">
          <div className="panel-copy">
            <div className="step-kicker">PASO 01 / 04</div>
            <h3>Introduce la<br />dirección de tus fotos.</h3>
            <p className="step-intro">Abre la app de Immich. Primero te pregunta a qué servidor quieres conectarte.</p>
            <ol className="click-list"><li><span className="click-num">1</span><span>Introduce tu propia dirección de Immich en <span className="key">Server Endpoint URL</span>.</span></li><li><span className="click-num">2</span><span>Pulsa <span className="key">Next</span> e inicia sesión con tu <strong>cuenta de Immich</strong>.</span></li></ol>
            <div className="micro-note"><PhotoGuideIcon name="icon10" /><span>La dirección de la imagen es solo un ejemplo. Usa la dirección con la que abres tu servidor de fotos en un navegador.</span></div>

            <PhotoGuideDetails>
              <PhotoGuideSummary>¿De dónde saco la dirección y la cuenta?</PhotoGuideSummary>
              <p>De la persona que configuró tu servidor de fotos. Si ya lo ejecuta una instalación de kombify, abre el servicio de fotos desde tu Node Hub. Tu cuenta de Immich no es automáticamente tu cuenta de kombify.</p>
            </PhotoGuideDetails>

            <div className="step-check"><PhotoGuideIcon name="icon11" /> A continuación ves el resumen de tus fotos.</div>
          </div>

          <div className="panel-visual">
            <span className="screenshot-tag"><PhotoGuideIcon name="icon12" /> CAPTURA DEL FABRICANTE</span>

            <PhotoGuideFigure className="screen-figure" data-asset="login">
              <div className="screen-image"><img alt="Primer arranque de la app" decoding="async" height="1000" referrerPolicy="no-referrer" src="https://docs.immich.app/assets/images/sign-in-phone-92be8a8eab0f72d121e8b62e6f69df17.webp" width="870" /><span className="annotation login-url" data-n="1" /><span className="annotation login-next" data-n="2" /><a className="image-fallback" href="https://docs.immich.app/assets/images/sign-in-phone-92be8a8eab0f72d121e8b62e6f69df17.webp" rel="noopener noreferrer" target="_blank"><PhotoGuideIcon name="icon6" /> Abrir la captura del fabricante<span>Para cargarla se necesita conexión a internet.</span></a><button aria-label="Ampliar captura: Primer arranque de la app" className="zoom-button" data-zoom="login" type="button"><PhotoGuideIcon name="icon13" /></button></div><PhotoGuideFigcaption>Primer arranque de la app · <a className="" href="https://docs.immich.app/features/mobile-app/" rel="noopener noreferrer" target="_blank">Immich <PhotoGuideIcon name="icon6" /></a></PhotoGuideFigcaption>
            </PhotoGuideFigure>
          </div>
        </PhotoGuideArticle>

        <PhotoGuideArticle aria-labelledby="kpg-tab-1" className="guide-panel" hidden={true} id="kpg-panel-1" role="tabpanel">
          <div className="panel-copy">
            <div className="step-kicker">PASO 02 / 04</div>
            <h3>Elige qué fotos<br />subir.</h3>
            <p className="step-intro">Para la primera prueba basta con un álbum pequeño con una foto que puedas permitirte.</p>
            <ol className="click-list"><li><span className="click-num">1</span><span>Abre el <strong>icono de la nube</strong> arriba a la derecha. En <span className="key">Backup Albums</span>, pulsa <span className="key">Select</span>.</span></li><li><span className="click-num">2</span><span>Selecciona tu álbum de prueba. La imagen marca <span className="key">Recents</span> como ejemplo.</span></li><li><span className="click-num">3</span><span>Usa la flecha hacia atrás para volver a la vista de copia de seguridad.</span></li></ol>
            <div className="micro-note"><PhotoGuideIcon name="icon10" /><span>Permite que la app acceda a las fotos que quieras. Con acceso limitado a las fotos, la app solo ve las imágenes que compartiste con ella.</span></div>

            <PhotoGuideDetails>
              <PhotoGuideSummary>¿Incluir todas las fotos nuevas más adelante?</PhotoGuideSummary>
              <p>Selecciona el álbum donde acaban tus imágenes nuevas. Comprueba su tamaño antes de activar la subida. Un álbum grande tarda más.</p>
            </PhotoGuideDetails>

            <div className="step-check"><PhotoGuideIcon name="icon11" /> La vista de copia de seguridad muestra el álbum que seleccionaste.</div>
          </div>

          <div className="panel-visual">
            <span className="screenshot-tag"><PhotoGuideIcon name="icon12" /> CAPTURA DEL FABRICANTE</span>

            <PhotoGuideFigure className="screen-figure portrait" data-asset="albums">
              <div className="screen-image"><img alt="Seleccionar un álbum" decoding="async" height="1000" referrerPolicy="no-referrer" src="https://docs.immich.app/assets/images/backup-album-selection-198b47e0b562cb00dcc5fbf0280bf6da.webp" width="609" /><span className="annotation album-mark" data-n="2" /><a className="image-fallback" href="https://docs.immich.app/assets/images/backup-album-selection-198b47e0b562cb00dcc5fbf0280bf6da.webp" rel="noopener noreferrer" target="_blank"><PhotoGuideIcon name="icon6" /> Abrir la captura del fabricante<span>Para cargarla se necesita conexión a internet.</span></a><button aria-label="Ampliar captura: Seleccionar un álbum" className="zoom-button" data-zoom="albums" type="button"><PhotoGuideIcon name="icon13" /></button></div><PhotoGuideFigcaption>Seleccionar un álbum · <a className="" href="https://docs.immich.app/features/mobile-app/" rel="noopener noreferrer" target="_blank">Immich <PhotoGuideIcon name="icon6" /></a></PhotoGuideFigcaption>
            </PhotoGuideFigure>
          </div>
        </PhotoGuideArticle>

        <PhotoGuideArticle aria-labelledby="kpg-tab-2" className="guide-panel" hidden={true} id="kpg-panel-2" role="tabpanel">
          <div className="panel-copy">
            <div className="step-kicker">PASO 03 / 04</div>
            <h3>Activa<br />la subida.</h3>
            <p className="step-intro">Mantente en la Wi-Fi durante la primera subida y deja la app abierta.</p>
            <ol className="click-list"><li><span className="click-num">1</span><span>Desplázate hacia abajo en la vista de copia de seguridad.</span></li><li><span className="click-num">2</span><span>Activa <span className="key">Enable Backup</span>. La app sube los archivos del álbum que seleccionaste.</span></li><li><span className="click-num">3</span><span>Sigue el progreso en <span className="key">Remainder</span>, que cuenta los archivos que aún faltan por subir.</span></li></ol>
            <div className="micro-note"><PhotoGuideIcon name="icon14" /><span>Por defecto, Immich solo sube con Wi-Fi. El icono del engranaje en los ajustes de la copia de seguridad contiene las opciones de datos móviles.</span></div>

            <PhotoGuideDetails>
              <PhotoGuideSummary>¿Subir mientras la app está cerrada?</PhotoGuideSummary>
              <p>Activa la actualización en segundo plano de Immich en iOS. iOS decide cuándo puede ejecutarse la app en segundo plano, así que no se garantiza una subida inmediata. <a data-reveal="kpg-background" href="#kpg-help">Ver los pasos</a>.</p>
            </PhotoGuideDetails>

            <div className="step-check"><PhotoGuideIcon name="icon11" /> No quedan subidas pendientes para tu álbum de prueba.</div>
          </div>

          <div className="panel-visual">
            <span className="screenshot-tag"><PhotoGuideIcon name="icon12" /> CAPTURA DEL FABRICANTE</span>

            <PhotoGuideFigure className="screen-figure tall" data-asset="enable">
              <div className="screen-image"><img alt="Activar la copia de seguridad" decoding="async" height="1000" referrerPolicy="no-referrer" src="https://docs.immich.app/assets/images/enable-backup-button-590dec9774e09ecc6ec6f1ddeda37a3c.webp" width="508" /><span className="annotation enable-mark" data-n="2" /><a className="image-fallback" href="https://docs.immich.app/assets/images/enable-backup-button-590dec9774e09ecc6ec6f1ddeda37a3c.webp" rel="noopener noreferrer" target="_blank"><PhotoGuideIcon name="icon6" /> Abrir la captura del fabricante<span>Para cargarla se necesita conexión a internet.</span></a><button aria-label="Ampliar captura: Activar la copia de seguridad" className="zoom-button" data-zoom="enable" type="button"><PhotoGuideIcon name="icon13" /></button></div><PhotoGuideFigcaption>Activar la copia de seguridad · <a className="" href="https://docs.immich.app/features/mobile-app/" rel="noopener noreferrer" target="_blank">Immich <PhotoGuideIcon name="icon6" /></a></PhotoGuideFigcaption>
            </PhotoGuideFigure>
          </div>
        </PhotoGuideArticle>

        <PhotoGuideArticle aria-labelledby="kpg-tab-3" className="guide-panel" hidden={true} id="kpg-panel-3" role="tabpanel">
          <div className="panel-copy">
            <div className="step-kicker">PASO 04 / 04</div>
            <h3>¿Ha llegado tu foto<br />de verdad?</h3>
            <p className="step-intro">Abre la dirección de tu Immich en un navegador de un segundo dispositivo e inicia sesión con la misma cuenta.</p>
            <div className="verify-list"><label><input id="kpg-verify-0" type="checkbox" /><span>Veo mi foto de prueba en el resumen de fotos.</span></label><label><input id="kpg-verify-1" type="checkbox" /><span>La foto se abre en la vista completa.</span></label><label><input id="kpg-verify-2" type="checkbox" /><span>La app no muestra subidas pendientes para el álbum de prueba.</span></label></div>
            <div className="done-message" hidden={true} id="kpg-done-message">Tu confirmación está guardada. Tu primera subida está comprobada.</div>
            <div className="micro-note"><PhotoGuideIcon name="icon10" /><span>Marca solo lo que hayas comprobado por tu cuenta. Esta guía no lee tu servidor de fotos.</span></div>
            <div className="step-check"><PhotoGuideIcon name="icon11" /> Ahora puedes añadir más álbumes.</div>
          </div>

          <div className="panel-visual verify-visual">
            <span className="screenshot-tag">COMPROBACIÓN ESQUEMÁTICA</span>

            <div className="flow-device">
              <div className="flow-node">
                <PhotoGuideIcon name="icon0" />
              </div>

              <span className="flow-arrow">
                <PhotoGuideIcon name="icon5" />
              </span>

              <div className="flow-node">
                <PhotoGuideIcon name="icon15" />

                <span className="check-stamp">
                  <PhotoGuideIcon name="icon4" />
                </span>
              </div>
            </div>

            <div className="flow-labels"><span>Tu iPhone</span><span>Tu servidor de fotos</span></div>
            <div className="flow-caption">Una foto. En ambos dispositivos.</div>
            <div className="flow-sub">Comprueba en el navegador, no solo en la app de tu teléfono.</div>
          </div>
        </PhotoGuideArticle>

        <div className="wizard-bottom">
          <div className="progress-note">
            <span id="kpg-progress-label">0 de 4 pasos completados</span>

            <div aria-hidden="true" className="progress-meter">
              <span />

              <span />

              <span />

              <span />
            </div>
          </div>

          <button className="prev" disabled={true} id="kpg-prev" type="button"><PhotoGuideIcon name="icon16" /> Atrás</button><button className="next" id="kpg-next" type="button"><span>Hecho · siguiente</span><PhotoGuideIcon name="icon5" /></button>
        </div>
      </div>

      <p className="provenance-inline">Imágenes de referencia de Immich · menús en inglés · sin capturas de pruebas de kombify. <a data-reveal="kpg-sources-detail" href="#kpg-sources">Fuentes de las imágenes y fecha</a></p>
    </section>

    <PhotoGuideAside aria-label="Nota importante sobre las copias de seguridad" className="warning">
      <PhotoGuideIcon name="icon17" />

      <div>
        <PhotoGuideStrong>Tus fotos están subidas. Eso todavía no es una copia de seguridad.</PhotoGuideStrong>
        <p>Haz también una copia de seguridad de los archivos de fotos <em>y</em> de la base de datos de Immich en un lugar separado. <a data-open="kpg-backup-dialog" href="#kpg-more">Ver qué incluir en la copia</a>. Conserva tus originales por ahora.</p>
      </div>
    </PhotoGuideAside>

    <section aria-labelledby="kpg-more-title" className="more-section" id="kpg-more">
      <div className="section-top">
        <h2 id="kpg-more-title">Qué viene después.</h2>
      </div>

      <div className="more-grid"><button className="more-card" data-open="kpg-backup-dialog" type="button"><span className="more-icon green"><PhotoGuideIcon name="icon17" /></span><span><strong>Protege aún más tus fotos</strong><small>Qué incluye una copia de seguridad completa.</small></span><PhotoGuideIcon name="icon5" /></button><button className="more-card" data-open="kpg-ai-dialog" type="button"><span className="more-icon"><PhotoGuideIcon name="icon18" /></span><span><strong>Úsalo con o sin IA</strong><small>Decide sobre la búsqueda de fotos y el reconocimiento facial.</small></span><PhotoGuideIcon name="icon5" /></button></div>
    </section>

    <section aria-labelledby="kpg-faq-title" className="faq-section" id="kpg-help">
      <h2 id="kpg-faq-title">¿Te has atascado?</h2>

      <PhotoGuideDetails className="faq" id="kpg-no-server">
        <PhotoGuideSummary>Todavía no tengo un servidor Immich.</PhotoGuideSummary>
        <div className="answer">La app se conecta a una instalación de Immich existente. Puedes desplegar el servicio de fotos con un StackKit de kombify o configurar el servidor manualmente. <a className="" href="/es/guides/stackkits/use-cases/photos">Empieza con kombify <PhotoGuideIcon name="icon6" /></a> · <a className="" href="https://docs.immich.app/install/docker-compose/" rel="noopener noreferrer" target="_blank">Instalación manual oficial <PhotoGuideIcon name="icon6" /></a>.</div>
      </PhotoGuideDetails>

      <PhotoGuideDetails className="faq">
        <PhotoGuideSummary>La dirección de mis fotos no se abre.</PhotoGuideSummary>
        <div className="answer">Prueba primero la misma dirección en un navegador. Si tu servidor solo funciona en tu red doméstica, conecta tu teléfono a esa Wi-Fi o al acceso privado que configuraste. Comprueba la ortografía y si el servidor es accesible. No ignores las advertencias de certificado. <a className="" href="https://docs.immich.app/administration/reverse-proxy/" rel="noopener noreferrer" target="_blank">Notas para quien administra el servidor <PhotoGuideIcon name="icon6" /></a>.</div>
      </PhotoGuideDetails>

      <PhotoGuideDetails className="faq" id="kpg-background">
        <PhotoGuideSummary>Las fotos solo se suben mientras la app está abierta.</PhotoGuideSummary>
        <div className="answer">En el iPhone, abre <strong>Ajustes → General → Actualización en segundo plano</strong>. Permite la función y actívala para Immich. iOS sigue decidiendo cuándo se ejecutan las tareas en segundo plano y durante cuánto tiempo. Mantén la app abierta durante la primera subida grande. <a className="" href="https://docs.immich.app/features/mobile-backup/#ios" rel="noopener noreferrer" target="_blank">Guía del fabricante <PhotoGuideIcon name="icon6" /></a>.</div>
      </PhotoGuideDetails>

      <PhotoGuideDetails className="faq">
        <PhotoGuideSummary>Mi app se ve distinta de las imágenes.</PhotoGuideSummary>
        <div className="answer">Las imágenes proceden de la documentación de Immich en inglés. El idioma, el sistema operativo y la versión de la app cambian lo que ves. Comprueba qué versiones de servidor y de app van juntas en lugar de actualizar el servidor a ciegas. <a className="" href="https://docs.immich.app/features/mobile-app/" rel="noopener noreferrer" target="_blank">Guía actual de la app <PhotoGuideIcon name="icon6" /></a> · <a className="" href="https://docs.immich.app/install/upgrading/" rel="noopener noreferrer" target="_blank">Notas de actualización <PhotoGuideIcon name="icon6" /></a>.</div>
      </PhotoGuideDetails>
    </section>

    <PhotoGuideFooter className="footline">
      <div className="attribution"><strong>Immich es la app de fotos. kombify te ayuda a desplegarla y usarla.</strong><br />kombify no fabrica Immich. <a className="" href="https://immich.app" rel="noopener noreferrer" target="_blank">Fabricante <PhotoGuideIcon name="icon6" /></a> · <a className="" href="https://docs.immich.app" rel="noopener noreferrer" target="_blank">Documentación <PhotoGuideIcon name="icon6" /></a> · <a className="" href="https://github.com/immich-app/immich/blob/main/LICENSE" rel="noopener noreferrer" target="_blank">Licencia AGPLv3 <PhotoGuideIcon name="icon6" /></a></div><button className="reset" id="kpg-reset-progress" type="button">Restablecer progreso</button>
    </PhotoGuideFooter>

    <section className="source-section" id="kpg-sources">
      <PhotoGuideDetails id="kpg-sources-detail">
        <PhotoGuideSummary>Fuentes de las imágenes, enlaces comprobados y fecha</PhotoGuideSummary>

        <div className="source-content">
          <p><strong>Imágenes de referencia · 16 de septiembre de 2026.</strong> Las imágenes de los pasos son vistas de referencia reales de la documentación oficial de Immich. No son pantallas de la app recreadas ni resultados de un despliegue de kombify. Esta guía añadió los finos marcadores violeta.</p>
          <p>Las imágenes del fabricante no indican su versión exacta de la app. El idioma, el sistema operativo y la versión de la app pueden diferir. Todavía no se incluyen capturas de pruebas de despliegue de kombify.</p>
          <p>Tu progreso se guarda solo en este navegador. La guía no conecta ninguna cuenta, no pide contraseñas y no realiza subidas. Las imágenes del fabricante incrustadas necesitan conexión a internet.</p>
          <div className="source-links"><a className="" href="https://docs.immich.app/features/mobile-app/" rel="noopener noreferrer" target="_blank">App y configuración <PhotoGuideIcon name="icon6" /></a><a className="" href="https://docs.immich.app/features/mobile-backup/" rel="noopener noreferrer" target="_blank">Subida desde el móvil <PhotoGuideIcon name="icon6" /></a><a className="" href="https://docs.immich.app/administration/backup-and-restore/" rel="noopener noreferrer" target="_blank">Copia de seguridad y restauración <PhotoGuideIcon name="icon6" /></a><a className="" href="https://docs.immich.app/features/searching/" rel="noopener noreferrer" target="_blank">Búsqueda con IA <PhotoGuideIcon name="icon6" /></a><a className="" href="https://docs.immich.app/assets/images/sign-in-phone-92be8a8eab0f72d121e8b62e6f69df17.webp" rel="noopener noreferrer" target="_blank">Imagen: inicio de la app <PhotoGuideIcon name="icon6" /></a><a className="" href="https://docs.immich.app/assets/images/backup-album-selection-198b47e0b562cb00dcc5fbf0280bf6da.webp" rel="noopener noreferrer" target="_blank">Imagen: selección de álbum <PhotoGuideIcon name="icon6" /></a><a className="" href="https://docs.immich.app/assets/images/enable-backup-button-590dec9774e09ecc6ec6f1ddeda37a3c.webp" rel="noopener noreferrer" target="_blank">Imagen: copia de seguridad <PhotoGuideIcon name="icon6" /></a></div>
        </div>
      </PhotoGuideDetails>

      <div className="dim">Guía de kombify · Las imágenes y las marcas pertenecen a sus respectivos propietarios.</div>
    </section>
  </div>

  <PhotoGuideDialog aria-labelledby="kpg-backup-title" id="kpg-backup-dialog">
    <div className="dialog-header">
      <h2 id="kpg-backup-title">¿Qué incluye tu copia de seguridad?</h2><button aria-label="Cerrar" className="dialog-close" data-close="" type="button"><PhotoGuideIcon name="icon19" /></button>
    </div>

    <div className="dialog-body">
      <p>Una subida desde el teléfono no te protege de un fallo de hardware ni de la pérdida de datos en tu servidor de fotos.</p>
      <ol className="simple-steps"><li><strong>Haz copia de los archivos de fotos y vídeos.</strong> No solo de las miniaturas.</li><li><strong>Haz copia también de la base de datos de Immich.</strong> Contiene la asignación de álbumes y otros metadatos. La exportación automática de la base de datos no contiene fotos.</li><li><strong>Mantén la copia separada y prueba una restauración.</strong> Otro directorio en el mismo disco no es suficiente.</li></ol><a className="primary-link" href="/es/guides/stackkits/back-up-and-restore">Copia de seguridad con kombify StackKits <PhotoGuideIcon name="icon6" /></a>
      <p className="fineprint">¿Ejecutas Immich por tu cuenta? <a className="" href="https://docs.immich.app/administration/backup-and-restore/" rel="noopener noreferrer" target="_blank">Guía oficial de copia de seguridad de Immich <PhotoGuideIcon name="icon6" /></a>. La guía del fabricante se abre en una pestaña nueva.</p>
    </div>
  </PhotoGuideDialog>

  <PhotoGuideDialog aria-labelledby="kpg-ai-title" id="kpg-ai-dialog">
    <div className="dialog-header">
      <h2 id="kpg-ai-title">Tus fotos, con o sin IA.</h2><button aria-label="Cerrar" className="dialog-close" data-close="" type="button"><PhotoGuideIcon name="icon19" /></button>
    </div>

    <div className="dialog-body">
      <p><strong>Sin análisis de IA.</strong> Esta guía cubre las subidas, la vista de fotos y los álbumes. Funcionan sin búsqueda inteligente ni reconocimiento facial.</p>
      <p><strong>Con análisis de IA.</strong> Immich puede, por ejemplo, encontrar imágenes por términos de búsqueda y agrupar personas. Estas funciones se configuran en la administración del servidor.</p>
      <p>Tu instalación decide si este procesamiento se ejecuta y dónde. Desactivar los análisis nuevos no elimina los resultados de análisis existentes.</p><a className="primary-link" href="https://docs.immich.app/features/searching/" rel="noopener noreferrer" target="_blank">Búsqueda y opciones en Immich <PhotoGuideIcon name="icon6" /></a>
      <p className="fineprint"><a className="" href="https://docs.immich.app/features/facial-recognition/" rel="noopener noreferrer" target="_blank">Reconocimiento facial <PhotoGuideIcon name="icon6" /></a> · <a className="" href="https://docs.immich.app/FAQ/#how-can-i-disable-machine-learning" rel="noopener noreferrer" target="_blank">Desactivar la IA <PhotoGuideIcon name="icon6" /></a>. Esta guía no cambia ningún ajuste.</p>
    </div>
  </PhotoGuideDialog>

  <PhotoGuideDialog aria-labelledby="kpg-zoom-title" className="zoom-dialog" id="kpg-zoom-dialog">
    <div className="dialog-header">
      <h2 id="kpg-zoom-title">Captura del fabricante</h2><button aria-label="Cerrar imagen" className="dialog-close" data-close="" type="button"><PhotoGuideIcon name="icon19" /></button>
    </div>

    <div className="zoom-content"><img alt="" id="kpg-zoom-image" /><a href="https://docs.immich.app" id="kpg-zoom-source" rel="noopener noreferrer" target="_blank">Abrir el original del fabricante <PhotoGuideIcon name="icon6" /></a></div>
  </PhotoGuideDialog>

  <div className="toast" hidden={true} id="kpg-toast" role="status" />
</PhotoGuide>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.