# Dokumenttypen, Tags & Speicherpfade in Paperless-ngx

> Dokumenttypen, Tags und Speicherpfade in Paperless-ngx: meine Klassifizierung mit Beispielen - damit du jedes Dokument sorglos wiederfindest.

_Quelle: https://tbsch.de/post/2024-02-11-paperless-guide-classification/ · Stand: 2026-07-14_


Ich gehe davon aus, dass du an dieser Stelle bereits eine laufende *Paperless-ngx*-Installation zur Verfügung hast. Falls nicht, ist das gar nicht tragisch: ich möchte die folgenden Themen auf dieser Seite etwas mehr veranschaulichen. Nun drücke ich dem Ganzen auch meinen persönlichen Stempel auf, denn ich spreche von *meinen* Erfahrungen - von denen ich hoffe, dass sie dich zumindest einmal inspirieren werden.

## Was macht *Paperless-ngx*?

Auf der ersten [Seite](/post/2024-01-28-paperless-guide-introduction/) sprach ich davon, dass *Paperless-ngx* ein DMS ist. Toll, man kann damit also seine Dokumente organisieren. Das können Leitz-Ordner auch :satisfied:. Ja, die Arbeit eines DMS beginnt eben mit dem Lagern von Dokumenten, genau wie bei einem Leitz-Ordner.

Das Tolle an einem DMS aber ist, dass es Dokumente eben nicht nur lagern kann. Es kann unter anderem:

- Dokumente klassifizieren (einen Typ festlegen).
- Dokumente nach Absendern ordnen.
- Dokumente markieren (z.B. zur späteren Weiterarbeit).
- Metainformationen bereitstellen.
- Dokumente automatisiert abholen (z.B. vom Scanner, aus E-Mails).
- Dir sogar mitteilen, in welchem Leitz-Ordner ein Dokument physisch abgeheftet wurde.
- und vieles mehr...

Nun wird es sicher auch Leitz-Ordner-Profis geben, die mit Post-Its und anderen kleinen Helfern ähnliche Features analog umsetzen können und sich daher fragen: wozu brauche ich ein DMS? Ich bin leider nicht so ein Profi und ich arbeite einfach viel lieber digital :sweat_smile:. So habe ich meinen Papierkram nämlich auch außer Haus jederzeit griffbereit in meiner Hosentasche.

**Und so sieht *Paperless-ngx* aus, wenn man es zum ersten Mal öffnet:**

![Paperless-ngx-Weboberfläche direkt nach dem ersten Öffnen](overview.webp)

## Klassifizierung

Das Klassifizieren von Dokumenten deutet eigentlich an, dass man einem Dokument einen Typ zuweist. Ich verstehe darunter allerdings den Gesamtprozess des Anheftens von Metainformationen an ein Dokument. Wenn ich also von Klassifizierung spreche, meine ich nicht nur das Zuweisen eines Dokumenttyps, sondern die Zuweisung aller Metainformationen an ein Dokument: Dokumenttyp, Korrespondent, Speicherpfad, Tags etc.

![Dokument mit Dokumenttyp, Korrespondent und Tags klassifizieren](classification.webp)

