# documents

id: A5OpWOQ-6To
created_at: 2025-11-14 22:08:47
updated_at: 2025-11-14 22:08:47
referrer: http://89.168.66.142:5000/
password_hash:
  scrypt:32768:8:1$eEsjmeJR8TZQuKua$7c7fe91fe7645b2266735acdf4a81ac47ce8ea7187637f15715219b2a92b08ad2f3907df6c739ee15bd400072cd118282e2aa0417065ecf897703182aba236bd


id: der0ber
created_at: 2025-11-14 22:22:53
updated_at: 2025-11-16 14:08:22
referrer: http://89.168.66.142:5000/
description: Der0ber Hub - Hier findest du jegliche Links Rund ums Herunterladen und insteressante Links
content:
  ![Der0ber Banner](https://i.imgur.com/MrnVEpn.png)

  -> [Immich](http://der0ber:2283/photos) | [Emby](http://der0ber:8096/) | [HomeAssistant](http://der0ber:8123/dashboard-test/) | [Vaultwarden](https://vaultwarden.tail8e56b.ts.net/) <-

  !!! info GETTING STARTED
      - Get a **VPN** [Windscribe](https://windscribe.com/), [Mullvad](https://mullvad.net/) or [ProtonVPN](https://protonvpn.com)
      - Download [qBittorrent](https://www.qbittorrent.org/) for torrents 
          - **Bind** your VPN to your qBittorent Client.
      - Download [JDownloader](https://jdownloader.org/download/index) for Warez / Downloading
          - Get a **subscription** at a file hoster either [DDownload](https://ddownload.com/) or [RealDebrid](https://real-debrid.com)

  ## OVERVIEW
  [TOC]

  ## STREAMING
  All   goku.sx  / 	cineby.ru /		einschalten.in
  TV	 bs.to / kisskh.co
  Anime anicloud.io

  ## TORRENTING
  All 1337x.to / torrentgalaxy.to / limetorrents.lol
  Anime nyaa.si
  HEVC  yts.mx

  ## DOWNLOADING
  All             		ddl-warez.cc / warez.cx / warez-ddl.net / byte.to / hdencode.org
  Anime 		         anime-loads.org / nyaa.si
  K-Drama            		dramaday.me /   mkvdrama.org
  All Filehost dl        	gDebrid status.gookie.dev (Discord only) (no invites)
  Software             filecr.com /  iowin.net / cracksurl.com
  Mod  APK's		platinmods.com
  Games                elamigos.site /   gload.to / fitgirl-repacks.site
  Game Roms 				cdromance.org / romsfun.com
  Music						    lucida.to / eu.qobuz.squid.wtf / us.qobuz.squid.wtf
  Video Game Music    downloads.khinsider.com
  Music videos	       sharemania.us
  E-Books	              libgen.li /    annas-archive.org / ibooks.to
  Mangas				archive.org/details/manga_library
  Lightroom Presets    freepreset.net
  After Effects Plugin    gfxdomain.co /   psdly.com

  ## SOFTWARE
  Right Click Converter  github.com/Tichau/FileConverter
  Video Converter xmedia-recode.de / handbrake.fr
  Audio Converter foobar2000.org
  Tidal dl github.com/exislow/tidal-dl-ng
  YouTube dl github.com/sylviiu/ezytdl
  Archiver github.com/M2Team/NanaZip
  File Search  voidtools.com
  Spotlight Search github.com/Flow-Launcher/Flow.Launcher
  Backup Windows  macrium.com
  Customize Windows  rainmeter.net
  Quicklook  github.com/QL-Win/QuickLook

  ## OTHERS
  Fake Mail             mail.tm / smailpro.com/temporary-email
  1TB Free Storage        terabox.com
  File Transfer transfer.it / send-anywhere.com
  Info                     hacksnation.com / fmhy.net / bit.ly/3xYKRVK
  Free Accounts        bugmenot.com
  Stream list                toplist.raidrush.ws
  Open Website Finder strixx.vercel.app
  IPTV        github.com/iptv-org/iptv
  Insta PB             imginn.com
  Apple Street View lookmap.eu.pythonanywhere.com
  Auto Delete Text otp.sva.cloud
  Find osintcombine.com/tools
  Album Cover covers.musichoarders.xyz

  !!! note
      Ready for [more](https://fmhy.net/)?

  <a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Go Back</a>

password_hash:
  scrypt:32768:8:1$eiutCE2K0Ae5CfTH$48464e5be477507853dcf7cd25aed4aef8a1a06bebd691186e6e4bb56d272bc1623e8a6e0388cf22b56984f259ed88f063fe8f3eb84aed1adeed4f5f7da5c149

html_cache:
  <p><img alt="Der0ber Banner" src="https://i.imgur.com/MrnVEpn.png" /></p>
  <div class="md-center">
  <p><a href="http://der0ber:2283/photos">Immich</a> | <a href="http://der0ber:8096/">Emby</a> | <a href="http://der0ber:8123/dashboard-test/">HomeAssistant</a> | <a href="https://vaultwarden.tail8e56b.ts.net/">Vaultwarden</a></p>
  </div>

  <div class="admonition admonition-info">
    <div class="admonition-header">
      <div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></svg></div>
      <div class="admonition-title">GETTING STARTED</div>
    </div>
    <div class="admonition-content">
  <ul>
  <li>Get a <strong>VPN</strong> <a href="https://windscribe.com/">Windscribe</a>, <a href="https://mullvad.net/">Mullvad</a> or <a href="https://protonvpn.com">ProtonVPN</a></li>
  <li>Download <a href="https://www.qbittorrent.org/">qBittorrent</a> for torrents <ul>
  <li><strong>Bind</strong> your VPN to your qBittorent Client.</li>
  </ul>
  </li>
  <li>Download <a href="https://jdownloader.org/download/index">JDownloader</a> for Warez / Downloading<ul>
  <li>Get a <strong>subscription</strong> at a file hoster either <a href="https://ddownload.com/">DDownload</a> or <a href="https://real-debrid.com">RealDebrid</a></li>
  </ul>
  </li>
  </ul>
    </div>
  </div>

  <h2 id="overview">OVERVIEW</h2>
  <div class="toc">
  <ul>
  <li><a href="#overview">OVERVIEW</a></li>
  <li><a href="#streaming">STREAMING</a></li>
  <li><a href="#torrenting">TORRENTING</a></li>
  <li><a href="#downloading">DOWNLOADING</a></li>
  <li><a href="#software">SOFTWARE</a></li>
  <li><a href="#others">OTHERS</a></li>
  </ul>
  </div>
  <h2 id="streaming">STREAMING</h2>
  <p>All   <a href="https://goku.sx" target="_blank" rel="noopener noreferrer">goku.sx</a>  /    <a href="https://cineby.ru" target="_blank" rel="noopener noreferrer">cineby.ru</a> /       <a href="https://einschalten.in" target="_blank" rel="noopener noreferrer">einschalten.in</a><br />
  TV   <a href="https://bs.to" target="_blank" rel="noopener noreferrer">bs.to</a> / <a href="https://kisskh.co" target="_blank" rel="noopener noreferrer">kisskh.co</a><br />
  Anime <a href="https://anicloud.io" target="_blank" rel="noopener noreferrer">anicloud.io</a></p>
  <h2 id="torrenting">TORRENTING</h2>
  <p>All <a href="https://1337x.to" target="_blank" rel="noopener noreferrer">1337x.to</a> / <a href="https://torrentgalaxy.to" target="_blank" rel="noopener noreferrer">torrentgalaxy.to</a> / <a href="https://limetorrents.lol" target="_blank" rel="noopener noreferrer">limetorrents.lol</a><br />
  Anime <a href="https://nyaa.si" target="_blank" rel="noopener noreferrer">nyaa.si</a><br />
  HEVC  <a href="https://yts.mx" target="_blank" rel="noopener noreferrer">yts.mx</a></p>
  <h2 id="downloading">DOWNLOADING</h2>
  <p>All                     <a href="https://ddl-warez.cc" target="_blank" rel="noopener noreferrer">ddl-warez.cc</a> / <a href="https://warez.cx" target="_blank" rel="noopener noreferrer">warez.cx</a> / <a href="https://warez-ddl.net" target="_blank" rel="noopener noreferrer">warez-ddl.net</a> / <a href="https://byte.to" target="_blank" rel="noopener noreferrer">byte.to</a> / <a href="https://hdencode.org" target="_blank" rel="noopener noreferrer">hdencode.org</a><br />
  Anime                <a href="https://anime-loads.org" target="_blank" rel="noopener noreferrer">anime-loads.org</a> / <a href="https://nyaa.si" target="_blank" rel="noopener noreferrer">nyaa.si</a><br />
  K-Drama                 <a href="https://dramaday.me" target="_blank" rel="noopener noreferrer">dramaday.me</a> /   <a href="https://mkvdrama.org" target="_blank" rel="noopener noreferrer">mkvdrama.org</a><br />
  All Filehost dl         gDebrid <a href="https://status.gookie.dev" target="_blank" rel="noopener noreferrer">status.gookie.dev</a> (Discord only) (no invites)<br />
  Software             <a href="https://filecr.com" target="_blank" rel="noopener noreferrer">filecr.com</a> /  <a href="https://iowin.net" target="_blank" rel="noopener noreferrer">iowin.net</a> / <a href="https://cracksurl.com" target="_blank" rel="noopener noreferrer">cracksurl.com</a><br />
  Mod  APK's      <a href="https://platinmods.com" target="_blank" rel="noopener noreferrer">platinmods.com</a><br />
  Games                <a href="https://elamigos.site" target="_blank" rel="noopener noreferrer">elamigos.site</a> /   <a href="https://gload.to" target="_blank" rel="noopener noreferrer">gload.to</a> / <a href="https://fitgirl-repacks.site" target="_blank" rel="noopener noreferrer">fitgirl-repacks.site</a><br />
  Game Roms               <a href="https://cdromance.org" target="_blank" rel="noopener noreferrer">cdromance.org</a> / <a href="https://romsfun.com" target="_blank" rel="noopener noreferrer">romsfun.com</a><br />
  Music                           <a href="https://lucida.to" target="_blank" rel="noopener noreferrer">lucida.to</a> / <a href="https://eu.qobuz.squid.wtf" target="_blank" rel="noopener noreferrer">eu.qobuz.squid.wtf</a> / <a href="https://us.qobuz.squid.wtf" target="_blank" rel="noopener noreferrer">us.qobuz.squid.wtf</a><br />
  Video Game Music    <a href="https://downloads.khinsider.com" target="_blank" rel="noopener noreferrer">downloads.khinsider.com</a><br />
  Music videos           <a href="https://sharemania.us" target="_blank" rel="noopener noreferrer">sharemania.us</a><br />
  E-Books               <a href="https://libgen.li" target="_blank" rel="noopener noreferrer">libgen.li</a> /    <a href="https://annas-archive.org" target="_blank" rel="noopener noreferrer">annas-archive.org</a> / <a href="https://ibooks.to" target="_blank" rel="noopener noreferrer">ibooks.to</a><br />
  Mangas              <a href="https://archive.org/details/manga_library" target="_blank" rel="noopener noreferrer">archive.org/details/manga_library</a><br />
  Lightroom Presets    <a href="https://freepreset.net" target="_blank" rel="noopener noreferrer">freepreset.net</a><br />
  After Effects Plugin    <a href="https://gfxdomain.co" target="_blank" rel="noopener noreferrer">gfxdomain.co</a> /   <a href="https://psdly.com" target="_blank" rel="noopener noreferrer">psdly.com</a></p>
  <h2 id="software">SOFTWARE</h2>
  <p>Right Click Converter  <a href="https://github.com/Tichau/FileConverter" target="_blank" rel="noopener noreferrer">github.com/Tichau/FileConverter</a><br />
  Video Converter <a href="https://xmedia-recode.de" target="_blank" rel="noopener noreferrer">xmedia-recode.de</a> / <a href="https://handbrake.fr" target="_blank" rel="noopener noreferrer">handbrake.fr</a><br />
  Audio Converter <a href="https://foobar2000.org" target="_blank" rel="noopener noreferrer">foobar2000.org</a><br />
  Tidal dl <a href="https://github.com/exislow/tidal-dl-ng" target="_blank" rel="noopener noreferrer">github.com/exislow/tidal-dl-ng</a><br />
  YouTube dl <a href="https://github.com/sylviiu/ezytdl" target="_blank" rel="noopener noreferrer">github.com/sylviiu/ezytdl</a><br />
  Archiver <a href="https://github.com/M2Team/NanaZip" target="_blank" rel="noopener noreferrer">github.com/M2Team/NanaZip</a><br />
  File Search  <a href="https://voidtools.com" target="_blank" rel="noopener noreferrer">voidtools.com</a><br />
  Spotlight Search <a href="https://github.com/Flow-Launcher/Flow.Launcher" target="_blank" rel="noopener noreferrer">github.com/Flow-Launcher/Flow.Launcher</a><br />
  Backup Windows  <a href="https://macrium.com" target="_blank" rel="noopener noreferrer">macrium.com</a><br />
  Customize Windows  <a href="https://rainmeter.net" target="_blank" rel="noopener noreferrer">rainmeter.net</a><br />
  Quicklook  <a href="https://github.com/QL-Win/QuickLook" target="_blank" rel="noopener noreferrer">github.com/QL-Win/QuickLook</a></p>
  <h2 id="others">OTHERS</h2>
  <p>Fake Mail             <a href="https://mail.tm" target="_blank" rel="noopener noreferrer">mail.tm</a> / <a href="https://smailpro.com/temporary-email" target="_blank" rel="noopener noreferrer">smailpro.com/temporary-email</a><br />
  1TB Free Storage        <a href="https://terabox.com" target="_blank" rel="noopener noreferrer">terabox.com</a><br />
  File Transfer <a href="https://transfer.it" target="_blank" rel="noopener noreferrer">transfer.it</a> / <a href="https://send-anywhere.com" target="_blank" rel="noopener noreferrer">send-anywhere.com</a><br />
  Info                     <a href="https://hacksnation.com" target="_blank" rel="noopener noreferrer">hacksnation.com</a> / <a href="https://fmhy.net" target="_blank" rel="noopener noreferrer">fmhy.net</a> / <a href="https://bit.ly/3xYKRVK" target="_blank" rel="noopener noreferrer">bit.ly/3xYKRVK</a><br />
  Free Accounts        <a href="https://bugmenot.com" target="_blank" rel="noopener noreferrer">bugmenot.com</a><br />
  Stream list                <a href="https://toplist.raidrush.ws" target="_blank" rel="noopener noreferrer">toplist.raidrush.ws</a><br />
  Open Website Finder <a href="https://strixx.vercel.app" target="_blank" rel="noopener noreferrer">strixx.vercel.app</a><br />
  IPTV        <a href="https://github.com/iptv-org/iptv" target="_blank" rel="noopener noreferrer">github.com/iptv-org/iptv</a><br />
  Insta PB             <a href="https://imginn.com" target="_blank" rel="noopener noreferrer">imginn.com</a><br />
  Apple Street View <a href="https://lookmap.eu.pythonanywhere.com" target="_blank" rel="noopener noreferrer">lookmap.eu.pythonanywhere.com</a><br />
  Auto Delete Text <a href="https://otp.sva.cloud" target="_blank" rel="noopener noreferrer">otp.sva.cloud</a><br />
  Find <a href="https://osintcombine.com/tools" target="_blank" rel="noopener noreferrer">osintcombine.com/tools</a><br />
  Album Cover <a href="https://covers.musichoarders.xyz" target="_blank" rel="noopener noreferrer">covers.musichoarders.xyz</a></p>
  <div class="admonition admonition-note admonition-no-title">
    <div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="currentColor"><path d="M3 18h12v-2H3v2zM3 6v2h18V6H3zm0 7h18v-2H3v2z"/></svg></div>
    <div class="admonition-content">
  <p>Ready for <a href="https://fmhy.net/">more</a>?</p>
    </div>
  </div>

  <p><a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Go Back</a></p>

summary:
  Der0ber Banner

  ![](https://i.imgur.com/91cP7pB.png)

  Das Banner zeigt einen kurzen, einzeiligen Zusammenfassung, das dennoch eine hohe Qualität darstellt. Der Text enthält Informationen wie die kostenlose Software- und-Toolversionen, die auf der Art0ber beruhigt werden, sowie die Marken, die auf denen der User sich befindet. Die Anzahl der Wörter ist jedoch nicht


id: Tutorial
created_at: 2025-11-14 22:24:57
updated_at: 2025-11-14 22:24:57
referrer: http://89.168.66.142:5000/
content:
  # Markdown Formatierungs-Guide

  Vollständige Übersicht aller unterstützten Markdown-Formatierungen für die Markdown Publisher Anwendung.

  ## Inhaltsverzeichnis

  - [Überschriften](#überschriften)
  - [Text-Formatierung](#text-formatierung)
  - [Listen](#listen)
  - [Links und Bilder](#links-und-bilder)
  - [Code-Blöcke](#code-blöcke)
  - [Tabellen](#tabellen)
  - [Blockquotes](#blockquotes)
  - [Horizontale Linien](#horizontale-linien)
  - [Fußnoten](#fußnoten)
  - [Abkürzungen](#abkürzungen)
  - [Definition Lists](#definition-lists)
  - [HTML in Markdown](#html-in-markdown)
  - [Zeilenumbrüche](#zeilenumbrüche)

  ---

  ## Überschriften

  Erstelle Überschriften mit `#` Zeichen. Je mehr `#`, desto kleiner die Überschrift.

  ```markdown
  # Überschrift 1 (größte)
  ## Überschrift 2
  ### Überschrift 3
  #### Überschrift 4
  ##### Überschrift 5
  ###### Überschrift 6 (kleinste)
  ```

  **Ergebnis:**
  # Überschrift 1 (größte)
  ## Überschrift 2
  ### Überschrift 3
  #### Überschrift 4
  ##### Überschrift 5
  ###### Überschrift 6 (kleinste)

  ---

  ## Text-Formatierung

  ### Fett

  ```markdown
  **Dieser Text ist fett**
  __Dieser Text ist auch fett__
  ```

  **Ergebnis:** **Dieser Text ist fett**

  ### Kursiv

  ```markdown
  *Dieser Text ist kursiv*
  _Dieser Text ist auch kursiv_
  ```

  **Ergebnis:** *Dieser Text ist kursiv*

  ### Fett und Kursiv

  ```markdown
  ***Dieser Text ist fett und kursiv***
  ___Dieser Text ist auch fett und kursiv___
  ```

  **Ergebnis:** ***Dieser Text ist fett und kursiv***

  ### Durchgestrichen

  ```markdown
  ~~Dieser Text ist durchgestrichen~~
  ```

  **Ergebnis:** ~~Dieser Text ist durchgestrichen~~

  ### Inline-Code

  ```markdown
  Verwende `code` für technische Begriffe.
  ```

  **Ergebnis:** Verwende `code` für technische Begriffe.

  ---

  ## Listen

  ### Ungeordnete Listen

  ```markdown
  - Punkt 1
  - Punkt 2
    - Unterpunkt 2.1
    - Unterpunkt 2.2
  - Punkt 3

  * Alternative Syntax
  * Mit Sternchen
  ```

  **Ergebnis:**
  - Punkt 1
  - Punkt 2
    - Unterpunkt 2.1
    - Unterpunkt 2.2
  - Punkt 3

  ### Geordnete Listen

  ```markdown
  1. Erster Punkt
  2. Zweiter Punkt
  3. Dritter Punkt
     1. Unterpunkt 3.1
     2. Unterpunkt 3.2
  ```

  **Ergebnis:**
  1. Erster Punkt
  2. Zweiter Punkt
  3. Dritter Punkt
     1. Unterpunkt 3.1
     2. Unterpunkt 3.2

  ### Task Lists (Checkboxen)

  ```markdown
  - [x] Erledigte Aufgabe
  - [ ] Offene Aufgabe
  - [x] Noch eine erledigte Aufgabe
  ```

  **Ergebnis:**
  - [x] Erledigte Aufgabe
  - [ ] Offene Aufgabe
  - [x] Noch eine erledigte Aufgabe

  ---

  ## Links und Bilder

  ### Links

  ```markdown
  [Link-Text](https://example.com)
  [Link mit Titel](https://example.com "Tooltip-Text")
  ```

  **Ergebnis:** [Link-Text](https://example.com)

  ### Automatische Links

  ```markdown
  https://example.com
  <https://example.com>
  ```

  **Ergebnis:** https://example.com

  ### Referenz-Links

  ```markdown
  [Link-Text][ref-id]

  [ref-id]: https://example.com "Optionaler Titel"
  ```

  ### Bilder

  ```markdown
  ![Alt-Text](https://example.com/bild.jpg)
  ![Bild mit Titel](https://example.com/bild.jpg "Bildtitel")
  ```

  ### Bilder mit Referenz

  ```markdown
  ![Alt-Text][bild-ref]

  [bild-ref]: https://example.com/bild.jpg "Bildtitel"
  ```

  ---

  ## Code-Blöcke

  ### Einfache Code-Blöcke

  ````markdown
  ```
  Code ohne Syntax-Highlighting
  ```
  ````

  **Ergebnis:**
  ```
  Code ohne Syntax-Highlighting
  ```

  ### Code-Blöcke mit Syntax-Highlighting

  ````markdown
  ```python
  def hello_world():
      print("Hello, World!")
  ```
  ````

  **Ergebnis:**
  ```python
  def hello_world():
      print("Hello, World!")
  ```

  ### Unterstützte Sprachen für Syntax-Highlighting

  - `python`, `javascript`, `java`, `c`, `cpp`, `csharp`
  - `html`, `css`, `json`, `xml`, `yaml`
  - `bash`, `shell`, `sql`, `php`, `ruby`
  - `go`, `rust`, `swift`, `kotlin`
  - Und viele mehr!

  **Beispiel JavaScript:**
  ````markdown
  ```javascript
  function greet(name) {
      return `Hello, ${name}!`;
  }
  ```
  ````

  **Beispiel HTML:**
  ````markdown
  ```html
  <div class="container">
      <h1>Hello World</h1>
  </div>
  ```
  ````

  ---

  ## Tabellen

  Erstelle Tabellen mit Pipes `|` und Bindestrichen `-`.

  ```markdown
  | Spalte 1 | Spalte 2 | Spalte 3 |
  |----------|----------|----------|
  | Zeile 1  | Daten    | Daten    |
  | Zeile 2  | Daten    | Daten    |
  | Zeile 3  | Daten    | Daten    |
  ```

  **Ergebnis:**

  | Spalte 1 | Spalte 2 | Spalte 3 |
  |----------|----------|----------|
  | Zeile 1  | Daten    | Daten    |
  | Zeile 2  | Daten    | Daten    |
  | Zeile 3  | Daten    | Daten    |

  ### Ausrichtung in Tabellen

  ```markdown
  | Links    | Zentriert | Rechts |
  |:---------|:---------:|-------:|
  | Links     | Zentriert | Rechts |
  ```

  **Ergebnis:**

  | Links    | Zentriert | Rechts |
  |:---------|:---------:|-------:|
  | Links     | Zentriert | Rechts |

  ---

  ## Blockquotes

  Verwende `>` für Zitate oder hervorgehobene Textblöcke.

  ```markdown
  > Dies ist ein Blockquote.
  > Es kann mehrere Zeilen umfassen.
  >
  > Und sogar Absätze enthalten.
  ```

  **Ergebnis:**

  > Dies ist ein Blockquote.
  > Es kann mehrere Zeilen umfassen.
  >
  > Und sogar Absätze enthalten.

  ### Verschachtelte Blockquotes

  ```markdown
  > Hauptzitat
  > > Verschachteltes Zitat
  > > > Noch tiefer verschachtelt
  ```

  **Ergebnis:**

  > Hauptzitat
  > > Verschachteltes Zitat
  > > > Noch tiefer verschachtelt

  ---

  ## Horizontale Linien

  Erstelle horizontale Trennlinien mit drei oder mehr Bindestrichen, Sternchen oder Unterstrichen.

  ```markdown
  ---

  ***

  ___
  ```

  **Ergebnis:**

  ---

  ---

  ---

  ---

  ## Fußnoten

  Verwende Fußnoten für zusätzliche Informationen oder Quellenangaben.

  ```markdown
  Dies ist ein Text mit einer Fußnote[^1].

  Und hier ist noch eine[^note2].

  [^1]: Dies ist der Inhalt der ersten Fußnote.
  [^note2]: Dies ist der Inhalt der zweiten Fußnote mit einem benutzerdefinierten Namen.
  ```

  **Ergebnis:**

  Dies ist ein Text mit einer Fußnote[^1].

  Und hier ist noch eine[^note2].

  [^1]: Dies ist der Inhalt der ersten Fußnote.
  [^note2]: Dies ist der Inhalt der zweiten Fußnote mit einem benutzerdefinierten Namen.

  ---

  ## Abkürzungen

  Definiere Abkürzungen, die beim Hovern erweitert werden.

  ```markdown
  Die HTML Abkürzung wird erklärt.

  *[HTML]: HyperText Markup Language
  ```

  **Ergebnis:**

  Die HTML Abkürzung wird erklärt.

  *[HTML]: HyperText Markup Language

  ---

  ## Definition Lists

  Erstelle Definitionslisten für Begriffe und ihre Erklärungen.

  ```markdown
  Begriff 1
  : Definition 1
  : Alternative Definition 1

  Begriff 2
  : Definition 2
  ```

  **Ergebnis:**

  Begriff 1
  : Definition 1
  : Alternative Definition 1

  Begriff 2
  : Definition 2

  ---

  ## HTML in Markdown

  Du kannst HTML direkt in Markdown verwenden.

  ```markdown
  <p>Dies ist ein <strong>HTML</strong> Absatz.</p>

  <div style="color: blue;">
      HTML mit Styling
  </div>
  ```

  **Ergebnis:**

  <p>Dies ist ein <strong>HTML</strong> Absatz.</p>

  <div style="color: blue;">
      HTML mit Styling
  </div>

  ### HTML in Markdown-Blöcken

  ```markdown
  <div markdown="1">
  Dieser Text wird als **Markdown** interpretiert.
  </div>
  ```

  ---

  ## Zeilenumbrüche

  ### Einfache Zeilenumbrüche

  ```markdown
  Zeile 1
  Zeile 2 (zwei Leerzeichen am Ende)  
  Zeile 3
  ```

  **Ergebnis:**

  Zeile 1
  Zeile 2 (zwei Leerzeichen am Ende)  
  Zeile 3

  ### Absätze

  ```markdown
  Absatz 1

  Absatz 2 (leere Zeile dazwischen)
  ```

  **Ergebnis:**

  Absatz 1

  Absatz 2 (leere Zeile dazwischen)

  ---

  ## Escape-Zeichen

  Verwende Backslash `\` um spezielle Zeichen zu escapen.

  ```markdown
  \*Dieser Text hat keine Formatierung\*
  \# Keine Überschrift
  \[Kein Link\]\(url\)
  ```

  **Ergebnis:**

  \*Dieser Text hat keine Formatierung\*
  \# Keine Überschrift
  \[Kein Link\]\(url\)

  ---

  ## Kombinierte Beispiele

  ### Code in Listen

  ```markdown
  1. Installiere Python:
     ```bash
     pip install package
     ```

  2. Führe das Skript aus:
     ```python
     python script.py
     ```
  ```

  **Ergebnis:**

  1. Installiere Python:
     ```bash
     pip install package
     ```

  2. Führe das Skript aus:
     ```python
     python script.py
     ```

  ### Tabellen mit Formatierung

  ```markdown
  | Feature | Status | Notizen |
  |---------|--------|---------|
  | **Fett** | ✅ | Funktioniert |
  | *Kursiv* | ✅ | Funktioniert |
  | `Code` | ✅ | Funktioniert |
  ```

  **Ergebnis:**

  | Feature | Status | Notizen |
  |---------|--------|---------|
  | **Fett** | ✅ | Funktioniert |
  | *Kursiv* | ✅ | Funktioniert |
  | `Code` | ✅ | Funktioniert |

  ---

  ## Tipps und Tricks

  ### 1. Automatisches Inhaltsverzeichnis

  Verwende `[TOC]` um automatisch ein Inhaltsverzeichnis zu generieren (wird an der Stelle eingefügt, wo du es platzierst).

  ```markdown
  [TOC]

  # Überschrift 1
  ## Unterüberschrift
  ```

  ### 2. Kombiniere Formatierungen

  ```markdown
  **Fett mit [Link](https://example.com) und `Code`**
  ```

  **Ergebnis:** **Fett mit [Link](https://example.com) und `Code`**

  ### 3. Code in Tabellen

  ```markdown
  | Befehl | Beschreibung |
  |--------|-------------|
  | `git add` | Fügt Dateien hinzu |
  | `git commit` | Committet Änderungen |
  ```

  **Ergebnis:**

  | Befehl | Beschreibung |
  |--------|-------------|
  | `git add` | Fügt Dateien hinzu |
  | `git commit` | Committet Änderungen |

  ### 4. Listen in Blockquotes

  ```markdown
  > Wichtige Punkte:
  > - Punkt 1
  > - Punkt 2
  > - Punkt 3
  ```

  **Ergebnis:**

  > Wichtige Punkte:
  > - Punkt 1
  > - Punkt 2
  > - Punkt 3

  ---

  ## Unterstützte Markdown-Extensions

  Diese Anwendung unterstützt folgende Markdown-Extensions:

  - ✅ **fenced_code** - Code-Blöcke mit Syntax-Highlighting
  - ✅ **tables** - Tabellen
  - ✅ **codehilite** - Syntax-Highlighting für Code
  - ✅ **toc** - Automatisches Inhaltsverzeichnis
  - ✅ **nl2br** - Automatische Zeilenumbrüche
  - ✅ **sane_lists** - Verbesserte Listen
  - ✅ **attr_list** - HTML-Attribute
  - ✅ **def_list** - Definitionslisten
  - ✅ **abbr** - Abkürzungen
  - ✅ **footnotes** - Fußnoten

  ---

  ## Weitere Ressourcen

  - [Markdown Guide](https://www.markdownguide.org/)
  - [GitHub Flavored Markdown](https://github.github.com/gfm/)
  - [CommonMark](https://commonmark.org/)

  ---

  **Viel Erfolg beim Schreiben!** 🚀

password_hash:
  scrypt:32768:8:1$OSOrQ1BHK8ojQqrw$f6f603561e689472447aa710ed1e8f8098d67c1bc21954960ac07085bdffed7b570b0ea3474f6c35a6853749f418d242d11e7275340b1fbefd7a9846084f3081

html_cache:
  <h1 id="markdown-formatierungs-guide">Markdown Formatierungs-Guide</h1>
  <p>Vollständige Übersicht aller unterstützten Markdown-Formatierungen für die Markdown Publisher Anwendung.</p>
  <h2 id="inhaltsverzeichnis">Inhaltsverzeichnis</h2>
  <ul>
  <li><a href="#überschriften">Überschriften</a></li>
  <li><a href="#text-formatierung">Text-Formatierung</a></li>
  <li><a href="#listen">Listen</a></li>
  <li><a href="#links-und-bilder">Links und Bilder</a></li>
  <li><a href="#code-blöcke">Code-Blöcke</a></li>
  <li><a href="#tabellen">Tabellen</a></li>
  <li><a href="#blockquotes">Blockquotes</a></li>
  <li><a href="#horizontale-linien">Horizontale Linien</a></li>
  <li><a href="#fußnoten">Fußnoten</a></li>
  <li><a href="#abkürzungen">Abkürzungen</a></li>
  <li><a href="#definition-lists">Definition Lists</a></li>
  <li><a href="#html-in-markdown"><abbr title="HyperText Markup Language">HTML</abbr> in Markdown</a></li>
  <li><a href="#zeilenumbrüche">Zeilenumbrüche</a></li>
  </ul>
  <hr />
  <h2 id="uberschriften">Überschriften</h2>
  <p>Erstelle Überschriften mit <code>#</code> Zeichen. Je mehr <code>#</code>, desto kleiner die Überschrift.</p>
  <div class="highlight"><pre><span></span><code><span class="gh"># Überschrift 1 (größte)</span>
  <span class="gu">## Überschrift 2</span>
  <span class="gu">### Überschrift 3</span>
  <span class="gu">#### Überschrift 4</span>
  <span class="gu">##### Überschrift 5</span>
  <span class="gu">###### Überschrift 6 (kleinste)</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <h1 id="uberschrift-1-grote">Überschrift 1 (größte)</h1>
  <h2 id="uberschrift-2">Überschrift 2</h2>
  <h3 id="uberschrift-3">Überschrift 3</h3>
  <h4 id="uberschrift-4">Überschrift 4</h4>
  <h5 id="uberschrift-5">Überschrift 5</h5>
  <h6 id="uberschrift-6-kleinste">Überschrift 6 (kleinste)</h6>
  <hr />
  <h2 id="text-formatierung">Text-Formatierung</h2>
  <h3 id="fett">Fett</h3>
  <div class="highlight"><pre><span></span><code><span class="gs">**Dieser Text ist fett**</span>
  <span class="gs">__Dieser Text ist auch fett__</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong> <strong>Dieser Text ist fett</strong></p>
  <h3 id="kursiv">Kursiv</h3>
  <div class="highlight"><pre><span></span><code><span class="ge">*Dieser Text ist kursiv*</span>
  <span class="ge">_Dieser Text ist auch kursiv_</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong> <em>Dieser Text ist kursiv</em></p>
  <h3 id="fett-und-kursiv">Fett und Kursiv</h3>
  <div class="highlight"><pre><span></span><code>***Dieser Text ist fett und kursiv***
  ___Dieser Text ist auch fett und kursiv___
  </code></pre></div>
  <p><strong>Ergebnis:</strong> <strong><em>Dieser Text ist fett und kursiv</em></strong></p>
  <h3 id="durchgestrichen">Durchgestrichen</h3>
  <div class="highlight"><pre><span></span><code><span class="gd">~~Dieser Text ist durchgestrichen~~</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong> ~~Dieser Text ist durchgestrichen~~</p>
  <h3 id="inline-code">Inline-Code</h3>
  <div class="highlight"><pre><span></span><code>Verwende <span class="sb">`code`</span> für technische Begriffe.
  </code></pre></div>
  <p><strong>Ergebnis:</strong> Verwende <code>code</code> für technische Begriffe.</p>
  <hr />
  <h2 id="listen">Listen</h2>
  <h3 id="ungeordnete-listen">Ungeordnete Listen</h3>
  <div class="highlight"><pre><span></span><code><span class="k">-</span><span class="w"> </span>Punkt 1
  <span class="k">-</span><span class="w"> </span>Punkt 2
  <span class="w">  </span><span class="k">-</span><span class="w"> </span>Unterpunkt 2.1
  <span class="w">  </span><span class="k">-</span><span class="w"> </span>Unterpunkt 2.2
  <span class="k">-</span><span class="w"> </span>Punkt 3

  <span class="k">*</span><span class="w"> </span>Alternative Syntax
  <span class="k">*</span><span class="w"> </span>Mit Sternchen
  </code></pre></div>
  <p><strong>Ergebnis:</strong><br />
  - Punkt 1<br />
  - Punkt 2<br />
    - Unterpunkt 2.1<br />
    - Unterpunkt 2.2<br />
  - Punkt 3</p>
  <h3 id="geordnete-listen">Geordnete Listen</h3>
  <div class="highlight"><pre><span></span><code><span class="k">1.</span> Erster Punkt
  <span class="k">2.</span> Zweiter Punkt
  <span class="k">3.</span> Dritter Punkt
  <span class="w">   </span><span class="k">1.</span> Unterpunkt 3.1
  <span class="w">   </span><span class="k">2.</span> Unterpunkt 3.2
  </code></pre></div>
  <p><strong>Ergebnis:</strong><br />
  1. Erster Punkt<br />
  2. Zweiter Punkt<br />
  3. Dritter Punkt<br />
     1. Unterpunkt 3.1<br />
     2. Unterpunkt 3.2</p>
  <h3 id="task-lists-checkboxen">Task Lists (Checkboxen)</h3>
  <div class="highlight"><pre><span></span><code><span class="k">- [x]</span> Erledigte Aufgabe
  <span class="k">- [ ]</span> Offene Aufgabe
  <span class="k">- [x]</span> Noch eine erledigte Aufgabe
  </code></pre></div>
  <p><strong>Ergebnis:</strong><br />
  - [x] Erledigte Aufgabe<br />
  - [ ] Offene Aufgabe<br />
  - [x] Noch eine erledigte Aufgabe</p>
  <hr />
  <h2 id="links-und-bilder">Links und Bilder</h2>
  <h3 id="links">Links</h3>
  <div class="highlight"><pre><span></span><code>[<span class="nt">Link-Text</span>](<span class="na">https://example.com</span>)
  [<span class="nt">Link mit Titel</span>](<span class="na">https://example.com &quot;Tooltip-Text&quot;</span>)
  </code></pre></div>
  <p><strong>Ergebnis:</strong> <a href="https://example.com">Link-Text</a></p>
  <h3 id="automatische-links">Automatische Links</h3>
  <div class="highlight"><pre><span></span><code>https://example.com
  &lt;https://example.com&gt;
  </code></pre></div>
  <p><strong>Ergebnis:</strong> https://example.com</p>
  <h3 id="referenz-links">Referenz-Links</h3>
  <div class="highlight"><pre><span></span><code>[<span class="nt">Link-Text</span>][<span class="nl">ref-id</span>]

  [<span class="nl">ref-id</span>]: <span class="na">https://example.com &quot;Optionaler Titel&quot;</span>
  </code></pre></div>
  <h3 id="bilder">Bilder</h3>
  <div class="highlight"><pre><span></span><code>![<span class="nt">Alt-Text</span>](<span class="na">https://example.com/bild.jpg</span>)
  ![<span class="nt">Bild mit Titel</span>](<span class="na">https://example.com/bild.jpg &quot;Bildtitel&quot;</span>)
  </code></pre></div>
  <h3 id="bilder-mit-referenz">Bilder mit Referenz</h3>
  <div class="highlight"><pre><span></span><code>![Alt-Text][bild-ref]

  [<span class="nl">bild-ref</span>]: <span class="na">https://example.com/bild.jpg &quot;Bildtitel&quot;</span>
  </code></pre></div>
  <hr />
  <h2 id="code-blocke">Code-Blöcke</h2>
  <h3 id="einfache-code-blocke">Einfache Code-Blöcke</h3>
  <div class="highlight"><pre><span></span><code><span class="sb">```</span>
  <span class="sb">Code ohne Syntax-Highlighting</span>
  <span class="sb">```</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong><br />
  <div class="highlight"><pre><span></span><code>Code ohne Syntax-Highlighting
  </code></pre></div></p>
  <h3 id="code-blocke-mit-syntax-highlighting">Code-Blöcke mit Syntax-Highlighting</h3>
  <div class="highlight"><pre><span></span><code><span class="sb">```python</span>
  <span class="k">def</span> <span class="nf">hello_world</span><span class="p">():</span>
      <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Hello, World!&quot;</span><span class="p">)</span>
  <span class="sb">```</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong><br />
  <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">hello_world</span><span class="p">():</span>
      <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Hello, World!&quot;</span><span class="p">)</span>
  </code></pre></div></p>
  <h3 id="unterstutzte-sprachen-fur-syntax-highlighting">Unterstützte Sprachen für Syntax-Highlighting</h3>
  <ul>
  <li><code>python</code>, <code>javascript</code>, <code>java</code>, <code>c</code>, <code>cpp</code>, <code>csharp</code></li>
  <li><code>html</code>, <code>css</code>, <code>json</code>, <code>xml</code>, <code>yaml</code></li>
  <li><code>bash</code>, <code>shell</code>, <code>sql</code>, <code>php</code>, <code>ruby</code></li>
  <li><code>go</code>, <code>rust</code>, <code>swift</code>, <code>kotlin</code></li>
  <li>Und viele mehr!</li>
  </ul>
  <p><strong>Beispiel JavaScript:</strong><br />
  <div class="highlight"><pre><span></span><code><span class="sb">```javascript</span>
  <span class="kd">function</span><span class="w"> </span><span class="nx">greet</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
  <span class="w">    </span><span class="k">return</span><span class="w"> </span><span class="sb">`Hello, </span><span class="si">${</span><span class="nx">name</span><span class="si">}</span><span class="sb">!`</span><span class="p">;</span>
  <span class="p">}</span>
  <span class="sb">```</span>
  </code></pre></div></p>
  <p><strong>Beispiel <abbr title="HyperText Markup Language">HTML</abbr>:</strong><br />
  <div class="highlight"><pre><span></span><code><span class="sb">```html</span>
  <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&quot;container&quot;</span><span class="p">&gt;</span>
      <span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;</span>Hello World<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
  <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
  <span class="sb">```</span>
  </code></pre></div></p>
  <hr />
  <h2 id="tabellen">Tabellen</h2>
  <p>Erstelle Tabellen mit Pipes <code>|</code> und Bindestrichen <code>-</code>.</p>
  <div class="highlight"><pre><span></span><code>| Spalte 1 | Spalte 2 | Spalte 3 |
  |----------|----------|----------|
  | Zeile 1  | Daten    | Daten    |
  | Zeile 2  | Daten    | Daten    |
  | Zeile 3  | Daten    | Daten    |
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <table>
  <thead>
  <tr>
  <th>Spalte 1</th>
  <th>Spalte 2</th>
  <th>Spalte 3</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td>Zeile 1</td>
  <td>Daten</td>
  <td>Daten</td>
  </tr>
  <tr>
  <td>Zeile 2</td>
  <td>Daten</td>
  <td>Daten</td>
  </tr>
  <tr>
  <td>Zeile 3</td>
  <td>Daten</td>
  <td>Daten</td>
  </tr>
  </tbody>
  </table>
  <h3 id="ausrichtung-in-tabellen">Ausrichtung in Tabellen</h3>
  <div class="highlight"><pre><span></span><code>| Links    | Zentriert | Rechts |
  |:---------|:---------:|-------:|
  | Links     | Zentriert | Rechts |
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <table>
  <thead>
  <tr>
  <th style="text-align: left;">Links</th>
  <th style="text-align: center;">Zentriert</th>
  <th style="text-align: right;">Rechts</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td style="text-align: left;">Links</td>
  <td style="text-align: center;">Zentriert</td>
  <td style="text-align: right;">Rechts</td>
  </tr>
  </tbody>
  </table>
  <hr />
  <h2 id="blockquotes">Blockquotes</h2>
  <p>Verwende <code>&gt;</code> für Zitate oder hervorgehobene Textblöcke.</p>
  <div class="highlight"><pre><span></span><code><span class="k">&gt; </span><span class="ge">Dies ist ein Blockquote.</span>
  <span class="k">&gt; </span><span class="ge">Es kann mehrere Zeilen umfassen.</span>
  <span class="k">&gt;</span>
  <span class="ge">&gt; Und sogar Absätze enthalten.</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <blockquote>
  <p>Dies ist ein Blockquote.<br />
  Es kann mehrere Zeilen umfassen.</p>
  <p>Und sogar Absätze enthalten.</p>
  </blockquote>
  <h3 id="verschachtelte-blockquotes">Verschachtelte Blockquotes</h3>
  <div class="highlight"><pre><span></span><code><span class="k">&gt; </span><span class="ge">Hauptzitat</span>
  <span class="k">&gt; </span><span class="ge">&gt; Verschachteltes Zitat</span>
  <span class="k">&gt; </span><span class="ge">&gt; &gt; Noch tiefer verschachtelt</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <blockquote>
  <p>Hauptzitat</p>
  <blockquote>
  <p>Verschachteltes Zitat</p>
  <blockquote>
  <p>Noch tiefer verschachtelt</p>
  </blockquote>
  </blockquote>
  </blockquote>
  <hr />
  <h2 id="horizontale-linien">Horizontale Linien</h2>
  <p>Erstelle horizontale Trennlinien mit drei oder mehr Bindestrichen, Sternchen oder Unterstrichen.</p>
  <div class="highlight"><pre><span></span><code>---

  ***

  ___
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <hr><h2 id="funoten">Fußnoten</h2>
  <p>Verwende Fußnoten für zusätzliche Informationen oder Quellenangaben.</p>
  <div class="highlight"><pre><span></span><code>Dies ist ein Text mit einer Fußnote[^1].

  Und hier ist noch eine[^note2].

  [<span class="nl">^1</span>]: <span class="na">Dies ist der Inhalt der ersten Fußnote.</span>
  [<span class="nl">^note2</span>]: <span class="na">Dies ist der Inhalt der zweiten Fußnote mit einem benutzerdefinierten Namen.</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <p>Dies ist ein Text mit einer Fußnote<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>.</p>
  <p>Und hier ist noch eine<sup id="fnref:note2"><a class="footnote-ref" href="#fn:note2">2</a></sup>.</p>
  <hr />
  <h2 id="abkurzungen">Abkürzungen</h2>
  <p>Definiere Abkürzungen, die beim Hovern erweitert werden.</p>
  <div class="highlight"><pre><span></span><code>Die HTML Abkürzung wird erklärt.

  *[HTML]: HyperText Markup Language
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <p>Die <abbr title="HyperText Markup Language">HTML</abbr> Abkürzung wird erklärt.</p>
  <hr />
  <h2 id="definition-lists">Definition Lists</h2>
  <p>Erstelle Definitionslisten für Begriffe und ihre Erklärungen.</p>
  <div class="highlight"><pre><span></span><code>Begriff 1
  : Definition 1
  : Alternative Definition 1

  Begriff 2
  : Definition 2
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <dl>
  <dt>Begriff 1</dt>
  <dd>Definition 1</dd>
  <dd>Alternative Definition 1</dd>
  <dt>Begriff 2</dt>
  <dd>Definition 2</dd>
  </dl>
  <hr />
  <h2 id="html-in-markdown"><abbr title="HyperText Markup Language">HTML</abbr> in Markdown</h2>
  <p>Du kannst <abbr title="HyperText Markup Language">HTML</abbr> direkt in Markdown verwenden.</p>
  <div class="highlight"><pre><span></span><code>&lt;p&gt;Dies ist ein &lt;strong&gt;HTML&lt;/strong&gt; Absatz.&lt;/p&gt;

  &lt;div style=&quot;color: blue;&quot;&gt;
      HTML mit Styling
  &lt;/div&gt;
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <p>Dies ist ein <strong>HTML</strong> Absatz.</p>

  <div style="color: blue;">
      HTML mit Styling
  </div>

  <h3 id="html-in-markdown-blocken"><abbr title="HyperText Markup Language">HTML</abbr> in Markdown-Blöcken</h3>
  <div class="highlight"><pre><span></span><code>&lt;div markdown=&quot;1&quot;&gt;
  Dieser Text wird als <span class="gs">**Markdown**</span> interpretiert.
  &lt;/div&gt;
  </code></pre></div>
  <hr />
  <h2 id="zeilenumbruche">Zeilenumbrüche</h2>
  <h3 id="einfache-zeilenumbruche">Einfache Zeilenumbrüche</h3>
  <div class="highlight"><pre><span></span><code>Zeile 1
  Zeile 2 (zwei Leerzeichen am Ende)  
  Zeile 3
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <p>Zeile 1<br />
  Zeile 2 (zwei Leerzeichen am Ende)<br />
  Zeile 3</p>
  <h3 id="absatze">Absätze</h3>
  <div class="highlight"><pre><span></span><code>Absatz 1

  Absatz 2 (leere Zeile dazwischen)
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <p>Absatz 1</p>
  <p>Absatz 2 (leere Zeile dazwischen)</p>
  <hr />
  <h2 id="escape-zeichen">Escape-Zeichen</h2>
  <p>Verwende Backslash <code>\</code> um spezielle Zeichen zu escapen.</p>
  <div class="highlight"><pre><span></span><code>\*Dieser Text hat keine Formatierung\*
  \# Keine Überschrift
  \[Kein Link\]\(url\)
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <p>*Dieser Text hat keine Formatierung*<br />
  # Keine Überschrift<br />
  [Kein Link](url)</p>
  <hr />
  <h2 id="kombinierte-beispiele">Kombinierte Beispiele</h2>
  <h3 id="code-in-listen">Code in Listen</h3>
  <div class="highlight"><pre><span></span><code><span class="k">1.</span> Installiere Python:
  <span class="sb">   ```bash</span>
  <span class="w">   </span>pip<span class="w"> </span>install<span class="w"> </span>package
  <span class="sb">   ```</span>

  <span class="k">2.</span> Führe das Skript aus:
  <span class="sb">   ```python</span>
     <span class="n">python</span> <span class="o">&lt;</span><span class="n">a</span> <span class="n">href</span><span class="o">=</span><span class="s2">&quot;https://script.py&quot;</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;_blank&quot;</span> <span class="n">rel</span><span class="o">=</span><span class="s2">&quot;noopener noreferrer&quot;</span><span class="o">&gt;</span><span class="n">script</span><span class="o">.</span><span class="n">py</span><span class="o">&lt;/</span><span class="n">a</span><span class="o">&gt;</span>
  <span class="sb">   ```</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <ol>
  <li>
  <p>Installiere Python:<br />
     <div class="highlight"><pre><span></span><code>pip<span class="w"> </span>install<span class="w"> </span>package
  </code></pre></div></p>
  </li>
  <li>
  <p>Führe das Skript aus:<br />
     <div class="highlight"><pre><span></span><code><span class="n">python</span> <span class="o">&lt;</span><span class="n">a</span> <span class="n">href</span><span class="o">=</span><span class="s2">&quot;https://script.py&quot;</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;_blank&quot;</span> <span class="n">rel</span><span class="o">=</span><span class="s2">&quot;noopener noreferrer&quot;</span><span class="o">&gt;</span><span class="n">script</span><span class="o">.</span><span class="n">py</span><span class="o">&lt;/</span><span class="n">a</span><span class="o">&gt;</span>
  </code></pre></div></p>
  </li>
  </ol>
  <h3 id="tabellen-mit-formatierung">Tabellen mit Formatierung</h3>
  <div class="highlight"><pre><span></span><code>| Feature | Status | Notizen |
  |---------|--------|---------|
  | <span class="gs">**Fett**</span> | ✅ | Funktioniert |
  | <span class="ge">*Kursiv*</span> | ✅ | Funktioniert |
  | <span class="sb">`Code`</span> | ✅ | Funktioniert |
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <table>
  <thead>
  <tr>
  <th>Feature</th>
  <th>Status</th>
  <th>Notizen</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td><strong>Fett</strong></td>
  <td>✅</td>
  <td>Funktioniert</td>
  </tr>
  <tr>
  <td><em>Kursiv</em></td>
  <td>✅</td>
  <td>Funktioniert</td>
  </tr>
  <tr>
  <td><code>Code</code></td>
  <td>✅</td>
  <td>Funktioniert</td>
  </tr>
  </tbody>
  </table>
  <hr />
  <h2 id="tipps-und-tricks">Tipps und Tricks</h2>
  <h3 id="1-automatisches-inhaltsverzeichnis">1. Automatisches Inhaltsverzeichnis</h3>
  <p>Verwende <code>[TOC]</code> um automatisch ein Inhaltsverzeichnis zu generieren (wird an der Stelle eingefügt, wo du es platzierst).</p>
  <div class="highlight"><pre><span></span><code>[TOC]

  <span class="gh"># Überschrift 1</span>
  <span class="gu">## Unterüberschrift</span>
  </code></pre></div>
  <h3 id="2-kombiniere-formatierungen">2. Kombiniere Formatierungen</h3>
  <div class="highlight"><pre><span></span><code><span class="gs">**Fett mit [Link](https://example.com) und `Code`**</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong> <strong>Fett mit <a href="https://example.com">Link</a> und <code>Code</code></strong></p>
  <h3 id="3-code-in-tabellen">3. Code in Tabellen</h3>
  <div class="highlight"><pre><span></span><code>| Befehl | Beschreibung |
  |--------|-------------|
  | <span class="sb">`git add`</span> | Fügt Dateien hinzu |
  | <span class="sb">`git commit`</span> | Committet Änderungen |
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <table>
  <thead>
  <tr>
  <th>Befehl</th>
  <th>Beschreibung</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td><code>git add</code></td>
  <td>Fügt Dateien hinzu</td>
  </tr>
  <tr>
  <td><code>git commit</code></td>
  <td>Committet Änderungen</td>
  </tr>
  </tbody>
  </table>
  <h3 id="4-listen-in-blockquotes">4. Listen in Blockquotes</h3>
  <div class="highlight"><pre><span></span><code><span class="k">&gt; </span><span class="ge">Wichtige Punkte:</span>
  <span class="k">&gt; </span><span class="ge">- Punkt 1</span>
  <span class="k">&gt; </span><span class="ge">- Punkt 2</span>
  <span class="k">&gt; </span><span class="ge">- Punkt 3</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <blockquote>
  <p>Wichtige Punkte:<br />
  - Punkt 1<br />
  - Punkt 2<br />
  - Punkt 3</p>
  </blockquote>
  <hr />
  <h2 id="unterstutzte-markdown-extensions">Unterstützte Markdown-Extensions</h2>
  <p>Diese Anwendung unterstützt folgende Markdown-Extensions:</p>
  <ul>
  <li>✅ <strong>fenced_code</strong> - Code-Blöcke mit Syntax-Highlighting</li>
  <li>✅ <strong>tables</strong> - Tabellen</li>
  <li>✅ <strong>codehilite</strong> - Syntax-Highlighting für Code</li>
  <li>✅ <strong>toc</strong> - Automatisches Inhaltsverzeichnis</li>
  <li>✅ <strong>nl2br</strong> - Automatische Zeilenumbrüche</li>
  <li>✅ <strong>sane_lists</strong> - Verbesserte Listen</li>
  <li>✅ <strong>attr_list</strong> - <abbr title="HyperText Markup Language">HTML</abbr>-Attribute</li>
  <li>✅ <strong>def_list</strong> - Definitionslisten</li>
  <li>✅ <strong>abbr</strong> - Abkürzungen</li>
  <li>✅ <strong>footnotes</strong> - Fußnoten</li>
  </ul>
  <hr />
  <h2 id="weitere-ressourcen">Weitere Ressourcen</h2>
  <ul>
  <li><a href="https://www.markdownguide.org/">Markdown Guide</a></li>
  <li><a href="https://github.github.com/gfm/">GitHub Flavored Markdown</a></li>
  <li><a href="https://commonmark.org/">CommonMark</a></li>
  </ul>
  <hr />
  <p><strong>Viel Erfolg beim Schreiben!</strong> 🚀</p>
  <div class="footnote">
  <hr />
  <ol>
  <li id="fn:1">
  <p>Dies ist der Inhalt der ersten Fußnote.&#160;<a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">&#8617;</a></p>
  </li>
  <li id="fn:note2">
  <p>Dies ist der Inhalt der zweiten Fußnote mit einem benutzerdefinierten Namen.&#160;<a class="footnote-backref" href="#fnref:note2" title="Jump back to footnote 2 in the text">&#8617;</a></p>
  </li>
  </ol>
  </div>

summary:
  Erstelle ein Markdown-Dokument mit dem folgenden Text:

  ## Das erste Thema: Die Grundlagen des Markdowns

  ### Introduction

  Das erste Thema ist die Grundlage für das MarkDown-Formatieren. Es handelt sich um eine Formatierung, die die HTML-Struktur in MarkDown-Formelensatz vermitteln kann. Der MarkDOWN-Formatierungs-Guide enthält viele Formelensätze, die spezifisch für den MarkDOWN-Format


id: Guide
created_at: 2025-11-14 22:57:24
updated_at: 2025-11-14 22:57:24
referrer: http://89.168.66.142:5000/
summary: - Punkt 3
content:
  # Markdown Formatierungs-Guide

  Vollständige Übersicht aller unterstützten Markdown-Formatierungen für die Markdown Publisher Anwendung.

  ## Inhaltsverzeichnis

  - [Überschriften](#überschriften)
  - [Text-Formatierung](#text-formatierung)
  - [Listen](#listen)
  - [Links und Bilder](#links-und-bilder)
  - [Code-Blöcke](#code-blöcke)
  - [Tabellen](#tabellen)
  - [Blockquotes](#blockquotes)
  - [Horizontale Linien](#horizontale-linien)
  - [Fußnoten](#fußnoten)
  - [Abkürzungen](#abkürzungen)
  - [Definition Lists](#definition-lists)
  - [HTML in Markdown](#html-in-markdown)
  - [Zentrierter Text](#zentrierter-text)
  - [Nach oben scrollen](#nach-oben-scrollen)
  - [Zeilenumbrüche](#zeilenumbrüche)

  ---

  ## Überschriften

  Erstelle Überschriften mit `#` Zeichen. Je mehr `#`, desto kleiner die Überschrift.

  ```markdown
  # Überschrift 1 (größte)
  ## Überschrift 2
  ### Überschrift 3
  #### Überschrift 4
  ##### Überschrift 5
  ###### Überschrift 6 (kleinste)
  ```

  **Ergebnis:**
  # Überschrift 1 (größte)
  ## Überschrift 2
  ### Überschrift 3
  #### Überschrift 4
  ##### Überschrift 5
  ###### Überschrift 6 (kleinste)

  ---

  ## Text-Formatierung

  ### Fett

  ```markdown
  **Dieser Text ist fett**
  __Dieser Text ist auch fett__
  ```

  **Ergebnis:** **Dieser Text ist fett**

  ### Kursiv

  ```markdown
  *Dieser Text ist kursiv*
  _Dieser Text ist auch kursiv_
  ```

  **Ergebnis:** *Dieser Text ist kursiv*

  ### Fett und Kursiv

  ```markdown
  ***Dieser Text ist fett und kursiv***
  ___Dieser Text ist auch fett und kursiv___
  ```

  **Ergebnis:** ***Dieser Text ist fett und kursiv***

  ### Durchgestrichen

  ```markdown
  ~~Dieser Text ist durchgestrichen~~
  ```

  **Ergebnis:** ~~Dieser Text ist durchgestrichen~~

  ### Inline-Code

  ```markdown
  Verwende `code` für technische Begriffe.
  ```

  **Ergebnis:** Verwende `code` für technische Begriffe.

  ---

  ## Listen

  ### Ungeordnete Listen

  ```markdown
  - Punkt 1
  - Punkt 2
    - Unterpunkt 2.1
    - Unterpunkt 2.2
  - Punkt 3

  * Alternative Syntax
  * Mit Sternchen
  ```

  **Ergebnis:**
  - Punkt 1
  - Punkt 2
    - Unterpunkt 2.1
    - Unterpunkt 2.2
  - Punkt 3

  ### Geordnete Listen

  ```markdown
  1. Erster Punkt
  2. Zweiter Punkt
  3. Dritter Punkt
     1. Unterpunkt 3.1
     2. Unterpunkt 3.2
  ```

  **Ergebnis:**
  1. Erster Punkt
  2. Zweiter Punkt
  3. Dritter Punkt
     1. Unterpunkt 3.1
     2. Unterpunkt 3.2

  ### Task Lists (Checkboxen)

  ```markdown
  - [x] Erledigte Aufgabe
  - [ ] Offene Aufgabe
  - [x] Noch eine erledigte Aufgabe
  ```

  **Ergebnis:**
  - [x] Erledigte Aufgabe
  - [ ] Offene Aufgabe
  - [x] Noch eine erledigte Aufgabe

  ---

  ## Links und Bilder

  ### Links

  ```markdown
  [Link-Text](https://example.com)
  [Link mit Titel](https://example.com "Tooltip-Text")
  ```

  **Ergebnis:** [Link-Text](https://example.com)

  ### Automatische Links

  ```markdown
  https://example.com
  <https://example.com>
  ```

  **Ergebnis:** https://example.com

  ### Referenz-Links

  ```markdown
  [Link-Text][ref-id]

  [ref-id]: https://example.com "Optionaler Titel"
  ```

  ### Bilder

  ```markdown
  ![Alt-Text](https://example.com/bild.jpg)
  ![Bild mit Titel](https://example.com/bild.jpg "Bildtitel")
  ```

  ### Bilder mit Referenz

  ```markdown
  ![Alt-Text][bild-ref]

  [bild-ref]: https://example.com/bild.jpg "Bildtitel"
  ```

  ---

  ## Code-Blöcke

  ### Einfache Code-Blöcke

  ````markdown
  ```
  Code ohne Syntax-Highlighting
  ```
  ````

  **Ergebnis:**
  ```
  Code ohne Syntax-Highlighting
  ```

  ### Code-Blöcke mit Syntax-Highlighting

  ````markdown
  ```python
  def hello_world():
      print("Hello, World!")
  ```
  ````

  **Ergebnis:**
  ```python
  def hello_world():
      print("Hello, World!")
  ```

  ### Unterstützte Sprachen für Syntax-Highlighting

  - `python`, `javascript`, `java`, `c`, `cpp`, `csharp`
  - `html`, `css`, `json`, `xml`, `yaml`
  - `bash`, `shell`, `sql`, `php`, `ruby`
  - `go`, `rust`, `swift`, `kotlin`
  - Und viele mehr!

  **Beispiel JavaScript:**
  ````markdown
  ```javascript
  function greet(name) {
      return `Hello, ${name}!`;
  }
  ```
  ````

  **Beispiel HTML:**
  ````markdown
  ```html
  <div class="container">
      <h1>Hello World</h1>
  </div>
  ```
  ````

  ---

  ## Tabellen

  Erstelle Tabellen mit Pipes `|` und Bindestrichen `-`.

  ```markdown
  | Spalte 1 | Spalte 2 | Spalte 3 |
  |----------|----------|----------|
  | Zeile 1  | Daten    | Daten    |
  | Zeile 2  | Daten    | Daten    |
  | Zeile 3  | Daten    | Daten    |
  ```

  **Ergebnis:**

  | Spalte 1 | Spalte 2 | Spalte 3 |
  |----------|----------|----------|
  | Zeile 1  | Daten    | Daten    |
  | Zeile 2  | Daten    | Daten    |
  | Zeile 3  | Daten    | Daten    |

  ### Ausrichtung in Tabellen

  ```markdown
  | Links    | Zentriert | Rechts |
  |:---------|:---------:|-------:|
  | Links     | Zentriert | Rechts |
  ```

  **Ergebnis:**

  | Links    | Zentriert | Rechts |
  |:---------|:---------:|-------:|
  | Links     | Zentriert | Rechts |

  ---

  ## Blockquotes

  Verwende `>` für Zitate oder hervorgehobene Textblöcke.

  ```markdown
  > Dies ist ein Blockquote.
  > Es kann mehrere Zeilen umfassen.
  >
  > Und sogar Absätze enthalten.
  ```

  **Ergebnis:**

  > Dies ist ein Blockquote.
  > Es kann mehrere Zeilen umfassen.
  >
  > Und sogar Absätze enthalten.

  ### Verschachtelte Blockquotes

  ```markdown
  > Hauptzitat
  > > Verschachteltes Zitat
  > > > Noch tiefer verschachtelt
  ```

  **Ergebnis:**

  > Hauptzitat
  > > Verschachteltes Zitat
  > > > Noch tiefer verschachtelt

  ---

  ## Horizontale Linien

  Erstelle horizontale Trennlinien mit drei oder mehr Bindestrichen, Sternchen oder Unterstrichen.

  ```markdown
  ---

  ***

  ___
  ```

  **Ergebnis:**

  ---

  ---

  ---

  ---

  ## Fußnoten

  Verwende Fußnoten für zusätzliche Informationen oder Quellenangaben.

  ```markdown
  Dies ist ein Text mit einer Fußnote[^1].

  Und hier ist noch eine[^note2].

  [^1]: Dies ist der Inhalt der ersten Fußnote.
  [^note2]: Dies ist der Inhalt der zweiten Fußnote mit einem benutzerdefinierten Namen.
  ```

  **Ergebnis:**

  Dies ist ein Text mit einer Fußnote[^1].

  Und hier ist noch eine[^note2].

  [^1]: Dies ist der Inhalt der ersten Fußnote.
  [^note2]: Dies ist der Inhalt der zweiten Fußnote mit einem benutzerdefinierten Namen.

  ---

  ## Abkürzungen

  Definiere Abkürzungen, die beim Hovern erweitert werden.

  ```markdown
  Die HTML Abkürzung wird erklärt.

  *[HTML]: HyperText Markup Language
  ```

  **Ergebnis:**

  Die HTML Abkürzung wird erklärt.

  *[HTML]: HyperText Markup Language

  ---

  ## Definition Lists

  Erstelle Definitionslisten für Begriffe und ihre Erklärungen.

  ```markdown
  Begriff 1
  : Definition 1
  : Alternative Definition 1

  Begriff 2
  : Definition 2
  ```

  **Ergebnis:**

  Begriff 1
  : Definition 1
  : Alternative Definition 1

  Begriff 2
  : Definition 2

  ---

  ## HTML in Markdown

  Du kannst HTML direkt in Markdown verwenden.

  ```markdown
  <p>Dies ist ein <strong>HTML</strong> Absatz.</p>

  <div style="color: blue;">
      HTML mit Styling
  </div>
  ```

  **Ergebnis:**

  <p>Dies ist ein <strong>HTML</strong> Absatz.</p>

  <div style="color: blue;">
      HTML mit Styling
  </div>

  ### HTML in Markdown-Blöcken

  ```markdown
  <div markdown="1">
  Dieser Text wird als **Markdown** interpretiert.
  </div>
  ```

  ---

  ## Zentrierter Text

  Verwende `-> Text <-` um Text zu zentrieren.

  ```markdown
  -> Dieser Text ist zentriert <-

  -> Auch mehrzeiliger Text
  kann zentriert werden <-
  ```

  **Ergebnis:**

  -> Dieser Text ist zentriert <-

  -> Auch mehrzeiliger Text
  kann zentriert werden <-

  ---

  ## Nach oben scrollen

  Verwende `[^]`, `[top]`, `[nach oben]` oder `[nach oben scrollen]` um einen Link zu erstellen, der automatisch nach oben scrollt.

  ```markdown
  [^]

  [top]

  [nach oben]

  [nach oben scrollen]
  ```

  **Ergebnis:**

  [^]

  Alle Varianten funktionieren gleich und erstellen einen Link mit einem Pfeil (↑), der beim Klicken sanft nach oben scrollt.

  **Verwendung:**
  - Am Ende eines langen Dokuments
  - Zwischen Abschnitten für bessere Navigation
  - In Kombination mit anderen Markdown-Elementen

  ---

  ## Zeilenumbrüche

  ### Einfache Zeilenumbrüche

  ```markdown
  Zeile 1
  Zeile 2 (zwei Leerzeichen am Ende)  
  Zeile 3
  ```

  **Ergebnis:**

  Zeile 1
  Zeile 2 (zwei Leerzeichen am Ende)  
  Zeile 3

  ### Absätze

  ```markdown
  Absatz 1

  Absatz 2 (leere Zeile dazwischen)
  ```

  **Ergebnis:**

  Absatz 1

  Absatz 2 (leere Zeile dazwischen)

  ---

  ## Escape-Zeichen

  Verwende Backslash `\` um spezielle Zeichen zu escapen.

  ```markdown
  \*Dieser Text hat keine Formatierung\*
  \# Keine Überschrift
  \[Kein Link\]\(url\)
  ```

  **Ergebnis:**

  \*Dieser Text hat keine Formatierung\*
  \# Keine Überschrift
  \[Kein Link\]\(url\)

  ---

  ## Kombinierte Beispiele

  ### Code in Listen

  ```markdown
  1. Installiere Python:
     ```bash
     pip install package
     ```

  2. Führe das Skript aus:
     ```python
     python script.py
     ```
  ```

  **Ergebnis:**

  1. Installiere Python:
     ```bash
     pip install package
     ```

  2. Führe das Skript aus:
     ```python
     python script.py
     ```

  ### Tabellen mit Formatierung

  ```markdown
  | Feature | Status | Notizen |
  |---------|--------|---------|
  | **Fett** | ✅ | Funktioniert |
  | *Kursiv* | ✅ | Funktioniert |
  | `Code` | ✅ | Funktioniert |
  ```

  **Ergebnis:**

  | Feature | Status | Notizen |
  |---------|--------|---------|
  | **Fett** | ✅ | Funktioniert |
  | *Kursiv* | ✅ | Funktioniert |
  | `Code` | ✅ | Funktioniert |

  ---

  ## Tipps und Tricks

  ### 1. Automatisches Inhaltsverzeichnis

  Verwende `[TOC]` um automatisch ein Inhaltsverzeichnis zu generieren (wird an der Stelle eingefügt, wo du es platzierst).

  ```markdown
  [TOC]

  # Überschrift 1
  ## Unterüberschrift
  ```

  ### 2. Kombiniere Formatierungen

  ```markdown
  **Fett mit [Link](https://example.com) und `Code`**
  ```

  **Ergebnis:** **Fett mit [Link](https://example.com) und `Code`**

  ### 3. Code in Tabellen

  ```markdown
  | Befehl | Beschreibung |
  |--------|-------------|
  | `git add` | Fügt Dateien hinzu |
  | `git commit` | Committet Änderungen |
  ```

  **Ergebnis:**

  | Befehl | Beschreibung |
  |--------|-------------|
  | `git add` | Fügt Dateien hinzu |
  | `git commit` | Committet Änderungen |

  ### 4. Listen in Blockquotes

  ```markdown
  > Wichtige Punkte:
  > - Punkt 1
  > - Punkt 2
  > - Punkt 3
  ```

  **Ergebnis:**

  > Wichtige Punkte:
  > - Punkt 1
  > - Punkt 2
  > - Punkt 3

  ### 5. Kombination: Zentrierter Text mit Nach-oben-Link

  ```markdown
  -> Wichtiger Text <-

  Weiterer Inhalt...

  [nach oben]
  ```

  **Ergebnis:**

  -> Wichtiger Text <-

  Weiterer Inhalt...

  [nach oben]

  ---

  ## Unterstützte Markdown-Extensions

  Diese Anwendung unterstützt folgende Markdown-Extensions:

  - ✅ **fenced_code** - Code-Blöcke mit Syntax-Highlighting
  - ✅ **tables** - Tabellen
  - ✅ **codehilite** - Syntax-Highlighting für Code
  - ✅ **toc** - Automatisches Inhaltsverzeichnis
  - ✅ **nl2br** - Automatische Zeilenumbrüche
  - ✅ **sane_lists** - Verbesserte Listen
  - ✅ **attr_list** - HTML-Attribute
  - ✅ **def_list** - Definitionslisten
  - ✅ **abbr** - Abkürzungen
  - ✅ **footnotes** - Fußnoten

  ---

  ## Custom Features

  Diese Anwendung bietet zusätzliche Custom-Features:

  ### Markdown-Features

  - ✅ **Zentrierter Text** - `-> Text <-` für zentrierten Text
  - ✅ **Nach oben scrollen** - `[^]`, `[top]`, `[nach oben]` oder `[nach oben scrollen]` für Scroll-to-Top Links mit sanftem Scrollen

  ### Anwendungs-Features

  - ✅ **Passwort-Schutz** - Jedes Dokument kann mit einem Passwort geschützt werden (für Bearbeitung)
  - ✅ **Benutzerdefinierte URLs** - Erstelle URLs wie `/der0ber` statt zufälliger IDs
  - ✅ **Export-Funktionen** - PDF und PNG Export
  - ✅ **Dark Mode** - Toggle zwischen Light und Dark Mode (gespeichert im Browser)
  - ✅ **Schriftart-Auswahl** - Wähle aus 8 verschiedenen Google Fonts (gespeichert im Browser)
  - ✅ **View-Counter** - Automatische Zählung der Aufrufe
  - ✅ **Raw-Ansicht** - Zeige rohen Markdown-Text
  - ✅ **Vorschau-Funktion** - Live-Vorschau beim Bearbeiten

  ---

  ## Weitere Ressourcen

  - [Markdown Guide](https://www.markdownguide.org/)
  - [GitHub Flavored Markdown](https://github.github.com/gfm/)
  - [CommonMark](https://commonmark.org/)

  ---

  **Viel Erfolg beim Schreiben!** 🚀

html_cache:
  <h1 id="markdown-formatierungs-guide">Markdown Formatierungs-Guide</h1>
  <p>Vollständige Übersicht aller unterstützten Markdown-Formatierungen für die Markdown Publisher Anwendung.</p>
  <h2 id="inhaltsverzeichnis">Inhaltsverzeichnis</h2>
  <ul>
  <li><a href="#überschriften">Überschriften</a></li>
  <li><a href="#text-formatierung">Text-Formatierung</a></li>
  <li><a href="#listen">Listen</a></li>
  <li><a href="#links-und-bilder">Links und Bilder</a></li>
  <li><a href="#code-blöcke">Code-Blöcke</a></li>
  <li><a href="#tabellen">Tabellen</a></li>
  <li><a href="#blockquotes">Blockquotes</a></li>
  <li><a href="#horizontale-linien">Horizontale Linien</a></li>
  <li><a href="#fußnoten">Fußnoten</a></li>
  <li><a href="#abkürzungen">Abkürzungen</a></li>
  <li><a href="#definition-lists">Definition Lists</a></li>
  <li><a href="#html-in-markdown"><abbr title="HyperText Markup Language">HTML</abbr> in Markdown</a></li>
  <li><a href="#zentrierter-text">Zentrierter Text</a></li>
  <li><a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Nach oben</a>(#nach-oben-scrollen)</li>
  <li><a href="#zeilenumbrüche">Zeilenumbrüche</a></li>
  </ul>
  <hr />
  <h2 id="uberschriften">Überschriften</h2>
  <p>Erstelle Überschriften mit <code>#</code> Zeichen. Je mehr <code>#</code>, desto kleiner die Überschrift.</p>
  <div class="highlight"><pre><span></span><code><span class="gh"># Überschrift 1 (größte)</span>
  <span class="gu">## Überschrift 2</span>
  <span class="gu">### Überschrift 3</span>
  <span class="gu">#### Überschrift 4</span>
  <span class="gu">##### Überschrift 5</span>
  <span class="gu">###### Überschrift 6 (kleinste)</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <h1 id="uberschrift-1-grote">Überschrift 1 (größte)</h1>
  <h2 id="uberschrift-2">Überschrift 2</h2>
  <h3 id="uberschrift-3">Überschrift 3</h3>
  <h4 id="uberschrift-4">Überschrift 4</h4>
  <h5 id="uberschrift-5">Überschrift 5</h5>
  <h6 id="uberschrift-6-kleinste">Überschrift 6 (kleinste)</h6>
  <hr />
  <h2 id="text-formatierung">Text-Formatierung</h2>
  <h3 id="fett">Fett</h3>
  <div class="highlight"><pre><span></span><code><span class="gs">**Dieser Text ist fett**</span>
  <span class="gs">__Dieser Text ist auch fett__</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong> <strong>Dieser Text ist fett</strong></p>
  <h3 id="kursiv">Kursiv</h3>
  <div class="highlight"><pre><span></span><code><span class="ge">*Dieser Text ist kursiv*</span>
  <span class="ge">_Dieser Text ist auch kursiv_</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong> <em>Dieser Text ist kursiv</em></p>
  <h3 id="fett-und-kursiv">Fett und Kursiv</h3>
  <div class="highlight"><pre><span></span><code>***Dieser Text ist fett und kursiv***
  ___Dieser Text ist auch fett und kursiv___
  </code></pre></div>
  <p><strong>Ergebnis:</strong> <strong><em>Dieser Text ist fett und kursiv</em></strong></p>
  <h3 id="durchgestrichen">Durchgestrichen</h3>
  <div class="highlight"><pre><span></span><code><span class="gd">~~Dieser Text ist durchgestrichen~~</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong> ~~Dieser Text ist durchgestrichen~~</p>
  <h3 id="inline-code">Inline-Code</h3>
  <div class="highlight"><pre><span></span><code>Verwende <span class="sb">`code`</span> für technische Begriffe.
  </code></pre></div>
  <p><strong>Ergebnis:</strong> Verwende <code>code</code> für technische Begriffe.</p>
  <hr />
  <h2 id="listen">Listen</h2>
  <h3 id="ungeordnete-listen">Ungeordnete Listen</h3>
  <div class="highlight"><pre><span></span><code><span class="k">-</span><span class="w"> </span>Punkt 1
  <span class="k">-</span><span class="w"> </span>Punkt 2
  <span class="w">  </span><span class="k">-</span><span class="w"> </span>Unterpunkt 2.1
  <span class="w">  </span><span class="k">-</span><span class="w"> </span>Unterpunkt 2.2
  <span class="k">-</span><span class="w"> </span>Punkt 3

  <span class="k">*</span><span class="w"> </span>Alternative Syntax
  <span class="k">*</span><span class="w"> </span>Mit Sternchen
  </code></pre></div>
  <p><strong>Ergebnis:</strong><br />
  - Punkt 1<br />
  - Punkt 2<br />
    - Unterpunkt 2.1<br />
    - Unterpunkt 2.2<br />
  - Punkt 3</p>
  <h3 id="geordnete-listen">Geordnete Listen</h3>
  <div class="highlight"><pre><span></span><code><span class="k">1.</span> Erster Punkt
  <span class="k">2.</span> Zweiter Punkt
  <span class="k">3.</span> Dritter Punkt
  <span class="w">   </span><span class="k">1.</span> Unterpunkt 3.1
  <span class="w">   </span><span class="k">2.</span> Unterpunkt 3.2
  </code></pre></div>
  <p><strong>Ergebnis:</strong><br />
  1. Erster Punkt<br />
  2. Zweiter Punkt<br />
  3. Dritter Punkt<br />
     1. Unterpunkt 3.1<br />
     2. Unterpunkt 3.2</p>
  <h3 id="task-lists-checkboxen">Task Lists (Checkboxen)</h3>
  <div class="highlight"><pre><span></span><code><span class="k">- [x]</span> Erledigte Aufgabe
  <span class="k">- [ ]</span> Offene Aufgabe
  <span class="k">- [x]</span> Noch eine erledigte Aufgabe
  </code></pre></div>
  <p><strong>Ergebnis:</strong><br />
  - [x] Erledigte Aufgabe<br />
  - [ ] Offene Aufgabe<br />
  - [x] Noch eine erledigte Aufgabe</p>
  <hr />
  <h2 id="links-und-bilder">Links und Bilder</h2>
  <h3 id="links">Links</h3>
  <div class="highlight"><pre><span></span><code>[<span class="nt">Link-Text</span>](<span class="na">https://example.com</span>)
  [<span class="nt">Link mit Titel</span>](<span class="na">https://example.com &quot;Tooltip-Text&quot;</span>)
  </code></pre></div>
  <p><strong>Ergebnis:</strong> <a href="https://example.com">Link-Text</a></p>
  <h3 id="automatische-links">Automatische Links</h3>
  <div class="highlight"><pre><span></span><code>https://example.com
  &lt;https://example.com&gt;
  </code></pre></div>
  <p><strong>Ergebnis:</strong> https://example.com</p>
  <h3 id="referenz-links">Referenz-Links</h3>
  <div class="highlight"><pre><span></span><code>[<span class="nt">Link-Text</span>][<span class="nl">ref-id</span>]

  [<span class="nl">ref-id</span>]: <span class="na">https://example.com &quot;Optionaler Titel&quot;</span>
  </code></pre></div>
  <h3 id="bilder">Bilder</h3>
  <div class="highlight"><pre><span></span><code>![<span class="nt">Alt-Text</span>](<span class="na">https://example.com/bild.jpg</span>)
  ![<span class="nt">Bild mit Titel</span>](<span class="na">https://example.com/bild.jpg &quot;Bildtitel&quot;</span>)
  </code></pre></div>
  <h3 id="bilder-mit-referenz">Bilder mit Referenz</h3>
  <div class="highlight"><pre><span></span><code>![Alt-Text][bild-ref]

  [<span class="nl">bild-ref</span>]: <span class="na">https://example.com/bild.jpg &quot;Bildtitel&quot;</span>
  </code></pre></div>
  <hr />
  <h2 id="code-blocke">Code-Blöcke</h2>
  <h3 id="einfache-code-blocke">Einfache Code-Blöcke</h3>
  <div class="highlight"><pre><span></span><code><span class="sb">```</span>
  <span class="sb">Code ohne Syntax-Highlighting</span>
  <span class="sb">```</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong><br />
  <div class="highlight"><pre><span></span><code>Code ohne Syntax-Highlighting
  </code></pre></div></p>
  <h3 id="code-blocke-mit-syntax-highlighting">Code-Blöcke mit Syntax-Highlighting</h3>
  <div class="highlight"><pre><span></span><code><span class="sb">```python</span>
  <span class="k">def</span> <span class="nf">hello_world</span><span class="p">():</span>
      <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Hello, World!&quot;</span><span class="p">)</span>
  <span class="sb">```</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong><br />
  <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">hello_world</span><span class="p">():</span>
      <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Hello, World!&quot;</span><span class="p">)</span>
  </code></pre></div></p>
  <h3 id="unterstutzte-sprachen-fur-syntax-highlighting">Unterstützte Sprachen für Syntax-Highlighting</h3>
  <ul>
  <li><code>python</code>, <code>javascript</code>, <code>java</code>, <code>c</code>, <code>cpp</code>, <code>csharp</code></li>
  <li><code>html</code>, <code>css</code>, <code>json</code>, <code>xml</code>, <code>yaml</code></li>
  <li><code>bash</code>, <code>shell</code>, <code>sql</code>, <code>php</code>, <code>ruby</code></li>
  <li><code>go</code>, <code>rust</code>, <code>swift</code>, <code>kotlin</code></li>
  <li>Und viele mehr!</li>
  </ul>
  <p><strong>Beispiel JavaScript:</strong><br />
  <div class="highlight"><pre><span></span><code><span class="sb">```javascript</span>
  <span class="kd">function</span><span class="w"> </span><span class="nx">greet</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
  <span class="w">    </span><span class="k">return</span><span class="w"> </span><span class="sb">`Hello, </span><span class="si">${</span><span class="nx">name</span><span class="si">}</span><span class="sb">!`</span><span class="p">;</span>
  <span class="p">}</span>
  <span class="sb">```</span>
  </code></pre></div></p>
  <p><strong>Beispiel <abbr title="HyperText Markup Language">HTML</abbr>:</strong><br />
  <div class="highlight"><pre><span></span><code><span class="sb">```html</span>
  <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&quot;container&quot;</span><span class="p">&gt;</span>
      <span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;</span>Hello World<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
  <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
  <span class="sb">```</span>
  </code></pre></div></p>
  <hr />
  <h2 id="tabellen">Tabellen</h2>
  <p>Erstelle Tabellen mit Pipes <code>|</code> und Bindestrichen <code>-</code>.</p>
  <div class="highlight"><pre><span></span><code>| Spalte 1 | Spalte 2 | Spalte 3 |
  |----------|----------|----------|
  | Zeile 1  | Daten    | Daten    |
  | Zeile 2  | Daten    | Daten    |
  | Zeile 3  | Daten    | Daten    |
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <table>
  <thead>
  <tr>
  <th>Spalte 1</th>
  <th>Spalte 2</th>
  <th>Spalte 3</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td>Zeile 1</td>
  <td>Daten</td>
  <td>Daten</td>
  </tr>
  <tr>
  <td>Zeile 2</td>
  <td>Daten</td>
  <td>Daten</td>
  </tr>
  <tr>
  <td>Zeile 3</td>
  <td>Daten</td>
  <td>Daten</td>
  </tr>
  </tbody>
  </table>
  <h3 id="ausrichtung-in-tabellen">Ausrichtung in Tabellen</h3>
  <div class="highlight"><pre><span></span><code>| Links    | Zentriert | Rechts |
  |:---------|:---------:|-------:|
  | Links     | Zentriert | Rechts |
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <table>
  <thead>
  <tr>
  <th style="text-align: left;">Links</th>
  <th style="text-align: center;">Zentriert</th>
  <th style="text-align: right;">Rechts</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td style="text-align: left;">Links</td>
  <td style="text-align: center;">Zentriert</td>
  <td style="text-align: right;">Rechts</td>
  </tr>
  </tbody>
  </table>
  <hr />
  <h2 id="blockquotes">Blockquotes</h2>
  <p>Verwende <code>&gt;</code> für Zitate oder hervorgehobene Textblöcke.</p>
  <div class="highlight"><pre><span></span><code><span class="k">&gt; </span><span class="ge">Dies ist ein Blockquote.</span>
  <span class="k">&gt; </span><span class="ge">Es kann mehrere Zeilen umfassen.</span>
  <span class="k">&gt;</span>
  <span class="ge">&gt; Und sogar Absätze enthalten.</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <blockquote>
  <p>Dies ist ein Blockquote.<br />
  Es kann mehrere Zeilen umfassen.</p>
  <p>Und sogar Absätze enthalten.</p>
  </blockquote>
  <h3 id="verschachtelte-blockquotes">Verschachtelte Blockquotes</h3>
  <div class="highlight"><pre><span></span><code><span class="k">&gt; </span><span class="ge">Hauptzitat</span>
  <span class="k">&gt; </span><span class="ge">&gt; Verschachteltes Zitat</span>
  <span class="k">&gt; </span><span class="ge">&gt; &gt; Noch tiefer verschachtelt</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <blockquote>
  <p>Hauptzitat</p>
  <blockquote>
  <p>Verschachteltes Zitat</p>
  <blockquote>
  <p>Noch tiefer verschachtelt</p>
  </blockquote>
  </blockquote>
  </blockquote>
  <hr />
  <h2 id="horizontale-linien">Horizontale Linien</h2>
  <p>Erstelle horizontale Trennlinien mit drei oder mehr Bindestrichen, Sternchen oder Unterstrichen.</p>
  <div class="highlight"><pre><span></span><code>---

  ***

  ___
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <hr><h2 id="funoten">Fußnoten</h2>
  <p>Verwende Fußnoten für zusätzliche Informationen oder Quellenangaben.</p>
  <div class="highlight"><pre><span></span><code>Dies ist ein Text mit einer Fußnote[^1].

  Und hier ist noch eine[^note2].

  [<span class="nl">^1</span>]: <span class="na">Dies ist der Inhalt der ersten Fußnote.</span>
  [<span class="nl">^note2</span>]: <span class="na">Dies ist der Inhalt der zweiten Fußnote mit einem benutzerdefinierten Namen.</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <p>Dies ist ein Text mit einer Fußnote<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>.</p>
  <p>Und hier ist noch eine<sup id="fnref:note2"><a class="footnote-ref" href="#fn:note2">2</a></sup>.</p>
  <hr />
  <h2 id="abkurzungen">Abkürzungen</h2>
  <p>Definiere Abkürzungen, die beim Hovern erweitert werden.</p>
  <div class="highlight"><pre><span></span><code>Die HTML Abkürzung wird erklärt.

  *[HTML]: HyperText Markup Language
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <p>Die <abbr title="HyperText Markup Language">HTML</abbr> Abkürzung wird erklärt.</p>
  <hr />
  <h2 id="definition-lists">Definition Lists</h2>
  <p>Erstelle Definitionslisten für Begriffe und ihre Erklärungen.</p>
  <div class="highlight"><pre><span></span><code>Begriff 1
  : Definition 1
  : Alternative Definition 1

  Begriff 2
  : Definition 2
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <dl>
  <dt>Begriff 1</dt>
  <dd>Definition 1</dd>
  <dd>Alternative Definition 1</dd>
  <dt>Begriff 2</dt>
  <dd>Definition 2</dd>
  </dl>
  <hr />
  <h2 id="html-in-markdown"><abbr title="HyperText Markup Language">HTML</abbr> in Markdown</h2>
  <p>Du kannst <abbr title="HyperText Markup Language">HTML</abbr> direkt in Markdown verwenden.</p>
  <div class="highlight"><pre><span></span><code>&lt;p&gt;Dies ist ein &lt;strong&gt;HTML&lt;/strong&gt; Absatz.&lt;/p&gt;

  &lt;div style=&quot;color: blue;&quot;&gt;
      HTML mit Styling
  &lt;/div&gt;
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <p>Dies ist ein <strong>HTML</strong> Absatz.</p>

  <div style="color: blue;">
      HTML mit Styling
  </div>

  <h3 id="html-in-markdown-blocken"><abbr title="HyperText Markup Language">HTML</abbr> in Markdown-Blöcken</h3>
  <div class="highlight"><pre><span></span><code>&lt;div markdown=&quot;1&quot;&gt;
  Dieser Text wird als <span class="gs">**Markdown**</span> interpretiert.
  &lt;/div&gt;
  </code></pre></div>
  <hr />
  <h2 id="zentrierter-text">Zentrierter Text</h2>
  <p>Verwende `</p>
  <div class="md-center">
  <p>Text</p>
  </div>

  <p>` um Text zu zentrieren.</p>
  <div class="highlight"><pre><span></span><code>&lt;div class=&quot;md-center&quot;&gt;
  &lt;p&gt;Dieser Text ist zentriert&lt;/p&gt;
  &lt;/div&gt;





  &lt;div class=&quot;md-center&quot;&gt;
  &lt;p&gt;Auch mehrzeiliger Text&lt;br /&gt;
  kann zentriert werden&lt;/p&gt;
  &lt;/div&gt;
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <div class="md-center">
  <p>Dieser Text ist zentriert</p>
  </div>

  <div class="md-center">
  <p>Auch mehrzeiliger Text<br />
  kann zentriert werden</p>
  </div>

  <hr />
  <h2 id="nach-oben-scrollen">Nach oben scrollen</h2>
  <p>Verwende <code>&lt;a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);"&gt;↑ Nach oben&lt;/a&gt;</code>, <code>&lt;a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);"&gt;↑ Nach oben&lt;/a&gt;</code>, <code>&lt;a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);"&gt;↑ Nach oben&lt;/a&gt;</code> oder <code>&lt;a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);"&gt;↑ Nach oben&lt;/a&gt;</code> um einen Link zu erstellen, der automatisch nach oben scrollt.</p>
  <div class="highlight"><pre><span></span><code>&lt;a href=&quot;#&quot; onclick=&quot;window.scrollTo({top: 0, behavior: \&#39;smooth\&#39;}); return false;&quot; style=&quot;text-decoration: none; color: var(--link-color);&quot;&gt;↑ Nach oben&lt;/a&gt;

  &lt;a href=&quot;#&quot; onclick=&quot;window.scrollTo({top: 0, behavior: \&#39;smooth\&#39;}); return false;&quot; style=&quot;text-decoration: none; color: var(--link-color);&quot;&gt;↑ Nach oben&lt;/a&gt;

  &lt;a href=&quot;#&quot; onclick=&quot;window.scrollTo({top: 0, behavior: \&#39;smooth\&#39;}); return false;&quot; style=&quot;text-decoration: none; color: var(--link-color);&quot;&gt;↑ Nach oben&lt;/a&gt;

  &lt;a href=&quot;#&quot; onclick=&quot;window.scrollTo({top: 0, behavior: \&#39;smooth\&#39;}); return false;&quot; style=&quot;text-decoration: none; color: var(--link-color);&quot;&gt;↑ Nach oben&lt;/a&gt;
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <p><a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Nach oben</a></p>
  <p>Alle Varianten funktionieren gleich und erstellen einen Link mit einem Pfeil (↑), der beim Klicken sanft nach oben scrollt.</p>
  <p><strong>Verwendung:</strong><br />
  - Am Ende eines langen Dokuments<br />
  - Zwischen Abschnitten für bessere Navigation<br />
  - In Kombination mit anderen Markdown-Elementen</p>
  <hr />
  <h2 id="zeilenumbruche">Zeilenumbrüche</h2>
  <h3 id="einfache-zeilenumbruche">Einfache Zeilenumbrüche</h3>
  <div class="highlight"><pre><span></span><code>Zeile 1
  Zeile 2 (zwei Leerzeichen am Ende)  
  Zeile 3
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <p>Zeile 1<br />
  Zeile 2 (zwei Leerzeichen am Ende)<br />
  Zeile 3</p>
  <h3 id="absatze">Absätze</h3>
  <div class="highlight"><pre><span></span><code>Absatz 1

  Absatz 2 (leere Zeile dazwischen)
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <p>Absatz 1</p>
  <p>Absatz 2 (leere Zeile dazwischen)</p>
  <hr />
  <h2 id="escape-zeichen">Escape-Zeichen</h2>
  <p>Verwende Backslash <code>\</code> um spezielle Zeichen zu escapen.</p>
  <div class="highlight"><pre><span></span><code>\*Dieser Text hat keine Formatierung\*
  \# Keine Überschrift
  \[Kein Link\]\(url\)
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <p>*Dieser Text hat keine Formatierung*<br />
  # Keine Überschrift<br />
  [Kein Link](url)</p>
  <hr />
  <h2 id="kombinierte-beispiele">Kombinierte Beispiele</h2>
  <h3 id="code-in-listen">Code in Listen</h3>
  <div class="highlight"><pre><span></span><code><span class="k">1.</span> Installiere Python:
  <span class="sb">   ```bash</span>
  <span class="w">   </span>pip<span class="w"> </span>install<span class="w"> </span>package
  <span class="sb">   ```</span>

  <span class="k">2.</span> Führe das Skript aus:
  <span class="sb">   ```python</span>
     <span class="n">python</span> <span class="o">&lt;</span><span class="n">a</span> <span class="n">href</span><span class="o">=</span><span class="s2">&quot;https://script.py&quot;</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;_blank&quot;</span> <span class="n">rel</span><span class="o">=</span><span class="s2">&quot;noopener noreferrer&quot;</span><span class="o">&gt;</span><span class="n">script</span><span class="o">.</span><span class="n">py</span><span class="o">&lt;/</span><span class="n">a</span><span class="o">&gt;</span>
  <span class="sb">   ```</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <ol>
  <li>
  <p>Installiere Python:<br />
     <div class="highlight"><pre><span></span><code>pip<span class="w"> </span>install<span class="w"> </span>package
  </code></pre></div></p>
  </li>
  <li>
  <p>Führe das Skript aus:<br />
     <div class="highlight"><pre><span></span><code><span class="n">python</span> <span class="o">&lt;</span><span class="n">a</span> <span class="n">href</span><span class="o">=</span><span class="s2">&quot;https://script.py&quot;</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;_blank&quot;</span> <span class="n">rel</span><span class="o">=</span><span class="s2">&quot;noopener noreferrer&quot;</span><span class="o">&gt;</span><span class="n">script</span><span class="o">.</span><span class="n">py</span><span class="o">&lt;/</span><span class="n">a</span><span class="o">&gt;</span>
  </code></pre></div></p>
  </li>
  </ol>
  <h3 id="tabellen-mit-formatierung">Tabellen mit Formatierung</h3>
  <div class="highlight"><pre><span></span><code>| Feature | Status | Notizen |
  |---------|--------|---------|
  | <span class="gs">**Fett**</span> | ✅ | Funktioniert |
  | <span class="ge">*Kursiv*</span> | ✅ | Funktioniert |
  | <span class="sb">`Code`</span> | ✅ | Funktioniert |
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <table>
  <thead>
  <tr>
  <th>Feature</th>
  <th>Status</th>
  <th>Notizen</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td><strong>Fett</strong></td>
  <td>✅</td>
  <td>Funktioniert</td>
  </tr>
  <tr>
  <td><em>Kursiv</em></td>
  <td>✅</td>
  <td>Funktioniert</td>
  </tr>
  <tr>
  <td><code>Code</code></td>
  <td>✅</td>
  <td>Funktioniert</td>
  </tr>
  </tbody>
  </table>
  <hr />
  <h2 id="tipps-und-tricks">Tipps und Tricks</h2>
  <h3 id="1-automatisches-inhaltsverzeichnis">1. Automatisches Inhaltsverzeichnis</h3>
  <p>Verwende <code>[TOC]</code> um automatisch ein Inhaltsverzeichnis zu generieren (wird an der Stelle eingefügt, wo du es platzierst).</p>
  <div class="highlight"><pre><span></span><code>[TOC]

  <span class="gh"># Überschrift 1</span>
  <span class="gu">## Unterüberschrift</span>
  </code></pre></div>
  <h3 id="2-kombiniere-formatierungen">2. Kombiniere Formatierungen</h3>
  <div class="highlight"><pre><span></span><code><span class="gs">**Fett mit [Link](https://example.com) und `Code`**</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong> <strong>Fett mit <a href="https://example.com">Link</a> und <code>Code</code></strong></p>
  <h3 id="3-code-in-tabellen">3. Code in Tabellen</h3>
  <div class="highlight"><pre><span></span><code>| Befehl | Beschreibung |
  |--------|-------------|
  | <span class="sb">`git add`</span> | Fügt Dateien hinzu |
  | <span class="sb">`git commit`</span> | Committet Änderungen |
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <table>
  <thead>
  <tr>
  <th>Befehl</th>
  <th>Beschreibung</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td><code>git add</code></td>
  <td>Fügt Dateien hinzu</td>
  </tr>
  <tr>
  <td><code>git commit</code></td>
  <td>Committet Änderungen</td>
  </tr>
  </tbody>
  </table>
  <h3 id="4-listen-in-blockquotes">4. Listen in Blockquotes</h3>
  <div class="highlight"><pre><span></span><code><span class="k">&gt; </span><span class="ge">Wichtige Punkte:</span>
  <span class="k">&gt; </span><span class="ge">- Punkt 1</span>
  <span class="k">&gt; </span><span class="ge">- Punkt 2</span>
  <span class="k">&gt; </span><span class="ge">- Punkt 3</span>
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <blockquote>
  <p>Wichtige Punkte:<br />
  - Punkt 1<br />
  - Punkt 2<br />
  - Punkt 3</p>
  </blockquote>
  <h3 id="5-kombination-zentrierter-text-mit-nach-oben-link">5. Kombination: Zentrierter Text mit Nach-oben-Link</h3>
  <div class="highlight"><pre><span></span><code>&lt;div class=&quot;md-center&quot;&gt;
  &lt;p&gt;Wichtiger Text&lt;/p&gt;
  &lt;/div&gt;



  Weiterer Inhalt...

  &lt;a href=&quot;#&quot; onclick=&quot;window.scrollTo({top: 0, behavior: \&#39;smooth\&#39;}); return false;&quot; style=&quot;text-decoration: none; color: var(--link-color);&quot;&gt;↑ Nach oben&lt;/a&gt;
  </code></pre></div>
  <p><strong>Ergebnis:</strong></p>
  <div class="md-center">
  <p>Wichtiger Text</p>
  </div>

  <p>Weiterer Inhalt...</p>
  <p><a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Nach oben</a></p>
  <hr />
  <h2 id="unterstutzte-markdown-extensions">Unterstützte Markdown-Extensions</h2>
  <p>Diese Anwendung unterstützt folgende Markdown-Extensions:</p>
  <ul>
  <li>✅ <strong>fenced_code</strong> - Code-Blöcke mit Syntax-Highlighting</li>
  <li>✅ <strong>tables</strong> - Tabellen</li>
  <li>✅ <strong>codehilite</strong> - Syntax-Highlighting für Code</li>
  <li>✅ <strong>toc</strong> - Automatisches Inhaltsverzeichnis</li>
  <li>✅ <strong>nl2br</strong> - Automatische Zeilenumbrüche</li>
  <li>✅ <strong>sane_lists</strong> - Verbesserte Listen</li>
  <li>✅ <strong>attr_list</strong> - <abbr title="HyperText Markup Language">HTML</abbr>-Attribute</li>
  <li>✅ <strong>def_list</strong> - Definitionslisten</li>
  <li>✅ <strong>abbr</strong> - Abkürzungen</li>
  <li>✅ <strong>footnotes</strong> - Fußnoten</li>
  </ul>
  <hr />
  <h2 id="custom-features">Custom Features</h2>
  <p>Diese Anwendung bietet zusätzliche Custom-Features:</p>
  <h3 id="markdown-features">Markdown-Features</h3>
  <ul>
  <li>✅ <strong>Zentrierter Text</strong> - `</li>
  </ul>
  <div class="md-center">
  <p>Text</p>
  </div>

  <p><code>für zentrierten Text
  - ✅ **Nach oben scrollen** -</code><a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Nach oben</a><code>,</code><a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Nach oben</a><code>,</code><a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Nach oben</a><code>oder</code><a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Nach oben</a>` für Scroll-to-Top Links mit sanftem Scrollen</p>
  <h3 id="anwendungs-features">Anwendungs-Features</h3>
  <ul>
  <li>✅ <strong>Passwort-Schutz</strong> - Jedes Dokument kann mit einem Passwort geschützt werden (für Bearbeitung)</li>
  <li>✅ <strong>Benutzerdefinierte URLs</strong> - Erstelle URLs wie <code>/der0ber</code> statt zufälliger IDs</li>
  <li>✅ <strong>Export-Funktionen</strong> - PDF und PNG Export</li>
  <li>✅ <strong>Dark Mode</strong> - Toggle zwischen Light und Dark Mode (gespeichert im Browser)</li>
  <li>✅ <strong>Schriftart-Auswahl</strong> - Wähle aus 8 verschiedenen Google Fonts (gespeichert im Browser)</li>
  <li>✅ <strong>View-Counter</strong> - Automatische Zählung der Aufrufe</li>
  <li>✅ <strong>Raw-Ansicht</strong> - Zeige rohen Markdown-Text</li>
  <li>✅ <strong>Vorschau-Funktion</strong> - Live-Vorschau beim Bearbeiten</li>
  </ul>
  <hr />
  <h2 id="weitere-ressourcen">Weitere Ressourcen</h2>
  <ul>
  <li><a href="https://www.markdownguide.org/">Markdown Guide</a></li>
  <li><a href="https://github.github.com/gfm/">GitHub Flavored Markdown</a></li>
  <li><a href="https://commonmark.org/">CommonMark</a></li>
  </ul>
  <hr />
  <p><strong>Viel Erfolg beim Schreiben!</strong> 🚀</p>
  <div class="footnote">
  <hr />
  <ol>
  <li id="fn:1">
  <p>Dies ist der Inhalt der ersten Fußnote.&#160;<a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">&#8617;</a></p>
  </li>
  <li id="fn:note2">
  <p>Dies ist der Inhalt der zweiten Fußnote mit einem benutzerdefinierten Namen.&#160;<a class="footnote-backref" href="#fnref:note2" title="Jump back to footnote 2 in the text">&#8617;</a></p>
  </li>
  </ol>
  </div>


id: markdown-guide
created_at: 2025-11-15 13:40:05
updated_at: 2026-02-11 22:16:18
tags: Dokumentation
description: Eine Anleitung zzm Thema Markdown
content:
  # Markdown Publisher - Complete Guide

  Welcome to the **Markdown Publisher**! This guide covers all features and Markdown syntax supported by this platform.

  ---

  ## 📋 Table of Contents

  1. [Basic Markdown Syntax](#basic-markdown-syntax)
  2. [Admonitions (Info Boxes)](#admonitions-info-boxes)
  3. [Mermaid Diagrams](#mermaid-diagrams)
  4. [Special Formatting](#special-formatting)
  5. [Auto-Linking](#auto-linking)
  6. [Features](#features)
  7. [Keyboard Shortcuts](#keyboard-shortcuts)

  ---

  ## Basic Markdown Syntax

  ### Headings

  ```markdown
  # Heading 1
  ## Heading 2
  ### Heading 3
  #### Heading 4
  ##### Heading 5
  ###### Heading 6
  ```

  ### Text Formatting

  ```markdown
  **bold text**
  *italic text*
  ~~strikethrough~~
  `inline code`
  ```

  ### Lists

  **Unordered Lists:**
  ```markdown
  - Item 1
  - Item 2
    - Nested item
    - Another nested item
  ```

  **Ordered Lists:**
  ```markdown
  1. First item
  2. Second item
  3. Third item
  ```

  ### Links and Images

  ```markdown
  [Link text](https://example.com)
  ![Image alt text](https://example.com/image.png)
  ```

  ### Code Blocks

  ````markdown
  ```python
  def hello():
      print("Hello, World!")
  ```
  ````

  Supported languages: Python, JavaScript, HTML, CSS, JSON, Bash, and many more!

  ### Tables

  ```markdown
  | Column 1 | Column 2 | Column 3 |
  |----------|----------|----------|
  | Row 1    | Data     | Data     |
  | Row 2    | Data     | Data     |
  ```

  ### Blockquotes

  ```markdown
  > This is a blockquote.
  > It can span multiple lines.
  ```

  ### Horizontal Rules

  ```markdown
  ---
  ```

  ---

  ## Admonitions (Info Boxes)

  Admonitions are special info boxes that highlight important information. Use them to draw attention to notes, warnings, tips, or danger messages.

  ### Syntax

  ```markdown
  !!! type TITLE
      Content goes here
      - Supports **formatting**
      - [Links](https://example.com)
      - Lists and everything else!
  ```

  **Important:** The content must be indented with **4 spaces**.

  ### Types

  #### Note
  ```markdown
  !!! note Important Information
      This is a note box with important information.
      It supports full Markdown formatting.
  ```

  #### Info
  ```markdown
  !!! info Additional Details
      This is an info box with additional details.
      Use it for supplementary information.
  ```

  #### Warning
  ```markdown
  !!! warning Be Careful
      This is a warning box.
      Use it to alert users about potential issues.
  ```

  #### Danger
  ```markdown
  !!! danger Critical Warning
      This is a danger box.
      Use it for critical warnings or errors.
  ```

  #### Without Title

  You can also use admonitions without a title - the content will appear directly next to the icon:

  ```markdown
  !!! warning
      This warning has no title.
      The content appears directly beside the icon.
  ```

  ---

  ## Mermaid Diagrams

  Create beautiful diagrams and flowcharts directly in your Markdown using Mermaid syntax.

  ### Syntax

  ````markdown
  ```mermaid
  graph TD
      A[Start] --> B{Decision}
      B -->|Yes| C[Action 1]
      B -->|No| D[Action 2]
      C --> E[End]
      D --> E
  ```
  ````

  ### Examples

  #### Flowchart

  ````markdown
  ```mermaid
  graph LR
      A[User] --> B[Login]
      B --> C{Valid?}
      C -->|Yes| D[Dashboard]
      C -->|No| E[Error]
      E --> B
  ```
  ````

  #### Sequence Diagram

  ````markdown
  ```mermaid
  sequenceDiagram
      participant A as User
      participant B as Server
      participant C as Database
      
      A->>B: Request
      B->>C: Query
      C-->>B: Response
      B-->>A: Result
  ```
  ````

  #### Class Diagram

  ````markdown
  ```mermaid
  classDiagram
      class User {
          +String name
          +String email
          +login()
          +logout()
      }
      class Document {
          +String id
          +String content
          +save()
      }
      User --> Document
  ```
  ````

  #### Gantt Chart

  ````markdown
  ```mermaid
  gantt
      title Project Timeline
      dateFormat YYYY-MM-DD
      section Phase 1
      Task 1 :a1, 2024-01-01, 30d
      Task 2 :a2, after a1, 20d
      section Phase 2
      Task 3 :b1, 2024-02-01, 15d
      Task 4 :b2, after b1, 25d
  ```
  ````

  ---

  ## Special Formatting

  ### Centered Text

  Use the arrow syntax to center text:

  ```markdown
  -> This text will be centered <-
  ```

  Supports **formatting** and [links](https://example.com)!

  ### Top Link

  Add a "back to top" link:

  ```markdown
  [^] or [top] or [nach oben]
  ```

  This creates a clickable link that scrolls to the top of the page.

  ---

  ## Auto-Linking

  URLs are automatically converted to clickable links, even without Markdown syntax!

  ### Examples

  ```markdown
  Visit github.com/user/repo
  Check out example.com/path
  Access subdomain.example.com
  ```

  All of these will automatically become clickable links with `https://` prefix.

  **Note:** Markdown links `[text](url)` are preserved and won't be double-converted.

  ---

  ## Features

  ### 📝 Live Preview

  While editing, your Markdown is automatically rendered in real-time in the preview panel. No need to save to see how it looks!

  ### 🔍 Full-Text Search

  Use the search function to find documents by content, tags, or collections.

  ### 🏷️ Tags and Categories

  Organize your documents with tags:

  - Add tags when creating or editing a document
  - Search by tags
  - Filter documents by tags in the admin panel

  ### 📁 Collections

  Group related documents into collections (folders):

  - Create collections in the admin panel
  - Assign documents to collections
  - Browse documents by collection

  ### 📤 Export Options

  Export your documents in multiple formats:

  - **PDF**: Professional PDF export
  - **PNG**: Screenshot export
  - **Raw**: Raw Markdown file

  ### 📱 Progressive Web App (PWA)

  This platform works as a Progressive Web App:

  - Install on mobile devices
  - Install on desktop
  - Offline support for cached content
  - Native app-like experience

  ### 🔄 Revision History

  All documents automatically save revision history:

  - View all previous versions
  - Restore any previous version
  - See when changes were made

  ### 🔒 Password Protection

  Secure your documents with passwords:

  - Set a password when creating a document
  - Required password for viewing/editing protected documents
  - Password can be changed or removed in admin panel

  ### 🔍 Admin Dashboard

  Access the admin dashboard for:

  - View all documents
  - Analytics and statistics
  - Popular documents
  - Referrer tracking
  - System health monitoring
  - Collections management
  - Full-text search

  ### 📊 Analytics

  Track document views and statistics:

  - Time-based view charts
  - Popular documents ranking
  - Referrer tracking
  - Document lifecycle statistics

  ---

  ## Keyboard Shortcuts

  ### Editor Shortcuts

  - `Ctrl + S` - Save document
  - `Ctrl + P` - Preview document (if available)
  - `Ctrl + F` - Find in document
  - `Ctrl + Z` - Undo
  - `Ctrl + Y` - Redo

  ### General Shortcuts

  - `/` - Focus search (opens search in admin)
  - `?` - Show keyboard shortcuts

  ---

  ## Tips & Best Practices

  ### 1. Use Admonitions for Important Info

  Instead of just bold text, use admonitions to make important information stand out:

  ```markdown
  !!! note Best Practice
      Always use admonitions for important information.
      They're visually distinct and draw attention.
  ```

  ### 2. Organize with Tags

  Use consistent tag naming:
  - `tutorial`
  - `reference`
  - `guide`
  - `example`

  ### 3. Use Collections for Projects

  Group related documents into collections:
  - Project documentation
  - Meeting notes
  - Technical specs

  ### 4. Leverage Mermaid for Diagrams

  Create flowcharts, sequence diagrams, and more directly in Markdown instead of external tools.

  ### 5. Auto-Link URLs

  You don't need to wrap every URL in Markdown syntax - just type it and it becomes a link automatically!

  ---

  ## Examples

  ### Complete Document Example

  ```markdown
  # My Awesome Guide

  !!! info Introduction
      This guide explains how to use Markdown Publisher.

  ## Getting Started

  Follow these steps:

  1. Create a new document
  2. Write your content
  3. Use **formatting** and *styles*
  4. Save your document

  ## Creating Diagrams

  ````markdown
  ```mermaid
  graph TD
      Start --> Process
      Process --> End
  ```
  ````

  ## Important Notes

  !!! warning Attention Required
      Make sure to save your work regularly!

  !!! danger Critical
      Never share your admin password!

  -> This text is centered <-

  Visit [our website](https://example.com) or check github.com/user/repo

  [top]
  ```

  ---

  ## Support

  If you have questions or need help:

  1. Check the admin dashboard for analytics
  2. Review your document revisions
  3. Use the search function to find examples
  4. Explore the keyboard shortcuts

  Happy writing! 📝

summary:
  Dies ist ein Markowenschnitt, das darauf abzielen soll. Es gibt verschiedene Features und Markdown-Syntax unterstützt von diesem Platformen. Hier sind einige wichtige Informationen:

  1. Basic Markdown Syntax: Das Syntax für Markowenschnitte.
  2. Admonitions (Info Boxes): Das Diagramm mit den wichtigsten Informationen.
  3. Mermaid Diagrams: Das Diagramm mit der Markowenschnittsweise.
  4. Special Formatting: Die Markowenschnittsweise


id: Bildupload
created_at: 2025-11-15 17:11:52
updated_at: 2025-11-15 17:11:52
tags: Dokumentation
referrer: http://89.168.66.142:5000/
content:
  # Imgur API Setup für Image Upload

  ## 🎯 Warum Imgur?
  - ✅ Kostenlos
  - ✅ Kein Account für Uploads nötig (Anonymous Upload)
  - ✅ Unbegrenzte Bandbreite
  - ✅ Bilder bleiben dauerhaft online
  - ✅ Einfache API

  ## 📝 Setup-Anleitung

  ### Option 1: Anonymous Upload (Begrenzt, aber ohne Setup)
  Für Tests kannst du die App ohne API Key nutzen. Imgur erlaubt 50 Uploads pro Stunde ohne Authentifizierung.

  **Keine Aktion nötig!** Die App funktioniert sofort.

  ### Option 2: Mit Imgur Client ID (Empfohlen für Production)

  1. **Registriere eine Imgur App:**
     - Gehe zu: https://api.imgur.com/oauth2/addclient
     - Wähle "OAuth 2 authorization without a callback URL"
     - Fülle die Felder aus:
       - Application name: `Markdown Publisher`
       - Authorization type: `Anonymous usage without user authorization`
       - Email: Deine E-Mail
     - Klicke auf "Submit"

  2. **Kopiere die Client ID:**
     Nach der Registrierung bekommst du eine **Client ID** (z.B. `abc123def456`)

  3. **Setze die Umgebungsvariable:**
     
     **Docker (docker-compose.yml):**
     ```yaml
     environment:
       - IMGUR_CLIENT_ID=deine_client_id_hier
     ```
     
     **Lokal (Linux/Mac):**
     ```bash
     export IMGUR_CLIENT_ID=deine_client_id_hier
     ```
     
     **Lokal (Windows PowerShell):**
     ```powershell
     $env:IMGUR_CLIENT_ID="deine_client_id_hier"
     ```

  4. **Starte die App neu:**
     ```bash
     docker compose down
     docker compose up -d --build
     ```

  ## 📊 Rate Limits

  | Typ | Limit |
  |-----|-------|
  | Anonymous (ohne Client ID) | 50 Uploads/Stunde |
  | Mit Client ID | 12,500 Uploads/Tag |
  | Mit User Authentication | 1,250 Uploads/Tag |

  ## 🔄 Alternative: Eigener Image Host

  Wenn du Imgur nicht nutzen möchtest, kannst du den Code in `app.py` anpassen:

  ```python
  @app.route('/api/upload-image', methods=['POST'])
  def upload_image():
      # Speichere Bilder lokal oder auf deinem eigenen Server
      # Beispiel: Speichere in /app/data/images/
      pass
  ```

  ## ✅ Test

  1. Öffne den Editor (`/new` oder `/edit`)
  2. Ziehe ein Bild in den Editor
  3. Das Bild wird hochgeladen
  4. Der Markdown-Code wird automatisch eingefügt: `![Bild](https://i.imgur.com/xyz.png)`

  ## 🐛 Troubleshooting

  **"Upload fehlgeschlagen":**
  - Prüfe, ob die Client ID korrekt gesetzt ist
  - Prüfe die Logs: `docker compose logs -f`
  - Imgur könnte temporär nicht erreichbar sein

  **"Rate Limit erreicht":**
  - Warte 1 Stunde (Anonymous)
  - Oder registriere eine Client ID für höhere Limits

html_cache:
  <h1 id="imgur-api-setup-fur-image-upload">Imgur API Setup für Image Upload</h1>
  <h2 id="warum-imgur">🎯 Warum Imgur?</h2>
  <ul>
  <li>✅ Kostenlos</li>
  <li>✅ Kein Account für Uploads nötig (Anonymous Upload)</li>
  <li>✅ Unbegrenzte Bandbreite</li>
  <li>✅ Bilder bleiben dauerhaft online</li>
  <li>✅ Einfache API</li>
  </ul>
  <h2 id="setup-anleitung">📝 Setup-Anleitung</h2>
  <h3 id="option-1-anonymous-upload-begrenzt-aber-ohne-setup">Option 1: Anonymous Upload (Begrenzt, aber ohne Setup)</h3>
  <p>Für Tests kannst du die App ohne API Key nutzen. Imgur erlaubt 50 Uploads pro Stunde ohne Authentifizierung.</p>
  <p><strong>Keine Aktion nötig!</strong> Die App funktioniert sofort.</p>
  <h3 id="option-2-mit-imgur-client-id-empfohlen-fur-production">Option 2: Mit Imgur Client ID (Empfohlen für Production)</h3>
  <ol>
  <li>
  <p><strong>Registriere eine Imgur App:</strong><br />
     - Gehe zu: https://api.<a href="https://imgur.com/oauth2/addclient" target="_blank" rel="noopener noreferrer">imgur.com/oauth2/addclient</a><br />
     - Wähle "OAuth 2 authorization without a callback URL"<br />
     - Fülle die Felder aus:</p>
  <ul>
  <li>Application name: <code>Markdown Publisher</code></li>
  <li>Authorization type: <code>Anonymous usage without user authorization</code></li>
  <li>Email: Deine E-Mail</li>
  <li>Klicke auf "Submit"</li>
  </ul>
  </li>
  <li>
  <p><strong>Kopiere die Client ID:</strong><br />
     Nach der Registrierung bekommst du eine <strong>Client ID</strong> (z.B. <code>abc123def456</code>)</p>
  </li>
  <li>
  <p><strong>Setze die Umgebungsvariable:</strong></p>
  </li>
  </ol>
  <p><strong>Docker (docker-<a href="https://compose.yml" target="_blank" rel="noopener noreferrer">compose.yml</a>):</strong><br />
  <code>yaml
     environment:
       - IMGUR_CLIENT_ID=deine_client_id_hier</code></p>
  <p><strong>Lokal (Linux/Mac):</strong><br />
  <code>bash
     export IMGUR_CLIENT_ID=deine_client_id_hier</code></p>
  <p><strong>Lokal (Windows PowerShell):</strong><br />
  <code>powershell
     $env:IMGUR_CLIENT_ID="deine_client_id_hier"</code></p>
  <ol start="4">
  <li><strong>Starte die App neu:</strong><br />
  <code>bash
     docker compose down
     docker compose up -d --build</code></li>
  </ol>
  <h2 id="rate-limits">📊 Rate Limits</h2>
  <table>
  <thead>
  <tr>
  <th>Typ</th>
  <th>Limit</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td>Anonymous (ohne Client ID)</td>
  <td>50 Uploads/Stunde</td>
  </tr>
  <tr>
  <td>Mit Client ID</td>
  <td>12,500 Uploads/Tag</td>
  </tr>
  <tr>
  <td>Mit User Authentication</td>
  <td>1,250 Uploads/Tag</td>
  </tr>
  </tbody>
  </table>
  <h2 id="alternative-eigener-image-host">🔄 Alternative: Eigener Image Host</h2>
  <p>Wenn du Imgur nicht nutzen möchtest, kannst du den Code in <code>&lt;a href="https://app.py" target="_blank" rel="noopener noreferrer"&gt;app.py&lt;/a&gt;</code> anpassen:</p>
  <div class="codehilite"><pre><span></span><code><span class="nd">@app</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s1">&#39;/api/upload-image&#39;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;POST&#39;</span><span class="p">])</span>
  <span class="k">def</span> <span class="nf">upload_image</span><span class="p">():</span>
      <span class="c1"># Speichere Bilder lokal oder auf deinem eigenen Server</span>
      <span class="c1"># Beispiel: Speichere in /app/data/images/</span>
      <span class="k">pass</span>
  </code></pre></div>

  <h2 id="test">✅ Test</h2>
  <ol>
  <li>Öffne den Editor (<code>/new</code> oder <code>/edit</code>)</li>
  <li>Ziehe ein Bild in den Editor</li>
  <li>Das Bild wird hochgeladen</li>
  <li>Der Markdown-Code wird automatisch eingefügt: <code>![Bild](https://i.imgur.com/xyz.png)</code></li>
  </ol>
  <h2 id="troubleshooting">🐛 Troubleshooting</h2>
  <p><strong>"Upload fehlgeschlagen":</strong><br />
  - Prüfe, ob die Client ID korrekt gesetzt ist<br />
  - Prüfe die Logs: <code>docker compose logs -f</code><br />
  - Imgur könnte temporär nicht erreichbar sein</p>
  <p><strong>"Rate Limit erreicht":</strong><br />
  - Warte 1 Stunde (Anonymous)<br />
  - Oder registriere eine Client ID für höhere Limits</p>

summary:
  unterzeichnen und speichern.
  3. In der neuen Image-Formular öffnete die Option "Upload an image" aus.
  4. Fülle die Felder aus:
     - Name des Banners: Markdown Publisher
     - E-Mail Adresse: Deine E-Mail
     - Upload-Datei: Speichere hierbei im /app/data/images/oder speichere direkt auf deinem eigenen Server (optional)
     
  5. Klicke auf "Upload"


id: ESP32
created_at: 2025-11-16 19:11:45
updated_at: 2025-11-17 08:52:54
tags: Dokumentation
referrer: http://89.168.66.142:5000/new
content:
  # 🔌 Aufbauanleitung - ESP32 Rotary Encoder LED Controller

  ## 📋 Benötigte Hardware

  - **ESP32 Development Board** (z.B. ESP32-DevKitC)
  - **Rotary Encoder** (z.B. KY-040 oder ähnlich)
  - **RGBW LED-Streifen** (WS2812B oder SK6812)
  - **Externe 5V Stromversorgung** für LED-Streifen (wichtig!)
  - **USB-Kabel** für ESP32 (Programmierung & Stromversorgung)
  - **Jumper-Kabel** für Verbindungen
  - **Breadboard** (optional, für Testaufbau)

  ---

  ## 🔌 Pin-Belegung

  ### Standard-Konfiguration (kann in main.cpp geändert werden):

  | Komponente | Pin-Name | ESP32 GPIO | Beschreibung |
  |------------|----------|------------|--------------|
  | **LED-Streifen** | DIN (Data) | **GPIO 2** | Datenleitung zum LED-Streifen |
  | **Rotary Encoder** | Pin A (DT) | **GPIO 18** | Encoder Signal A |
  | **Rotary Encoder** | Pin B (CLK) | **GPIO 19** | Encoder Signal B |
  | **Rotary Encoder** | Button (SW) | **GPIO 5** | Encoder-Button (optional) |
  | **Rotary Encoder** | VCC | **3.3V** | Versorgungsspannung |
  | **Rotary Encoder** | GND | **GND** | Masse |

  ---

  ## 📐 Aufbau-Schema

  ```
  ┌─────────────────────────────────────────────────────────┐
  │                    ESP32 Board                          │
  │                                                         │
  │  ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐         │
  │  │ 3.3V│  │ GND │  │ GPIO│  │ GPIO│  │ GPIO│         │
  │  │     │  │     │  │  2  │  │  5  │  │ 18  │         │
  │  └──┬──┘  └──┬──┘  └──┬──┘  └──┬──┘  └──┬──┘         │
  │     │        │        │        │        │             │
  │     │        │        │        │        │             │
  └─────┼────────┼────────┼────────┼────────┼─────────────┘
        │        │        │        │        │
        │        │        │        │        │
        │        │        │        │        │
  ┌─────▼────────▼────────▼────────▼────────▼─────────────┐
  │              Rotary Encoder (KY-040)                    │
  │                                                                            │
  │         ┌──────────────┐                              │
  │         │   [Encoder]   │                              │
  │         │               │                                              │
  │    VCC──┤ 1           6 ├──GND                         │
  │         │               │                              │
  │  GPIO18─┤ 2 (DT/A)   5 ├──NC (nicht verwendet)        │
  │         │               │                              │
  │  GPIO19─┤ 3 (CLK/B)  4 ├──GPIO5 (Button/SW)            │
  │         └──────────────┘                              │
  │                                                         │
  └─────────────────────────────────────────────────────────┘

  ┌─────────────────────────────────────────────────────────┐
  │              LED-Streifen (WS2812B/SK6812)             │
  │                                                         │
  │  ┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐               │
  │  │ 5V   │  │ GND  │  │ DIN  │  │ DOUT │               │
  │  └──┬───┘  └──┬───┘  └──┬───┘  └──┬───┘               │
  │     │         │         │         │                    │
  │     │         │         │         │                    │
  │  Externe      │      GPIO2        │                    │
  │  5V PSU       │         │         │                    │
  │     │         │         │         │                    │
  │     │         │         │         │                    │
  │  ┌──▼─────────▼─────────▼─────────▼──────────┐       │
  │  │  [LED 1] → [LED 2] → [LED 3] → ... → [LED N]│       │
  │  └─────────────────────────────────────────────┘       │
  │                                                         │
  └─────────────────────────────────────────────────────────┘
  ```

  ---

  ## 🔧 Schritt-für-Schritt Anleitung

  ### Schritt 1: Rotary Encoder anschließen

  1. **VCC** des Encoders → **3.3V** am ESP32
  2. **GND** des Encoders → **GND** am ESP32
  3. **Pin A (DT)** des Encoders → **GPIO 18** am ESP32
  4. **Pin B (CLK)** des Encoders → **GPIO 19** am ESP32
  5. **Button Pin (SW)** des Encoders → **GPIO 5** am ESP32 (optional)

  > **Hinweis**: Die meisten Rotary Encoder haben 5 Pins. Die Belegung kann je nach Modell variieren. Prüfe das Datenblatt deines Encoders!

  ### Schritt 2: LED-Streifen anschließen

  ⚠️ **WICHTIG**: LED-Streifen benötigen viel Strom! Verwende eine **externe 5V-Stromversorgung**!

  1. **DIN (Data In)** des LED-Streifens → **GPIO 2** am ESP32
  2. **GND** des LED-Streifens → **GND** am ESP32 (gemeinsam mit ESP32 GND)
  3. **5V** des LED-Streifens → **Externe 5V Stromversorgung** (NICHT ESP32 5V!)
  4. **GND** der externen Stromversorgung → **GND** am ESP32 (gemeinsame Masse!)

  > **Stromversorgung**: 
  > - Einzelne LED: ~60mA bei voller Helligkeit
  > - 60 LEDs: ~3.6A bei voller Helligkeit
  > - ESP32 kann nur ~500mA liefern → **Externe Stromversorgung ist Pflicht!**

  ### Schritt 3: Gemeinsame Masse (GND)

  **Sehr wichtig**: Alle GND-Leitungen müssen verbunden sein:
  - ESP32 GND
  - Rotary Encoder GND
  - LED-Streifen GND
  - Externe 5V Stromversorgung GND

  ---

  ## 📍 Alternative Pin-Belegungen

  Falls die Standard-Pins belegt sind, kannst du in `src/main.cpp` ändern:

  ```cpp
  // LED-Streifen
  #define LED_PIN 2              // Ändere hier (z.B. 4, 12, 13, 14, 15, 16, 17, 21, 22, 23, 25, 26, 27)

  // Rotary Encoder
  #define ENCODER_PIN_A 18       // Ändere hier
  #define ENCODER_PIN_B 19       // Ändere hier
  #define ENCODER_BUTTON_PIN 5   // Ändere hier (oder -1 wenn nicht verwendet)
  ```

  ### Empfohlene alternative GPIO-Pins für ESP32:

  ✅ **Gut geeignet** (keine speziellen Funktionen):
  - GPIO 4, 12, 13, 14, 15, 16, 17, 21, 22, 23, 25, 26, 27

  ⚠️ **Vorsicht** (haben spezielle Funktionen beim Booten):
  - GPIO 0, 2, 5, 12, 15 (können Boot-Probleme verursachen)
  - GPIO 6-11 (für Flash-Speicher, nicht verwendbar)

  ---

  ## 🔍 Encoder-Pin-Identifikation

  Falls dein Encoder nicht beschriftet ist, hier die typische Belegung:

  ### KY-040 Rotary Encoder (5 Pins):
  ```
       ┌─────────┐
       │  [Knopf]│
       │         │
    ┌──┤ 1   2   ├──┐
    │  │         │  │
    │  │    O    │  │
    │  │         │  │
    └──┤ 3   4   ├──┘
       │         │
       └─────────┘
       5 (unten)

  Pin 1: VCC (meist links oben)
  Pin 2: GND (meist rechts oben)
  Pin 3: CLK/B (meist links unten)
  Pin 4: DT/A (meist rechts unten)
  Pin 5: SW (Button, meist unten mittig)
  ```

  ### Andere Encoder:
  - **CLK/CLOCK** = Pin B → GPIO 19
  - **DT/DATA** = Pin A → GPIO 18
  - **SW/SWITCH** = Button → GPIO 5

  ---

  ## ⚡ Stromversorgung

  ### Option 1: USB + Externe 5V (Empfohlen)
  ```
  USB-Kabel → ESP32 (für Programmierung & ESP32-Stromversorgung)
  Externe 5V PSU → LED-Streifen (für LED-Stromversorgung)
  GND verbinden (gemeinsame Masse!)
  ```

  ### Option 2: Nur USB (nur für wenige LEDs!)
  ⚠️ **Nur für Tests mit wenigen LEDs (<10 LEDs)**
  - ESP32 über USB versorgen
  - LED-Streifen direkt an ESP32 5V (nicht empfohlen!)

  ### Empfohlene externe Stromversorgung:
  - **5V Netzteil** mit mindestens 3-5A (für 60 LEDs)
  - **5V Step-Down Converter** (z.B. LM2596) wenn du 12V/24V hast
  - **USB Power Bank** (5V, mindestens 2A) für mobile Projekte

  ---

  ## ✅ Checkliste vor dem ersten Start

  - [ ] Rotary Encoder korrekt angeschlossen (VCC, GND, A, B, Button)
  - [ ] LED-Streifen DIN an GPIO 2
  - [ ] LED-Streifen GND an ESP32 GND
  - [ ] LED-Streifen 5V an externe Stromversorgung
  - [ ] Alle GND-Leitungen verbunden (gemeinsame Masse!)
  - [ ] Externe Stromversorgung angeschlossen (wenn viele LEDs)
  - [ ] ESP32 über USB verbunden
  - [ ] Firmware geflasht (siehe README.md)

  ---

  ## 🐛 Troubleshooting

  ### Encoder reagiert nicht
  - ✅ Prüfe alle Verbindungen (VCC, GND, A, B)
  - ✅ Prüfe ob Pull-Up Widerstände aktiv sind (sind im Code aktiviert)
  - ✅ Teste mit Multimeter: Pin A und B sollten beim Drehen wechseln

  ### LEDs leuchten nicht
  - ✅ Prüfe DIN-Verbindung zu GPIO 2
  - ✅ Prüfe GND-Verbindung (gemeinsame Masse!)
  - ✅ Prüfe Stromversorgung (externe 5V?)
  - ✅ Prüfe LED-Anzahl in main.cpp (`NUM_LEDS`)
  - ✅ Prüfe LED-Typ in main.cpp (`LED_TYPE`, `COLOR_ORDER`)

  ### Button funktioniert nicht
  - ✅ Prüfe Button-Pin Verbindung (GPIO 5)
  - ✅ Prüfe ob Button-Pin in Code auf -1 gesetzt ist (wenn nicht verwendet)
  - ✅ Teste mit Multimeter: Pin sollte auf LOW gehen beim Drücken

  ### ESP32 startet nicht
  - ✅ Prüfe USB-Verbindung
  - ✅ Prüfe ob Boot-Pins (GPIO 0, 2) nicht belegt sind
  - ✅ Halte BOOT-Button beim Start gedrückt (falls nötig)

  ---

  ## 📸 Beispiel-Aufbau (Breadboard)

  ```
  ESP32                    Rotary Encoder          LED-Streifen
  ┌─────────┐              ┌─────────┐            ┌─────────┐
  │ 3.3V ───┼──────────────┤ VCC     │            │         │
  │ GND  ───┼──────────────┤ GND     │            │ GND  ────┼── GND
  │ GPIO2 ──┼──────────────┼─────────┼────────────┤ DIN     │
  │ GPIO5 ──┼──────────────┤ SW      │            │         │
  │ GPIO18 ─┼──────────────┤ DT/A    │            │ 5V  ────┼── Externe 5V
  │ GPIO19 ─┼──────────────┤ CLK/B   │            │         │
  └─────────┘              └─────────┘            └─────────┘
  ```

  ---

  ## 🔗 Nützliche Links

  - [ESP32 Pinout Reference](https://randomnerdtutorials.com/esp32-pinout-reference-gpios/)
  - [FastLED Documentation](https://fastled.io/)
  - [Rotary Encoder Tutorial](https://lastminuteengineers.com/rotary-encoder-arduino-tutorial/)

  ---

  **Viel Erfolg beim Aufbau!** 🔧✨

html_cache:
  <h1 id="aufbauanleitung-esp32-rotary-encoder-led-controller">🔌 Aufbauanleitung - ESP32 Rotary Encoder LED Controller</h1>
  <h2 id="benotigte-hardware">📋 Benötigte Hardware</h2>
  <ul>
  <li><strong>ESP32 Development Board</strong> (z.B. ESP32-DevKitC)</li>
  <li><strong>Rotary Encoder</strong> (z.B. KY-040 oder ähnlich)</li>
  <li><strong>RGBW LED-Streifen</strong> (WS2812B oder SK6812)</li>
  <li><strong>Externe 5V Stromversorgung</strong> für LED-Streifen (wichtig!)</li>
  <li><strong>USB-Kabel</strong> für ESP32 (Programmierung &amp; Stromversorgung)</li>
  <li><strong>Jumper-Kabel</strong> für Verbindungen</li>
  <li><strong>Breadboard</strong> (optional, für Testaufbau)</li>
  </ul>
  <hr />
  <h2 id="pin-belegung">🔌 Pin-Belegung</h2>
  <h3 id="standard-konfiguration-kann-in-maincpp-geandert-werden">Standard-Konfiguration (kann in <a href="https://main.cpp" target="_blank" rel="noopener noreferrer">main.cpp</a> geändert werden):</h3>
  <table>
  <thead>
  <tr>
  <th>Komponente</th>
  <th>Pin-Name</th>
  <th>ESP32 GPIO</th>
  <th>Beschreibung</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td><strong>LED-Streifen</strong></td>
  <td>DIN (Data)</td>
  <td><strong>GPIO 2</strong></td>
  <td>Datenleitung zum LED-Streifen</td>
  </tr>
  <tr>
  <td><strong>Rotary Encoder</strong></td>
  <td>Pin A (DT)</td>
  <td><strong>GPIO 18</strong></td>
  <td>Encoder Signal A</td>
  </tr>
  <tr>
  <td><strong>Rotary Encoder</strong></td>
  <td>Pin B (CLK)</td>
  <td><strong>GPIO 19</strong></td>
  <td>Encoder Signal B</td>
  </tr>
  <tr>
  <td><strong>Rotary Encoder</strong></td>
  <td>Button (SW)</td>
  <td><strong>GPIO 5</strong></td>
  <td>Encoder-Button (optional)</td>
  </tr>
  <tr>
  <td><strong>Rotary Encoder</strong></td>
  <td>VCC</td>
  <td><strong>3.3V</strong></td>
  <td>Versorgungsspannung</td>
  </tr>
  <tr>
  <td><strong>Rotary Encoder</strong></td>
  <td>GND</td>
  <td><strong>GND</strong></td>
  <td>Masse</td>
  </tr>
  </tbody>
  </table>
  <hr />
  <h2 id="aufbau-schema">📐 Aufbau-Schema</h2>
  <div class="highlight"><pre><span></span><code>┌─────────────────────────────────────────────────────────┐
  │                    ESP32 Board                          │
  │                                                         │
  │  ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐         │
  │  │ 3.3V│  │ GND │  │ GPIO│  │ GPIO│  │ GPIO│         │
  │  │     │  │     │  │  2  │  │  5  │  │ 18  │         │
  │  └──┬──┘  └──┬──┘  └──┬──┘  └──┬──┘  └──┬──┘         │
  │     │        │        │        │        │             │
  │     │        │        │        │        │             │
  └─────┼────────┼────────┼────────┼────────┼─────────────┘
        │        │        │        │        │
        │        │        │        │        │
        │        │        │        │        │
  ┌─────▼────────▼────────▼────────▼────────▼─────────────┐
  │              Rotary Encoder (KY-040)                    │
  │                                                                            │
  │         ┌──────────────┐                              │
  │         │   [Encoder]   │                              │
  │         │               │                                              │
  │    VCC──┤ 1           6 ├──GND                         │
  │         │               │                              │
  │  GPIO18─┤ 2 (DT/A)   5 ├──NC (nicht verwendet)        │
  │         │               │                              │
  │  GPIO19─┤ 3 (CLK/B)  4 ├──GPIO5 (Button/SW)            │
  │         └──────────────┘                              │
  │                                                         │
  └─────────────────────────────────────────────────────────┘

  ┌─────────────────────────────────────────────────────────┐
  │              LED-Streifen (WS2812B/SK6812)             │
  │                                                         │
  │  ┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐               │
  │  │ 5V   │  │ GND  │  │ DIN  │  │ DOUT │               │
  │  └──┬───┘  └──┬───┘  └──┬───┘  └──┬───┘               │
  │     │         │         │         │                    │
  │     │         │         │         │                    │
  │  Externe      │      GPIO2        │                    │
  │  5V PSU       │         │         │                    │
  │     │         │         │         │                    │
  │     │         │         │         │                    │
  │  ┌──▼─────────▼─────────▼─────────▼──────────┐       │
  │  │  [LED 1] → [LED 2] → [LED 3] → ... → [LED N]│       │
  │  └─────────────────────────────────────────────┘       │
  │                                                         │
  └─────────────────────────────────────────────────────────┘
  </code></pre></div>
  <hr />
  <h2 id="schritt-fur-schritt-anleitung">🔧 Schritt-für-Schritt Anleitung</h2>
  <h3 id="schritt-1-rotary-encoder-anschlieen">Schritt 1: Rotary Encoder anschließen</h3>
  <ol>
  <li><strong>VCC</strong> des Encoders → <strong>3.3V</strong> am ESP32</li>
  <li><strong>GND</strong> des Encoders → <strong>GND</strong> am ESP32</li>
  <li><strong>Pin A (DT)</strong> des Encoders → <strong>GPIO 18</strong> am ESP32</li>
  <li><strong>Pin B (CLK)</strong> des Encoders → <strong>GPIO 19</strong> am ESP32</li>
  <li><strong>Button Pin (SW)</strong> des Encoders → <strong>GPIO 5</strong> am ESP32 (optional)</li>
  </ol>
  <blockquote>
  <p><strong>Hinweis</strong>: Die meisten Rotary Encoder haben 5 Pins. Die Belegung kann je nach Modell variieren. Prüfe das Datenblatt deines Encoders!</p>
  </blockquote>
  <h3 id="schritt-2-led-streifen-anschlieen">Schritt 2: LED-Streifen anschließen</h3>
  <p>⚠️ <strong>WICHTIG</strong>: LED-Streifen benötigen viel Strom! Verwende eine <strong>externe 5V-Stromversorgung</strong>!</p>
  <ol>
  <li><strong>DIN (Data In)</strong> des LED-Streifens → <strong>GPIO 2</strong> am ESP32</li>
  <li><strong>GND</strong> des LED-Streifens → <strong>GND</strong> am ESP32 (gemeinsam mit ESP32 GND)</li>
  <li><strong>5V</strong> des LED-Streifens → <strong>Externe 5V Stromversorgung</strong> (NICHT ESP32 5V!)</li>
  <li><strong>GND</strong> der externen Stromversorgung → <strong>GND</strong> am ESP32 (gemeinsame Masse!)</li>
  </ol>
  <blockquote>
  <p><strong>Stromversorgung</strong>: <br />
  - Einzelne LED: ~60mA bei voller Helligkeit<br />
  - 60 LEDs: ~3.6A bei voller Helligkeit<br />
  - ESP32 kann nur ~500mA liefern → <strong>Externe Stromversorgung ist Pflicht!</strong></p>
  </blockquote>
  <h3 id="schritt-3-gemeinsame-masse-gnd">Schritt 3: Gemeinsame Masse (GND)</h3>
  <p><strong>Sehr wichtig</strong>: Alle GND-Leitungen müssen verbunden sein:<br />
  - ESP32 GND<br />
  - Rotary Encoder GND<br />
  - LED-Streifen GND<br />
  - Externe 5V Stromversorgung GND</p>
  <hr />
  <h2 id="alternative-pin-belegungen">📍 Alternative Pin-Belegungen</h2>
  <p>Falls die Standard-Pins belegt sind, kannst du in <code>src/main.cpp</code> ändern:</p>
  <div class="highlight"><pre><span></span><code><span class="c1">// LED-Streifen</span>
  <span class="cp">#define LED_PIN 2              </span><span class="c1">// Ändere hier (z.B. 4, 12, 13, 14, 15, 16, 17, 21, 22, 23, 25, 26, 27)</span>

  <span class="c1">// Rotary Encoder</span>
  <span class="cp">#define ENCODER_PIN_A 18       </span><span class="c1">// Ändere hier</span>
  <span class="cp">#define ENCODER_PIN_B 19       </span><span class="c1">// Ändere hier</span>
  <span class="cp">#define ENCODER_BUTTON_PIN 5   </span><span class="c1">// Ändere hier (oder -1 wenn nicht verwendet)</span>
  </code></pre></div>
  <h3 id="empfohlene-alternative-gpio-pins-fur-esp32">Empfohlene alternative GPIO-Pins für ESP32:</h3>
  <p>✅ <strong>Gut geeignet</strong> (keine speziellen Funktionen):<br />
  - GPIO 4, 12, 13, 14, 15, 16, 17, 21, 22, 23, 25, 26, 27</p>
  <p>⚠️ <strong>Vorsicht</strong> (haben spezielle Funktionen beim Booten):<br />
  - GPIO 0, 2, 5, 12, 15 (können Boot-Probleme verursachen)<br />
  - GPIO 6-11 (für Flash-Speicher, nicht verwendbar)</p>
  <hr />
  <h2 id="encoder-pin-identifikation">🔍 Encoder-Pin-Identifikation</h2>
  <p>Falls dein Encoder nicht beschriftet ist, hier die typische Belegung:</p>
  <h3 id="ky-040-rotary-encoder-5-pins">KY-040 Rotary Encoder (5 Pins):</h3>
  <div class="highlight"><pre><span></span><code>     ┌─────────┐
       │  [Knopf]│
       │         │
    ┌──┤ 1   2   ├──┐
    │  │         │  │
    │  │    O    │  │
    │  │         │  │
    └──┤ 3   4   ├──┘
       │         │
       └─────────┘
       5 (unten)

  Pin 1: VCC (meist links oben)
  Pin 2: GND (meist rechts oben)
  Pin 3: CLK/B (meist links unten)
  Pin 4: DT/A (meist rechts unten)
  Pin 5: SW (Button, meist unten mittig)
  </code></pre></div>
  <h3 id="andere-encoder">Andere Encoder:</h3>
  <ul>
  <li><strong>CLK/CLOCK</strong> = Pin B → GPIO 19</li>
  <li><strong>DT/DATA</strong> = Pin A → GPIO 18</li>
  <li><strong>SW/SWITCH</strong> = Button → GPIO 5</li>
  </ul>
  <hr />
  <h2 id="stromversorgung">⚡ Stromversorgung</h2>
  <h3 id="option-1-usb-externe-5v-empfohlen">Option 1: USB + Externe 5V (Empfohlen)</h3>
  <div class="highlight"><pre><span></span><code>USB-Kabel → ESP32 (für Programmierung &amp; ESP32-Stromversorgung)
  Externe 5V PSU → LED-Streifen (für LED-Stromversorgung)
  GND verbinden (gemeinsame Masse!)
  </code></pre></div>
  <h3 id="option-2-nur-usb-nur-fur-wenige-leds">Option 2: Nur USB (nur für wenige LEDs!)</h3>
  <p>⚠️ <strong>Nur für Tests mit wenigen LEDs (&lt;10 LEDs)</strong><br />
  - ESP32 über USB versorgen<br />
  - LED-Streifen direkt an ESP32 5V (nicht empfohlen!)</p>
  <h3 id="empfohlene-externe-stromversorgung">Empfohlene externe Stromversorgung:</h3>
  <ul>
  <li><strong>5V Netzteil</strong> mit mindestens 3-5A (für 60 LEDs)</li>
  <li><strong>5V Step-Down Converter</strong> (z.B. LM2596) wenn du 12V/24V hast</li>
  <li><strong>USB Power Bank</strong> (5V, mindestens 2A) für mobile Projekte</li>
  </ul>
  <hr />
  <h2 id="checkliste-vor-dem-ersten-start">✅ Checkliste vor dem ersten Start</h2>
  <ul>
  <li>[ ] Rotary Encoder korrekt angeschlossen (VCC, GND, A, B, Button)</li>
  <li>[ ] LED-Streifen DIN an GPIO 2</li>
  <li>[ ] LED-Streifen GND an ESP32 GND</li>
  <li>[ ] LED-Streifen 5V an externe Stromversorgung</li>
  <li>[ ] Alle GND-Leitungen verbunden (gemeinsame Masse!)</li>
  <li>[ ] Externe Stromversorgung angeschlossen (wenn viele LEDs)</li>
  <li>[ ] ESP32 über USB verbunden</li>
  <li>[ ] Firmware geflasht (siehe <a href="https://README.md" target="_blank" rel="noopener noreferrer">README.md</a>)</li>
  </ul>
  <hr />
  <h2 id="troubleshooting">🐛 Troubleshooting</h2>
  <h3 id="encoder-reagiert-nicht">Encoder reagiert nicht</h3>
  <ul>
  <li>✅ Prüfe alle Verbindungen (VCC, GND, A, B)</li>
  <li>✅ Prüfe ob Pull-Up Widerstände aktiv sind (sind im Code aktiviert)</li>
  <li>✅ Teste mit Multimeter: Pin A und B sollten beim Drehen wechseln</li>
  </ul>
  <h3 id="leds-leuchten-nicht">LEDs leuchten nicht</h3>
  <ul>
  <li>✅ Prüfe DIN-Verbindung zu GPIO 2</li>
  <li>✅ Prüfe GND-Verbindung (gemeinsame Masse!)</li>
  <li>✅ Prüfe Stromversorgung (externe 5V?)</li>
  <li>✅ Prüfe LED-Anzahl in <a href="https://main.cpp" target="_blank" rel="noopener noreferrer">main.cpp</a> (<code>NUM_LEDS</code>)</li>
  <li>✅ Prüfe LED-Typ in <a href="https://main.cpp" target="_blank" rel="noopener noreferrer">main.cpp</a> (<code>LED_TYPE</code>, <code>COLOR_ORDER</code>)</li>
  </ul>
  <h3 id="button-funktioniert-nicht">Button funktioniert nicht</h3>
  <ul>
  <li>✅ Prüfe Button-Pin Verbindung (GPIO 5)</li>
  <li>✅ Prüfe ob Button-Pin in Code auf -1 gesetzt ist (wenn nicht verwendet)</li>
  <li>✅ Teste mit Multimeter: Pin sollte auf LOW gehen beim Drücken</li>
  </ul>
  <h3 id="esp32-startet-nicht">ESP32 startet nicht</h3>
  <ul>
  <li>✅ Prüfe USB-Verbindung</li>
  <li>✅ Prüfe ob Boot-Pins (GPIO 0, 2) nicht belegt sind</li>
  <li>✅ Halte BOOT-Button beim Start gedrückt (falls nötig)</li>
  </ul>
  <hr />
  <h2 id="beispiel-aufbau-breadboard">📸 Beispiel-Aufbau (Breadboard)</h2>
  <div class="highlight"><pre><span></span><code>ESP32                    Rotary Encoder          LED-Streifen
  ┌─────────┐              ┌─────────┐            ┌─────────┐
  │ 3.3V ───┼──────────────┤ VCC     │            │         │
  │ GND  ───┼──────────────┤ GND     │            │ GND  ────┼── GND
  │ GPIO2 ──┼──────────────┼─────────┼────────────┤ DIN     │
  │ GPIO5 ──┼──────────────┤ SW      │            │         │
  │ GPIO18 ─┼──────────────┤ DT/A    │            │ 5V  ────┼── Externe 5V
  │ GPIO19 ─┼──────────────┤ CLK/B   │            │         │
  └─────────┘              └─────────┘            └─────────┘
  </code></pre></div>
  <hr />
  <h2 id="nutzliche-links">🔗 Nützliche Links</h2>
  <ul>
  <li><a href="https://randomnerdtutorials.com/esp32-pinout-reference-gpios/">ESP32 Pinout Reference</a></li>
  <li><a href="https://fastled.io/">FastLED Documentation</a></li>
  <li><a href="https://lastminuteengineers.com/rotary-encoder-arduino-tutorial/">Rotary Encoder Tutorial</a></li>
  </ul>
  <hr />
  <p><strong>Viel Erfolg beim Aufbau!</strong> 🔧✨</p>

summary:
  Dieses Dokument beschreibt die Erstellung eines ESP32-Rotary Encoder LED Controller. Es wird benötigt ein ESP32 Development Board, eine Rotationsensorie mit dem ISO-1000-Encoder und eine RGBW-Streifenstelle. Die LED-Lichtschutzschaltfläche ist in der Regel 5V Stromversorgung für LED-Streifen. Es werden auch externen 5V-Spannungspulver, USB-K


id: ZKsL8f4apyA
created_at: 2025-11-17 08:53:23
updated_at: 2025-11-17 08:53:23
tags: Dokumentation
referrer: http://89.168.66.142:5000/new
summary: Installiert, die LED-Wand des ESP32 auf dem Raspberry Pi beginnt.
content:
  # Firmware Installation - ESP32 Rotary LED Controller

  Diese Anleitung erklärt, wie Sie die Firmware auf den ESP32 installieren können.

  ## Voraussetzungen

  ### Option 1: PlatformIO (Empfohlen für Entwickler)
  - **PlatformIO** installiert (über VS Code Extension oder CLI)
  - **Python** installiert (für PlatformIO)
  - USB-Kabel zum Verbinden des ESP32

  ### Option 2: ESP32 Flash Tool (Einfach für Endbenutzer)
  - **ESP32 Flash Download Tools** (von Espressif)
  - Oder **esptool.py** (Python-basiert)
  - USB-Kabel zum Verbinden des ESP32

  ---

  ## Methode 1: Installation mit PlatformIO (Empfohlen)

  ### Schritt 1: Projekt öffnen
  1. Öffnen Sie das Projekt-Verzeichnis in VS Code mit PlatformIO
  2. Oder navigieren Sie im Terminal zum Projekt-Verzeichnis:
     ```bash
     cd "c:\Users\keanu\Desktop\No Enter\WLED Drehgeber Dokumentation\ESP32_Rotary_LED"
     ```

  ### Schritt 2: ESP32 verbinden
  1. Verbinden Sie den ESP32 mit einem USB-Kabel zum Computer
  2. Notieren Sie sich den COM-Port (z.B. COM4, COM3, etc.)
     - Windows: Geräte-Manager → COM & LPT Ports
     - Oder PlatformIO erkennt den Port automatisch

  ### Schritt 3: Firmware kompilieren und hochladen
  ```bash
  # Mit PlatformIO CLI:
  python -m platformio run -t upload

  # Oder in VS Code:
  # Klicken Sie auf "Upload" in der PlatformIO Toolbar
  ```

  ### Schritt 4: Verifizierung
  - Nach erfolgreichem Upload sollte der ESP32 automatisch neu starten
  - Die LEDs sollten kurz weiß aufblinken (Start-Test)
  - Der Rotary Encoder sollte jetzt funktionieren

  ---

  ## Methode 2: Installation mit ESP32 Flash Download Tools

  ### Schritt 1: Tools herunterladen
  1. Laden Sie **ESP32 Flash Download Tools** von Espressif herunter:
     - https://www.espressif.com/en/support/download/other-tools
     - Oder verwenden Sie **esptool.py** (Python)

  ### Schritt 2: ESP32 verbinden
  1. Verbinden Sie den ESP32 mit USB
  2. Notieren Sie sich den COM-Port

  ### Schritt 3: Firmware flashen mit esptool.py

  #### Installation von esptool.py:
  ```bash
  pip install esptool
  ```

  #### Firmware flashen:
  ```bash
  # Navigieren Sie zum Projekt-Verzeichnis
  cd "c:\Users\keanu\Desktop\No Enter\WLED Drehgeber Dokumentation\ESP32_Rotary_LED"

  # Firmware flashen (ersetzen Sie COM4 mit Ihrem Port)
  esptool.py --chip esp32 --port COM4 write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 .pio\build\esp32dev\bootloader.bin 0x8000 .pio\build\esp32dev\partitions.bin 0xe000 boot_app0.bin 0x10000 .pio\build\esp32dev\firmware.bin
  ```

  **Oder einfacher - nur Firmware aktualisieren (wenn Bootloader bereits installiert):**
  ```bash
  esptool.py --chip esp32 --port COM4 write_flash 0x10000 firmware.bin
  ```

  ---

  ## Methode 3: Installation mit vorgefertigtem Image (firmware.bin)

  ### Schritt 1: Firmware-Datei
  - Die Datei `firmware.bin` befindet sich im Projekt-Verzeichnis
  - Diese Datei enthält die komplette, kompilierte Firmware

  ### Schritt 2: Mit esptool.py flashen
  ```bash
  # Installieren Sie esptool.py falls noch nicht vorhanden:
  pip install esptool

  # Firmware flashen (ersetzen Sie COM4 mit Ihrem Port):
  esptool.py --chip esp32 --port COM4 write_flash 0x10000 firmware.bin
  ```

  ### Schritt 3: Mit ESP32 Flash Download Tools
  1. Öffnen Sie **ESP32 Flash Download Tools**
  2. Wählen Sie:
     - **ChipType**: ESP32
     - **WorkMode**: develop
     - **LoadMode**: uart
  3. Konfigurieren Sie die Flash-Parameter:
     - **SPI SPEED**: 40MHz
     - **SPI MODE**: DIO
     - **FLASH SIZE**: 4MB (oder passend zu Ihrem ESP32)
  4. Fügen Sie die Firmware hinzu:
     - **0x10000**: `firmware.bin`
  5. Klicken Sie auf **START** und warten Sie, bis der Flash-Vorgang abgeschlossen ist

  ---

  ## Fehlerbehebung

  ### Problem: "Port nicht gefunden"
  - **Lösung**: Überprüfen Sie, ob der ESP32 richtig verbunden ist
  - Installieren Sie die USB-Treiber für den ESP32 (CH340, CP2102, etc.)
  - Prüfen Sie den Geräte-Manager auf den COM-Port

  ### Problem: "Failed to connect"
  - **Lösung**: Halten Sie den **BOOT-Button** gedrückt, während Sie den Upload starten
  - Bei manchen ESP32-Boards muss der BOOT-Button während des gesamten Uploads gedrückt bleiben

  ### Problem: "Permission denied" (Linux/Mac)
  - **Lösung**: Fügen Sie Ihren Benutzer zur `dialout` Gruppe hinzu:
    ```bash
    sudo usermod -a -G dialout $USER
    # Danach neu einloggen
    ```

  ### Problem: "Flash write error"
  - **Lösung**: 
    - Reduzieren Sie die Baudrate: `--baud 115200`
    - Verwenden Sie ein anderes USB-Kabel (Datenkabel, nicht nur Ladekabel)
    - Halten Sie den BOOT-Button während des Uploads gedrückt

  ### Problem: Firmware startet nicht
  - **Lösung**: 
    - Drücken Sie den **RESET-Button** auf dem ESP32
    - Überprüfen Sie die Verkabelung (siehe `VERKABELUNG_RGBWW.md`)
    - Stellen Sie sicher, dass die LED-Streifen richtig angeschlossen sind

  ---

  ## Firmware-Informationen

  - **Chip**: ESP32-D0WD-V3
  - **Flash-Size**: 4MB (konfigurierbar)
  - **Baudrate**: 921600 (Upload), 115200 (Serial Monitor)
  - **Framework**: Arduino (ESP32)
  - **LED-Library**: Adafruit NeoPixel
  - **LED-Typ**: SK6812 RGBWW
  - **Anzahl LEDs**: 60 (konfigurierbar in `src/main.cpp`)

  ---

  ## Nach der Installation

  1. **Verkabelung prüfen**: Siehe `VERKABELUNG_RGBWW.md`
  2. **Funktionstest**:
     - Kurzer Button-Klick: Modus wechseln (RGB Farbe → RGB Helligkeit → Weiß Helligkeit)
     - Encoder drehen: Parameter ändern
     - Längerer Button-Klick: Ein/Aus schalten

  3. **Konfiguration anpassen** (optional):
     - Anzahl LEDs: `NUM_LEDS` in `src/main.cpp`
     - Pin-Belegung: `ENCODER_PIN_A`, `ENCODER_PIN_B`, `LED_PIN` in `src/main.cpp`
     - Geschwindigkeit: `HUE_FADE_AMOUNT`, `MASTER_BRIGHTNESS_FADE_AMOUNT` in `src/main.cpp`

  ---

  ## Support

  Bei Problemen:
  1. Überprüfen Sie die Verkabelung (`VERKABELUNG_RGBWW.md`)
  2. Überprüfen Sie die Pin-Belegung (`PIN_BELEGUNG.md`)
  3. Testen Sie die Hardware-Komponenten einzeln
  4. Überprüfen Sie die Serial-Ausgabe (falls aktiviert) für Fehlermeldungen

  ---

  **Viel Erfolg mit Ihrem ESP32 Rotary LED Controller!** 🎨✨

html_cache:
  <h1 id="firmware-installation-esp32-rotary-led-controller">Firmware Installation - ESP32 Rotary LED Controller</h1>
  <p>Diese Anleitung erklärt, wie Sie die Firmware auf den ESP32 installieren können.</p>
  <h2 id="voraussetzungen">Voraussetzungen</h2>
  <h3 id="option-1-platformio-empfohlen-fur-entwickler">Option 1: PlatformIO (Empfohlen für Entwickler)</h3>
  <ul>
  <li><strong>PlatformIO</strong> installiert (über VS Code Extension oder CLI)</li>
  <li><strong>Python</strong> installiert (für PlatformIO)</li>
  <li>USB-Kabel zum Verbinden des ESP32</li>
  </ul>
  <h3 id="option-2-esp32-flash-tool-einfach-fur-endbenutzer">Option 2: ESP32 Flash Tool (Einfach für Endbenutzer)</h3>
  <ul>
  <li><strong>ESP32 Flash Download Tools</strong> (von Espressif)</li>
  <li>Oder <strong><a href="https://esptool.py" target="_blank" rel="noopener noreferrer">esptool.py</a></strong> (Python-basiert)</li>
  <li>USB-Kabel zum Verbinden des ESP32</li>
  </ul>
  <hr />
  <h2 id="methode-1-installation-mit-platformio-empfohlen">Methode 1: Installation mit PlatformIO (Empfohlen)</h2>
  <h3 id="schritt-1-projekt-offnen">Schritt 1: Projekt öffnen</h3>
  <ol>
  <li>Öffnen Sie das Projekt-Verzeichnis in VS Code mit PlatformIO</li>
  <li>Oder navigieren Sie im Terminal zum Projekt-Verzeichnis:<br />
     <div class="highlight"><pre><span></span><code><span class="nb">cd</span><span class="w"> </span><span class="s2">&quot;c:\Users\keanu\Desktop\No Enter\WLED Drehgeber Dokumentation\ESP32_Rotary_LED&quot;</span>
  </code></pre></div></li>
  </ol>
  <h3 id="schritt-2-esp32-verbinden">Schritt 2: ESP32 verbinden</h3>
  <ol>
  <li>Verbinden Sie den ESP32 mit einem USB-Kabel zum Computer</li>
  <li>Notieren Sie sich den COM-Port (z.B. COM4, COM3, etc.)<br />
     - Windows: Geräte-Manager → COM &amp; LPT Ports<br />
     - Oder PlatformIO erkennt den Port automatisch</li>
  </ol>
  <h3 id="schritt-3-firmware-kompilieren-und-hochladen">Schritt 3: Firmware kompilieren und hochladen</h3>
  <div class="highlight"><pre><span></span><code><span class="c1"># Mit PlatformIO CLI:</span>
  python<span class="w"> </span>-m<span class="w"> </span>platformio<span class="w"> </span>run<span class="w"> </span>-t<span class="w"> </span>upload

  <span class="c1"># Oder in VS Code:</span>
  <span class="c1"># Klicken Sie auf &quot;Upload&quot; in der PlatformIO Toolbar</span>
  </code></pre></div>
  <h3 id="schritt-4-verifizierung">Schritt 4: Verifizierung</h3>
  <ul>
  <li>Nach erfolgreichem Upload sollte der ESP32 automatisch neu starten</li>
  <li>Die LEDs sollten kurz weiß aufblinken (Start-Test)</li>
  <li>Der Rotary Encoder sollte jetzt funktionieren</li>
  </ul>
  <hr />
  <h2 id="methode-2-installation-mit-esp32-flash-download-tools">Methode 2: Installation mit ESP32 Flash Download Tools</h2>
  <h3 id="schritt-1-tools-herunterladen">Schritt 1: Tools herunterladen</h3>
  <ol>
  <li>Laden Sie <strong>ESP32 Flash Download Tools</strong> von Espressif herunter:<br />
     - https://www.espressif.com/en/support/download/other-tools<br />
     - Oder verwenden Sie <strong><a href="https://esptool.py" target="_blank" rel="noopener noreferrer">esptool.py</a></strong> (Python)</li>
  </ol>
  <h3 id="schritt-2-esp32-verbinden_1">Schritt 2: ESP32 verbinden</h3>
  <ol>
  <li>Verbinden Sie den ESP32 mit USB</li>
  <li>Notieren Sie sich den COM-Port</li>
  </ol>
  <h3 id="schritt-3-firmware-flashen-mit-esptoolpy">Schritt 3: Firmware flashen mit <a href="https://esptool.py" target="_blank" rel="noopener noreferrer">esptool.py</a></h3>
  <h4 id="installation-von-esptoolpy">Installation von <a href="https://esptool.py" target="_blank" rel="noopener noreferrer">esptool.py</a>:</h4>
  <div class="highlight"><pre><span></span><code>pip<span class="w"> </span>install<span class="w"> </span>esptool
  </code></pre></div>
  <h4 id="firmware-flashen">Firmware flashen:</h4>
  <div class="highlight"><pre><span></span><code><span class="c1"># Navigieren Sie zum Projekt-Verzeichnis</span>
  <span class="nb">cd</span><span class="w"> </span><span class="s2">&quot;c:\Users\keanu\Desktop\No Enter\WLED Drehgeber Dokumentation\ESP32_Rotary_LED&quot;</span>

  <span class="c1"># Firmware flashen (ersetzen Sie COM4 mit Ihrem Port)</span>
  &lt;a<span class="w"> </span><span class="nv">href</span><span class="o">=</span><span class="s2">&quot;https://esptool.py&quot;</span><span class="w"> </span><span class="nv">target</span><span class="o">=</span><span class="s2">&quot;_blank&quot;</span><span class="w"> </span><span class="nv">rel</span><span class="o">=</span><span class="s2">&quot;noopener noreferrer&quot;</span>&gt;esptool.py&lt;/a&gt;<span class="w"> </span>--chip<span class="w"> </span>esp32<span class="w"> </span>--port<span class="w"> </span>COM4<span class="w"> </span>write_flash<span class="w"> </span>-z<span class="w"> </span>--flash_mode<span class="w"> </span>dio<span class="w"> </span>--flash_freq<span class="w"> </span>40m<span class="w"> </span>--flash_size<span class="w"> </span>detect<span class="w"> </span>0x1000<span class="w"> </span>.pio<span class="se">\b</span>uild<span class="se">\e</span>sp32dev<span class="se">\&lt;</span>a<span class="w"> </span><span class="nv">href</span><span class="o">=</span><span class="s2">&quot;https://bootloader.bin&quot;</span><span class="w"> </span><span class="nv">target</span><span class="o">=</span><span class="s2">&quot;_blank&quot;</span><span class="w"> </span><span class="nv">rel</span><span class="o">=</span><span class="s2">&quot;noopener noreferrer&quot;</span>&gt;bootloader.bin&lt;/a&gt;<span class="w"> </span>0x8000<span class="w"> </span>.pio<span class="se">\b</span>uild<span class="se">\e</span>sp32dev<span class="se">\&lt;</span>a<span class="w"> </span><span class="nv">href</span><span class="o">=</span><span class="s2">&quot;https://partitions.bin&quot;</span><span class="w"> </span><span class="nv">target</span><span class="o">=</span><span class="s2">&quot;_blank&quot;</span><span class="w"> </span><span class="nv">rel</span><span class="o">=</span><span class="s2">&quot;noopener noreferrer&quot;</span>&gt;partitions.bin&lt;/a&gt;<span class="w"> </span>0xe000<span class="w"> </span>boot_app0.bin<span class="w"> </span>0x10000<span class="w"> </span>.pio<span class="se">\b</span>uild<span class="se">\e</span>sp32dev<span class="se">\&lt;</span>a<span class="w"> </span><span class="nv">href</span><span class="o">=</span><span class="s2">&quot;https://firmware.bin&quot;</span><span class="w"> </span><span class="nv">target</span><span class="o">=</span><span class="s2">&quot;_blank&quot;</span><span class="w"> </span><span class="nv">rel</span><span class="o">=</span><span class="s2">&quot;noopener noreferrer&quot;</span>&gt;firmware.bin&lt;/a&gt;
  </code></pre></div>
  <p><strong>Oder einfacher - nur Firmware aktualisieren (wenn Bootloader bereits installiert):</strong><br />
  <div class="highlight"><pre><span></span><code>&lt;a<span class="w"> </span><span class="nv">href</span><span class="o">=</span><span class="s2">&quot;https://esptool.py&quot;</span><span class="w"> </span><span class="nv">target</span><span class="o">=</span><span class="s2">&quot;_blank&quot;</span><span class="w"> </span><span class="nv">rel</span><span class="o">=</span><span class="s2">&quot;noopener noreferrer&quot;</span>&gt;esptool.py&lt;/a&gt;<span class="w"> </span>--chip<span class="w"> </span>esp32<span class="w"> </span>--port<span class="w"> </span>COM4<span class="w"> </span>write_flash<span class="w"> </span>0x10000<span class="w"> </span>&lt;a<span class="w"> </span><span class="nv">href</span><span class="o">=</span><span class="s2">&quot;https://firmware.bin&quot;</span><span class="w"> </span><span class="nv">target</span><span class="o">=</span><span class="s2">&quot;_blank&quot;</span><span class="w"> </span><span class="nv">rel</span><span class="o">=</span><span class="s2">&quot;noopener noreferrer&quot;</span>&gt;firmware.bin&lt;/a&gt;
  </code></pre></div></p>
  <hr />
  <h2 id="methode-3-installation-mit-vorgefertigtem-image-firmwarebin">Methode 3: Installation mit vorgefertigtem Image (firmware.bin)</h2>
  <h3 id="schritt-1-firmware-datei">Schritt 1: Firmware-Datei</h3>
  <ul>
  <li>Die Datei <code>&lt;a href="https://firmware.bin" target="_blank" rel="noopener noreferrer"&gt;firmware.bin&lt;/a&gt;</code> befindet sich im Projekt-Verzeichnis</li>
  <li>Diese Datei enthält die komplette, kompilierte Firmware</li>
  </ul>
  <h3 id="schritt-2-mit-esptoolpy-flashen">Schritt 2: Mit <a href="https://esptool.py" target="_blank" rel="noopener noreferrer">esptool.py</a> flashen</h3>
  <div class="highlight"><pre><span></span><code><span class="c1"># Installieren Sie &lt;a href=&quot;https://esptool.py&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;esptool.py&lt;/a&gt; falls noch nicht vorhanden:</span>
  pip<span class="w"> </span>install<span class="w"> </span>esptool

  <span class="c1"># Firmware flashen (ersetzen Sie COM4 mit Ihrem Port):</span>
  &lt;a<span class="w"> </span><span class="nv">href</span><span class="o">=</span><span class="s2">&quot;https://esptool.py&quot;</span><span class="w"> </span><span class="nv">target</span><span class="o">=</span><span class="s2">&quot;_blank&quot;</span><span class="w"> </span><span class="nv">rel</span><span class="o">=</span><span class="s2">&quot;noopener noreferrer&quot;</span>&gt;esptool.py&lt;/a&gt;<span class="w"> </span>--chip<span class="w"> </span>esp32<span class="w"> </span>--port<span class="w"> </span>COM4<span class="w"> </span>write_flash<span class="w"> </span>0x10000<span class="w"> </span>&lt;a<span class="w"> </span><span class="nv">href</span><span class="o">=</span><span class="s2">&quot;https://firmware.bin&quot;</span><span class="w"> </span><span class="nv">target</span><span class="o">=</span><span class="s2">&quot;_blank&quot;</span><span class="w"> </span><span class="nv">rel</span><span class="o">=</span><span class="s2">&quot;noopener noreferrer&quot;</span>&gt;firmware.bin&lt;/a&gt;
  </code></pre></div>
  <h3 id="schritt-3-mit-esp32-flash-download-tools">Schritt 3: Mit ESP32 Flash Download Tools</h3>
  <ol>
  <li>Öffnen Sie <strong>ESP32 Flash Download Tools</strong></li>
  <li>Wählen Sie:<br />
     - <strong>ChipType</strong>: ESP32<br />
     - <strong>WorkMode</strong>: develop<br />
     - <strong>LoadMode</strong>: uart</li>
  <li>Konfigurieren Sie die Flash-Parameter:<br />
     - <strong>SPI SPEED</strong>: 40MHz<br />
     - <strong>SPI MODE</strong>: DIO<br />
     - <strong>FLASH SIZE</strong>: 4MB (oder passend zu Ihrem ESP32)</li>
  <li>Fügen Sie die Firmware hinzu:<br />
     - <strong>0x10000</strong>: <code>&lt;a href="https://firmware.bin" target="_blank" rel="noopener noreferrer"&gt;firmware.bin&lt;/a&gt;</code></li>
  <li>Klicken Sie auf <strong>START</strong> und warten Sie, bis der Flash-Vorgang abgeschlossen ist</li>
  </ol>
  <hr />
  <h2 id="fehlerbehebung">Fehlerbehebung</h2>
  <h3 id="problem-port-nicht-gefunden">Problem: "Port nicht gefunden"</h3>
  <ul>
  <li><strong>Lösung</strong>: Überprüfen Sie, ob der ESP32 richtig verbunden ist</li>
  <li>Installieren Sie die USB-Treiber für den ESP32 (CH340, CP2102, etc.)</li>
  <li>Prüfen Sie den Geräte-Manager auf den COM-Port</li>
  </ul>
  <h3 id="problem-failed-to-connect">Problem: "Failed to connect"</h3>
  <ul>
  <li><strong>Lösung</strong>: Halten Sie den <strong>BOOT-Button</strong> gedrückt, während Sie den Upload starten</li>
  <li>Bei manchen ESP32-Boards muss der BOOT-Button während des gesamten Uploads gedrückt bleiben</li>
  </ul>
  <h3 id="problem-permission-denied-linuxmac">Problem: "Permission denied" (Linux/Mac)</h3>
  <ul>
  <li><strong>Lösung</strong>: Fügen Sie Ihren Benutzer zur <code>dialout</code> Gruppe hinzu:<br />
    <div class="highlight"><pre><span></span><code>sudo<span class="w"> </span>usermod<span class="w"> </span>-a<span class="w"> </span>-G<span class="w"> </span>dialout<span class="w"> </span><span class="nv">$USER</span>
  <span class="c1"># Danach neu einloggen</span>
  </code></pre></div></li>
  </ul>
  <h3 id="problem-flash-write-error">Problem: "Flash write error"</h3>
  <ul>
  <li><strong>Lösung</strong>: </li>
  <li>Reduzieren Sie die Baudrate: <code>--baud 115200</code></li>
  <li>Verwenden Sie ein anderes USB-Kabel (Datenkabel, nicht nur Ladekabel)</li>
  <li>Halten Sie den BOOT-Button während des Uploads gedrückt</li>
  </ul>
  <h3 id="problem-firmware-startet-nicht">Problem: Firmware startet nicht</h3>
  <ul>
  <li><strong>Lösung</strong>: </li>
  <li>Drücken Sie den <strong>RESET-Button</strong> auf dem ESP32</li>
  <li>Überprüfen Sie die Verkabelung (siehe <code>VERKABELUNG_RGBWW.md</code>)</li>
  <li>Stellen Sie sicher, dass die LED-Streifen richtig angeschlossen sind</li>
  </ul>
  <hr />
  <h2 id="firmware-informationen">Firmware-Informationen</h2>
  <ul>
  <li><strong>Chip</strong>: ESP32-D0WD-V3</li>
  <li><strong>Flash-Size</strong>: 4MB (konfigurierbar)</li>
  <li><strong>Baudrate</strong>: 921600 (Upload), 115200 (Serial Monitor)</li>
  <li><strong>Framework</strong>: Arduino (ESP32)</li>
  <li><strong>LED-Library</strong>: Adafruit NeoPixel</li>
  <li><strong>LED-Typ</strong>: SK6812 RGBWW</li>
  <li><strong>Anzahl LEDs</strong>: 60 (konfigurierbar in <code>src/main.cpp</code>)</li>
  </ul>
  <hr />
  <h2 id="nach-der-installation">Nach der Installation</h2>
  <ol>
  <li><strong>Verkabelung prüfen</strong>: Siehe <code>VERKABELUNG_RGBWW.md</code></li>
  <li>
  <p><strong>Funktionstest</strong>:<br />
     - Kurzer Button-Klick: Modus wechseln (RGB Farbe → RGB Helligkeit → Weiß Helligkeit)<br />
     - Encoder drehen: Parameter ändern<br />
     - Längerer Button-Klick: Ein/Aus schalten</p>
  </li>
  <li>
  <p><strong>Konfiguration anpassen</strong> (optional):<br />
     - Anzahl LEDs: <code>NUM_LEDS</code> in <code>src/main.cpp</code><br />
     - Pin-Belegung: <code>ENCODER_PIN_A</code>, <code>ENCODER_PIN_B</code>, <code>LED_PIN</code> in <code>src/main.cpp</code><br />
     - Geschwindigkeit: <code>HUE_FADE_AMOUNT</code>, <code>MASTER_BRIGHTNESS_FADE_AMOUNT</code> in <code>src/main.cpp</code></p>
  </li>
  </ol>
  <hr />
  <h2 id="support">Support</h2>
  <p>Bei Problemen:<br />
  1. Überprüfen Sie die Verkabelung (<code>VERKABELUNG_RGBWW.md</code>)<br />
  2. Überprüfen Sie die Pin-Belegung (<code>PIN_BELEGUNG.md</code>)<br />
  3. Testen Sie die Hardware-Komponenten einzeln<br />
  4. Überprüfen Sie die Serial-Ausgabe (falls aktiviert) für Fehlermeldungen</p>
  <hr />
  <p><strong>Viel Erfolg mit Ihrem ESP32 Rotary LED Controller!</strong> 🎨✨</p>


id: Wasa-Cookie-Tripple-Choclate
created_at: 2025-11-17 14:20:58
updated_at: 2025-11-17 14:20:58
tags: Rezept
referrer: http://89.168.66.142:5000/new
content:
  # Wasa Dark Chocolate Cookie

  ### Zutaten

  *   **155 g** Vollkornweizenmehl
  *   **65 g** feine Haferflocken
  *   **60 g** gepuffter Dinkel oder Weizen (alternativ Rice Krispies)
  *   **12 g** gehackte Haselnüsse
  *   **145 g** Zucker (ideal: eine Mischung aus braunem und weißem Zucker)
  *   **50 g** Zartbitterschokolade (mind. 60% Kakao), grob gehackt oder als Chunks
  *   **15 g** fettarmes Kakaopulver
  *   **1 TL** Backpulver
  *   **½ TL** Instant-Espressopulver (optional, für intensiveren Schokogeschmack)
  *   **1 Prise** Salz
  *   **95 ml** Sonnenblumenöl (oder 95g gebräunte, abgekühlte Butter für ein noch besseres Aroma)
  *   **Ein paar Tropfen** Vanilleextrakt (optional)
  *   **ca. 1-2 EL** Milch oder Wasser (nach Bedarf)
  *   **Optional zum Bestreuen:** Grobes Meersalz (Fleur de Sel)

  ---

  ### Zubereitung

  1.  **Vorbereitung (optional, aber empfohlen):** Die gehackten Haselnüsse in einer Pfanne ohne Fett bei mittlerer Hitze goldbraun anrösten. Sofort aus der Pfanne nehmen und auf einem Teller vollständig abkühlen lassen.

  2.  **Trockene Zutaten mischen:** In einer großen Schüssel Vollkornmehl, Haferflocken, Zucker, Kakaopulver, Backpulver, Salz und das optionale Espressopulver gründlich vermengen.

  3.  **Crunch & Schokolade hinzufügen:** Die abgekühlten, gerösteten Haselnüsse, die gehackte Schokolade und den gepufften Weizen/Dinkel dazugeben und alles gut vermischen.

  4.  **Flüssige Zutaten einarbeiten:** Das Sonnenblumenöl (oder die abgekühlte gebräunte Butter) und den Vanilleextrakt hinzufügen. Alles mit einem Löffel oder den Händen zu einem krümeligen Teig verarbeiten.

  5.  **Teigkonsistenz anpassen:** Falls der Teig zu trocken ist und nicht zusammenhält, teelöffelweise Milch oder Wasser hinzufügen, bis eine formbare, leicht klebrige Masse entsteht.

  6.  **Kekse formen:** Mit den Händen oder zwei Löffeln kleine, walnussgroße Portionen vom Teig abnehmen, zu Kugeln formen und auf ein mit Backpapier ausgelegtes Backblech setzen. Die Kugeln leicht flach drücken.

  7.  **Backen:** Im vorgeheizten Backofen bei **180°C (Umluft: 160°C)** für ca. **10-12 Minuten** backen. Die Kekse sind fertig, wenn die Ränder fest aussehen.

  8.  **Veredeln & Abkühlen:** Die Kekse aus dem Ofen nehmen. Wer mag, streut jetzt sofort eine winzige Prise grobes Meersalz auf jeden Keks. Die Kekse für 5 Minuten auf dem heißen Blech ruhen lassen, bevor sie zum vollständigen Auskühlen vorsichtig auf ein Kuchengitter gesetzt werden.

  ---

  Viel Spaß beim Backen und Genießen!

html_cache:
  <h1 id="wasa-dark-chocolate-cookie">Wasa Dark Chocolate Cookie</h1>
  <h3 id="zutaten">Zutaten</h3>
  <ul>
  <li><strong>155 g</strong> Vollkornweizenmehl</li>
  <li><strong>65 g</strong> feine Haferflocken</li>
  <li><strong>60 g</strong> gepuffter Dinkel oder Weizen (alternativ Rice Krispies)</li>
  <li><strong>12 g</strong> gehackte Haselnüsse</li>
  <li><strong>145 g</strong> Zucker (ideal: eine Mischung aus braunem und weißem Zucker)</li>
  <li><strong>50 g</strong> Zartbitterschokolade (mind. 60% Kakao), grob gehackt oder als Chunks</li>
  <li><strong>15 g</strong> fettarmes Kakaopulver</li>
  <li><strong>1 TL</strong> Backpulver</li>
  <li><strong>½ TL</strong> Instant-Espressopulver (optional, für intensiveren Schokogeschmack)</li>
  <li><strong>1 Prise</strong> Salz</li>
  <li><strong>95 ml</strong> Sonnenblumenöl (oder 95g gebräunte, abgekühlte Butter für ein noch besseres Aroma)</li>
  <li><strong>Ein paar Tropfen</strong> Vanilleextrakt (optional)</li>
  <li><strong>ca. 1-2 EL</strong> Milch oder Wasser (nach Bedarf)</li>
  <li><strong>Optional zum Bestreuen:</strong> Grobes Meersalz (Fleur de Sel)</li>
  </ul>
  <hr />
  <h3 id="zubereitung">Zubereitung</h3>
  <ol>
  <li>
  <p><strong>Vorbereitung (optional, aber empfohlen):</strong> Die gehackten Haselnüsse in einer Pfanne ohne Fett bei mittlerer Hitze goldbraun anrösten. Sofort aus der Pfanne nehmen und auf einem Teller vollständig abkühlen lassen.</p>
  </li>
  <li>
  <p><strong>Trockene Zutaten mischen:</strong> In einer großen Schüssel Vollkornmehl, Haferflocken, Zucker, Kakaopulver, Backpulver, Salz und das optionale Espressopulver gründlich vermengen.</p>
  </li>
  <li>
  <p><strong>Crunch &amp; Schokolade hinzufügen:</strong> Die abgekühlten, gerösteten Haselnüsse, die gehackte Schokolade und den gepufften Weizen/Dinkel dazugeben und alles gut vermischen.</p>
  </li>
  <li>
  <p><strong>Flüssige Zutaten einarbeiten:</strong> Das Sonnenblumenöl (oder die abgekühlte gebräunte Butter) und den Vanilleextrakt hinzufügen. Alles mit einem Löffel oder den Händen zu einem krümeligen Teig verarbeiten.</p>
  </li>
  <li>
  <p><strong>Teigkonsistenz anpassen:</strong> Falls der Teig zu trocken ist und nicht zusammenhält, teelöffelweise Milch oder Wasser hinzufügen, bis eine formbare, leicht klebrige Masse entsteht.</p>
  </li>
  <li>
  <p><strong>Kekse formen:</strong> Mit den Händen oder zwei Löffeln kleine, walnussgroße Portionen vom Teig abnehmen, zu Kugeln formen und auf ein mit Backpapier ausgelegtes Backblech setzen. Die Kugeln leicht flach drücken.</p>
  </li>
  <li>
  <p><strong>Backen:</strong> Im vorgeheizten Backofen bei <strong>180°C (Umluft: 160°C)</strong> für ca. <strong>10-12 Minuten</strong> backen. Die Kekse sind fertig, wenn die Ränder fest aussehen.</p>
  </li>
  <li>
  <p><strong>Veredeln &amp; Abkühlen:</strong> Die Kekse aus dem Ofen nehmen. Wer mag, streut jetzt sofort eine winzige Prise grobes Meersalz auf jeden Keks. Die Kekse für 5 Minuten auf dem heißen Blech ruhen lassen, bevor sie zum vollständigen Auskühlen vorsichtig auf ein Kuchengitter gesetzt werden.</p>
  </li>
  </ol>
  <hr />
  <p>Viel Spaß beim Backen und Genießen!</p>

summary:
  Dark Chocolate Cookie

  Zutaten: Vollkornmehl, Haferflocken, gepuffter Dinkel oder Weizen (alternativ Rice Krispies), gehackte Haselnüsse, Zucker, Zartbitters


id: J2F49iHl76M
created_at: 2025-11-28 16:07:24
updated_at: 2025-11-28 16:07:24
referrer: http://89.168.66.142:5000/new
content:
  # What I'm Doing (Simple Explanation) 🔓

  ## The Big Picture

  Think of your iPod like a **locked safe** with a secret recipe inside. We want to modify that recipe (add new features), but the safe is locked.

  **The problem**: The "recipe" (firmware) is encrypted (scrambled) so we can't read it.

  **The solution**: Instead of cracking the safe, we'll ask the iPod itself to unlock it for us!

  ---

  ## How Normal Decryption Works (The Hard Way ❌)

  Imagine the iPod firmware is a book written in a secret code. To decrypt it normally, you'd need:
  1. The **code key** (like a decoder ring)
  2. Try **billions of guesses** to crack it
  3. Wait **thousands of years** (literally impossible)

  This is what I said we CAN'T do - it's too hard.

  ---

  ## How We're Actually Doing It (The Smart Way ✅)

  Instead of cracking the code ourselves, we're using a **clever trick**:

  ### Step 1: Build Special Tools (What I'm Doing Now)
  I'm building a "communication device" that can talk to your iPod when it's booted up.

  **Analogy**: Like building a special phone that can call your iPod

  ### Step 2: Flash "Hacked" Firmware to Your iPod
  We'll install a temporary modified version of the iPod software that has a **backdoor**.

  **Analogy**: Like installing a custom doorbell on your house that lets us peek inside

  ### Step 3: Ask the iPod to Decrypt For Us
  Once your iPod boots with our custom firmware, it will:
  1. **Decrypt the firmware itself** (iPod knows the password!)
  2. **Load it into memory** (RAM - like short-term memory)
  3. Our tool will **read that memory** and save it to your computer

  **Analogy**: 
  - You: "Hey iPod, can you open that safe and tell me what's inside?"
  - iPod: "Sure!" *opens safe, reads recipe*
  - Us: *copy the recipe while it's open*

  ---

  ## Why This Works 🧠

  Your iPod has the decryption keys **built into its hardware**. It's like:
  - The safe (firmware) has a combination lock
  - The iPod has the combination memorized
  - We don't need to crack the lock - we just watch the iPod unlock it!

  **The exploit we're using**: There's a bug in the iPod's font reader that lets us run custom code. It's like finding a hidden door that Apple forgot to lock.

  ---

  ## What Each Tool Does

  ### 1. **ipod_theme** (Main Tool)
  - Builds the "backdoor firmware"
  - Packages it so iTunes can install it
  - **You'll flash this to your iPod**

  ### 2. **scsi_dumper** (Memory Reader)
  - Connects to your iPod via USB
  - Reads the iPod's RAM (memory)
  - Saves decrypted firmware to your PC

  **Analogy**: ipod_theme is the "custom doorbell", scsi_dumper is the "camera" that looks through the door

  ---

  ## The Steps You'll Do (Later)

  1. **Connect iPod to PC**
  2. **Flash our custom firmware** (via iTunes - like a normal update)
  3. **Boot iPod in special mode** (press some buttons)
  4. **Run scsi_dumper tool** (I'll give you the exact command)
  5. **Wait 5-10 minutes** while it copies decrypted firmware

  That's it! No cracking, no brute force, no impossible math.

  ---

  ## Current Status (What I'm Building Right Now)

  ```
  [✅] Step 1: Install Rust (programming language)
  [✅] Step 2: Install C++ compiler (needed for Rust)
  [🔄] Step 3: Build ipod_theme tool (compiling now - 3-5 min)
  [⏳] Step 4: Build scsi_dumper tool (next)
  [⏳] Step 5: Generate custom firmware (after build)
  ```

  ---

  ## After We Get Decrypted Firmware... Then What?

  Once we have the decrypted firmware:
  1. **Open it in a program called Ghidra** (like a recipe translator)
  2. **Find the code that handles music** (the ingredients we care about)
  3. **Write new code** for your features (add new ingredients)
  4. **Patch it back in** (update the recipe)
  5. **Flash it to your iPod** (serve the new dish!)

  ---

  ## The Bottom Line

  **We're not cracking encryption** (impossible)  
  **We're tricking the iPod into decrypting it for us** (clever!)

  Think of it like this:
  - **Bad way**: Try to guess the safe combination (would take forever)
  - **Our way**: Watch the owner (iPod) open the safe, copy what's inside

  **Time to decrypt**: ~10 minutes  
  **Time to modify**: 1-2 weeks (learning ARM code)  

  Make sense? 😊

html_cache:
  <h1 id="what-im-doing-simple-explanation">What I'm Doing (Simple Explanation) 🔓</h1>
  <h2 id="the-big-picture">The Big Picture</h2>
  <p>Think of your iPod like a <strong>locked safe</strong> with a secret recipe inside. We want to modify that recipe (add new features), but the safe is locked.</p>
  <p><strong>The problem</strong>: The "recipe" (firmware) is encrypted (scrambled) so we can't read it.</p>
  <p><strong>The solution</strong>: Instead of cracking the safe, we'll ask the iPod itself to unlock it for us!</p>
  <hr />
  <h2 id="how-normal-decryption-works-the-hard-way">How Normal Decryption Works (The Hard Way ❌)</h2>
  <p>Imagine the iPod firmware is a book written in a secret code. To decrypt it normally, you'd need:<br />
  1. The <strong>code key</strong> (like a decoder ring)<br />
  2. Try <strong>billions of guesses</strong> to crack it<br />
  3. Wait <strong>thousands of years</strong> (literally impossible)</p>
  <p>This is what I said we CAN'T do - it's too hard.</p>
  <hr />
  <h2 id="how-were-actually-doing-it-the-smart-way">How We're Actually Doing It (The Smart Way ✅)</h2>
  <p>Instead of cracking the code ourselves, we're using a <strong>clever trick</strong>:</p>
  <h3 id="step-1-build-special-tools-what-im-doing-now">Step 1: Build Special Tools (What I'm Doing Now)</h3>
  <p>I'm building a "communication device" that can talk to your iPod when it's booted up.</p>
  <p><strong>Analogy</strong>: Like building a special phone that can call your iPod</p>
  <h3 id="step-2-flash-hacked-firmware-to-your-ipod">Step 2: Flash "Hacked" Firmware to Your iPod</h3>
  <p>We'll install a temporary modified version of the iPod software that has a <strong>backdoor</strong>.</p>
  <p><strong>Analogy</strong>: Like installing a custom doorbell on your house that lets us peek inside</p>
  <h3 id="step-3-ask-the-ipod-to-decrypt-for-us">Step 3: Ask the iPod to Decrypt For Us</h3>
  <p>Once your iPod boots with our custom firmware, it will:<br />
  1. <strong>Decrypt the firmware itself</strong> (iPod knows the password!)<br />
  2. <strong>Load it into memory</strong> (RAM - like short-term memory)<br />
  3. Our tool will <strong>read that memory</strong> and save it to your computer</p>
  <p><strong>Analogy</strong>: <br />
  - You: "Hey iPod, can you open that safe and tell me what's inside?"<br />
  - iPod: "Sure!" <em>opens safe, reads recipe</em><br />
  - Us: <em>copy the recipe while it's open</em></p>
  <hr />
  <h2 id="why-this-works">Why This Works 🧠</h2>
  <p>Your iPod has the decryption keys <strong>built into its hardware</strong>. It's like:<br />
  - The safe (firmware) has a combination lock<br />
  - The iPod has the combination memorized<br />
  - We don't need to crack the lock - we just watch the iPod unlock it!</p>
  <p><strong>The exploit we're using</strong>: There's a bug in the iPod's font reader that lets us run custom code. It's like finding a hidden door that Apple forgot to lock.</p>
  <hr />
  <h2 id="what-each-tool-does">What Each Tool Does</h2>
  <h3 id="1-ipod_theme-main-tool">1. <strong>ipod_theme</strong> (Main Tool)</h3>
  <ul>
  <li>Builds the "backdoor firmware"</li>
  <li>Packages it so iTunes can install it</li>
  <li><strong>You'll flash this to your iPod</strong></li>
  </ul>
  <h3 id="2-scsi_dumper-memory-reader">2. <strong>scsi_dumper</strong> (Memory Reader)</h3>
  <ul>
  <li>Connects to your iPod via USB</li>
  <li>Reads the iPod's RAM (memory)</li>
  <li>Saves decrypted firmware to your PC</li>
  </ul>
  <p><strong>Analogy</strong>: ipod_theme is the "custom doorbell", scsi_dumper is the "camera" that looks through the door</p>
  <hr />
  <h2 id="the-steps-youll-do-later">The Steps You'll Do (Later)</h2>
  <ol>
  <li><strong>Connect iPod to PC</strong></li>
  <li><strong>Flash our custom firmware</strong> (via iTunes - like a normal update)</li>
  <li><strong>Boot iPod in special mode</strong> (press some buttons)</li>
  <li><strong>Run scsi_dumper tool</strong> (I'll give you the exact command)</li>
  <li><strong>Wait 5-10 minutes</strong> while it copies decrypted firmware</li>
  </ol>
  <p>That's it! No cracking, no brute force, no impossible math.</p>
  <hr />
  <h2 id="current-status-what-im-building-right-now">Current Status (What I'm Building Right Now)</h2>
  <div class="highlight"><pre><span></span><code>[✅] Step 1: Install Rust (programming language)
  [✅] Step 2: Install C++ compiler (needed for Rust)
  [🔄] Step 3: Build ipod_theme tool (compiling now - 3-5 min)
  [⏳] Step 4: Build scsi_dumper tool (next)
  [⏳] Step 5: Generate custom firmware (after build)
  </code></pre></div>
  <hr />
  <h2 id="after-we-get-decrypted-firmware-then-what">After We Get Decrypted Firmware... Then What?</h2>
  <p>Once we have the decrypted firmware:<br />
  1. <strong>Open it in a program called Ghidra</strong> (like a recipe translator)<br />
  2. <strong>Find the code that handles music</strong> (the ingredients we care about)<br />
  3. <strong>Write new code</strong> for your features (add new ingredients)<br />
  4. <strong>Patch it back in</strong> (update the recipe)<br />
  5. <strong>Flash it to your iPod</strong> (serve the new dish!)</p>
  <hr />
  <h2 id="the-bottom-line">The Bottom Line</h2>
  <p><strong>We're not cracking encryption</strong> (impossible)<br />
  <strong>We're tricking the iPod into decrypting it for us</strong> (clever!)</p>
  <p>Think of it like this:<br />
  - <strong>Bad way</strong>: Try to guess the safe combination (would take forever)<br />
  - <strong>Our way</strong>: Watch the owner (iPod) open the safe, copy what's inside</p>
  <p><strong>Time to decrypt</strong>: ~10 minutes<br />
  <strong>Time to modify</strong>: 1-2 weeks (learning ARM code)  </p>
  <p>Make sense? 😊</p>


id: 1LN6p7itFZA
created_at: 2025-11-28 19:14:57
updated_at: 2025-11-28 20:27:10
referrer: http://89.168.66.142:5000/new
content:
  # RAM Dump Guide - Extract Decrypted Firmware

  ## Current Status ✅

  Your iPod is now running custom firmware with the exploit active!

  The firmware **looks exactly the same** - that's intentional. The exploit runs invisibly.

  ---

  ## What We're About to Do

  We'll use the SCSI dumper tool to read your iPod's memory (RAM) and save it to your PC.

  **Why?** When your iPod boots, it decrypts the firmware and loads it into RAM. We're going to copy that decrypted firmware while it's in memory!

  **Analogy**: The safe is now open - let's photograph the contents before it closes.

  ---

  ## Step 1: Make Sure iPod is Connected

  - iPod should still be connected via USB
  - Screen should show normal iPod interface
  - **Don't disconnect it!**

  ---

  ## Step 2: Run the RAM Dump Command

  Open PowerShell in the project folder and run:

  ```powershell
  cd "firmware_extracted\ipod_theme-master\tools\scsi_dumper"

  .\target\release\scsi_dumper.exe --start 0x08000000 --size 0x01000000 --output osos_ram_dump.bin
  ```

  **What this does**:
  - `--start 0x08000000`: Start reading from this memory address (where firmware is loaded)
  - `--size 0x01000000`: Read 16 MB of RAM (covers the entire firmware)
  - `--output osos_ram_dump.bin`: Save to this file

  ---

  ## Step 3: Wait for Completion

  This will take **5-10 minutes**. You'll see progress like:

  ```
  Reading memory from 0x08000000...
  Progress: 1 MB / 16 MB
  Progress: 2 MB / 16 MB
  ...
  Done!
  ```

  **IMPORTANT**: Don't disconnect the iPod during this process!

  ---

  ## Step 4: Verify the Dump

  After completion, check the file size:

  ```powershell
  ls osos_ram_dump.bin
  ```

  Should be **exactly 16,777,216 bytes** (16 MB)

  ---

  ## Troubleshooting

  **Error: "Could not find iPod"**
  → Make sure iPod is connected and not in disk mode
  → Try unplugging and reconnecting

  **Error: "Access denied"**
  → Run PowerShell as Administrator

  **Dump stops or freezes**
  → iPod might have gone to sleep - wake it up
  → Restart dump from beginning

  ---

  ## After Successful Dump

  Once you have `osos_ram_dump.bin`, we'll:

  1. Search for the actual firmware inside the RAM dump
  2. Extract just the osos portion
  3. Load it into Ghidra for analysis
  4. Start Phase 2 (code modification)!

  ---

  ## Ready?

  Run the command above and let me know when it completes!

html_cache:
  <h1 id="ram-dump-guide-extract-decrypted-firmware">RAM Dump Guide - Extract Decrypted Firmware</h1>
  <h2 id="current-status">Current Status ✅</h2>
  <p>Your iPod is now running custom firmware with the exploit active!</p>
  <p>The firmware <strong>looks exactly the same</strong> - that's intentional. The exploit runs invisibly.</p>
  <hr />
  <h2 id="what-were-about-to-do">What We're About to Do</h2>
  <p>We'll use the SCSI dumper tool to read your iPod's memory (RAM) and save it to your PC.</p>
  <p><strong>Why?</strong> When your iPod boots, it decrypts the firmware and loads it into RAM. We're going to copy that decrypted firmware while it's in memory!</p>
  <p><strong>Analogy</strong>: The safe is now open - let's photograph the contents before it closes.</p>
  <hr />
  <h2 id="step-1-make-sure-ipod-is-connected">Step 1: Make Sure iPod is Connected</h2>
  <ul>
  <li>iPod should still be connected via USB</li>
  <li>Screen should show normal iPod interface</li>
  <li><strong>Don't disconnect it!</strong></li>
  </ul>
  <hr />
  <h2 id="step-2-run-the-ram-dump-command">Step 2: Run the RAM Dump Command</h2>
  <p>Open PowerShell in the project folder and run:</p>
  <div class="highlight"><pre><span></span><code><span class="nb">cd </span><span class="s2">&quot;firmware_extracted\ipod_theme-master\tools\scsi_dumper&quot;</span>

  <span class="p">.\</span><span class="n">target</span><span class="p">\</span><span class="n">release</span><span class="p">\</span><span class="n">scsi_dumper</span><span class="p">.</span><span class="n">exe</span> <span class="p">-</span><span class="n">-start</span> <span class="n">0x08000000</span> <span class="p">-</span><span class="n">-size</span> <span class="n">0x01000000</span> <span class="p">-</span><span class="n">-output</span> <span class="n">osos_ram_dump</span><span class="p">.</span><span class="n">bin</span>
  </code></pre></div>
  <p><strong>What this does</strong>:<br />
  - <code>--start 0x08000000</code>: Start reading from this memory address (where firmware is loaded)<br />
  - <code>--size 0x01000000</code>: Read 16 MB of RAM (covers the entire firmware)<br />
  - <code>--output osos_ram_dump.bin</code>: Save to this file</p>
  <hr />
  <h2 id="step-3-wait-for-completion">Step 3: Wait for Completion</h2>
  <p>This will take <strong>5-10 minutes</strong>. You'll see progress like:</p>
  <div class="highlight"><pre><span></span><code>Reading memory from 0x08000000...
  Progress: 1 MB / 16 MB
  Progress: 2 MB / 16 MB
  ...
  Done!
  </code></pre></div>
  <p><strong>IMPORTANT</strong>: Don't disconnect the iPod during this process!</p>
  <hr />
  <h2 id="step-4-verify-the-dump">Step 4: Verify the Dump</h2>
  <p>After completion, check the file size:</p>
  <div class="highlight"><pre><span></span><code><span class="nb">ls </span><span class="n">osos_ram_dump</span><span class="p">.</span><span class="n">bin</span>
  </code></pre></div>
  <p>Should be <strong>exactly 16,777,216 bytes</strong> (16 MB)</p>
  <hr />
  <h2 id="troubleshooting">Troubleshooting</h2>
  <p><strong>Error: "Could not find iPod"</strong><br />
  → Make sure iPod is connected and not in disk mode<br />
  → Try unplugging and reconnecting</p>
  <p><strong>Error: "Access denied"</strong><br />
  → Run PowerShell as Administrator</p>
  <p><strong>Dump stops or freezes</strong><br />
  → iPod might have gone to sleep - wake it up<br />
  → Restart dump from beginning</p>
  <hr />
  <h2 id="after-successful-dump">After Successful Dump</h2>
  <p>Once you have <code>osos_ram_dump.bin</code>, we'll:</p>
  <ol>
  <li>Search for the actual firmware inside the RAM dump</li>
  <li>Extract just the osos portion</li>
  <li>Load it into Ghidra for analysis</li>
  <li>Start Phase 2 (code modification)!</li>
  </ol>
  <hr />
  <h2 id="ready">Ready?</h2>
  <p>Run the command above and let me know when it completes!</p>


# revisions

document_id: der0ber
created_at: 2025-11-15 16:55:15
content:
  ![Alt-Text](https://imgur.com/MrnVEpn.png)

  -> [Immich](http://der0ber:2283/photos) | [Emby](http://der0ber:8096/) | [HomeAssistant](http://der0ber:8123/dashboard-test/) | [Vaultwarden](https://vaultwarden.tail8e56b.ts.net/) <-

  !!! note GETTING STARTED
      - Get a **VPN** [Windscribe](https://windscribe.com/), [Mullvad](https://mullvad.net/) or [ProtonVPN](https://protonvpn.com/) - Download [qBittorrent](https://www.qbittorrent.org/) for torrents.
      - **Bind** your VPN to your qBittorent Client.  - Download [qBittorrent](https://www.qbittorrent.org/) für Torrents.
              - **Bind** your VPN to your qBittorrent Client.
      - Download [JDownloader](https://jdownloader.org/download/index) für Downloads.
              - Hol dir ein **Subscription** bei [DDownload](https://ddownload.com/)

  ## OVERVIEW
  [TOC]

  ## STREAMING
  All   goku.sx  / 	cineby.ru /		einschalten.in
  TV	 bs.to / kisskh.co
  Anime anicloud.io

  ## TORRENTING
  All 1337x.to / torrentgalaxy.to / limetorrents.lol
  Anime nyaa.si
  HEVC  yts.mx

  ## DOWNLOADING
  All             		ddl-warez.cc / warez.cx / warez-ddl.net / byte.to / hdencode.org
  Anime 		         anime-loads.org / nyaa.si
  K-Drama            		dramaday.me /   mkvdrama.org
  All Filehost dl        	gDebrid status.gookie.dev (Discord only) (no invites)
  Software             filecr.com /  iowin.net / cracksurl.com
  Mod  APK's		platinmods.com
  Games                elamigos.site /   gload.to / fitgirl-repacks.site
  Game Roms 				cdromance.org / romsfun.com
  Music						    lucida.to / eu.qobuz.squid.wtf / us.qobuz.squid.wtf
  Video Game Music    downloads.khinsider.com
  Music videos	       sharemania.us
  E-Books	              libgen.li /    annas-archive.org / ibooks.to
  Mangas				archive.org/details/manga_library
  Lightroom Presets    freepreset.net
  After Effects Plugin    gfxdomain.co /   psdly.com

  ## SOFTWARE
  Right Click Converter  github.com/Tichau/FileConverter
  Video Converter xmedia-recode.de / handbrake.fr
  Audio Converter foobar2000.org
  Tidal dl github.com/exislow/tidal-dl-ng
  YouTube dl github.com/sylviiu/ezytdl
  Archiver github.com/M2Team/NanaZip
  File Search  voidtools.com
  Spotlight Search github.com/Flow-Launcher/Flow.Launcher
  Backup Windows  macrium.com
  Customize Windows  rainmeter.net
  Quicklook  github.com/QL-Win/QuickLook

  ## OTHERS
  Fake Mail             mail.tm / smailpro.com/temporary-email
  1TB Free Storage        terabox.com
  File Transfer transfer.it / send-anywhere.com
  Info                     hacksnation.com / fmhy.net / bit.ly/3xYKRVK
  Free Accounts        bugmenot.com
  Stream list                toplist.raidrush.ws
  Open Website Finder strixx.vercel.app
  IPTV        github.com/iptv-org/iptv
  Insta PB             imginn.com
  Apple Street View lookmap.eu.pythonanywhere.com
  Auto Delete Text otp.sva.cloud
  Find osintcombine.com/tools
  Album Cover covers.musichoarders.xyz

  !!! info
      Ready for [more](https://fmhy.net/)?

  <a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Go Back</a>


document_id: der0ber
created_at: 2025-11-15 17:09:50
content:
  ![Der0ber Banner](https://i.imgur.com/MrnVEpn.png)

  -> [Immich](http://der0ber:2283/photos) | [Emby](http://der0ber:8096/) | [HomeAssistant](http://der0ber:8123/dashboard-test/) | [Vaultwarden](https://vaultwarden.tail8e56b.ts.net/) <-

  !!! note GETTING STARTED
      - Get a **VPN** [Windscribe](https://windscribe.com/), [Mullvad](https://mullvad.net/) or [ProtonVPN](https://protonvpn.com/) - Download [qBittorrent](https://www.qbittorrent.org/) for torrents.
      - **Bind** your VPN to your qBittorent Client.  - Download [qBittorrent](https://www.qbittorrent.org/) für Torrents.
              - **Bind** your VPN to your qBittorrent Client.
      - Download [JDownloader](https://jdownloader.org/download/index) für Downloads.
              - Hol dir ein **Subscription** bei [DDownload](https://ddownload.com/)

  ## OVERVIEW
  [TOC]

  ## STREAMING
  All   goku.sx  / 	cineby.ru /		einschalten.in
  TV	 bs.to / kisskh.co
  Anime anicloud.io

  ## TORRENTING
  All 1337x.to / torrentgalaxy.to / limetorrents.lol
  Anime nyaa.si
  HEVC  yts.mx

  ## DOWNLOADING
  All             		ddl-warez.cc / warez.cx / warez-ddl.net / byte.to / hdencode.org
  Anime 		         anime-loads.org / nyaa.si
  K-Drama            		dramaday.me /   mkvdrama.org
  All Filehost dl        	gDebrid status.gookie.dev (Discord only) (no invites)
  Software             filecr.com /  iowin.net / cracksurl.com
  Mod  APK's		platinmods.com
  Games                elamigos.site /   gload.to / fitgirl-repacks.site
  Game Roms 				cdromance.org / romsfun.com
  Music						    lucida.to / eu.qobuz.squid.wtf / us.qobuz.squid.wtf
  Video Game Music    downloads.khinsider.com
  Music videos	       sharemania.us
  E-Books	              libgen.li /    annas-archive.org / ibooks.to
  Mangas				archive.org/details/manga_library
  Lightroom Presets    freepreset.net
  After Effects Plugin    gfxdomain.co /   psdly.com

  ## SOFTWARE
  Right Click Converter  github.com/Tichau/FileConverter
  Video Converter xmedia-recode.de / handbrake.fr
  Audio Converter foobar2000.org
  Tidal dl github.com/exislow/tidal-dl-ng
  YouTube dl github.com/sylviiu/ezytdl
  Archiver github.com/M2Team/NanaZip
  File Search  voidtools.com
  Spotlight Search github.com/Flow-Launcher/Flow.Launcher
  Backup Windows  macrium.com
  Customize Windows  rainmeter.net
  Quicklook  github.com/QL-Win/QuickLook

  ## OTHERS
  Fake Mail             mail.tm / smailpro.com/temporary-email
  1TB Free Storage        terabox.com
  File Transfer transfer.it / send-anywhere.com
  Info                     hacksnation.com / fmhy.net / bit.ly/3xYKRVK
  Free Accounts        bugmenot.com
  Stream list                toplist.raidrush.ws
  Open Website Finder strixx.vercel.app
  IPTV        github.com/iptv-org/iptv
  Insta PB             imginn.com
  Apple Street View lookmap.eu.pythonanywhere.com
  Auto Delete Text otp.sva.cloud
  Find osintcombine.com/tools
  Album Cover covers.musichoarders.xyz

  !!! info
      Ready for [more](https://fmhy.net/)?

  <a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Go Back</a>


document_id: der0ber
created_at: 2025-11-16 11:06:55
content:
  ![Der0ber Banner](https://i.imgur.com/MrnVEpn.png)

  -> [Immich](http://der0ber:2283/photos) | [Emby](http://der0ber:8096/) | [HomeAssistant](http://der0ber:8123/dashboard-test/) | [Vaultwarden](https://vaultwarden.tail8e56b.ts.net/) <-

  !!! note GETTING STARTED
      - Get a **VPN** [Windscribe](https://windscribe.com/), [Mullvad](https://mullvad.net/) or [ProtonVPN](https://protonvpn.com/)
  	- Download [qBittorrent](https://www.qbittorrent.org/) for torrents.
  		- **Bind** your VPN to your qBittorent Client.
      - Download [JDownloader](https://jdownloader.org/download/index) for Warez / Downloading.
  		- Get a **subscription** at a file hoster either [DDownload](https://ddownload.com/) or [RealDebrid](https://real-debrid.com/)

  ## OVERVIEW
  [TOC]

  ## STREAMING
  All   goku.sx  / 	cineby.ru /		einschalten.in
  TV	 bs.to / kisskh.co
  Anime anicloud.io

  ## TORRENTING
  All 1337x.to / torrentgalaxy.to / limetorrents.lol
  Anime nyaa.si
  HEVC  yts.mx

  ## DOWNLOADING
  All             		ddl-warez.cc / warez.cx / warez-ddl.net / byte.to / hdencode.org
  Anime 		         anime-loads.org / nyaa.si
  K-Drama            		dramaday.me /   mkvdrama.org
  All Filehost dl        	gDebrid status.gookie.dev (Discord only) (no invites)
  Software             filecr.com /  iowin.net / cracksurl.com
  Mod  APK's		platinmods.com
  Games                elamigos.site /   gload.to / fitgirl-repacks.site
  Game Roms 				cdromance.org / romsfun.com
  Music						    lucida.to / eu.qobuz.squid.wtf / us.qobuz.squid.wtf
  Video Game Music    downloads.khinsider.com
  Music videos	       sharemania.us
  E-Books	              libgen.li /    annas-archive.org / ibooks.to
  Mangas				archive.org/details/manga_library
  Lightroom Presets    freepreset.net
  After Effects Plugin    gfxdomain.co /   psdly.com

  ## SOFTWARE
  Right Click Converter  github.com/Tichau/FileConverter
  Video Converter xmedia-recode.de / handbrake.fr
  Audio Converter foobar2000.org
  Tidal dl github.com/exislow/tidal-dl-ng
  YouTube dl github.com/sylviiu/ezytdl
  Archiver github.com/M2Team/NanaZip
  File Search  voidtools.com
  Spotlight Search github.com/Flow-Launcher/Flow.Launcher
  Backup Windows  macrium.com
  Customize Windows  rainmeter.net
  Quicklook  github.com/QL-Win/QuickLook

  ## OTHERS
  Fake Mail             mail.tm / smailpro.com/temporary-email
  1TB Free Storage        terabox.com
  File Transfer transfer.it / send-anywhere.com
  Info                     hacksnation.com / fmhy.net / bit.ly/3xYKRVK
  Free Accounts        bugmenot.com
  Stream list                toplist.raidrush.ws
  Open Website Finder strixx.vercel.app
  IPTV        github.com/iptv-org/iptv
  Insta PB             imginn.com
  Apple Street View lookmap.eu.pythonanywhere.com
  Auto Delete Text otp.sva.cloud
  Find osintcombine.com/tools
  Album Cover covers.musichoarders.xyz

  !!! info
      Ready for [more](https://fmhy.net/)?

  <a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Go Back</a>


document_id: der0ber
created_at: 2025-11-16 11:07:47
content:
  ![Der0ber Banner](https://i.imgur.com/MrnVEpn.png)

  -> [Immich](http://der0ber:2283/photos) | [Emby](http://der0ber:8096/) | [HomeAssistant](http://der0ber:8123/dashboard-test/) | [Vaultwarden](https://vaultwarden.tail8e56b.ts.net/) <-

  !!! note GETTING STARTED
      - Get a **VPN** [Windscribe](https://windscribe.com/), [Mullvad](https://mullvad.net/) or [ProtonVPN](https://protonvpn.com)
      - Download [qBittorrent](https://www.qbittorrent.org/) for torrents 
          - **Bind** your VPN to your qBittorent Client.
      - Download [JDownloader](https://jdownloader.org/download/index) for Warez / Downloading
          - Get a **subscription** at a file hoster either [DDownload](https://ddownload.com/) or [RealDebrid](https://real-debrid.com/)

  ## OVERVIEW
  [TOC]

  ## STREAMING
  All   goku.sx  / 	cineby.ru /		einschalten.in
  TV	 bs.to / kisskh.co
  Anime anicloud.io

  ## TORRENTING
  All 1337x.to / torrentgalaxy.to / limetorrents.lol
  Anime nyaa.si
  HEVC  yts.mx

  ## DOWNLOADING
  All             		ddl-warez.cc / warez.cx / warez-ddl.net / byte.to / hdencode.org
  Anime 		         anime-loads.org / nyaa.si
  K-Drama            		dramaday.me /   mkvdrama.org
  All Filehost dl        	gDebrid status.gookie.dev (Discord only) (no invites)
  Software             filecr.com /  iowin.net / cracksurl.com
  Mod  APK's		platinmods.com
  Games                elamigos.site /   gload.to / fitgirl-repacks.site
  Game Roms 				cdromance.org / romsfun.com
  Music						    lucida.to / eu.qobuz.squid.wtf / us.qobuz.squid.wtf
  Video Game Music    downloads.khinsider.com
  Music videos	       sharemania.us
  E-Books	              libgen.li /    annas-archive.org / ibooks.to
  Mangas				archive.org/details/manga_library
  Lightroom Presets    freepreset.net
  After Effects Plugin    gfxdomain.co /   psdly.com

  ## SOFTWARE
  Right Click Converter  github.com/Tichau/FileConverter
  Video Converter xmedia-recode.de / handbrake.fr
  Audio Converter foobar2000.org
  Tidal dl github.com/exislow/tidal-dl-ng
  YouTube dl github.com/sylviiu/ezytdl
  Archiver github.com/M2Team/NanaZip
  File Search  voidtools.com
  Spotlight Search github.com/Flow-Launcher/Flow.Launcher
  Backup Windows  macrium.com
  Customize Windows  rainmeter.net
  Quicklook  github.com/QL-Win/QuickLook

  ## OTHERS
  Fake Mail             mail.tm / smailpro.com/temporary-email
  1TB Free Storage        terabox.com
  File Transfer transfer.it / send-anywhere.com
  Info                     hacksnation.com / fmhy.net / bit.ly/3xYKRVK
  Free Accounts        bugmenot.com
  Stream list                toplist.raidrush.ws
  Open Website Finder strixx.vercel.app
  IPTV        github.com/iptv-org/iptv
  Insta PB             imginn.com
  Apple Street View lookmap.eu.pythonanywhere.com
  Auto Delete Text otp.sva.cloud
  Find osintcombine.com/tools
  Album Cover covers.musichoarders.xyz

  !!! info
      Ready for [more](https://fmhy.net/)?

  <a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Go Back</a>


document_id: der0ber
created_at: 2025-11-16 11:08:35
content:
  ![Der0ber Banner](https://i.imgur.com/MrnVEpn.png)

  -> [Immich](http://der0ber:2283/photos) | [Emby](http://der0ber:8096/) | [HomeAssistant](http://der0ber:8123/dashboard-test/) | [Vaultwarden](https://vaultwarden.tail8e56b.ts.net/) <-

  !!! note GETTING STARTED
      - Get a **VPN** [Windscribe](https://windscribe.com/), [Mullvad](https://mullvad.net/) or [ProtonVPN](https://protonvpn.com)
      - Download [qBittorrent](https://www.qbittorrent.org/) for torrents 
          - **Bind** your VPN to your qBittorent Client.
      - Download [JDownloader](https://jdownloader.org/download/index) for Warez / Downloading
          - Get a **subscription** at a file hoster either [DDownload](https://ddownload.com/) or [RealDebrid(https://real-debrid.com/)

  ## OVERVIEW
  [TOC]

  ## STREAMING
  All   goku.sx  / 	cineby.ru /		einschalten.in
  TV	 bs.to / kisskh.co
  Anime anicloud.io

  ## TORRENTING
  All 1337x.to / torrentgalaxy.to / limetorrents.lol
  Anime nyaa.si
  HEVC  yts.mx

  ## DOWNLOADING
  All             		ddl-warez.cc / warez.cx / warez-ddl.net / byte.to / hdencode.org
  Anime 		         anime-loads.org / nyaa.si
  K-Drama            		dramaday.me /   mkvdrama.org
  All Filehost dl        	gDebrid status.gookie.dev (Discord only) (no invites)
  Software             filecr.com /  iowin.net / cracksurl.com
  Mod  APK's		platinmods.com
  Games                elamigos.site /   gload.to / fitgirl-repacks.site
  Game Roms 				cdromance.org / romsfun.com
  Music						    lucida.to / eu.qobuz.squid.wtf / us.qobuz.squid.wtf
  Video Game Music    downloads.khinsider.com
  Music videos	       sharemania.us
  E-Books	              libgen.li /    annas-archive.org / ibooks.to
  Mangas				archive.org/details/manga_library
  Lightroom Presets    freepreset.net
  After Effects Plugin    gfxdomain.co /   psdly.com

  ## SOFTWARE
  Right Click Converter  github.com/Tichau/FileConverter
  Video Converter xmedia-recode.de / handbrake.fr
  Audio Converter foobar2000.org
  Tidal dl github.com/exislow/tidal-dl-ng
  YouTube dl github.com/sylviiu/ezytdl
  Archiver github.com/M2Team/NanaZip
  File Search  voidtools.com
  Spotlight Search github.com/Flow-Launcher/Flow.Launcher
  Backup Windows  macrium.com
  Customize Windows  rainmeter.net
  Quicklook  github.com/QL-Win/QuickLook

  ## OTHERS
  Fake Mail             mail.tm / smailpro.com/temporary-email
  1TB Free Storage        terabox.com
  File Transfer transfer.it / send-anywhere.com
  Info                     hacksnation.com / fmhy.net / bit.ly/3xYKRVK
  Free Accounts        bugmenot.com
  Stream list                toplist.raidrush.ws
  Open Website Finder strixx.vercel.app
  IPTV        github.com/iptv-org/iptv
  Insta PB             imginn.com
  Apple Street View lookmap.eu.pythonanywhere.com
  Auto Delete Text otp.sva.cloud
  Find osintcombine.com/tools
  Album Cover covers.musichoarders.xyz

  !!! info
      Ready for [more](https://fmhy.net/)?

  <a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Go Back</a>


document_id: der0ber
created_at: 2025-11-16 13:42:02
content:
  ![Der0ber Banner](https://i.imgur.com/MrnVEpn.png)

  -> [Immich](http://der0ber:2283/photos) | [Emby](http://der0ber:8096/) | [HomeAssistant](http://der0ber:8123/dashboard-test/) | [Vaultwarden](https://vaultwarden.tail8e56b.ts.net/) <-

  !!! note GETTING STARTED
      - Get a **VPN** [Windscribe](https://windscribe.com/), [Mullvad](https://mullvad.net/) or [ProtonVPN](https://protonvpn.com)
      - Download [qBittorrent](https://www.qbittorrent.org/) for torrents 
          - **Bind** your VPN to your qBittorent Client.
      - Download [JDownloader](https://jdownloader.org/download/index) for Warez / Downloading
          - Get a **subscription** at a file hoster either [DDownload](https://ddownload.com/) or [RealDebrid](https://real-debrid.com)

  ## OVERVIEW
  [TOC]

  ## STREAMING
  All   goku.sx  / 	cineby.ru /		einschalten.in
  TV	 bs.to / kisskh.co
  Anime anicloud.io

  ## TORRENTING
  All 1337x.to / torrentgalaxy.to / limetorrents.lol
  Anime nyaa.si
  HEVC  yts.mx

  ## DOWNLOADING
  All             		ddl-warez.cc / warez.cx / warez-ddl.net / byte.to / hdencode.org
  Anime 		         anime-loads.org / nyaa.si
  K-Drama            		dramaday.me /   mkvdrama.org
  All Filehost dl        	gDebrid status.gookie.dev (Discord only) (no invites)
  Software             filecr.com /  iowin.net / cracksurl.com
  Mod  APK's		platinmods.com
  Games                elamigos.site /   gload.to / fitgirl-repacks.site
  Game Roms 				cdromance.org / romsfun.com
  Music						    lucida.to / eu.qobuz.squid.wtf / us.qobuz.squid.wtf
  Video Game Music    downloads.khinsider.com
  Music videos	       sharemania.us
  E-Books	              libgen.li /    annas-archive.org / ibooks.to
  Mangas				archive.org/details/manga_library
  Lightroom Presets    freepreset.net
  After Effects Plugin    gfxdomain.co /   psdly.com

  ## SOFTWARE
  Right Click Converter  github.com/Tichau/FileConverter
  Video Converter xmedia-recode.de / handbrake.fr
  Audio Converter foobar2000.org
  Tidal dl github.com/exislow/tidal-dl-ng
  YouTube dl github.com/sylviiu/ezytdl
  Archiver github.com/M2Team/NanaZip
  File Search  voidtools.com
  Spotlight Search github.com/Flow-Launcher/Flow.Launcher
  Backup Windows  macrium.com
  Customize Windows  rainmeter.net
  Quicklook  github.com/QL-Win/QuickLook

  ## OTHERS
  Fake Mail             mail.tm / smailpro.com/temporary-email
  1TB Free Storage        terabox.com
  File Transfer transfer.it / send-anywhere.com
  Info                     hacksnation.com / fmhy.net / bit.ly/3xYKRVK
  Free Accounts        bugmenot.com
  Stream list                toplist.raidrush.ws
  Open Website Finder strixx.vercel.app
  IPTV        github.com/iptv-org/iptv
  Insta PB             imginn.com
  Apple Street View lookmap.eu.pythonanywhere.com
  Auto Delete Text otp.sva.cloud
  Find osintcombine.com/tools
  Album Cover covers.musichoarders.xyz

  !!! info
      Ready for [more](https://fmhy.net/)?

  <a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Go Back</a>


document_id: der0ber
created_at: 2025-11-16 13:57:59
content:
  ![Der0ber Banner](https://i.imgur.com/MrnVEpn.png)

  -> [Immich](http://der0ber:2283/photos) | [Emby](http://der0ber:8096/) | [HomeAssistant](http://der0ber:8123/dashboard-test/) | [Vaultwarden](https://vaultwarden.tail8e56b.ts.net/) <-

  !!! info GETTING STARTED
      - Get a **VPN** [Windscribe](https://windscribe.com/), [Mullvad](https://mullvad.net/) or [ProtonVPN](https://protonvpn.com)
      - Download [qBittorrent](https://www.qbittorrent.org/) for torrents 
          - **Bind** your VPN to your qBittorent Client.
      - Download [JDownloader](https://jdownloader.org/download/index) for Warez / Downloading
          - Get a **subscription** at a file hoster either [DDownload](https://ddownload.com/) or [RealDebrid](https://real-debrid.com)

  ## OVERVIEW
  [TOC]

  ## STREAMING
  All   goku.sx  / 	cineby.ru /		einschalten.in
  TV	 bs.to / kisskh.co
  Anime anicloud.io

  ## TORRENTING
  All 1337x.to / torrentgalaxy.to / limetorrents.lol
  Anime nyaa.si
  HEVC  yts.mx

  ## DOWNLOADING
  All             		ddl-warez.cc / warez.cx / warez-ddl.net / byte.to / hdencode.org
  Anime 		         anime-loads.org / nyaa.si
  K-Drama            		dramaday.me /   mkvdrama.org
  All Filehost dl        	gDebrid status.gookie.dev (Discord only) (no invites)
  Software             filecr.com /  iowin.net / cracksurl.com
  Mod  APK's		platinmods.com
  Games                elamigos.site /   gload.to / fitgirl-repacks.site
  Game Roms 				cdromance.org / romsfun.com
  Music						    lucida.to / eu.qobuz.squid.wtf / us.qobuz.squid.wtf
  Video Game Music    downloads.khinsider.com
  Music videos	       sharemania.us
  E-Books	              libgen.li /    annas-archive.org / ibooks.to
  Mangas				archive.org/details/manga_library
  Lightroom Presets    freepreset.net
  After Effects Plugin    gfxdomain.co /   psdly.com

  ## SOFTWARE
  Right Click Converter  github.com/Tichau/FileConverter
  Video Converter xmedia-recode.de / handbrake.fr
  Audio Converter foobar2000.org
  Tidal dl github.com/exislow/tidal-dl-ng
  YouTube dl github.com/sylviiu/ezytdl
  Archiver github.com/M2Team/NanaZip
  File Search  voidtools.com
  Spotlight Search github.com/Flow-Launcher/Flow.Launcher
  Backup Windows  macrium.com
  Customize Windows  rainmeter.net
  Quicklook  github.com/QL-Win/QuickLook

  ## OTHERS
  Fake Mail             mail.tm / smailpro.com/temporary-email
  1TB Free Storage        terabox.com
  File Transfer transfer.it / send-anywhere.com
  Info                     hacksnation.com / fmhy.net / bit.ly/3xYKRVK
  Free Accounts        bugmenot.com
  Stream list                toplist.raidrush.ws
  Open Website Finder strixx.vercel.app
  IPTV        github.com/iptv-org/iptv
  Insta PB             imginn.com
  Apple Street View lookmap.eu.pythonanywhere.com
  Auto Delete Text otp.sva.cloud
  Find osintcombine.com/tools
  Album Cover covers.musichoarders.xyz

  !!! info     
      Ready for [more](https://fmhy.net/)?

  <a href="#" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;" style="text-decoration: none; color: var(--link-color);">↑ Go Back</a>


document_id: A3yHzOxkZak
created_at: 2025-11-16 14:08:17
content:
  !!! info GETTING STARTED
      - Get a **VPN** [Windscribe](https://windscribe.com/), [Mullvad](https://mullvad.net/) or [ProtonVPN](https://protonvpn.com)

  !!! note GETTING STARTED
      - Get a **VPN** [Windscribe](https://windscribe.com/), [Mullvad](https://mullvad.net/) or [ProtonVPN](https://protonvpn.com)

  !!! warning GETTING STARTED
      - Get a **VPN** [Windscribe](https://windscribe.com/), [Mullvad](https://mullvad.net/) or [ProtonVPN](https://protonvpn.com)

  !!! danger GETTING STARTED
      - Get a **VPN** [Windscribe](https://windscribe.com/), [Mullvad](https://mullvad.net/) or [ProtonVPN](https://protonvpn.com)

  !!! note
      Ready for [more](https://fmhy.net/)?


document_id: markdown-guide
created_at: 2025-11-16 15:52:17
content:
  # 📚 Markdown Guide - Vollständige Anleitung

  **Version 3.0** - Aktualisiert: November 2025

  Willkommen zum kompletten Guide für deinen Markdown Publisher! Hier findest du alles, was du wissen musst.

  ---

  ## 📖 Inhaltsverzeichnis

  - [Grundlagen](#grundlagen)
  - [Text-Formatierung](#text-formatierung)
  - [Links & Bilder](#links--bilder)
  - [Listen](#listen)
  - [Tabellen](#tabellen)
  - [Code](#code)
  - [Spezial-Features](#spezial-features)
  - [Erweiterte Features](#erweiterte-features)

  ---

  ## Grundlagen

  ### Überschriften

  Verwende `#` für Überschriften. Je mehr `#`, desto kleiner die Überschrift:

  ```markdown
  # Überschrift 1 (Größte)
  ## Überschrift 2
  ### Überschrift 3
  #### Überschrift 4
  ##### Überschrift 5
  ###### Überschrift 6 (Kleinste)
  ```

  **Ergebnis:**

  # Überschrift 1
  ## Überschrift 2
  ### Überschrift 3

  ---

  ## Text-Formatierung

  ### Fett, Kursiv & Durchgestrichen

  ```markdown
  **Fettgedruckt** oder __auch fett__
  *Kursiv* oder _auch kursiv_
  ***Fett und kursiv***
  ~~Durchgestrichen~~
  ```

  **Ergebnis:**

  **Fettgedruckt** oder __auch fett__  
  *Kursiv* oder _auch kursiv_  
  ***Fett und kursiv***  
  ~~Durchgestrichen~~

  ### Zitate (Blockquotes)

  ```markdown
  > Dies ist ein Zitat.
  > Es kann mehrere Zeilen haben.

  > **Tipp:** Du kannst auch Formatierung in Zitaten nutzen!
  ```

  **Ergebnis:**

  > Dies ist ein Zitat.
  > Es kann mehrere Zeilen haben.

  ### Horizontale Linie

  Erstelle eine Linie mit drei oder mehr `-`, `*` oder `_`:

  ```markdown
  ---
  ***
  ___
  ```

  **Ergebnis:**

  ---

  **Wichtig:** Horizontale Linien werden NUR erstellt, wenn du sie explizit schreibst, nicht automatisch durch Überschriften!

  ---

  ## Links & Bilder

  ### Links erstellen

  **Markdown-Link (mit Beschreibung):**
  ```markdown
  [Google](https://google.com)
  [GitHub](https://github.com)
  ```

  **Ergebnis:** [Google](https://google.com)

  **Automatische Links (ohne Markdown):**

  Schreibe einfach die URL ohne Formatierung:
  ```markdown
  github.com/user/repo
  example.com
  ```

  **Ergebnis:** Die URLs werden automatisch klickbar und blau!

  ### Bilder einfügen

  **Methode 1: Drag & Drop (Einfachste Methode!)**

  1. Öffne den Editor (`/new` oder `/edit`)
  2. Ziehe ein Bild aus deinem Datei-Explorer in den Editor
  3. Das Bild wird automatisch hochgeladen
  4. Der Markdown-Code wird eingefügt: `![Bild](https://i.imgur.com/xyz.png)`

  **Methode 2: Manuell mit URL**

  ```markdown
  ![Alternativtext](https://i.imgur.com/beispiel.png)
  ```

  **Ergebnis:** Das Bild wird angezeigt.

  **Zentrierte Bilder:**

  ```markdown
  -> ![Mein Bild](https://i.imgur.com/beispiel.png) <-
  ```

  ---

  ## Listen

  ### Ungeordnete Listen

  ```markdown
  - Punkt 1
  - Punkt 2
    - Unterpunkt 2.1
    - Unterpunkt 2.2
  - Punkt 3
  ```

  **Ergebnis:**

  - Punkt 1
  - Punkt 2
    - Unterpunkt 2.1
    - Unterpunkt 2.2
  - Punkt 3

  ### Geordnete Listen

  ```markdown
  1. Erster Punkt
  2. Zweiter Punkt
  3. Dritter Punkt
     1. Unterpunkt 3.1
     2. Unterpunkt 3.2
  ```

  **Ergebnis:**

  1. Erster Punkt
  2. Zweiter Punkt
  3. Dritter Punkt
     1. Unterpunkt 3.1
     2. Unterpunkt 3.2

  ### Checklisten

  ```markdown
  - [ ] Aufgabe 1 (offen)
  - [x] Aufgabe 2 (erledigt)
  - [ ] Aufgabe 3 (offen)
  ```

  **Ergebnis:**

  - [ ] Aufgabe 1 (offen)
  - [x] Aufgabe 2 (erledigt)
  - [ ] Aufgabe 3 (offen)

  ---

  ## Tabellen

  ### Einfache Tabelle

  ```markdown
  | Spalte 1 | Spalte 2 | Spalte 3 |
  |----------|----------|----------|
  | Zeile 1  | Daten A  | Daten B  |
  | Zeile 2  | Daten C  | Daten D  |
  ```

  **Ergebnis:**

  | Spalte 1 | Spalte 2 | Spalte 3 |
  |----------|----------|----------|
  | Zeile 1  | Daten A  | Daten B  |
  | Zeile 2  | Daten C  | Daten D  |

  ### Ausrichtung in Tabellen

  ```markdown
  | Links    | Zentriert | Rechts   |
  |:---------|:---------:|---------:|
  | Links    | Mitte     | Rechts   |
  | Text     | Text      | Text     |
  ```

  **Ergebnis:**

  | Links    | Zentriert | Rechts   |
  |:---------|:---------:|---------:|
  | Links    | Mitte     | Rechts   |
  | Text     | Text      | Text     |

  ---

  ## Code

  ### Inline-Code

  Verwende einfache Backticks für Code im Text:

  ```markdown
  Nutze den Befehl `npm install` um Pakete zu installieren.
  ```

  **Ergebnis:** Nutze den Befehl `npm install` um Pakete zu installieren.

  ### Code-Blöcke

  Verwende drei Backticks für mehrzeilige Code-Blöcke:

  ````markdown
  ```python
  def hello_world():
      print("Hello, World!")
  ```
  ````

  **Ergebnis:**

  ```python
  def hello_world():
      print("Hello, World!")
  ```

  ### Unterstützte Sprachen

  Die Syntax-Hervorhebung funktioniert für viele Sprachen:

  - `python`, `javascript`, `typescript`, `java`, `c`, `cpp`, `csharp`
  - `html`, `css`, `scss`, `json`, `yaml`, `xml`
  - `bash`, `shell`, `powershell`, `sql`
  - `go`, `rust`, `php`, `ruby`, `swift`, `kotlin`
  - und viele mehr!

  ---

  ## Spezial-Features

  ### 🎯 Zentrierter Text

  Zentriere Text oder Bilder mit `-> ... <-`:

  ```markdown
  -> Dieser Text ist zentriert <-

  -> [Link](https://example.com) | [Noch ein Link](https://google.com) <-

  -> ![Bild](https://i.imgur.com/beispiel.png) <-
  ```

  **Wichtig:** Alle Markdown-Formatierungen funktionieren innerhalb von `-> <-`!

  ### ⬆️ Nach-Oben-Link

  Erstelle einen Link, der automatisch nach oben scrollt:

  ```markdown
  [^]
  [top]
  [nach oben]
  [nach oben scrollen]
  ```

  **Ergebnis:** Ein klickbarer "↑ Nach oben" Link

  ### 📋 Inhaltsverzeichnis (TOC)

  Erstelle automatisch ein Inhaltsverzeichnis:

  ```markdown
  [TOC]
  ```

  **Ergebnis:** Ein anklickbares Inhaltsverzeichnis mit allen Überschriften

  ---

  ## Erweiterte Features

  ### 📦 Admonitions (Info-Boxen)

  Erstelle farbige Info-Boxen für wichtige Hinweise:

  **Syntax:**
  ```markdown
  !!! typ TITEL
      Dein Text hier (mit 4 Leerzeichen eingerückt)
      Weitere Zeilen (auch mit 4 Leerzeichen)
  ```

  **Verfügbare Typen:**

  #### Note (Grün)
  ```markdown
  !!! note HINWEIS
      Dies ist eine wichtige Notiz.
      - Du kannst **Formatierung** nutzen
      - [Links](https://example.com) funktionieren
      - Listen auch!
  ```

  #### Info (Blau)
  ```markdown
  !!! info INFORMATION
      Hier sind wichtige Informationen.
      
      Du kannst auch Absätze machen!
  ```

  #### Warning (Orange/Gold)
  ```markdown
  !!! warning WARNUNG
      Vorsicht! Dies ist eine Warnung.
  ```

  #### Danger (Rot)
  ```markdown
  !!! danger GEFAHR
      Achtung! Kritischer Hinweis!
  ```

  #### Greentext (Hellgrün)
  ```markdown
  !!! greentext ERFOLG
      Alles hat funktioniert!
  ```

  **Ohne Titel:**
  ```markdown
  !!! info
      Info-Box ohne Überschrift
  ```

  **Mit Markdown-Formatierung:**
  ```markdown
  !!! note GETTING STARTED
      **Schritt 1:** Installiere [Python](https://python.org)
      
      - Lade die Datei herunter
      - Führe `python install.py` aus
      - Fertig!
      
      ```bash
      pip install package
      ```
      
      > **Tipp:** Nutze die neueste Version!
  ```

  **Wichtig:** 
  - Jede Zeile im Inhalt muss mit **4 Leerzeichen** eingerückt sein
  - Alle Markdown-Formatierungen funktionieren innerhalb der Box
  - Listen, Links, Code, Fettdruck - alles möglich!

  ---

  ## 🛠️ Editor-Features

  ### Auto-Fix

  Der Editor hat einen **Auto-Fix** Button, der häufige Fehler automatisch korrigiert:

  - Fehlende Einrückungen in Admonitions
  - Falsche Abstände bei horizontalen Linien
  - Und mehr!

  **Nutzung:** Klicke einfach auf "Auto-Fix" im Editor.

  ### Vorschau

  Klicke auf "Vorschau" um dein Dokument vor dem Speichern zu sehen.

  ### Themes

  Wähle zwischen 4 Themes:
  - **Dark** (Standard) - Dunkles Theme
  - **Purple** - Lila Theme
  - **Blue** - Blaues Theme
  - **Light** - Helles Theme

  **Wechsel:** Dropdown unten rechts im Editor/Viewer

  ### Schriftarten

  Wähle zwischen verschiedenen Schriftarten:
  - Inter
  - Roboto
  - Open Sans
  - Lato
  - Montserrat
  - Poppins
  - Source Sans Pro
  - **Google Sans** (Standard)

  ---

  ## 📝 Tipps & Tricks

  ### Kombinationen

  Du kannst Features kombinieren:

  ```markdown
  -> **Fetter zentrierter Text** <-

  !!! info WICHTIG
      -> Zentrierter Text in einer Info-Box <-
      
      [Nach oben scrollen](#top)
  ```

  ### Escaping

  Wenn du Markdown-Zeichen als normalen Text anzeigen willst, nutze `\`:

  ```markdown
  \*Dieser Text ist nicht kursiv\*
  \# Dies ist keine Überschrift
  ```

  ### Leerzeilen

  - Leerzeilen trennen Absätze
  - Für einen Zeilenumbruch ohne Absatz: Zwei Leerzeichen am Zeilenende

  ```markdown
  Zeile 1  
  Zeile 2 (mit Zeilenumbruch)

  Neuer Absatz (mit Leerzeile)
  ```

  ---

  ## 🔗 Fußnoten

  Erstelle Fußnoten für Referenzen:

  ```markdown
  Hier ist ein Text mit Fußnote[^1].

  Noch eine Referenz[^2].

  [^1]: Dies ist die erste Fußnote.
  [^2]: Dies ist die zweite Fußnote.
  ```

  ---

  ## 🎨 Erweiterte Formatierung

  ### Definitionslisten

  ```markdown
  Begriff 1
  :   Definition von Begriff 1

  Begriff 2
  :   Definition von Begriff 2
      Mit mehreren Zeilen
  ```

  ### Abkürzungen

  ```markdown
  *[HTML]: Hyper Text Markup Language
  *[CSS]: Cascading Style Sheets

  HTML und CSS sind wichtig für Webentwicklung.
  ```

  Beim Hovern über HTML/CSS wird die Bedeutung angezeigt.

  ---

  ## 📊 Beispiel-Dokument

  Hier ein komplettes Beispiel, das viele Features zeigt:

  ```markdown
  # Mein Projekt

  -> ![Logo](https://i.imgur.com/beispiel.png) <-

  ## Übersicht

  [TOC]

  ## Installation

  !!! note VORAUSSETZUNGEN
      - Python 3.8+
      - Node.js 16+
      - Git

  **Schritte:**

  1. Repository klonen
  2. Dependencies installieren
  3. Server starten

  ```bash
  git clone https://github.com/user/repo
  cd repo
  npm install
  npm start
  ```

  ## Features

  | Feature | Status | Beschreibung |
  |---------|--------|--------------|
  | Login   | ✅     | Funktioniert |
  | Upload  | ✅     | Funktioniert |
  | Export  | 🚧     | In Arbeit    |

  ## Links

  - Dokumentation: docs.example.com
  - GitHub: github.com/user/repo
  - [Website](https://example.com)

  !!! warning WICHTIG
      Vergiss nicht die `.env` Datei zu erstellen!

  [nach oben](#übersicht)
  ```

  ---

  ## 🆘 Häufige Fehler

  ### Admonitions funktionieren nicht

  **Problem:** Inhalt ist nicht eingerückt  
  **Lösung:** Jede Zeile muss mit 4 Leerzeichen beginnen

  ```markdown
  !!! note TITEL
      Richtig eingerückt (4 Leerzeichen)
  ```

  ### Bilder werden nicht angezeigt

  **Problem:** Falsche URL oder Syntax  
  **Lösung:** Nutze Drag & Drop oder prüfe die URL

  ```markdown
  ![Alt-Text](https://vollständige-url-zum-bild.png)
  ```

  ### Links werden nicht klickbar

  **Problem:** URL hat kein `http://` oder `https://`  
  **Lösung:** URLs ohne Protokoll werden automatisch verlinkt:

  ```markdown
  github.com/user/repo
  ```

  Wird automatisch zu einem klickbaren Link!

  ---

  ## 🚀 Versionshistorie

  ### Version 3.0 (November 2025)
  - ✅ Drag & Drop Bild-Upload
  - ✅ 4 Theme-Optionen (Dark, Purple, Blue, Light)
  - ✅ Automatische URL-Verlinkung
  - ✅ Verbesserte Admonitions mit Markdown-Support
  - ✅ Revisions-System (automatische Backups)
  - ✅ HTML-Caching für Performance
  - ✅ Auto-Fix Funktion

  ### Version 2.0
  - ✅ Admonitions (Info-Boxen)
  - ✅ Zentrierter Text mit `-> <-`
  - ✅ Nach-oben-Links
  - ✅ Passwort-Schutz

  ### Version 1.0
  - ✅ Basis Markdown-Support
  - ✅ Editor & Viewer
  - ✅ Export (PDF, PNG, Raw)

  ---

  ## 📞 Support

  Bei Fragen oder Problemen:
  1. Prüfe diesen Guide
  2. Nutze die Auto-Fix Funktion
  3. Teste in der Vorschau

  **Viel Erfolg beim Schreiben!** 📝✨


document_id: ESP32
created_at: 2025-11-16 20:48:18
content:
  # 🔌 Aufbauanleitung - ESP32 Rotary Encoder LED Controller

  ## 📋 Benötigte Hardware

  - **ESP32 Development Board** (z.B. ESP32-DevKitC)
  - **Rotary Encoder** (z.B. KY-040 oder ähnlich)
  - **RGBW LED-Streifen** (WS2812B oder SK6812)
  - **Externe 5V Stromversorgung** für LED-Streifen (wichtig!)
  - **USB-Kabel** für ESP32 (Programmierung & Stromversorgung)
  - **Jumper-Kabel** für Verbindungen
  - **Breadboard** (optional, für Testaufbau)

  ---

  ## 🔌 Pin-Belegung

  ### Standard-Konfiguration (kann in main.cpp geändert werden):

  | Komponente | Pin-Name | ESP32 GPIO | Beschreibung |
  |------------|----------|------------|--------------|
  | **LED-Streifen** | DIN (Data) | **GPIO 2** | Datenleitung zum LED-Streifen |
  | **Rotary Encoder** | Pin A (DT) | **GPIO 18** | Encoder Signal A |
  | **Rotary Encoder** | Pin B (CLK) | **GPIO 19** | Encoder Signal B |
  | **Rotary Encoder** | Button (SW) | **GPIO 5** | Encoder-Button (optional) |
  | **Rotary Encoder** | VCC | **3.3V** | Versorgungsspannung |
  | **Rotary Encoder** | GND | **GND** | Masse |

  ---

  ## 📐 Aufbau-Schema

  ```
  ┌─────────────────────────────────────────────────────────┐
  │                    ESP32 Board                          │
  │                                                         │
  │  ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐         │
  │  │ 3.3V│  │ GND │  │ GPIO│  │ GPIO│  │ GPIO│         │
  │  │     │  │     │  │  2  │  │  5  │  │ 18  │         │
  │  └──┬──┘  └──┬──┘  └──┬──┘  └──┬──┘  └──┬──┘         │
  │     │        │        │        │        │             │
  │     │        │        │        │        │             │
  └─────┼────────┼────────┼────────┼────────┼─────────────┘
        │        │        │        │        │
        │        │        │        │        │
        │        │        │        │        │
  ┌─────▼────────▼────────▼────────▼────────▼─────────────┐
  │              Rotary Encoder (KY-040)                    │
  │                                                         │
  │         ┌──────────────┐                              │
  │         │   [Encoder]   │                              │
  │         │               │                              │
  │    VCC──┤ 1           6 ├──GND                         │
  │         │               │                              │
  │  GPIO18─┤ 2 (DT/A)   5 ├──NC (nicht verwendet)        │
  │         │               │                              │
  │  GPIO19─┤ 3 (CLK/B)  4 ├──GPIO5 (Button/SW)            │
  │         └──────────────┘                              │
  │                                                         │
  └─────────────────────────────────────────────────────────┘

  ┌─────────────────────────────────────────────────────────┐
  │              LED-Streifen (WS2812B/SK6812)             │
  │                                                         │
  │  ┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐               │
  │  │ 5V   │  │ GND  │  │ DIN  │  │ DOUT │               │
  │  └──┬───┘  └──┬───┘  └──┬───┘  └──┬───┘               │
  │     │         │         │         │                    │
  │     │         │         │         │                    │
  │  Externe      │      GPIO2        │                    │
  │  5V PSU       │         │         │                    │
  │     │         │         │         │                    │
  │     │         │         │         │                    │
  │  ┌──▼─────────▼─────────▼─────────▼──────────┐       │
  │  │  [LED 1] → [LED 2] → [LED 3] → ... → [LED N]│       │
  │  └─────────────────────────────────────────────┘       │
  │                                                         │
  └─────────────────────────────────────────────────────────┘
  ```

  ---

  ## 🔧 Schritt-für-Schritt Anleitung

  ### Schritt 1: Rotary Encoder anschließen

  1. **VCC** des Encoders → **3.3V** am ESP32
  2. **GND** des Encoders → **GND** am ESP32
  3. **Pin A (DT)** des Encoders → **GPIO 18** am ESP32
  4. **Pin B (CLK)** des Encoders → **GPIO 19** am ESP32
  5. **Button Pin (SW)** des Encoders → **GPIO 5** am ESP32 (optional)

  > **Hinweis**: Die meisten Rotary Encoder haben 5 Pins. Die Belegung kann je nach Modell variieren. Prüfe das Datenblatt deines Encoders!

  ### Schritt 2: LED-Streifen anschließen

  ⚠️ **WICHTIG**: LED-Streifen benötigen viel Strom! Verwende eine **externe 5V-Stromversorgung**!

  1. **DIN (Data In)** des LED-Streifens → **GPIO 2** am ESP32
  2. **GND** des LED-Streifens → **GND** am ESP32 (gemeinsam mit ESP32 GND)
  3. **5V** des LED-Streifens → **Externe 5V Stromversorgung** (NICHT ESP32 5V!)
  4. **GND** der externen Stromversorgung → **GND** am ESP32 (gemeinsame Masse!)

  > **Stromversorgung**: 
  > - Einzelne LED: ~60mA bei voller Helligkeit
  > - 60 LEDs: ~3.6A bei voller Helligkeit
  > - ESP32 kann nur ~500mA liefern → **Externe Stromversorgung ist Pflicht!**

  ### Schritt 3: Gemeinsame Masse (GND)

  **Sehr wichtig**: Alle GND-Leitungen müssen verbunden sein:
  - ESP32 GND
  - Rotary Encoder GND
  - LED-Streifen GND
  - Externe 5V Stromversorgung GND

  ---

  ## 📍 Alternative Pin-Belegungen

  Falls die Standard-Pins belegt sind, kannst du in `src/main.cpp` ändern:

  ```cpp
  // LED-Streifen
  #define LED_PIN 2              // Ändere hier (z.B. 4, 12, 13, 14, 15, 16, 17, 21, 22, 23, 25, 26, 27)

  // Rotary Encoder
  #define ENCODER_PIN_A 18       // Ändere hier
  #define ENCODER_PIN_B 19       // Ändere hier
  #define ENCODER_BUTTON_PIN 5   // Ändere hier (oder -1 wenn nicht verwendet)
  ```

  ### Empfohlene alternative GPIO-Pins für ESP32:

  ✅ **Gut geeignet** (keine speziellen Funktionen):
  - GPIO 4, 12, 13, 14, 15, 16, 17, 21, 22, 23, 25, 26, 27

  ⚠️ **Vorsicht** (haben spezielle Funktionen beim Booten):
  - GPIO 0, 2, 5, 12, 15 (können Boot-Probleme verursachen)
  - GPIO 6-11 (für Flash-Speicher, nicht verwendbar)

  ---

  ## 🔍 Encoder-Pin-Identifikation

  Falls dein Encoder nicht beschriftet ist, hier die typische Belegung:

  ### KY-040 Rotary Encoder (5 Pins):
  ```
       ┌─────────┐
       │  [Knopf]│
       │         │
    ┌──┤ 1   2   ├──┐
    │  │         │  │
    │  │    O    │  │
    │  │         │  │
    └──┤ 3   4   ├──┘
       │         │
       └─────────┘
       5 (unten)

  Pin 1: VCC (meist links oben)
  Pin 2: GND (meist rechts oben)
  Pin 3: CLK/B (meist links unten)
  Pin 4: DT/A (meist rechts unten)
  Pin 5: SW (Button, meist unten mittig)
  ```

  ### Andere Encoder:
  - **CLK/CLOCK** = Pin B → GPIO 19
  - **DT/DATA** = Pin A → GPIO 18
  - **SW/SWITCH** = Button → GPIO 5

  ---

  ## ⚡ Stromversorgung

  ### Option 1: USB + Externe 5V (Empfohlen)
  ```
  USB-Kabel → ESP32 (für Programmierung & ESP32-Stromversorgung)
  Externe 5V PSU → LED-Streifen (für LED-Stromversorgung)
  GND verbinden (gemeinsame Masse!)
  ```

  ### Option 2: Nur USB (nur für wenige LEDs!)
  ⚠️ **Nur für Tests mit wenigen LEDs (<10 LEDs)**
  - ESP32 über USB versorgen
  - LED-Streifen direkt an ESP32 5V (nicht empfohlen!)

  ### Empfohlene externe Stromversorgung:
  - **5V Netzteil** mit mindestens 3-5A (für 60 LEDs)
  - **5V Step-Down Converter** (z.B. LM2596) wenn du 12V/24V hast
  - **USB Power Bank** (5V, mindestens 2A) für mobile Projekte

  ---

  ## ✅ Checkliste vor dem ersten Start

  - [ ] Rotary Encoder korrekt angeschlossen (VCC, GND, A, B, Button)
  - [ ] LED-Streifen DIN an GPIO 2
  - [ ] LED-Streifen GND an ESP32 GND
  - [ ] LED-Streifen 5V an externe Stromversorgung
  - [ ] Alle GND-Leitungen verbunden (gemeinsame Masse!)
  - [ ] Externe Stromversorgung angeschlossen (wenn viele LEDs)
  - [ ] ESP32 über USB verbunden
  - [ ] Firmware geflasht (siehe README.md)

  ---

  ## 🐛 Troubleshooting

  ### Encoder reagiert nicht
  - ✅ Prüfe alle Verbindungen (VCC, GND, A, B)
  - ✅ Prüfe ob Pull-Up Widerstände aktiv sind (sind im Code aktiviert)
  - ✅ Teste mit Multimeter: Pin A und B sollten beim Drehen wechseln

  ### LEDs leuchten nicht
  - ✅ Prüfe DIN-Verbindung zu GPIO 2
  - ✅ Prüfe GND-Verbindung (gemeinsame Masse!)
  - ✅ Prüfe Stromversorgung (externe 5V?)
  - ✅ Prüfe LED-Anzahl in main.cpp (`NUM_LEDS`)
  - ✅ Prüfe LED-Typ in main.cpp (`LED_TYPE`, `COLOR_ORDER`)

  ### Button funktioniert nicht
  - ✅ Prüfe Button-Pin Verbindung (GPIO 5)
  - ✅ Prüfe ob Button-Pin in Code auf -1 gesetzt ist (wenn nicht verwendet)
  - ✅ Teste mit Multimeter: Pin sollte auf LOW gehen beim Drücken

  ### ESP32 startet nicht
  - ✅ Prüfe USB-Verbindung
  - ✅ Prüfe ob Boot-Pins (GPIO 0, 2) nicht belegt sind
  - ✅ Halte BOOT-Button beim Start gedrückt (falls nötig)

  ---

  ## 📸 Beispiel-Aufbau (Breadboard)

  ```
  ESP32                    Rotary Encoder          LED-Streifen
  ┌─────────┐              ┌─────────┐            ┌─────────┐
  │ 3.3V ───┼──────────────┤ VCC     │            │         │
  │ GND  ───┼──────────────┤ GND     │            │ GND  ────┼── GND
  │ GPIO2 ──┼──────────────┼─────────┼────────────┤ DIN     │
  │ GPIO5 ──┼──────────────┤ SW      │            │         │
  │ GPIO18 ─┼──────────────┤ DT/A    │            │ 5V  ────┼── Externe 5V
  │ GPIO19 ─┼──────────────┤ CLK/B   │            │         │
  └─────────┘              └─────────┘            └─────────┘
  ```

  ---

  ## 🔗 Nützliche Links

  - [ESP32 Pinout Reference](https://randomnerdtutorials.com/esp32-pinout-reference-gpios/)
  - [FastLED Documentation](https://fastled.io/)
  - [Rotary Encoder Tutorial](https://lastminuteengineers.com/rotary-encoder-arduino-tutorial/)

  ---

  **Viel Erfolg beim Aufbau!** 🔧✨


document_id: ESP32
created_at: 2025-11-17 08:52:54
content:
  # 🔌 Aufbauanleitung - ESP32 Rotary Encoder LED Controller

  ## 📋 Benötigte Hardware

  - **ESP32 Development Board** (z.B. ESP32-DevKitC)
  - **Rotary Encoder** (z.B. KY-040 oder ähnlich)
  - **RGBW LED-Streifen** (WS2812B oder SK6812)
  - **Externe 5V Stromversorgung** für LED-Streifen (wichtig!)
  - **USB-Kabel** für ESP32 (Programmierung & Stromversorgung)
  - **Jumper-Kabel** für Verbindungen
  - **Breadboard** (optional, für Testaufbau)

  ---

  ## 🔌 Pin-Belegung

  ### Standard-Konfiguration (kann in main.cpp geändert werden):

  | Komponente | Pin-Name | ESP32 GPIO | Beschreibung |
  |------------|----------|------------|--------------|
  | **LED-Streifen** | DIN (Data) | **GPIO 2** | Datenleitung zum LED-Streifen |
  | **Rotary Encoder** | Pin A (DT) | **GPIO 18** | Encoder Signal A |
  | **Rotary Encoder** | Pin B (CLK) | **GPIO 19** | Encoder Signal B |
  | **Rotary Encoder** | Button (SW) | **GPIO 5** | Encoder-Button (optional) |
  | **Rotary Encoder** | VCC | **3.3V** | Versorgungsspannung |
  | **Rotary Encoder** | GND | **GND** | Masse |

  ---

  ## 📐 Aufbau-Schema

  ```
  ┌─────────────────────────────────────────────────────────┐
  │                    ESP32 Board                          │
  │                                                         │
  │  ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐         │
  │  │ 3.3V│  │ GND │  │ GPIO│  │ GPIO│  │ GPIO│         │
  │  │     │  │     │  │  2  │  │  5  │  │ 18  │         │
  │  └──┬──┘  └──┬──┘  └──┬──┘  └──┬──┘  └──┬──┘         │
  │     │        │        │        │        │             │
  │     │        │        │        │        │             │
  └─────┼────────┼────────┼────────┼────────┼─────────────┘
        │        │        │        │        │
        │        │        │        │        │
        │        │        │        │        │
  ┌─────▼────────▼────────▼────────▼────────▼─────────────┐
  │              Rotary Encoder (KY-040)                    │
  │                                                         │
  │         ┌──────────────┐                              │
  │         │   [Encoder]   │                              │
  │         │               │                              │
  │    VCC──┤ 1           6 ├──GND                         │
  │         │               │                              │
  │  GPIO18─┤ 2 (DT/A)   5 ├──NC (nicht verwendet)        │
  │         │               │                              │
  │  GPIO19─┤ 3 (CLK/B)  4 ├──GPIO5 (Button/SW)            │
  │         └──────────────┘                              │
  │                                                         │
  └─────────────────────────────────────────────────────────┘

  ┌─────────────────────────────────────────────────────────┐
  │              LED-Streifen (WS2812B/SK6812)             │
  │                                                         │
  │  ┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐               │
  │  │ 5V   │  │ GND  │  │ DIN  │  │ DOUT │               │
  │  └──┬───┘  └──┬───┘  └──┬───┘  └──┬───┘               │
  │     │         │         │         │                    │
  │     │         │         │         │                    │
  │  Externe      │      GPIO2        │                    │
  │  5V PSU       │         │         │                    │
  │     │         │         │         │                    │
  │     │         │         │         │                    │
  │  ┌──▼─────────▼─────────▼─────────▼──────────┐       │
  │  │  [LED 1] → [LED 2] → [LED 3] → ... → [LED N]│       │
  │  └─────────────────────────────────────────────┘       │
  │                                                         │
  └─────────────────────────────────────────────────────────┘
  ```

  ---

  ## 🔧 Schritt-für-Schritt Anleitung

  ### Schritt 1: Rotary Encoder anschließen

  1. **VCC** des Encoders → **3.3V** am ESP32
  2. **GND** des Encoders → **GND** am ESP32
  3. **Pin A (DT)** des Encoders → **GPIO 18** am ESP32
  4. **Pin B (CLK)** des Encoders → **GPIO 19** am ESP32
  5. **Button Pin (SW)** des Encoders → **GPIO 5** am ESP32 (optional)

  > **Hinweis**: Die meisten Rotary Encoder haben 5 Pins. Die Belegung kann je nach Modell variieren. Prüfe das Datenblatt deines Encoders!

  ### Schritt 2: LED-Streifen anschließen

  ⚠️ **WICHTIG**: LED-Streifen benötigen viel Strom! Verwende eine **externe 5V-Stromversorgung**!

  1. **DIN (Data In)** des LED-Streifens → **GPIO 2** am ESP32
  2. **GND** des LED-Streifens → **GND** am ESP32 (gemeinsam mit ESP32 GND)
  3. **5V** des LED-Streifens → **Externe 5V Stromversorgung** (NICHT ESP32 5V!)
  4. **GND** der externen Stromversorgung → **GND** am ESP32 (gemeinsame Masse!)

  > **Stromversorgung**: 
  > - Einzelne LED: ~60mA bei voller Helligkeit
  > - 60 LEDs: ~3.6A bei voller Helligkeit
  > - ESP32 kann nur ~500mA liefern → **Externe Stromversorgung ist Pflicht!**

  ### Schritt 3: Gemeinsame Masse (GND)

  **Sehr wichtig**: Alle GND-Leitungen müssen verbunden sein:
  - ESP32 GND
  - Rotary Encoder GND
  - LED-Streifen GND
  - Externe 5V Stromversorgung GND

  ---

  ## 📍 Alternative Pin-Belegungen

  Falls die Standard-Pins belegt sind, kannst du in `src/main.cpp` ändern:

  ```cpp
  // LED-Streifen
  #define LED_PIN 2              // Ändere hier (z.B. 4, 12, 13, 14, 15, 16, 17, 21, 22, 23, 25, 26, 27)

  // Rotary Encoder
  #define ENCODER_PIN_A 18       // Ändere hier
  #define ENCODER_PIN_B 19       // Ändere hier
  #define ENCODER_BUTTON_PIN 5   // Ändere hier (oder -1 wenn nicht verwendet)
  ```

  ### Empfohlene alternative GPIO-Pins für ESP32:

  ✅ **Gut geeignet** (keine speziellen Funktionen):
  - GPIO 4, 12, 13, 14, 15, 16, 17, 21, 22, 23, 25, 26, 27

  ⚠️ **Vorsicht** (haben spezielle Funktionen beim Booten):
  - GPIO 0, 2, 5, 12, 15 (können Boot-Probleme verursachen)
  - GPIO 6-11 (für Flash-Speicher, nicht verwendbar)

  ---

  ## 🔍 Encoder-Pin-Identifikation

  Falls dein Encoder nicht beschriftet ist, hier die typische Belegung:

  ### KY-040 Rotary Encoder (5 Pins):
  ```
       ┌─────────┐
       │  [Knopf]│
       │         │
    ┌──┤ 1   2   ├──┐
    │  │         │  │
    │  │    O    │  │
    │  │         │  │
    └──┤ 3   4   ├──┘
       │         │
       └─────────┘
       5 (unten)

  Pin 1: VCC (meist links oben)
  Pin 2: GND (meist rechts oben)
  Pin 3: CLK/B (meist links unten)
  Pin 4: DT/A (meist rechts unten)
  Pin 5: SW (Button, meist unten mittig)
  ```

  ### Andere Encoder:
  - **CLK/CLOCK** = Pin B → GPIO 19
  - **DT/DATA** = Pin A → GPIO 18
  - **SW/SWITCH** = Button → GPIO 5

  ---

  ## ⚡ Stromversorgung

  ### Option 1: USB + Externe 5V (Empfohlen)
  ```
  USB-Kabel → ESP32 (für Programmierung & ESP32-Stromversorgung)
  Externe 5V PSU → LED-Streifen (für LED-Stromversorgung)
  GND verbinden (gemeinsame Masse!)
  ```

  ### Option 2: Nur USB (nur für wenige LEDs!)
  ⚠️ **Nur für Tests mit wenigen LEDs (<10 LEDs)**
  - ESP32 über USB versorgen
  - LED-Streifen direkt an ESP32 5V (nicht empfohlen!)

  ### Empfohlene externe Stromversorgung:
  - **5V Netzteil** mit mindestens 3-5A (für 60 LEDs)
  - **5V Step-Down Converter** (z.B. LM2596) wenn du 12V/24V hast
  - **USB Power Bank** (5V, mindestens 2A) für mobile Projekte

  ---

  ## ✅ Checkliste vor dem ersten Start

  - [ ] Rotary Encoder korrekt angeschlossen (VCC, GND, A, B, Button)
  - [ ] LED-Streifen DIN an GPIO 2
  - [ ] LED-Streifen GND an ESP32 GND
  - [ ] LED-Streifen 5V an externe Stromversorgung
  - [ ] Alle GND-Leitungen verbunden (gemeinsame Masse!)
  - [ ] Externe Stromversorgung angeschlossen (wenn viele LEDs)
  - [ ] ESP32 über USB verbunden
  - [ ] Firmware geflasht (siehe README.md)

  ---

  ## 🐛 Troubleshooting

  ### Encoder reagiert nicht
  - ✅ Prüfe alle Verbindungen (VCC, GND, A, B)
  - ✅ Prüfe ob Pull-Up Widerstände aktiv sind (sind im Code aktiviert)
  - ✅ Teste mit Multimeter: Pin A und B sollten beim Drehen wechseln

  ### LEDs leuchten nicht
  - ✅ Prüfe DIN-Verbindung zu GPIO 2
  - ✅ Prüfe GND-Verbindung (gemeinsame Masse!)
  - ✅ Prüfe Stromversorgung (externe 5V?)
  - ✅ Prüfe LED-Anzahl in main.cpp (`NUM_LEDS`)
  - ✅ Prüfe LED-Typ in main.cpp (`LED_TYPE`, `COLOR_ORDER`)

  ### Button funktioniert nicht
  - ✅ Prüfe Button-Pin Verbindung (GPIO 5)
  - ✅ Prüfe ob Button-Pin in Code auf -1 gesetzt ist (wenn nicht verwendet)
  - ✅ Teste mit Multimeter: Pin sollte auf LOW gehen beim Drücken

  ### ESP32 startet nicht
  - ✅ Prüfe USB-Verbindung
  - ✅ Prüfe ob Boot-Pins (GPIO 0, 2) nicht belegt sind
  - ✅ Halte BOOT-Button beim Start gedrückt (falls nötig)

  ---

  ## 📸 Beispiel-Aufbau (Breadboard)

  ```
  ESP32                    Rotary Encoder          LED-Streifen
  ┌─────────┐              ┌─────────┐            ┌─────────┐
  │ 3.3V ───┼──────────────┤ VCC     │            │         │
  │ GND  ───┼──────────────┤ GND     │            │ GND  ────┼── GND
  │ GPIO2 ──┼──────────────┼─────────┼────────────┤ DIN     │
  │ GPIO5 ──┼──────────────┤ SW      │            │         │
  │ GPIO18 ─┼──────────────┤ DT/A    │            │ 5V  ────┼── Externe 5V
  │ GPIO19 ─┼──────────────┤ CLK/B   │            │         │
  └─────────┘              └─────────┘            └─────────┘
  ```

  ---

  ## 🔗 Nützliche Links

  - [ESP32 Pinout Reference](https://randomnerdtutorials.com/esp32-pinout-reference-gpios/)
  - [FastLED Documentation](https://fastled.io/)
  - [Rotary Encoder Tutorial](https://lastminuteengineers.com/rotary-encoder-arduino-tutorial/)

  ---

  **Viel Erfolg beim Aufbau!** 🔧✨




  # Firmware Installation - ESP32 Rotary LED Controller

  Diese Anleitung erklärt, wie Sie die Firmware auf den ESP32 installieren können.

  ## Voraussetzungen

  ### Option 1: PlatformIO (Empfohlen für Entwickler)
  - **PlatformIO** installiert (über VS Code Extension oder CLI)
  - **Python** installiert (für PlatformIO)
  - USB-Kabel zum Verbinden des ESP32

  ### Option 2: ESP32 Flash Tool (Einfach für Endbenutzer)
  - **ESP32 Flash Download Tools** (von Espressif)
  - Oder **esptool.py** (Python-basiert)
  - USB-Kabel zum Verbinden des ESP32

  ---

  ## Methode 1: Installation mit PlatformIO (Empfohlen)

  ### Schritt 1: Projekt öffnen
  1. Öffnen Sie das Projekt-Verzeichnis in VS Code mit PlatformIO
  2. Oder navigieren Sie im Terminal zum Projekt-Verzeichnis:
     ```bash
     cd "c:\Users\keanu\Desktop\No Enter\WLED Drehgeber Dokumentation\ESP32_Rotary_LED"
     ```

  ### Schritt 2: ESP32 verbinden
  1. Verbinden Sie den ESP32 mit einem USB-Kabel zum Computer
  2. Notieren Sie sich den COM-Port (z.B. COM4, COM3, etc.)
     - Windows: Geräte-Manager → COM & LPT Ports
     - Oder PlatformIO erkennt den Port automatisch

  ### Schritt 3: Firmware kompilieren und hochladen
  ```bash
  # Mit PlatformIO CLI:
  python -m platformio run -t upload

  # Oder in VS Code:
  # Klicken Sie auf "Upload" in der PlatformIO Toolbar
  ```

  ### Schritt 4: Verifizierung
  - Nach erfolgreichem Upload sollte der ESP32 automatisch neu starten
  - Die LEDs sollten kurz weiß aufblinken (Start-Test)
  - Der Rotary Encoder sollte jetzt funktionieren

  ---

  ## Methode 2: Installation mit ESP32 Flash Download Tools

  ### Schritt 1: Tools herunterladen
  1. Laden Sie **ESP32 Flash Download Tools** von Espressif herunter:
     - https://www.espressif.com/en/support/download/other-tools
     - Oder verwenden Sie **esptool.py** (Python)

  ### Schritt 2: ESP32 verbinden
  1. Verbinden Sie den ESP32 mit USB
  2. Notieren Sie sich den COM-Port

  ### Schritt 3: Firmware flashen mit esptool.py

  #### Installation von esptool.py:
  ```bash
  pip install esptool
  ```

  #### Firmware flashen:
  ```bash
  # Navigieren Sie zum Projekt-Verzeichnis
  cd "c:\Users\keanu\Desktop\No Enter\WLED Drehgeber Dokumentation\ESP32_Rotary_LED"

  # Firmware flashen (ersetzen Sie COM4 mit Ihrem Port)
  esptool.py --chip esp32 --port COM4 write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 .pio\build\esp32dev\bootloader.bin 0x8000 .pio\build\esp32dev\partitions.bin 0xe000 boot_app0.bin 0x10000 .pio\build\esp32dev\firmware.bin
  ```

  **Oder einfacher - nur Firmware aktualisieren (wenn Bootloader bereits installiert):**
  ```bash
  esptool.py --chip esp32 --port COM4 write_flash 0x10000 firmware.bin
  ```

  ---

  ## Methode 3: Installation mit vorgefertigtem Image (firmware.bin)

  ### Schritt 1: Firmware-Datei
  - Die Datei `firmware.bin` befindet sich im Projekt-Verzeichnis
  - Diese Datei enthält die komplette, kompilierte Firmware

  ### Schritt 2: Mit esptool.py flashen
  ```bash
  # Installieren Sie esptool.py falls noch nicht vorhanden:
  pip install esptool

  # Firmware flashen (ersetzen Sie COM4 mit Ihrem Port):
  esptool.py --chip esp32 --port COM4 write_flash 0x10000 firmware.bin
  ```

  ### Schritt 3: Mit ESP32 Flash Download Tools
  1. Öffnen Sie **ESP32 Flash Download Tools**
  2. Wählen Sie:
     - **ChipType**: ESP32
     - **WorkMode**: develop
     - **LoadMode**: uart
  3. Konfigurieren Sie die Flash-Parameter:
     - **SPI SPEED**: 40MHz
     - **SPI MODE**: DIO
     - **FLASH SIZE**: 4MB (oder passend zu Ihrem ESP32)
  4. Fügen Sie die Firmware hinzu:
     - **0x10000**: `firmware.bin`
  5. Klicken Sie auf **START** und warten Sie, bis der Flash-Vorgang abgeschlossen ist

  ---

  ## Fehlerbehebung

  ### Problem: "Port nicht gefunden"
  - **Lösung**: Überprüfen Sie, ob der ESP32 richtig verbunden ist
  - Installieren Sie die USB-Treiber für den ESP32 (CH340, CP2102, etc.)
  - Prüfen Sie den Geräte-Manager auf den COM-Port

  ### Problem: "Failed to connect"
  - **Lösung**: Halten Sie den **BOOT-Button** gedrückt, während Sie den Upload starten
  - Bei manchen ESP32-Boards muss der BOOT-Button während des gesamten Uploads gedrückt bleiben

  ### Problem: "Permission denied" (Linux/Mac)
  - **Lösung**: Fügen Sie Ihren Benutzer zur `dialout` Gruppe hinzu:
    ```bash
    sudo usermod -a -G dialout $USER
    # Danach neu einloggen
    ```

  ### Problem: "Flash write error"
  - **Lösung**: 
    - Reduzieren Sie die Baudrate: `--baud 115200`
    - Verwenden Sie ein anderes USB-Kabel (Datenkabel, nicht nur Ladekabel)
    - Halten Sie den BOOT-Button während des Uploads gedrückt

  ### Problem: Firmware startet nicht
  - **Lösung**: 
    - Drücken Sie den **RESET-Button** auf dem ESP32
    - Überprüfen Sie die Verkabelung (siehe `VERKABELUNG_RGBWW.md`)
    - Stellen Sie sicher, dass die LED-Streifen richtig angeschlossen sind

  ---

  ## Firmware-Informationen

  - **Chip**: ESP32-D0WD-V3
  - **Flash-Size**: 4MB (konfigurierbar)
  - **Baudrate**: 921600 (Upload), 115200 (Serial Monitor)
  - **Framework**: Arduino (ESP32)
  - **LED-Library**: Adafruit NeoPixel
  - **LED-Typ**: SK6812 RGBWW
  - **Anzahl LEDs**: 60 (konfigurierbar in `src/main.cpp`)

  ---

  ## Nach der Installation

  1. **Verkabelung prüfen**: Siehe `VERKABELUNG_RGBWW.md`
  2. **Funktionstest**:
     - Kurzer Button-Klick: Modus wechseln (RGB Farbe → RGB Helligkeit → Weiß Helligkeit)
     - Encoder drehen: Parameter ändern
     - Längerer Button-Klick: Ein/Aus schalten

  3. **Konfiguration anpassen** (optional):
     - Anzahl LEDs: `NUM_LEDS` in `src/main.cpp`
     - Pin-Belegung: `ENCODER_PIN_A`, `ENCODER_PIN_B`, `LED_PIN` in `src/main.cpp`
     - Geschwindigkeit: `HUE_FADE_AMOUNT`, `MASTER_BRIGHTNESS_FADE_AMOUNT` in `src/main.cpp`

  ---

  ## Support

  Bei Problemen:
  1. Überprüfen Sie die Verkabelung (`VERKABELUNG_RGBWW.md`)
  2. Überprüfen Sie die Pin-Belegung (`PIN_BELEGUNG.md`)
  3. Testen Sie die Hardware-Komponenten einzeln
  4. Überprüfen Sie die Serial-Ausgabe (falls aktiviert) für Fehlermeldungen

  ---

  **Viel Erfolg mit Ihrem ESP32 Rotary LED Controller!** 🎨✨