Diese Begrifflichkeiten wirst du nun sehr oft lesen, ich möchte nun näher auf sie eingehen. Auch lohnt sich ein Blick in die offizielle [Dokumentation](https://docs.paperless-ngx.com/usage/).

### Was ist ein Dokument?

Ich spreche immer von Dokumenten, doch bislang habe ich nicht erläutert, was genau ich damit meine. Du wirst dir vermutlich denken, dass das ja klar ist. Im Beruf habe ich jedoch beim Digitalisieren der Posteingangsstrecke gemerkt, dass das eben nicht immer so eindeutig ist. Es wird also Zeit für ein bisschen Theorie :see_no_evil:.

#### Fallbeispiel

Nehmen wir einen praktischen Fall: dich erreicht **ein** Brief :envelope:. Enthalten sind **vier** Blatt Papier :page_with_curl:, die wiederum doppelseitig bedruckt sind; die gesamte Sendung besteht also aus **acht** bedruckten Seiten :page_facing_up:. Aus dem Inhalt geht hervor, dass es sich bei sechs Seiten um **zwei** unterschiedliche Rechnungen (A und B) :paperclips: handelt. Die verbliebenen zwei Seiten sind eine Aufstellung von Leistungspositionen, die als Anlage :bar_chart: zu Rechnung B mitgekommen sind.

#### Analyse

Wie du siehst, nimmt das Thema schnell ungeahnte Komplexität an. Was wäre für dich in diesem Beispiel denn nun **ein** Dokument? Aus meiner Sicht gibt es zu dieser Fragestellung erst einmal mehrere Antwortmöglichkeiten:

1. Da alle Seiten in einem Brief verpackt waren, handelt es sich um **ein** Dokument (= Sendung).
2. Hier liegen **zwei** Dokumente vor, **eine** Rechnung A und **eine** weitere Rechnung B nebst Anlage.
3. Es handelt sich um **drei** Dokumente, **zwei** Rechnungen A + B und **eine** Anlage.

Alle drei Möglichkeiten sind gangbare Wege, so viel sei dazu gesagt. Jede Person definiert ihr eigenes Ablagesystem und muss es natürlich so strukturieren, dass sie selbst im Bedarfsfall die korrekten Dokumente wiederfinden kann. Ich persönlich halte allerdings **Antwort 2** für die effizienteste Vorgehensweise und setze dies auch selbst so um. Doch warum?

#### Schlussfolgerung

Die erst einmal schnellste Methode ist natürlich **Antwort 1**: ich packe den Brief aus, scanne ihn ein und lasse ihn in *Paperless-ngx* verschwinden. Das funktioniert sehr gut bis zu dem Tag, an dem ich genau diese eine Rechnung B nebst Anlage wiederfinden muss. Durch die Kapselung mehrerer Rechnungen in ein Dokument wird die Suche nämlich unnötig erschwert. Die Zeit, die ich bei der Klassifizierung also eingespart habe, geht bei der längeren Suche locker dreifach wieder verloren.

Anders verhält es sich mit **Antwort 3**: hier stecke ich sehr viel Zeit in die Klassifizierung von drei Dokumenten und habe dann alles sauber abgelegt. Doch welchen Vorteil habe ich davon, die Anlage von ihrer eigentlichen Rechnung B zu trennen? Wenn der Tag kommt, an dem ich Rechnung B und ihre passende Anlage wiederfinden muss, suche ich nach zwei Dokumenten im System[^1]. Schlimmstenfalls enthält die Rechnung keinen Hinweis darauf, dass ihr eine Anlage beigefügt worden ist, und das hätte die zusätzliche negative Auswirkung, dass wir eine lose Anlage im DMS herumschwirren haben.

[^1]: Seit *Paperless-ngx* v2.2.0 gibt es logische Dokumentenverknüpfungen, womit sich Dokumente verbinden lassen. Dies hat Stand 02.01.2024 jedoch weder eine Auswirkung auf die Qualität der Suchergebnisse, noch eine Visualisierung im UI.

Aus diesen Gründen halte ich **Antwort 2** für den effizientesten Weg. Die Sendung wird in ihre zwei Rechnungen A + B aufgetrennt und die Anlage zur Rechnung B gepackt. So entstehen in *Paperless-ngx* zwei Dokumente mit ihrer jeweils korrekten Klassifizierung. Darüber hinaus ist die Anlage immer direkt mit ihrer Rechnung zusammen auffindbar. Und falls ich einmal nur nach der Anlage suchen muss, kann ich mir sicher sein, dass mich niemand nach der *Rechnungsanlage von Datum XY*, sondern immer nach einer Anlage im Kontext einer bestimmten Rechnung fragen wird.

![Dokumentenliste mit getrennten Rechnungen und Einzelverbindungsnachweisen](documents.webp)

> [!info]
> Nach all der Theorie wirst du dich bei genauem Hinsehen nun fragen, warum auf dem Bild Rechnungen und Einzelverbindungsnachweise voneinander getrennt sind. Ich halte einen EVN schlichtweg nicht für eine Rechnungsanlage(*), sondern ein für sich allein stehendes Dokument. Aus der Rechnung ergibt sich für mich auch ohne einen EVN eine Aufgabe: nämlich der Akt der Bezahlung eben dieser.

Zu *) Hierüber kann man streiten, ich änderte zu dem Thema auch selbst andauernd meine Meinung. Letztendlich habe ich mich aber festgelegt und behalte es so bei.

Hast du andere Erfahrungen gemacht? Lass es mich wissen :grin:.

### Korrespondent

Unter Korrespondenten versteht man den Absender von Dokumenten, die dich erreichen. In der anderen Richtung sind Korrespondenten die Empfänger von Dokumenten, die du verschickst.

<pre class="mermaid">
graph TD
A(Korrespondent) --&gt;|Absender| B
B{{Sendung mit Dokumenten}} --&gt;|Empfänger| A
</pre>


In *Paperless-ngx* können wir uns Korrespondenten als virtuelle Schubladen vorstellen, in denen alle Dokumente einer Person oder Firma abgelegt sind. Mit nur einem Klick finden wir alle Dokumente, die einem bestimmten Korrespondenten zugeordnet sind.

### Dokumenttyp

Mit dem Dokumenttyp legst du fest, um was für eine Art Dokument es sich handelt. Hier kann man beliebig granular werden, doch Simplizität schlägt aus meiner Sicht Komplexität. Die Klassifizierung von Dokumenten zu einem Dokumenttyp erfolgt nach Regeln, die wir uns selbst ausdenken und auferlegen müssen. Es sollte uns also auf einen Blick klar sein, was für ein Dokument vor uns liegt und welcher Dokumenttyp das sein könnte.

> [!warning]
> Ertappst du dich selbst dabei, wie du immer wieder zwischen mehreren Dokumenttypen schwankst, gebe ich dir einen guten Rat: konsolidiere sie. Wenn selbst du dir als Mensch unsicher bist, wie soll dann *Paperless-ngx* den korrekten Dokumenttyp automatisiert für dich erkennen?

Sehen wir uns alle Dokumente an, die wir im Laufe der Zeit erhalten, kristallisieren sich ein paar Dokumenttypen deutlich heraus.

#### Beispiele für Dokumenttypen

Hier ein paar Beispiele für Dokumenttypen aus meinem Alltag:

| Dokumenttyp       | Beschreibung                                                                                                                                                       |
| :---------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Bescheid          | Bescheide von Behörden, z.B. Steuerbescheide, Bewilligungen, etc.                                                                                                  |
| Dokument          | Abstrakter Typ für Dokumente, die keinem Typ eindeutig zuordenbar sind.                                                                                            |
| Kontoauszug       | Der Name ist Programm, egal ob Girokonto, ETF-Sparplan, Depot.                                                                                                     |
| Korrespondenz     | Allgemeine Schriftwechsel, auf die eine Antwort folgen soll, z.B. Beschwerde beim Internetanbieter.                                                                |
| Kündigung         | Kündigungen und Kündigungsbestätigungen von Verträgen aller Art.                                                                                                   |
| Lohnabrechnung    | Hiermit werden alle monatlichen Lohnzettel klassifiziert.                                                                                                          |
| LSt-Bescheinigung | Lohnsteuerbescheinigungen kommen in der Regel 1x im Jahr, sind aber wichtig genug für einen eigenen Typ.                                                           |
| NK-Abrechnung     | Lange habe ich Nebenkostenabrechnungen einfach als *Rechnung* klassifiziert, zur schnelleren Auffindbarkeit habe ich aber dann einen eigenen Dokumenttyp erstellt. |
| Rechnung          | Enthält alle Rechnungen, z.B. vom Internetanbieter, Mobilfunk, Käufe mit Garantie, etc.                                                                            |
| Spendennachweis   | Ich spende jedes Jahr, die Quittungen erhalten diesen Dokumenttyp.                                                                                                 |
| Spesenabrechnung  | Beruflich bin ich viel unterwegs und dieser Dokumenttyp enthält die Abrechnungen gegenüber meiner Arbeitgeberin, wie auch ihre Antworten darauf.                   |
| SV-Mitteilung     | Bestimmt für Sozialversicherungsmitteilungen, An- und Abmeldungen.                                                                                                 |
| Vertrag           | Komplexer Dokumenttyp, enthält Verträge aller Art. Auch Versicherungspolicen und Vertragsänderungsmitteilungen.                                                    |
| Zeitnachweis      | Lohnabrechnungen und Zeitnachweise klassifiziere ich getrennt voneinander. Enthält auch Zeitnachweise für Freelancer-Tätigkeiten.                                  |
| Zertifikat        | Nachweise über Schulungen, Weiterbildungen und Seminare.                                                                                                           |
| Zeugnis           | Dokumenttyp für Schul-, Ausbildungs- und Arbeitszeugnisse.                                                                                                         |

### Tagging

Die einen lieben sie, die anderen hassen sie, und die übrigen 80% nutzen sie nicht: Tags. Auch ich selbst habe mich lange vor dem Einsatz von Tags gesträubt, weil es Dingen eine Komplexität verleihen kann, die schnell unüberschaubar ist. Denn zu jedem Tag gibt es eine Story: wann nutze ich ihn? Wann muss er wieder entfernt werden? Was sagt er aus? Hier sind uns überhaupt keine Grenzen gesetzt.

Tagging ist prima: bei *Paperless-ngx* kann man einem Dokument damit einen Kontext verleihen, oder sogar mehrere. Ähnlich wie bei Korrespondenten kann man Tags wie virtuelle Schubladen verstehen, in denen Dokumente liegen. Sie eignen sich erstklassig, um Dokumenten eine Thematik zuzuweisen, die über viele Korrespondenten und Dokumenttypen verteilt ist (z.B. Kfz) - oder einfach nur als Statusindikator.

![Übersicht der angelegten Tags in Paperless-ngx](tagging.webp)

Damit es jedoch nicht zu komplex wird, beschränke ich mich auf einige wenige, dafür eindeutige Tags.

| Tag     | Beschreibung                                                                                                                                      |
| :------ | :------------------------------------------------------------------------------------------------------------------------------------------------ |
| Ausgang | Das Dokument ist ein Ausgangsdokument, wurde also von mir initiiert.                                                                              |
| Kfz     | Verträgen, Rechnungen, etc. verleihe ich mit diesem Tag einen Kfz-Kontext. So kann ich schnell sämtliche Unterlagen zu meinen Autos wiederfinden. |
| Neu     | Hierbei handelt es sich um meinen Posteingangs-Tag. Alle Dokumente mit diesem Tag haben den Status **neu**.                                       |
| Problem | Dieser Tag wird von meiner Middleware verwendet, wenn ich an einem Dokument noch etwas nacharbeiten muss. Darauf gehe ich später detailliert ein. |
| Steuer  | Dokumente mit diesem Tag werden von mir für die nächste Steuererklärung benötigt.                                                                 |
| Todo    | Das sind Dokumente, mit denen ich zu einem späteren Zeitpunkt noch etwas vorhabe, oder bei denen ich noch auf eine Antwort warte.                 |
| Wichtig | Extrem wichtige Dokumente, die ich schnell wiederfinden muss, wenn ich sie brauche.                                                               |

### Speicherpfade

*Paperless-ngx* bietet noch eine weitere Möglichkeit, Schubladen zu erschaffen. Nicht dass wir davon nicht schon bereits einige hätten :sweat:. In diesem Fall handelt es sich um echte Ordner im Dateisystem, in denen die echten PDF-Dateien dann abgelegt werden, die du im DMS abspeicherst. Das ist natürlich ein reines Kosmetik-Feature und bietet Vorteile für Backups, oder wenn man all seine Dokumente bspw. zusätzlich bei einem Cloud-Anbieter speichern möchte.

![Angelegte Speicherpfade in Paperless-ngx](storage-paths.webp)

Ich nutze zwar die physischen Dateiordner nicht, Speicherpfade stellen für mich allerdings ein zusätzliches Klassifizierungsmerkmal dar. So existiert nicht nur für jedes meiner Autos ein echter Dateiordner mit allen Dokumenten drin, meine Middleware weiß hierdurch sogar, um welches Auto es sich handelt. So spare ich mir für jedes Auto einen eigenen Tag anzulegen, denn viele Speicherpfade sind aus meiner Sicht weniger störend als viele Tags.

#### Speicherpfad anlegen

Ein Speicherpfad ist eine Vorlage, nach der *Paperless-ngx* die Datei im Dateisystem ablegt. Du setzt ihn aus Platzhaltern zusammen, die beim Speichern durch die Metadaten des Dokuments ersetzt werden. Neuere Versionen nutzen dafür Jinja2 mit doppelten Klammern (`{{ correspondent }}`), ältere die klassische Form mit einfachen (`{correspondent}`). Die gängigsten Platzhalter:

| Platzhalter           | wird ersetzt durch         |
| :-------------------- | :------------------------- |
| `{{ correspondent }}` | Korrespondent              |
| `{{ document_type }}` | Dokumenttyp                |
| `{{ created_year }}`  | Jahr aus dem Dokumentdatum |
| `{{ title }}`         | Titel des Dokuments        |
| `{{ tag_list }}`      | alle Tags                  |

Ein alltagstauglicher Pfad:

    {{ correspondent }}/{{ document_type }}/{{ created_year }} - {{ title }}

Aus einem Steuerbescheid wird damit `Finanzamt/Bescheid/2024 - Einkommensteuerbescheid`.

> [!tip]
> Die Jinja2-Variante beherrscht darüber hinaus Filter und Bedingungen. Die komplette Platzhalter-Liste steht in der offiziellen [Doku](https://docs.paperless-ngx.com/advanced_usage/).

Den passenden Speicherpfad weist *Paperless-ngx* auf Wunsch automatisch zu - genau wie Korrespondent oder Dokumenttyp. Wie das über die Erkennungs-Algorithmen funktioniert, steht im [Workflow-Teil](/post/2024-02-18-paperless-guide-workflow/#auto-klassifizierung-verbessern).

### Middleware

Ich habe nun mehrmals eine Middleware erwähnt. Hierbei handelt es sich um eine selbst entwickelte Python-App, die wiederkehrende Monitoring-Aufgaben wahrnimmt. Die App baut auf diesem Python Modul auf, welches ich auch entwickelt habe:

<div class="tb-gh-card"><div class="tb-gh-og-gate" data-name="consent-gate-github"><a class="tb-gh-og-link" href="https://github.com/tb1337/paperless-api" target="_blank" rel="noopener noreferrer" aria-label="tb1337/paperless-api auf GitHub">
        <img class="tb-gh-og" data-name="consent-gate-github"
          data-src="https://opengraph.githubassets.com/0/tb1337/paperless-api"
          alt="tb1337/paperless-api auf GitHub" loading="lazy" decoding="async" width="1200" height="600" referrerpolicy="no-referrer">
      </a>
    </div>
    <a class="tb-gh-link" href="https://github.com/tb1337/paperless-api" target="_blank" rel="noopener noreferrer">
      <svg aria-hidden="true"
  xmlns="http://www.w3.org/2000/svg"
 
 
  viewBox="0 0 24 24"
  fill="none"
  stroke="currentColor"
  stroke-width="2"
  stroke-linecap="round"
  stroke-linejoin="round"
 
>
  <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  <path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" />
</svg><span>tb1337/paperless-api auf GitHub besuchen</span>
    </a>
  </div>

Wenn du ein bisschen mehr darüber erfahren möchtest, solltest du [hier](/post/2024-08-28-paperless-guide-customization/) weiterlesen :smile:.

## Erkennungs-Algorithmen

Die Klassifizierung ist der Prozess, bei dem man Dokumenten jeweils Korrespondenten, Dokumenttyp, Tags und ggf. einen Speicherpfad zuweist. Das muss man glücklicherweise nicht jedes Mal komplett per Hand machen, *Paperless-ngx* wird mit einigen Erkennungs-Algorithmen ausgeliefert. Darüber kannst du [hier](https://docs.paperless-ngx.com/advanced_usage/#matching) mehr lesen. Falls die automatische Erkennung nicht zum gewünschten Ergebnis führt, kann man natürlich selbst den korrekten Wert einstellen. Im Falle der Auto-Erkennung lernt *Paperless-ngx* dann von deiner Entscheidung und macht es mit ein bisschen Glück direkt beim nächsten Mal richtig.

![Auswahl der Erkennungs-Algorithmen für ein Zuweisungsmuster](matching-algorithms.webp)

### Keine

Die Verwendung von Erkennungs-Algorithmen wird deaktiviert.

### Irgendein Wort, Alle

Der Inhalt eines Dokuments wird nach den Wörtern im Zuweisungsmuster durchsucht. Legst du das Zuweisungsmuster auf `Rechnung` fest, werden alle Dokumente entsprechend klassifiziert, wenn sie das Wort *Rechnung* enthalten.

Beim Zuweisungsmuster `Rechnung Baumarkt Köln` trifft der Erkennungs-Algorithmus **Irgendein Wort**, sobald eines der drei Wörter im Dokument vorkommt. **Alle** trifft nur dann, wenn alle Wörter erkannt werden konnten. Du hast richtig erkannt: mehrere Wörter werden einfach durch ein Leerzeichen voneinander getrennt.

Es ist aber auch möglich, nach Wörtern mit enthaltenen Leerzeichen zu suchen. Das Prinzip ist fast dasselbe wie mit einzelnen Wörtern: `Rechnung "Baumarkt Köln"`. **Irgendein Wort** trifft nur, wenn die Wörter *Rechnung* oder (Achtung!) *Baumarkt Köln* im Dokument vorkommen. Du kennst das von gängigen Suchmaschinen, denn dort ist es genauso. **Alle** trifft wieder nur, wenn beide Wörter vorkommen.

Die Reihenfolge der Wörter im Dokument spielt übrigens keine Rolle, wichtig ist nur, *dass* sie vorkommen.

### Exakt

Dieser Erkennungs-Algorithmus verhält sich ähnlich wie **Irgendein Wort** und **Alle**, nur dass hier nicht im Kontext von Wörtern, sondern Zeichenketten gesucht wird.

Das Zuweisungsmuster `Rechnung Baumarkt Köln` setzt also dann voraus, dass im Dokument auch tatsächlich *Rechnung Baumarkt Köln* am Stück ausgeschrieben wurde, damit **Exakt** treffen kann.

### Regulärer Ausdruck (Regex)

Liebhaber von regulären Ausdrücken werden auf ihre Kosten kommen, auch ich bin ein großer Freund davon. Aufgrund der Komplexität von Regex empfehle ich die Verwendung allerdings nur, wenn du wirklich weißt, was du da machst. Es gibt leider extrem beschränkte *Debugging Funktionen* dafür in *Paperless-ngx*, neben der Logdatei gibt es nämlich keine. Im schlimmsten Fall bekommst du niemals mit, dass dein Zuweisungsmuster also gar nicht funktioniert.

Möchtest du Regex besser kennenlernen, empfiehlt sich die offizielle [Python Dokumentation](https://docs.python.org/3/library/re.html).

### Ungenau (Fuzzy)

Ich bin mir nicht sicher, was ich hierüber schreiben soll. *Fuzzy Match* war bislang niemals die Lösung einer meiner Use-Cases, aber vielleicht underrate ich den Erkennungs-Algorithmus ja auch einfach bodenlos. Ich werde mir vornehmen, mehr damit zu arbeiten und zu sehen, ob und wie er lebensverändernd sein könnte.

### Auto

*Paperless-ngx* erlernt die Zuweisung mit der Zeit automatisch. Ich nutze die **Auto-Erkennung**, wann immer ich bei einem Klassifizierungsmerkmal genügend Dokumente erwarte; ein Model muss schließlich mit genug Daten trainiert werden.

Die automatische Zuweisung funktionierte bereits mit der Vorgänger-Software recht zuverlässig und ich bin sehr zufrieden damit.

---

Das Titel-/Hintergrundbild stammt von [blocks](https://unsplash.com/de/@blocks?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash) auf [Unsplash](https://unsplash.com/de/fotos/tilt-shift-objektivfotografie-eines-schwarzen-laptop-computers-TkEPQPWr2sY?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash).

