485 lines
184 KiB
Plaintext
Executable File
485 lines
184 KiB
Plaintext
Executable File
a:6:{s:5:"child";a:1:{s:0:"";a:1:{s:3:"rss";a:1:{i:0;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:1:{s:7:"version";s:3:"2.0";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:1:{s:0:"";a:1:{s:7:"channel";a:1:{i:0;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:2:{s:0:"";a:8:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:5:"Noted";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:76:"Maximize Your Homelab Potential with Self-Hosting and Open-Source Solutions.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:18:"https://noted.lol/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:5:"image";a:1:{i:0;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:1:{s:0:"";a:3:{s:3:"url";a:1:{i:0;a:5:{s:4:"data";s:29:"https://noted.lol/favicon.png";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:5:"Noted";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:18:"https://noted.lol/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}}s:9:"generator";a:1:{i:0;a:5:{s:4:"data";s:10:"Ghost 5.88";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:13:"lastBuildDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Sun, 20 Oct 2024 11:53:01 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:3:"ttl";a:1:{i:0;a:5:{s:4:"data";s:2:"60";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"item";a:15:{i:0;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:43:"Obsidian Meets Ollama: Write Faster, Better";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:158:"The world is changing fast, and writing tools are keeping pace. AI-powered helpers are becoming more common, making it easier to put your thoughts into words.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:47:"https://noted.lol/obsidian-companion-ai-plugin/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"66f851f54fc4690001735d34";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:28:"Self Hosted Note Taking apps";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Thu, 17 Oct 2024 17:31:19 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:69:"https://noted.lol/content/images/2024/10/obsidian-companion-noted.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:7156:"<img src="https://noted.lol/content/images/2024/10/obsidian-companion-noted.jpg" alt="Obsidian Meets Ollama: Write Faster, Better"><p>As a student, writer, or simply someone who likes to stay organized, note-taking is an essential skill. With the rise of digital tools, we now have access to numerous apps and plugins that can help us take notes more efficiently. In this article, we'll explore how Obsidian, a popular note-taking app, and its Companion plugin powered by Ollama, can revolutionize your note-taking experience.</p><h2 id="what-is-obsidian"><strong>What is Obsidian?</strong></h2><p><a href="https://obsidian.md/?ref=noted.lol">Obsidian</a> is designed to help users organize their thoughts, ideas, and knowledge in a structured yet flexible way. With Obsidian, you can create notes, link them together, and use tags to categorize your content. The app is available for Windows, macOS, Linux, and mobile devices.</p><h2 id="introducing-the-companion-plugin"><strong>Introducing the Companion Plugin</strong></h2><p><a href="https://github.com/rizerphe/obsidian-companion?ref=noted.lol">Companion</a>'s autocomplete feature is subtle yet helpful. Suggestions appear in ghost text, giving you the freedom to accept or ignore them as needed. It works similarly to <a href="https://github.com/features/copilot?ref=noted.lol">GitHub Copilot</a>.</p><p>By using Companion, you can write notes more efficiently and effectively. If you're a student, researcher, or knowledge worker looking to boost your productivity and creativity, Companion might be worth checking out.</p><h3 id="how-does-it-work"><strong>How Does it Work?</strong></h3><p>Here's how Companion works:</p><ol><li><strong>Note Creation </strong>: You create a new note in Obsidian.</li><li><strong>Companion Activation </strong>: You toggle on the Companion plugin for that specific note by pressing Ctrl + P then searching "Companion: Toggle completion".</li><li><strong>Typing Begins </strong>: As you start typing, Companion kicks in and suggests relevant content. If you like what you see, just hit tab to use the suggested text and continue working. Otherwise just keep typing as usual!</li></ol><figure class="kg-card kg-image-card"><img src="https://noted.lol/content/images/2024/10/obsidian-companion-noted.gif" class="kg-image" alt="Obsidian Meets Ollama: Write Faster, Better" loading="lazy" width="1137" height="613" srcset="https://noted.lol/content/images/size/w600/2024/10/obsidian-companion-noted.gif 600w, https://noted.lol/content/images/size/w1000/2024/10/obsidian-companion-noted.gif 1000w, https://noted.lol/content/images/2024/10/obsidian-companion-noted.gif 1137w" sizes="(min-width: 720px) 720px"></figure><h3 id="benefits-of-using-companion"><strong>Benefits of Using Companion</strong></h3><p>The benefits of using Companion with Obsidian are numerous:</p><ol><li><strong>Increased Productivity </strong>: With AI-powered autocomplete, you can take notes faster and more efficiently.</li><li><strong>Reduced Duplicates </strong>: Companion helps prevent duplicate notes by suggesting existing content that matches what you're typing.</li><li><strong>Improved Organization </strong>: By linking your notes together and utilizing Ollama's AI capabilities, Companion encourages a structured approach to note-taking.</li></ol><h2 id="ollama-the-power-behind-companion"><strong>Ollama: The Power Behind Companion</strong></h2><p>Ollama is an AI platform designed specifically for knowledge graph applications like Obsidian and the Companion plugin. Its capabilities enable the AI engine to:</p><ol><li><strong>Learn from Your Notes </strong>: Ollama learns from your existing notes, allowing it to suggest relevant content based on context.</li><li><strong>Understand Relationships </strong>: The AI engine understands relationships between notes, enabling seamless linking and organization.</li></ol><h3 id="tips-for-getting-the-most-out-of-companion"><strong>Tips for Getting the Most Out of Companion</strong></h3><p>To maximize the benefits of Companion:</p><ol><li><strong>Use Consistent Tags </strong>: Establish a consistent tagging system to help Companion suggest relevant content powered by Ollama's AI capabilities.</li><li><strong>Link Your Notes </strong>: Create links between related notes to enable seamless navigation and organization enabled by Companion and Ollama.</li></ol><h1 id="installation">Installation</h1><p>Companion is available in the <a href="https://obsidian.md/plugins?id=companion&ref=noted.lol" rel="noopener">Obsidian Community Plugin Directory</a>. Here's how to install it:</p><ol><li>Find <a href="https://obsidian.md/plugins?id=companion&ref=noted.lol" rel="noopener">Companion</a> in the <strong>Community Plugins</strong> settings page in Obsidian.</li><li>Click on the <strong>Install</strong> button next to the Companion plugin.</li><li>Once the installation is complete, you will see a confirmation message in the top right corner of the Obsidian window.</li><li>Finally, enable the Companion plugin by toggling the switch next to its name in the Community Plugins settings page.</li><li>Add your Ollama server URL to the settings.</li><li>To activate the autocomplete feature, open the command palette by pressing <code>Ctrl/Cmd + P</code> and search for "Toggle Completion". Select the command and hit Enter.</li><li>Once a suggestion appears, use the <code>Tab</code> key to accept the next word or sentence.</li></ol><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/10/obsidian-companion-settings-noted.png" class="kg-image" alt="Obsidian Meets Ollama: Write Faster, Better" loading="lazy" width="1078" height="641" srcset="https://noted.lol/content/images/size/w600/2024/10/obsidian-companion-settings-noted.png 600w, https://noted.lol/content/images/size/w1000/2024/10/obsidian-companion-settings-noted.png 1000w, https://noted.lol/content/images/2024/10/obsidian-companion-settings-noted.png 1078w"></figure><p>The 'Accept' option is crucial for getting the tab key to work properly. To do this, you need to click on one of the boxes. I chose "One word at a time" because it seems like the most sensible choice for me.</p><p>User Prompt:</p><pre><code>The following text has been written by the user. You will continue writing the next few words of the text as if you were the original writer. Do not begin the text with '"..." and don't summarize the text.
|
|
{{context}}
|
|
{{last_line}}</code></pre><p>This will tell the script how to complete your sentence or phrases.</p><h2 id="final-notes-and-thoughts"><strong>Final Notes and Thoughts</strong></h2><p>The Obsidian Companion plugin offers a valuable feature set to support your note-taking routine. Its purpose is not to write an entire article, but rather to offer suggestions and guidance, helping you to structure and organize your thoughts. By using this tool effectively, you can simplify your note-taking process and find new ideas.</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:1;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:46:"Whisper WebUI - The Self-Hosted AI Transcriber";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:46:"Transcribe audio to text locally using Whisper";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:32:"https://noted.lol/whisper-webui/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"670fb9dbfe9c21000164aacb";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:20:"Self Hosted AI Tools";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Wed, 16 Oct 2024 15:08:58 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:70:"https://noted.lol/content/images/2024/10/self-hosted-whisper-webui.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:8196:"<img src="https://noted.lol/content/images/2024/10/self-hosted-whisper-webui.jpg" alt="Whisper WebUI - The Self-Hosted AI Transcriber"><p>We've been testing AI tools for self-hosting, and Whisper WebUI is one that's caught our attention. In this article, we'll take a closer look at its features, capabilities, and how it can be used to streamline your workflow.</p><h2 id="what-is-whisper-webui">What is Whisper WebUI?</h2><p><a href="https://github.com/jhj0517/Whisper-WebUI?tab=readme-ov-file&ref=noted.lol">Whisper WebUI</a> is way more than just a subtitle generator, it's a full-fledged content translation tool! With Whisper, you can not only generate subtitles, but also do some really cool stuff like translating audio files, transcribing YouTube videos, and even using your own voice to convert spoken words into text.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/10/whisper-webui-mic-noted.png" class="kg-image" alt="Whisper WebUI - The Self-Hosted AI Transcriber" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/10/whisper-webui-mic-noted.png 600w, https://noted.lol/content/images/size/w1000/2024/10/whisper-webui-mic-noted.png 1000w, https://noted.lol/content/images/size/w1600/2024/10/whisper-webui-mic-noted.png 1600w, https://noted.lol/content/images/2024/10/whisper-webui-mic-noted.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><h3 id="core-features-of-whisper-web-ui"><strong>Core Features of Whisper Web UI</strong></h3><ul><li>Generate subtitles from various sources: files, YouTube, microphone</li><li>Supports multiple subtitle formats: SRT, WebVTT, txt</li><li>Speech-to-text translation and text-to-text translation capabilities</li><li>Pre-processing and post-processing tools for audio input and output</li></ul><h3 id="what-is-whisper">What is Whisper?</h3><p><a href="https://github.com/openai/whisper?ref=noted.lol">Whisper</a> is a multimodal speech recognition model that has been trained on a large and diverse dataset of audio materials. Its architecture enables it to perform multiple linguistic tasks in parallel, including multilingual speech recognition, translation, and language identification.</p><h3 id="what-is-webvtt">What is WebVTT?</h3><p>WebVTT is a format that provides a way to display timed text, such as subtitles or captions, on top of video content. It allows you to define and manipulate these text tracks, which can include information like chapter titles, audio descriptions, and other metadata. The WebVTT API makes it easy to work with this format, enabling features like automatic captioning, easier navigation, and more.</p><h3 id="what-is-srt">What is SRT?</h3><p>SRT stands for SubRip Subtitle file format. It's a widely used format for storing subtitles or captions that are time-aligned with audio or video content.</p><h2 id="install-whisper-webui-using-docker">Install Whisper WebUI using Docker</h2><p>To install Whisper WebUI on your server, use this Docker Compose stack, which makes the process easy to follow. If you're new to self-hosting, don't worry, we have guides available to help you <a href="https://noted.lol/get-started-self-hosting/">get started with self-hosting</a>. For information on the latest features and updates, refer to the <a href="https://github.com/jhj0517/Whisper-WebUI?ref=noted.lol">Whisper WebUI Github</a>.</p><pre><code class="language-YAML">services:
|
|
app:
|
|
# build: .
|
|
image: jhj0517/whisper-webui:latest
|
|
|
|
volumes:
|
|
# Update paths to mount models and output paths to your custom paths like this, e.g:
|
|
# - C:/whisper-models/custom-path:/Whisper-WebUI/models
|
|
# - C:/whisper-webui-outputs/custom-path:/Whisper-WebUI/outputs
|
|
- /Whisper-WebUI:/Whisper-WebUI/models
|
|
- /Whisper-WebUI:/Whisper-WebUI/outputs
|
|
|
|
ports:
|
|
- "7860:7860"
|
|
|
|
stdin_open: true
|
|
tty: true
|
|
|
|
entrypoint: ["python", "app.py", "--server_port", "7860", "--server_name", "0.0.0.0",]
|
|
|
|
# If you're not using nvidia GPU, Update device to match yours.
|
|
# See more info at : https://docs.docker.com/compose/compose-file/deploy/#driver
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
devices:
|
|
- driver: nvidia
|
|
count: all
|
|
capabilities: [ gpu ]</code></pre><p>This particular stack will utilize your NVIDIA GPU. If you do not have a GPU, please modify the stack above to use your CPU. I have an NVIDIA 2080ti.</p><p>The first time you run Whisper WebUI it will take a while to download the Whisper model used for transcription. Using the default settings below, it will download the Whisper large-v2 model so it may take a couple minutes to download the 2.8GB file.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/10/whisper-webui-self-hosted-transcoding.png" class="kg-image" alt="Whisper WebUI - The Self-Hosted AI Transcriber" loading="lazy" width="1473" height="114" srcset="https://noted.lol/content/images/size/w600/2024/10/whisper-webui-self-hosted-transcoding.png 600w, https://noted.lol/content/images/size/w1000/2024/10/whisper-webui-self-hosted-transcoding.png 1000w, https://noted.lol/content/images/2024/10/whisper-webui-self-hosted-transcoding.png 1473w" sizes="(min-width: 1200px) 1200px"></figure><p>Running this on my NVIDIA 2080ti with 11GB of VRAM, the complete VRAM used was ~4GB on the larg-v2 model. It took 23 seconds to complete a transcription on a 6 minute YouTube video. Not bad!</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/10/whisper-webui-nvidia.png" class="kg-image" alt="Whisper WebUI - The Self-Hosted AI Transcriber" loading="lazy" width="759" height="67" srcset="https://noted.lol/content/images/size/w600/2024/10/whisper-webui-nvidia.png 600w, https://noted.lol/content/images/2024/10/whisper-webui-nvidia.png 759w"></figure><p>No additional configuration is required, however, some users may find value in adjusting some of the settings to further customize their subtitle generation process.</p><p>When using Whisper WebUI with its tiny model, I obtained very similar results to those achieved with the larger model, despite the much shorter processing time. There was no noticeable improvement in the transcript's accuracy or quality, which was an interesting observation. Perhaps with longer videos it may be more noticeable.</p><h2 id="adding-models-from-hugging-face">Adding Models from Hugging Face</h2><p>If you want to add more models to use from Hugging Face, you can do so by following this folder format.</p><p>The model should work fine if you place the model files (including metadata files) in the <code>Whisper-WebUI\models\Whisper\faster-whisper</code>.</p><p>This is an example directory structure for the <a href="https://huggingface.co/deepdml/faster-whisper-large-v3-turbo-ct2/tree/main?ref=noted.lol" rel="nofollow"><code>faster-whisper-large-v3-turbo-ct2</code></a> :</p><figure class="kg-card kg-image-card"><img src="https://noted.lol/content/images/2024/10/whisper-webui-model-folder-format.png" class="kg-image" alt="Whisper WebUI - The Self-Hosted AI Transcriber" loading="lazy" width="524" height="383"></figure><h2 id="final-notes-and-thoughts">Final Notes and Thoughts</h2><p>Before using Whisper WebUI with your microphone, ensure you're using a secure connection in your browser. A standard local connection may not work, so consider using a reverse proxy or Cloudflare tunnel instead. While this will enable audio input, please be aware that Whisper WebUI does not have built-in authentication measures, which means exposing it to the public could pose security risks.</p><p>Swing by the Whisper <a href="https://github.com/jhj0517/Whisper-WebUI?ref=noted.lol">WebUI GitHub repo</a> and give it a star. If you have questions or would like to suggest new features, visit the issue tracker to get involved. Your feedback is important in helping to improve the project!</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:2;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:46:"FileFlows - Self-Hosted Media Conversion Guide";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:88:"Save Massive Amounts of Disk Space using the Self-Hosted FileFlows to Convert your Media";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:28:"https://noted.lol/fileflows/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"66fa8eb64fc4690001735da0";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:27:"Self Hosted File Conversion";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:12:"Self Hosting";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Tue, 01 Oct 2024 19:31:25 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:65:"https://noted.lol/content/images/2024/10/fileflows-main-noted.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:24734:"<img src="https://noted.lol/content/images/2024/10/fileflows-main-noted.jpg" alt="FileFlows - Self-Hosted Media Conversion Guide"><p>You probably know how fast media files can take up space on your computer. If left unchecked, they can quickly fill up your drives and leave you running out of room. FileFlows helps by compressing those files without sacrificing too much quality, freeing up some space for you.</p><h2 id="what-is-fileflows">What is FileFlows?</h2><p>With <a href="https://github.com/revenz/FileFlows?ref=noted.lol">FileFlows</a>, you can manage all sorts of files. Videos, music, pictures, documents, even comics and e-books. It's designed to handle whatever type of file you need to process or monitor.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/10/fileflows-dashboard.png" class="kg-image" alt="FileFlows - Self-Hosted Media Conversion Guide" loading="lazy" width="1904" height="875" srcset="https://noted.lol/content/images/size/w600/2024/10/fileflows-dashboard.png 600w, https://noted.lol/content/images/size/w1000/2024/10/fileflows-dashboard.png 1000w, https://noted.lol/content/images/size/w1600/2024/10/fileflows-dashboard.png 1600w, https://noted.lol/content/images/2024/10/fileflows-dashboard.png 1904w" sizes="(min-width: 1200px) 1200px"></figure><p>I am using Pop-OS as a server to host my media. This is a glorified version of Ubuntu with NVIDIA drivers baked in. Let's get started installing FileFlows!</p><h2 id="installing-the-nvidia-container-toolkit">Installing the NVIDIA Container Toolkit</h2><p>First you should make sure you have the NVIDIA Container Toolkit installed on your system. This allows Docker to use your GPU.</p><pre><code># Add the package repositories
|
|
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
|
|
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
|
|
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
|
|
|
|
$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
|
|
$ sudo systemctl restart docker</code></pre><h2 id="install-fileflows-using-docker-compose">Install FileFlows using Docker Compose</h2><p>I installed FileFlows on my server using Docker Compose. If you need help installing Docker and want to learn more about how self-hosting with Docker works, please see our <a href="https://noted.lol/get-started-self-hosting/">getting started with self-hosting guides</a>.</p><p>This is a Docker Compose with NVIDIA support.</p><pre><code>services:
|
|
fileflows:
|
|
image: revenz/fileflows
|
|
restart: unless-stopped
|
|
ports:
|
|
- "19200:5000"
|
|
environment:
|
|
- TZ=America/Denver
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
|
|
- NVIDIA_VISIBLE_DEVICES=all
|
|
volumes:
|
|
- /mnt/media/TV:/TV-Shows
|
|
- /mnt/media/Movies:/Movies
|
|
- /mnt/media/Youtube:/Youtube
|
|
- /docker/fileflows:/app/Data
|
|
- /mnt/downloads:/temp
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
devices:
|
|
- driver: nvidia
|
|
count: 1
|
|
capabilities: [gpu]</code></pre><p>Change the port, environments and volumes as you need.</p><div class="kg-card kg-callout-card kg-callout-card-accent"><div class="kg-callout-emoji">💡</div><div class="kg-callout-text">Note: We are assuming you are installing FileFlows on the same system where your media files are located. That being said, we will not be utilizing nodes in this guide.</div></div><h2 id="getting-started-with-fileflows">Getting started with FileFlows</h2><p>The first thing you run into when launching FileFlows is adding plugins. These are the tools needed to do that tasks you want to do. You will want the following plugins enabled.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/10/fileflows-plugins-noted.png" class="kg-image" alt="FileFlows - Self-Hosted Media Conversion Guide" loading="lazy" width="1920" height="416" srcset="https://noted.lol/content/images/size/w600/2024/10/fileflows-plugins-noted.png 600w, https://noted.lol/content/images/size/w1000/2024/10/fileflows-plugins-noted.png 1000w, https://noted.lol/content/images/size/w1600/2024/10/fileflows-plugins-noted.png 1600w, https://noted.lol/content/images/2024/10/fileflows-plugins-noted.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><ul>
|
|
<li>Audio</li>
|
|
<li>Video</li>
|
|
<li>Basic</li>
|
|
</ul>
|
|
<h2 id="adding-a-flow-in-fileflows">Adding a Flow in FileFlows</h2><p>FileFlows provides a powerful flow system that allows users to create custom processing flows using JavaScript or <a href="https://github.com/revenz/FileFlowsRepository?ref=noted.lol">community-developed scripts</a>. This flexibility enables you to tailor your workflow to specific needs and applications.</p><p>Here is a look at the Flow I am using:</p><pre><code>{
|
|
"Name": "Convert to H265",
|
|
"Type": 0,
|
|
"Revision": 16,
|
|
"Properties": {
|
|
"Fields": [],
|
|
"Variables": {}
|
|
},
|
|
"Parts": [
|
|
{
|
|
"Uid": "38e76a25-9abf-4adb-988b-f016b6161e95",
|
|
"Name": "",
|
|
"ReadOnly": false,
|
|
"FlowElementUid": "FileFlows.VideoNodes.VideoFile",
|
|
"xPos": 100,
|
|
"yPos": 90,
|
|
"Icon": "fas fa-video",
|
|
"Label": "",
|
|
"Inputs": 0,
|
|
"Outputs": 1,
|
|
"OutputConnections": [
|
|
{
|
|
"Input": 1,
|
|
"Output": 1,
|
|
"InputNode": "1fcc8f85-ce98-477b-a437-57af4e5ee22e"
|
|
}
|
|
],
|
|
"Type": 0,
|
|
"Model": {
|
|
"ProbeSize": 5
|
|
}
|
|
},
|
|
{
|
|
"Uid": "1fcc8f85-ce98-477b-a437-57af4e5ee22e",
|
|
"Name": "FFMPEG Builder: Start",
|
|
"ReadOnly": false,
|
|
"FlowElementUid": "FileFlows.VideoNodes.FfmpegBuilderNodes.FfmpegBuilderStart",
|
|
"xPos": 100,
|
|
"yPos": 190,
|
|
"Icon": "far fa-file-video",
|
|
"Label": "",
|
|
"Inputs": 1,
|
|
"Outputs": 1,
|
|
"OutputConnections": [
|
|
{
|
|
"Input": 1,
|
|
"Output": 1,
|
|
"InputNode": "e067c437-b482-4e08-86ef-e71587de1228"
|
|
}
|
|
],
|
|
"Type": 4,
|
|
"Model": {}
|
|
},
|
|
{
|
|
"Uid": "e067c437-b482-4e08-86ef-e71587de1228",
|
|
"Name": "FFMPEG Builder: Remux to MP4",
|
|
"ReadOnly": false,
|
|
"FlowElementUid": "FileFlows.VideoNodes.FfmpegBuilderNodes.FfmpegBuilderRemuxToMP4",
|
|
"xPos": 100,
|
|
"yPos": 340,
|
|
"Icon": "svg:mp4",
|
|
"Label": "",
|
|
"Inputs": 1,
|
|
"Outputs": 1,
|
|
"OutputConnections": [
|
|
{
|
|
"Input": 1,
|
|
"Output": 1,
|
|
"InputNode": "d8586031-c297-4d8f-bd1e-b5a578caf4a5"
|
|
}
|
|
],
|
|
"Type": 6,
|
|
"Model": {}
|
|
},
|
|
{
|
|
"Uid": "63363efc-e398-48fb-87cc-7db852e26ac1",
|
|
"Name": "Video Encode",
|
|
"ReadOnly": false,
|
|
"FlowElementUid": "FileFlows.VideoNodes.FfmpegBuilderNodes.FfmpegBuilderVideoEncode",
|
|
"xPos": 100,
|
|
"yPos": 610,
|
|
"Icon": "far fa-file-video",
|
|
"Label": "",
|
|
"Inputs": 1,
|
|
"Outputs": 1,
|
|
"OutputConnections": [
|
|
{
|
|
"Input": 1,
|
|
"Output": 1,
|
|
"InputNode": "b529060c-7cf6-4f84-a849-6cb0f55f1ad4"
|
|
}
|
|
],
|
|
"Type": 6,
|
|
"Model": {
|
|
"Codec": "h265",
|
|
"HardwareEncoding": true,
|
|
"Quality": 24,
|
|
"Speed": "slow",
|
|
"Encoder": "NVIDIA"
|
|
}
|
|
},
|
|
{
|
|
"Uid": "b529060c-7cf6-4f84-a849-6cb0f55f1ad4",
|
|
"Name": "FFMPEG Builder: Executor",
|
|
"ReadOnly": false,
|
|
"FlowElementUid": "FileFlows.VideoNodes.FfmpegBuilderNodes.FfmpegBuilderExecutor",
|
|
"xPos": 490,
|
|
"yPos": 430,
|
|
"Icon": "far fa-file-video",
|
|
"Label": "",
|
|
"Inputs": 1,
|
|
"Outputs": 2,
|
|
"OutputConnections": [
|
|
{
|
|
"Input": 1,
|
|
"Output": 1,
|
|
"InputNode": "f88d2dd2-f046-4f8b-8310-060433f8b7a9"
|
|
}
|
|
],
|
|
"Type": 5,
|
|
"Model": {
|
|
"HardwareDecoding": true
|
|
}
|
|
},
|
|
{
|
|
"Uid": "f88d2dd2-f046-4f8b-8310-060433f8b7a9",
|
|
"Name": "",
|
|
"ReadOnly": false,
|
|
"FlowElementUid": "FileFlows.BasicNodes.File.ReplaceOriginal",
|
|
"xPos": 490,
|
|
"yPos": 620,
|
|
"Icon": "fas fa-file",
|
|
"Label": "",
|
|
"Inputs": 1,
|
|
"Outputs": 1,
|
|
"OutputConnections": [],
|
|
"Type": 2,
|
|
"Model": {
|
|
"MoveFolder": true,
|
|
"DeleteOriginal": true,
|
|
"DestinationPath": "D:\\videos\\converted"
|
|
}
|
|
},
|
|
{
|
|
"Uid": "d8586031-c297-4d8f-bd1e-b5a578caf4a5",
|
|
"Name": "Convert to AAC",
|
|
"ReadOnly": false,
|
|
"FlowElementUid": "FileFlows.VideoNodes.FfmpegBuilderNodes.FfmpegBuilderAudioConverter",
|
|
"xPos": 100,
|
|
"yPos": 470,
|
|
"Icon": "fas fa-comments",
|
|
"Label": "",
|
|
"Inputs": 1,
|
|
"Outputs": 2,
|
|
"OutputConnections": [
|
|
{
|
|
"Input": 1,
|
|
"Output": 2,
|
|
"InputNode": "63363efc-e398-48fb-87cc-7db852e26ac1"
|
|
},
|
|
{
|
|
"Input": 1,
|
|
"Output": 1,
|
|
"InputNode": "63363efc-e398-48fb-87cc-7db852e26ac1"
|
|
}
|
|
],
|
|
"Type": 6,
|
|
"Model": {
|
|
"Codec": "aac",
|
|
"Channels": 0,
|
|
"Bitrate": 1,
|
|
"Pattern": null,
|
|
"NotMatching": false,
|
|
"UseLanguageCode": false
|
|
}
|
|
}
|
|
]
|
|
}</code></pre><div class="kg-card kg-file-card"><a class="kg-file-card-container" href="https://noted.lol/content/files/2024/10/Convert-to-H265.json" title="Download" download><div class="kg-file-card-contents"><div class="kg-file-card-title">Convert to H265</div><div class="kg-file-card-caption">Flow for FIleFlows</div><div class="kg-file-card-metadata"><div class="kg-file-card-filename">Convert to H265.json</div><div class="kg-file-card-filesize">4 KB</div></div></div><div class="kg-file-card-icon"><svg viewbox="0 0 24 24"><defs><style>.a{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px;}</style></defs><title>download-circle</title><polyline class="a" points="8.25 14.25 12 18 15.75 14.25"/><line class="a" x1="12" y1="6.75" x2="12" y2="18"/><circle class="a" cx="12" cy="12" r="11.25"/></svg></div></a></div><p>I know it looks overwhelming but you can actually build flows using the FileFlows web ui. Choose the settings you want and voila! Believe it or not, this is actually a VERY basic flow compared to ones I have seen on the community repo. But, it does exactly what I need it to do.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/10/fileflows-flow-noted.png" class="kg-image" alt="FileFlows - Self-Hosted Media Conversion Guide" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/10/fileflows-flow-noted.png 600w, https://noted.lol/content/images/size/w1000/2024/10/fileflows-flow-noted.png 1000w, https://noted.lol/content/images/size/w1600/2024/10/fileflows-flow-noted.png 1600w, https://noted.lol/content/images/2024/10/fileflows-flow-noted.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>If you're looking for an easy way to get started with FileFlows, you can use my pre-made Flow by importing the file directly. Just keep in mind that this particular Flow uses NVIDIA encoding, so you'll need a GPU from that manufacturer to take full advantage of it. Even if you don't have an NVIDIA GPU, you can still use my pre-made Flow. It'll just do the encoding work on your computer's CPU instead of utilizing your graphics card for faster processing.</p><p>Double clicking on the "Video Encode" box will allow you to view and change the settings for that task.</p><figure class="kg-card kg-image-card"><img src="https://noted.lol/content/images/2024/10/fileflows-video-encode-noted.png" class="kg-image" alt="FileFlows - Self-Hosted Media Conversion Guide" loading="lazy" width="701" height="571" srcset="https://noted.lol/content/images/size/w600/2024/10/fileflows-video-encode-noted.png 600w, https://noted.lol/content/images/2024/10/fileflows-video-encode-noted.png 701w"></figure><p>I've thoroughly tested various settings and landed on what works best for me. Smaller files with minimal quality loss, which is perfect for my needs. My NVIDIA 2080ti can convert a 3GB file in just 15 minutes when using four concurrent runners. This setup is great for beginners who want to shrink oversized MKV files down to MP4 format, and it's still something I use today. I've saved around 4TB of space with this Flow! I'll talk more about runners soon.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/10/fileflows-chart-noted.png" class="kg-image" alt="FileFlows - Self-Hosted Media Conversion Guide" loading="lazy" width="1620" height="371" srcset="https://noted.lol/content/images/size/w600/2024/10/fileflows-chart-noted.png 600w, https://noted.lol/content/images/size/w1000/2024/10/fileflows-chart-noted.png 1000w, https://noted.lol/content/images/size/w1600/2024/10/fileflows-chart-noted.png 1600w, https://noted.lol/content/images/2024/10/fileflows-chart-noted.png 1620w" sizes="(min-width: 1200px) 1200px"></figure><h2 id="adding-a-library-to-fileflows">Adding a Library to FileFlows</h2><p>Libraries are created for the media you want to convert. Each library can have different Flows or settings. It really gives you more granular control of your media. Make sure you mounted the volumes in Docker Compose where your media lives. Browse to "Libraries" and add one.</p><p>Here is where you also choose the Flow to use on the Library. So make sure you created a Flow first. You can't skip that step!</p><figure class="kg-card kg-image-card"><img src="https://noted.lol/content/images/2024/10/fileflows-create-library-noted.png" class="kg-image" alt="FileFlows - Self-Hosted Media Conversion Guide" loading="lazy" width="693" height="672" srcset="https://noted.lol/content/images/size/w600/2024/10/fileflows-create-library-noted.png 600w, https://noted.lol/content/images/2024/10/fileflows-create-library-noted.png 693w"></figure><p>Like I said earlier, the Library settings are what really give you control over how FileFlows runs. You can choose when to run conversions using the Schedule tab, scan the folders automatically to "watch" for media to be converted and more. I have mine set to scan every 60 seconds which I believe is the default when enabled.</p><div class="kg-card kg-callout-card kg-callout-card-accent"><div class="kg-callout-emoji">💡</div><div class="kg-callout-text">Be aware that once you hit "Save" on your library, FileFlows will begin scanning for media to convert if your Node is enabled.</div></div><h2 id="converting-media-using-fileflows">Converting Media using FileFlows</h2><p>I'll be using FileFlows to convert MKV video files to MP4. Most of the MKV files are 3-4gb in size and are using the H.264 codec. FileFlows will transcode and convert the video files to my desired codec (HVEC or H.265) . </p><p>If you followed the steps correctly, you should see both Decoder and Encoder using your NVIDIA GPU.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/10/fileflows-main.png" class="kg-image" alt="FileFlows - Self-Hosted Media Conversion Guide" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/10/fileflows-main.png 600w, https://noted.lol/content/images/size/w1000/2024/10/fileflows-main.png 1000w, https://noted.lol/content/images/size/w1600/2024/10/fileflows-main.png 1600w, https://noted.lol/content/images/2024/10/fileflows-main.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><h2 id="gpuhardware-encoding-with-fileflows"><strong>GPU/Hardware Encoding with FileFlows</strong></h2><p>NVIDIA, AMD, and Intel GPUs can be utilized to process files at incredible speeds, making it ideal for heavy data processing tasks.</p><p>Every GPU is different so I recommend starting with 2 runners on lower end GPUs. This can be changed on the "Nodes" page by clicking on your node.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/10/fileflows-node-runners-noted.png" class="kg-image" alt="FileFlows - Self-Hosted Media Conversion Guide" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/10/fileflows-node-runners-noted.png 600w, https://noted.lol/content/images/size/w1000/2024/10/fileflows-node-runners-noted.png 1000w, https://noted.lol/content/images/size/w1600/2024/10/fileflows-node-runners-noted.png 1600w, https://noted.lol/content/images/2024/10/fileflows-node-runners-noted.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>I've got a NVIDIA 2080ti, which handles multiple runners smoothly. Four at once is no problem, and six works just fine too. Since I'm also running some AI tools on the same machine, I've had to reserve some VRAM for those apps. This stuff can be tricky to understand, though. Just because a newer GPU like the 4060ti has more VRAM doesn't necessarily mean it's more powerful - in fact, my older 2080ti is actually faster due to its higher memory bandwidth. Newer model does not always mean faster or better!</p><h2 id="reporting-and-analytics"><strong>Reporting and Analytics</strong></h2><p>Once files are processed, FileFlows offers detailed reporting on file codecs used, processing times, container types, and storage savings. You can also schedule advanced workflows for peak usage periods, ensuring optimal resource utilization and minimizing downtime.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/10/fileflows-analytics-noted.png" class="kg-image" alt="FileFlows - Self-Hosted Media Conversion Guide" loading="lazy" width="1642" height="754" srcset="https://noted.lol/content/images/size/w600/2024/10/fileflows-analytics-noted.png 600w, https://noted.lol/content/images/size/w1000/2024/10/fileflows-analytics-noted.png 1000w, https://noted.lol/content/images/size/w1600/2024/10/fileflows-analytics-noted.png 1600w, https://noted.lol/content/images/2024/10/fileflows-analytics-noted.png 1642w" sizes="(min-width: 1200px) 1200px"></figure><p>You can see here how effective this Flow has been. Most of the files converted are MKV, and I've managed to save around 4TB of space. To avoid any conflicts with other tasks that run at specific times, I've scheduled FileFlows to disable conversions from 5am-7am each day. This allows my system to focus on tasks like running SnapRAID sync, which likes to have a quiet environment when it's doing its thing.</p><h2 id="final-notes-and-thoughts">Final Notes and Thoughts</h2><p>I've been using FileFlows for about a year now, and it's been saving me terabytes of space and automating a tedious process. When I had some initial issues setting it up, the developer was super helpful in getting me sorted out. If you're new to FileFlows, I'd recommend joining their <a href="https://fileflows.com/discord?ref=noted.lol">Discord server</a> where you can see examples from other users and ask questions if you need help along the way.</p><p>Overall, I'm extremely satisfied with FileFlows and would definitely recommend it to anyone looking to optimize their file management workflow. It's a reliable, efficient tool that has saved me a huge amount of time and storage space. With the support of a helpful community, there's no reason not to give it a try!</p><h3 id="listen-to-the-podcast-version">Listen to the Podcast Version</h3><div class="kg-card kg-audio-card"><img src="https://noted.lol/content/media/2024/10/FileFlows-Podcast_thumb.jpg" alt="FileFlows - Self-Hosted Media Conversion Guide" class="kg-audio-thumbnail"><div class="kg-audio-thumbnail placeholder kg-audio-hide"><svg width="24" height="24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.5 15.33a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm-2.25.75a2.25 2.25 0 1 1 4.5 0 2.25 2.25 0 0 1-4.5 0ZM15 13.83a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm-2.25.75a2.25 2.25 0 1 1 4.5 0 2.25 2.25 0 0 1-4.5 0Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M14.486 6.81A2.25 2.25 0 0 1 17.25 9v5.579a.75.75 0 0 1-1.5 0v-5.58a.75.75 0 0 0-.932-.727.755.755 0 0 1-.059.013l-4.465.744a.75.75 0 0 0-.544.72v6.33a.75.75 0 0 1-1.5 0v-6.33a2.25 2.25 0 0 1 1.763-2.194l4.473-.746Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M3 1.5a.75.75 0 0 0-.75.75v19.5a.75.75 0 0 0 .75.75h18a.75.75 0 0 0 .75-.75V5.133a.75.75 0 0 0-.225-.535l-.002-.002-3-2.883A.75.75 0 0 0 18 1.5H3ZM1.409.659A2.25 2.25 0 0 1 3 0h15a2.25 2.25 0 0 1 1.568.637l.003.002 3 2.883a2.25 2.25 0 0 1 .679 1.61V21.75A2.25 2.25 0 0 1 21 24H3a2.25 2.25 0 0 1-2.25-2.25V2.25c0-.597.237-1.169.659-1.591Z"/></svg></div><div class="kg-audio-player-container"><audio src="https://noted.lol/content/media/2024/10/FileFlows-Podcast.wav" preload="metadata"></audio><div class="kg-audio-title">FileFlows Podcast</div><div class="kg-audio-player"><button class="kg-audio-play-icon" aria-label="Play audio"><svg viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button><button class="kg-audio-pause-icon kg-audio-hide" aria-label="Pause audio"><svg viewbox="0 0 24 24"><rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/><rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/></svg></button><span class="kg-audio-current-time">0:00</span><div class="kg-audio-time">/<span class="kg-audio-duration">534.92</span></div><input type="range" class="kg-audio-seek-slider" max="100" value="0"><button class="kg-audio-playback-rate" aria-label="Adjust playback speed">1×</button><button class="kg-audio-unmute-icon" aria-label="Unmute"><svg viewbox="0 0 24 24"><path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/></svg></button><button class="kg-audio-mute-icon kg-audio-hide" aria-label="Mute"><svg viewbox="0 0 24 24"><path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/></svg></button><input type="range" class="kg-audio-volume-slider" max="100" value="100"></div></div></div>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:3;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:53:"Excalidraw - A Self Hosted Diagram and Drawing Portal";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:155:"Excalidraw is a self-hosted, freehand drawing and diagramming tool that allows users to create and collaborate on simple, visual representations of ideas. ";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:29:"https://noted.lol/excalidraw/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"669ff5dccaf0210001ac62c5";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:28:"Self Hosted Note Taking apps";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:12:"Self Hosting";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Sat, 28 Sep 2024 16:00:00 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:71:"https://noted.lol/content/images/2024/09/Untitled-2023-01-18-1336-1.png";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:11887:"<img src="https://noted.lol/content/images/2024/09/Untitled-2023-01-18-1336-1.png" alt="Excalidraw - A Self Hosted Diagram and Drawing Portal"><p>It is a web-based application that can be accessed through any modern web browser, and its user interface is simple and intuitive.</p><p>One of the most noteworthy features of Excalidraw is its ease of use. Its minimalistic design means that users can start creating and editing drawings with very little learning curve. The tool offers basic drawing features such as shapes, lines, and arrows, and allows for simple color customization. Users can also add text to their drawings and create layers for organizing content.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2023/08/homelab-2023.png" class="kg-image" alt="Excalidraw - A Self Hosted Diagram and Drawing Portal" loading="lazy" width="2000" height="2460" srcset="https://noted.lol/content/images/size/w600/2023/08/homelab-2023.png 600w, https://noted.lol/content/images/size/w1000/2023/08/homelab-2023.png 1000w, https://noted.lol/content/images/size/w1600/2023/08/homelab-2023.png 1600w, https://noted.lol/content/images/2023/08/homelab-2023.png 2000w" sizes="(min-width: 1200px) 1200px"></figure><p>Excalidraw's collaborative features are also impressive. The tool allows users to invite collaborators to work on the same drawing in real-time, making it ideal for teams working on a project or for remote collaboration. Users can also export their drawings in various formats, including PNG, SVG, and JSON.</p><p>In terms of its versatility, Excalidraw is a great tool for a wide range of use cases. For example, it can be used for sketching out UI designs, creating flowcharts or mind maps, or simply jotting down quick ideas. Its simple, flexible design makes it easy to adapt to different use cases and workflows.</p><p>To use Excalidraw for self-hosting using Docker, you will need to follow these steps:</p><p> If you're new to self-hosting, don't worry, we have guides available to help you <a href="https://noted.lol/get-started-self-hosting/">get started with self-hosting</a>. There you can quickly learn how to install Docker on your system.</p><ol><li>Open a terminal on your local machine.</li><li>Pull the Excalidraw Docker image from Docker Hub by running the following command:</li></ol><pre><code>docker pull docker.io/excalidraw/excalidraw:latest
|
|
</code></pre>
|
|
<ol><li>Once the image has been pulled, run the following command to start Excalidraw:</li></ol><pre><code>docker run -p 8080:80 -d docker.io/excalidraw/excalidraw:latest
|
|
</code></pre>
|
|
<ol><li>Excalidraw should now be accessible at <code>http://localhost:8080</code> in your web browser.</li></ol><p>Note: The <code>-p</code> flag maps the container's port 80 to port 8080 on your local machine. If port 8080 is already in use, you can choose a different port number.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2023/03/excalidraw-self-hosted-main-noted.lol.png" class="kg-image" alt="Excalidraw - A Self Hosted Diagram and Drawing Portal" loading="lazy" width="1920" height="922" srcset="https://noted.lol/content/images/size/w600/2023/03/excalidraw-self-hosted-main-noted.lol.png 600w, https://noted.lol/content/images/size/w1000/2023/03/excalidraw-self-hosted-main-noted.lol.png 1000w, https://noted.lol/content/images/size/w1600/2023/03/excalidraw-self-hosted-main-noted.lol.png 1600w, https://noted.lol/content/images/2023/03/excalidraw-self-hosted-main-noted.lol.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>By default, Excalidraw will run in a development environment with hot-reloading enabled. To run the app in a production environment, you will need to follow additional steps, such as configuring a web server and setting up a production build. You can find more information on the <a href="https://github.com/excalidraw/excalidraw?ref=noted.lol">Excalidraw GitHub repository</a> and documentation.</p><p>Once you have Excalidraw up and running, you can use it to create and collaborate on drawings and diagrams without relying on any external service or platform. Self-hosting Excalidraw gives you more control over your data and privacy, and allows you to customize the app to suit your specific needs.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://noted.lol/content/images/2023/03/excalidraw-self-hosted-test-noted.lol.gif" class="kg-image" alt="Excalidraw - A Self Hosted Diagram and Drawing Portal" loading="lazy" width="1920" height="688" srcset="https://noted.lol/content/images/size/w600/2023/03/excalidraw-self-hosted-test-noted.lol.gif 600w, https://noted.lol/content/images/size/w1000/2023/03/excalidraw-self-hosted-test-noted.lol.gif 1000w, https://noted.lol/content/images/size/w1600/2023/03/excalidraw-self-hosted-test-noted.lol.gif 1600w, https://noted.lol/content/images/2023/03/excalidraw-self-hosted-test-noted.lol.gif 1920w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">Trying to freehand with a cheap wireless mouse 😂</span></figcaption></figure><p>One downside to Excalidraw is that it is still a relatively new tool, and as such, it does not offer some of the advanced features of more established drawing and diagramming tools. For example, it does not offer complex shapes or advanced image editing capabilities. However, this is not necessarily a major drawback for most users, as Excalidraw's simplicity and ease of use are its main selling points.</p><h3 id="more-features-worth-mentioning">More features worth mentioning</h3><p>Infinite, canvas-based whiteboard: Excalidraw provides an infinite canvas, making it easy for you to create any size visual you need. You can zoom in and out of the canvas as well as pan it to move around.</p><p>Dark mode: Excalidraw supports dark mode, enabling you to work in low-light environments or for those who prefer a darker interface.</p><p>Customizable: Excalidraw is highly customizable, offering a wide range of tools and options to create visually stunning and unique designs.</p><p>Image support: Excalidraw allows you to add images to your designs. You can upload images from your computer or copy and paste them directly into the canvas.</p><p>Shape libraries support: Excalidraw supports a wide range of shapes, including rectangles, circles, diamonds, arrows, lines and more. This feature makes it easy for users to create visual representations that accurately reflect their ideas and concepts.</p><p>Localization (i18n) support: Excalidraw provides localization support (i18n), making it accessible to users from different countries and languages.</p><p>Export to PNG, SVG & clipboard: Excalidraw allows you to export your designs in various formats such as PNG, SVG, or to copy it onto your clipboard.</p><p>Open format - export drawings as an .excalidraw json file: You can export your designs as an .excalidraw JSON file, which is an open format that allows you to edit your work later.</p><p>Wide range of tools - rectangle, circle, diamond, arrow, line, free-draw, eraser: Excalidraw offers a wide range of tools, including basic shapes and free-draw tools. In addition, it provides an eraser tool for correcting mistakes or for removing parts of your design.</p><p>Arrow-binding & labeled arrows: Excalidraw provides arrow-binding and labeled arrows tools, making it easy for you to create diagrams that need directional arrows or labels.</p><p>Undo/Redo: Excalidraw provides an undo/redo feature. This feature enables you to correct mistakes or step back to a previous point in your design process.</p><p>Zoom and panning support: Excalidraw allows users to zoom in and out of their designs and to pan across the canvas, making it easy to focus on specific parts of the design.</p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">👋</div><div class="kg-callout-text">Like what you see? Consider <a href="https://noted.lol/#/portal/signup">subscribing to the Noted newsletter</a>! You can always unsubscribe at any time. We also have <a href="https://discord.gg/zA9FT8qW9g?ref=noted.lol">Discord</a>!</div></div><h3 id="final-notes-and-thoughts">Final Notes and Thoughts</h3><p>Excalidraw is an excellent tool for anyone looking for a simple, intuitive drawing and diagramming tool. Its ease of use, flexibility, and collaborative features make it a great choice for a wide range of use cases, and its open-source nature means that it is likely to continue to improve and evolve in the coming years.</p><h2 id="rather-listen">Rather Listen?</h2><p>Check out the article in podcast form below!</p><div class="kg-card kg-audio-card"><img src="https://noted.lol/content/media/2024/09/Excalidraw_thumb.jpg" alt="Excalidraw - A Self Hosted Diagram and Drawing Portal" class="kg-audio-thumbnail"><div class="kg-audio-thumbnail placeholder kg-audio-hide"><svg width="24" height="24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.5 15.33a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm-2.25.75a2.25 2.25 0 1 1 4.5 0 2.25 2.25 0 0 1-4.5 0ZM15 13.83a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm-2.25.75a2.25 2.25 0 1 1 4.5 0 2.25 2.25 0 0 1-4.5 0Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M14.486 6.81A2.25 2.25 0 0 1 17.25 9v5.579a.75.75 0 0 1-1.5 0v-5.58a.75.75 0 0 0-.932-.727.755.755 0 0 1-.059.013l-4.465.744a.75.75 0 0 0-.544.72v6.33a.75.75 0 0 1-1.5 0v-6.33a2.25 2.25 0 0 1 1.763-2.194l4.473-.746Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M3 1.5a.75.75 0 0 0-.75.75v19.5a.75.75 0 0 0 .75.75h18a.75.75 0 0 0 .75-.75V5.133a.75.75 0 0 0-.225-.535l-.002-.002-3-2.883A.75.75 0 0 0 18 1.5H3ZM1.409.659A2.25 2.25 0 0 1 3 0h15a2.25 2.25 0 0 1 1.568.637l.003.002 3 2.883a2.25 2.25 0 0 1 .679 1.61V21.75A2.25 2.25 0 0 1 21 24H3a2.25 2.25 0 0 1-2.25-2.25V2.25c0-.597.237-1.169.659-1.591Z"/></svg></div><div class="kg-audio-player-container"><audio src="https://noted.lol/content/media/2024/09/Excalidraw.wav" preload="metadata"></audio><div class="kg-audio-title">Excalidraw - Podcast</div><div class="kg-audio-player"><button class="kg-audio-play-icon" aria-label="Play audio"><svg viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button><button class="kg-audio-pause-icon kg-audio-hide" aria-label="Pause audio"><svg viewbox="0 0 24 24"><rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/><rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/></svg></button><span class="kg-audio-current-time">0:00</span><div class="kg-audio-time">/<span class="kg-audio-duration">685.2</span></div><input type="range" class="kg-audio-seek-slider" max="100" value="0"><button class="kg-audio-playback-rate" aria-label="Adjust playback speed">1×</button><button class="kg-audio-unmute-icon" aria-label="Unmute"><svg viewbox="0 0 24 24"><path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/></svg></button><button class="kg-audio-mute-icon kg-audio-hide" aria-label="Mute"><svg viewbox="0 0 24 24"><path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/></svg></button><input type="range" class="kg-audio-volume-slider" max="100" value="100"></div></div></div>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:4;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:67:"ytdl-sub: Advanced YouTube Downloading that's Worth the Effort";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:63:"Automated YouTube downloading has never been this cool and fun!";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:27:"https://noted.lol/ytdl-sub/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"66f580eb4fc4690001735b2f";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:23:"Self Hosted Downloaders";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Fri, 27 Sep 2024 19:41:34 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:59:"https://noted.lol/content/images/2024/09/ytdl-sub-noted.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:16059:"<img src="https://noted.lol/content/images/2024/09/ytdl-sub-noted.jpg" alt="ytdl-sub: Advanced YouTube Downloading that's Worth the Effort"><p>I'd previously relied on Emby as my media server and Tube Archivist for fetching YouTube content. However, I've been running into persistent issues with Tube Archivist, including crashes during updates and random failures to download videos or embed thumbnails, a frustrating experience that's driven me to look for a more reliable solution. That being said, I still think Tube Archivist is a great tool, and it's probably just user error on my part (I've likely misconfigured something!) rather than any fundamental flaw in the software.</p><p>It's time to say goodbye to clunky GUI downloaders and hello to a more efficient way of downloading video content using the power of the command line and some well-organized YAML files! Yes, it may require a bit more effort upfront, but trust us, it's worth it for the flexibility and control you'll gain.</p><h2 id="what-is-ytdl-sub">What is ytdl-sub?</h2><p><a href="https://github.com/jmbannon/ytdl-sub?ref=noted.lol">ytdl-sub</a> is a Python-based command-line tool that's specifically designed for downloading videos from YouTube and other popular video sites using the yt-dlp library. What really sets it apart, though, is its clever ability to generate metadata for media players like Kodi, Jellyfin, Plex, and Emby, making it easy to get your downloads up and running with minimal fuss all while giving you that traditional TV show feeling.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/09/ytdl-sub-emby-metadata-noted.png" class="kg-image" alt="ytdl-sub: Advanced YouTube Downloading that's Worth the Effort" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/09/ytdl-sub-emby-metadata-noted.png 600w, https://noted.lol/content/images/size/w1000/2024/09/ytdl-sub-emby-metadata-noted.png 1000w, https://noted.lol/content/images/size/w1600/2024/09/ytdl-sub-emby-metadata-noted.png 1600w, https://noted.lol/content/images/2024/09/ytdl-sub-emby-metadata-noted.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><h2 id="rather-listen">Rather Listen?</h2><p>Check out the article in podcast form below!</p><div class="kg-card kg-audio-card"><img src="https://noted.lol/content/media/2024/09/ytdl-sub-noted-link_thumb.jpg" alt="ytdl-sub: Advanced YouTube Downloading that's Worth the Effort" class="kg-audio-thumbnail"><div class="kg-audio-thumbnail placeholder kg-audio-hide"><svg width="24" height="24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.5 15.33a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm-2.25.75a2.25 2.25 0 1 1 4.5 0 2.25 2.25 0 0 1-4.5 0ZM15 13.83a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm-2.25.75a2.25 2.25 0 1 1 4.5 0 2.25 2.25 0 0 1-4.5 0Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M14.486 6.81A2.25 2.25 0 0 1 17.25 9v5.579a.75.75 0 0 1-1.5 0v-5.58a.75.75 0 0 0-.932-.727.755.755 0 0 1-.059.013l-4.465.744a.75.75 0 0 0-.544.72v6.33a.75.75 0 0 1-1.5 0v-6.33a2.25 2.25 0 0 1 1.763-2.194l4.473-.746Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M3 1.5a.75.75 0 0 0-.75.75v19.5a.75.75 0 0 0 .75.75h18a.75.75 0 0 0 .75-.75V5.133a.75.75 0 0 0-.225-.535l-.002-.002-3-2.883A.75.75 0 0 0 18 1.5H3ZM1.409.659A2.25 2.25 0 0 1 3 0h15a2.25 2.25 0 0 1 1.568.637l.003.002 3 2.883a2.25 2.25 0 0 1 .679 1.61V21.75A2.25 2.25 0 0 1 21 24H3a2.25 2.25 0 0 1-2.25-2.25V2.25c0-.597.237-1.169.659-1.591Z"/></svg></div><div class="kg-audio-player-container"><audio src="https://noted.lol/content/media/2024/09/ytdl-sub-noted-link.wav" preload="metadata"></audio><div class="kg-audio-title">Podcast: ytdl-sub</div><div class="kg-audio-player"><button class="kg-audio-play-icon" aria-label="Play audio"><svg viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button><button class="kg-audio-pause-icon kg-audio-hide" aria-label="Pause audio"><svg viewbox="0 0 24 24"><rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/><rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/></svg></button><span class="kg-audio-current-time">0:00</span><div class="kg-audio-time">/<span class="kg-audio-duration">623.8</span></div><input type="range" class="kg-audio-seek-slider" max="100" value="0"><button class="kg-audio-playback-rate" aria-label="Adjust playback speed">1×</button><button class="kg-audio-unmute-icon" aria-label="Unmute"><svg viewbox="0 0 24 24"><path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/></svg></button><button class="kg-audio-mute-icon kg-audio-hide" aria-label="Mute"><svg viewbox="0 0 24 24"><path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/></svg></button><input type="range" class="kg-audio-volume-slider" max="100" value="100"></div></div></div><h2 id="why-download-youtube-videos">Why download YouTube Videos?</h2><p><strong>Convenience</strong>: With ytdl-sub, users can easily download YouTube videos and playlists directly to their computer or device, without having to manually copy and paste links or navigate through the YouTube website.</p><p><strong>Offline access</strong>: By downloading videos with ytdl-sub, users can enjoy their favorite content offline, whether they're on a plane, in an area with poor internet connectivity, or just want to reduce their data usage.</p><p><strong>Easier playlist management</strong>: ytdl-sub allows users to download entire playlists at once, making it easy to manage and organize their favorite videos in one place.</p><p><strong>No ads</strong>: By downloading videos directly, users can avoid watching ads and enjoy their content without interruptions.</p><p><strong>Support for multiple formats</strong>: ytdl-sub often supports the ability to download videos in various formats (e.g. MP4, WEBM, etc.), giving users more flexibility when it comes to playing back their downloaded content.</p><h2 id="install-ytdl-sub-on-linux">Install YTDL-Sub on Linux</h2><p>Today's focus will be on installing ytdl-sub directly on Linux, using a Debian-based system like Ubuntu. We've had success with this method and found it to work better than using Docker for our specific use case, the additional control over cron jobs was particularly beneficial.</p><p>To get started with ytdl-sub, you'll need to have FFmpeg installed on your system. Simply run <code>apt install ffmpeg</code> in the terminal to get it set up. You should also be comfortable using basic Linux commands and navigating the terminal environment, especially when working with crontab. Don't worry if that sounds like a lot, I'll walk you through each step of the process here.</p><p>Navigate to the directory where you'd like to store the project files. For example, I keep mine in <code>/mnt/utilities/ytdl-sub</code>. From there, use <code>curl</code> to download the file, set its permissions accordingly, and then test the script to ensure everything is working as expected</p><pre><code>curl -L -o ytdl-sub https://github.com/jmbannon/ytdl-sub/releases/latest/download/ytdl-sub
|
|
chmod +x ytdl-sub
|
|
./ytdl-sub -h</code></pre><p>You should now see the ytdl-sub file when using the <code>ls</code> command.</p><p>Now we need to create two files. The configuration file and the subscriptions YAML files.</p><p>Type <code>nano config.yaml</code> and paste the following:</p><pre><code>configuration:
|
|
working_directory: '.working_directory'</code></pre><p>Press <code>Ctrl X</code> then <code>Y</code> then <code>Enter</code> to save the file.</p><p>This config.yaml file tells ytdl-sub that we are storing files temporarily in this directory. All videos, metadata and images will be temporarily stored here until later transferred to your desired <code>tv_show_directory</code> seen in the subscriptions file below.</p><p>Type <code>nano subscriptions.yaml</code> and paste the following:</p><pre><code># subscriptions.yaml:
|
|
# Everything in here can be downloaded using the command:
|
|
# ytdl-sub sub subscriptions.yaml
|
|
|
|
# __preset__ is a place to define global overrides for all subscriptions
|
|
__preset__:
|
|
overrides:
|
|
# Root folder of all ytdl-sub TV Shows
|
|
tv_show_directory: "/mnt/media/Youtube/Jeremy"
|
|
|
|
# For 'Only Recent' preset, only keep vids within this range and limit
|
|
only_recent_date_range: "2months"
|
|
only_recent_max_files: 5
|
|
|
|
###################################################################
|
|
# Subscriptions nested under this will use the
|
|
# `Plex TV Show by Date` preset.
|
|
#
|
|
# Can choose between:
|
|
# - Plex TV Show by Date:
|
|
# - Jellyfin TV Show by Date:
|
|
# - Kodi TV Show by Date:
|
|
Jellyfin TV Show by Date | max_1080p:
|
|
|
|
# Sets genre tag to "Documentaries"
|
|
= Youtube | Only Recent:
|
|
"Noted": "https://www.youtube.com/@selfhosted"</code></pre><p>Press <code>Ctrl X</code> then <code>Y</code> then <code>Enter</code> to save the file.</p><p>This subscriptions.yaml tells ytdl-sub to fetch the latest 5 YouTube videos from my channel, covering a time frame of up to 2 months back, in 1080p MP4 format and store them in <code>/mnt/media/Youtube/Jeremy</code>. The metadata is also being formatted with <code>Jellyfin TV Show by Date</code>, which will allow the video content to be displayed and organized just like a traditional TV show on both Jellyfin or Emby.</p><p>You'll want to customize the file and add your favorite channels. You can do so by modifying the configuration file or subscriptions file. For more advanced modifications, however, I recommend checking out the not-so-comprehensive documentation provided in <a href="https://ytdl-sub.readthedocs.io/en/latest/guides/getting_started/advanced_configuration.html?ref=noted.lol">ytdl-sub's advanced guide!</a></p><p><strong>How it works</strong>: The script begins by loading any custom settings from the config file, allowing users to tailor the behavior of ytdl-sub to their specific needs. Next, it consults the subscription file, where it checks for override settings that might supersede those specified in the config file. I'm aware that this can be a bit confusing, and the documentation could certainly benefit from more clarity on this point.</p><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">👀</div><div class="kg-callout-text">You may need to grant permissions to your ytdl-sub directory or other directories where files might be transferred to.</div></div><p>Let's try running a dry run on our subscription file to see if everything checks out. inside the ytdl-sub directory run the following command:</p><pre><code>./ytdl-sub -d sub subscriptions.yaml</code></pre><p>This will preview what a download would output but does not perform any video downloads or writes to output directories.</p><figure class="kg-card kg-image-card"><img src="https://noted.lol/content/images/2024/09/ytdl-sub-dry-run-noted.png" class="kg-image" alt="ytdl-sub: Advanced YouTube Downloading that's Worth the Effort" loading="lazy" width="735" height="207" srcset="https://noted.lol/content/images/size/w600/2024/09/ytdl-sub-dry-run-noted.png 600w, https://noted.lol/content/images/2024/09/ytdl-sub-dry-run-noted.png 735w" sizes="(min-width: 720px) 720px"></figure><p>Given that I hadn't uploaded a new video in over a year, there were no recent videos for ytdl-sub to download. This is because I told the script to only look for videos up to 2 months back using <code>only_recent_date_range: "2months"</code> However, the script executed successfully, indicating that it's working as intended even without any new content.</p><p>Want to download the files for real now? Here's what you need to do. Simply run the command again without the <code>-d</code> flag as follows:</p><pre><code>./ytdl-sub sub subscriptions.yaml</code></pre><p>And just so you know, you don't have to name the file subscriptions.yaml. In-fact, you can name it whatever you want. I created 2 files. One for me and one for my son. Each one downloads videos we like and sends them to different directories to be served up on Emby. I named them jeremy.yaml and elijah.yaml so when I run the command I just call that file instead of subscriptions.yaml.</p><p>Not so painful, right? If you want to automate the download process, rather than running it manually each time, we can set up a simple schedule using crontab. Specifically, we'll use <code>crontab -e</code> to create and edit a new cron job that will run ytdl-sub at regular intervals.</p><p>You may need to use sudo or sudo su for this but go ahead and type <code>crontab -e</code> and hit <code>Enter</code>. If it's your first time using crontab it may ask if you want to use nano or vim. I prefer nano so I chose that option. After choosing, you will see something like this but without the cron command. Yours may be empty other than the default commented out directions.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/09/ytdl-sub-crontab-noted.png" class="kg-image" alt="ytdl-sub: Advanced YouTube Downloading that's Worth the Effort" loading="lazy" width="893" height="615" srcset="https://noted.lol/content/images/size/w600/2024/09/ytdl-sub-crontab-noted.png 600w, https://noted.lol/content/images/2024/09/ytdl-sub-crontab-noted.png 893w"></figure><p>Arrow down to the bottom of the file and paste the cron command.</p><pre><code>0 */3 * * * cd /mnt/utilities/ytdl-sub && ./ytdl-sub sub subscriptions.yaml</code></pre><p>Don't forget to press <code>Ctrl X</code>, <code>Y</code> then <code>Enter</code> to save the cron job! It's a good idea to launch <code>crontab -e</code> again to double check that it did save.</p><p>This line tells the system to run the specified command every 3 hours. Simply adjust the time interval as needed, such as changing '3' to '6' for every 6 hours. The cron job will then execute the ytdl-sub script to look for new videos based on your subscriptions file. If you want to temporarily pause or stop the cron from running, just add a <code>#</code> symbol at the beginning of the command, which will render it inactive. You'll notice the text will change color to indicate this. Again, don't forget to save the file before exiting!</p><h2 id="final-notes-and-thoughts">Final Notes and Thoughts</h2><p>I have to admit, when I first stumbled upon ytdl-sub a few months back, I was initially intimidated by the prospect of setting it up. The thought of customizing settings and working with YAML files seemed daunting, especially after sifting through what felt like a complex documentation set. As a result, I put off exploring ytdl-sub further until now.</p><p> While I've only scratched the surface of what this tool can do, I'm excited to dig deeper into custom settings in the near future. As it stands, I'm thrilled with how it's working out and appreciate the unique viewing experiences it provides on platforms like Emby, Jellyfin, Plex, and Kodi.</p><p>I encourage you to checkout the <a href="https://github.com/jmbannon/ytdl-sub?ref=noted.lol">ytdl-sub project on github</a> and smash that star because it is very well deserved!</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:5;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:74:"Maximize Your Workflow with Self-Hosted IT-Tools Collection for Developers";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:100:"Boost your efficiency with the streamlined tools in IT-Tools. A must-have collection for developers.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:27:"https://noted.lol/it-tools/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"669ff5dccaf0210001ac6328";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:21:"Self Hosted Web Tools";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:30:"Self Hosted QR Code Generators";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Tue, 03 Sep 2024 15:11:00 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:75:"https://noted.lol/content/images/2023/03/it-tools-self-hosted-noted.lol.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:6628:"<img src="https://noted.lol/content/images/2023/03/it-tools-self-hosted-noted.lol.jpg" alt="Maximize Your Workflow with Self-Hosted IT-Tools Collection for Developers"><p>Developers worldwide are always seeking tools that can help make the development process more efficient as well as aid productivity. IT-Tools is one such fantastic collection of web-based tools developers should know about. It comprises a vast array of tools that simplifies SQL query building, compiles CSS and HTML code, performs unit testing, generates passwords, and much more.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2023/09/it-tools-self-hosted-noted.lol-1.png" class="kg-image" alt="Maximize Your Workflow with Self-Hosted IT-Tools Collection for Developers" loading="lazy" width="1899" height="929" srcset="https://noted.lol/content/images/size/w600/2023/09/it-tools-self-hosted-noted.lol-1.png 600w, https://noted.lol/content/images/size/w1000/2023/09/it-tools-self-hosted-noted.lol-1.png 1000w, https://noted.lol/content/images/size/w1600/2023/09/it-tools-self-hosted-noted.lol-1.png 1600w, https://noted.lol/content/images/2023/09/it-tools-self-hosted-noted.lol-1.png 1899w" sizes="(min-width: 1200px) 1200px"></figure><h3 id="what-is-it-tools">What is IT-Tools?</h3><p><a href="https://github.com/CorentinTh/it-tools?ref=noted.lol">IT-Tools</a> is curated by <a href="https://github.com/CorentinTh?ref=noted.lol">CorentinTh</a>, who has included various practical tools in the GitHub repository, catering to different needs like code conversion, SQL query building, and password generators. Whether you're a beginner or an expert developer, you can benefit from the wide variety of tools available in IT-Tools.</p><h3 id="install-it-tools-with-docker">Install IT-Tools with Docker</h3><pre><code class="language-YAML">version: '3.9'
|
|
services:
|
|
it-tools:
|
|
image: 'corentinth/it-tools:latest'
|
|
ports:
|
|
- '8080:80'
|
|
restart: unless-stopped
|
|
container_name: it-tools</code></pre><p>Then navigate to the web app on your docker host IP on port 8080.</p><p>The tools included in IT-Tools are designed to help users save time by simplifying and automating tasks that can be repetitive, so you can focus more on creating and building something great. You can favorite the tools you use most to have quicker access to them at the top of the app.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2023/03/it-tools-self-hosted-token-generator.gif" class="kg-image" alt="Maximize Your Workflow with Self-Hosted IT-Tools Collection for Developers" loading="lazy" width="1920" height="937" srcset="https://noted.lol/content/images/size/w600/2023/03/it-tools-self-hosted-token-generator.gif 600w, https://noted.lol/content/images/size/w1000/2023/03/it-tools-self-hosted-token-generator.gif 1000w, https://noted.lol/content/images/size/w1600/2023/03/it-tools-self-hosted-token-generator.gif 1600w, https://noted.lol/content/images/2023/03/it-tools-self-hosted-token-generator.gif 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>IT-Tools also comes in handy for testing and programming with its unit testing tools, which allows you to test individual components of your code independently of each other.</p><p>Did I mention it has a QR code generator tool too?</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2023/03/it-tools-self-hosted-qr-code-generator-noted.lol.png" class="kg-image" alt="Maximize Your Workflow with Self-Hosted IT-Tools Collection for Developers" loading="lazy" width="1920" height="937" srcset="https://noted.lol/content/images/size/w600/2023/03/it-tools-self-hosted-qr-code-generator-noted.lol.png 600w, https://noted.lol/content/images/size/w1000/2023/03/it-tools-self-hosted-qr-code-generator-noted.lol.png 1000w, https://noted.lol/content/images/size/w1600/2023/03/it-tools-self-hosted-qr-code-generator-noted.lol.png 1600w, https://noted.lol/content/images/2023/03/it-tools-self-hosted-qr-code-generator-noted.lol.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>The IT-Tools QR code generator enables you to create personalized QR codes. These QR codes can be customized to produce different color schemes and error correction levels. You can encode various content such as text, URLs, and contact information into the code generated using IT-Tools QR code generator.</p><p>Finally, I'd like to touch on a tool I think you are all going to appreciate. The Docker run to Docker Compose tool!</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2023/09/it-tools-self-hosted-docker-run-to-docker-compose-noted.lol.png" class="kg-image" alt="Maximize Your Workflow with Self-Hosted IT-Tools Collection for Developers" loading="lazy" width="1920" height="931" srcset="https://noted.lol/content/images/size/w600/2023/09/it-tools-self-hosted-docker-run-to-docker-compose-noted.lol.png 600w, https://noted.lol/content/images/size/w1000/2023/09/it-tools-self-hosted-docker-run-to-docker-compose-noted.lol.png 1000w, https://noted.lol/content/images/size/w1600/2023/09/it-tools-self-hosted-docker-run-to-docker-compose-noted.lol.png 1600w, https://noted.lol/content/images/2023/09/it-tools-self-hosted-docker-run-to-docker-compose-noted.lol.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>Take a Docker run command and easily convert it to a Docker Compose stack. From here you can even download the file.</p><p>I'd really like to write about more of the tools IT-Tools offers but that would make for one heck of a long read! You can see more of the tools on the <a href="https://it-tools.tech/?ref=noted.lol">IT-Tools main demo website</a> and try it out for yourself!</p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">📧</div><div class="kg-callout-text">We review self-hosted apps and more just like this. Consider <a href="https://noted.lol/#/portal/signup">subscribing for free</a> to get them delivered to your inbox!</div></div><h3 id="final-notes-and-thoughts">Final Notes and Thoughts</h3><p>With 71 tools and counting, IT-Tools is an awesome addition to any self-hosted homelab. It's basically a suit of free tools all in one place. When I saw this I knew I had to have it and thought you might find it useful too. If you do, be sure to hop on over to the <a href="https://github.com/CorentinTh/it-tools?ref=noted.lol">IT-Tools Github</a> repo and give it a star!</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:6;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:72:"Introducing Fusion: A Sleek, Self-Hosted RSS Reader That Keeps It Simple";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:157:"Take control of your feeds with Fusion, a self-hosted, lightweight RSS reader that lets you organize, bookmark, and discover new content at your convenience.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:25:"https://noted.lol/fusion/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"66c7365000ed580001bc7293";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:23:"Self Hosted RSS Readers";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Fri, 23 Aug 2024 14:09:13 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:80:"https://noted.lol/content/images/2024/08/self-hosted-rss-reader-fusion-noted.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:11452:"<img src="https://noted.lol/content/images/2024/08/self-hosted-rss-reader-fusion-noted.jpg" alt="Introducing Fusion: A Sleek, Self-Hosted RSS Reader That Keeps It Simple"><p>So you're looking for a way to stay on top of the latest news and updates from your favorite websites and blogs, without having to constantly visit each one individually? Well, let me tell you, RSS feeds are where it's at. By subscribing to an RSS feed, you can get all the latest content delivered right to your doorstep (or rather, your browser), in a single stream of information.</p><p>But, let's be real, not all RSS readers are created equal. Some are clunky, some are confusing, and some just plain don't work well. That's why I'm excited to introduce you to <a href="https://github.com/0x2E/fusion?ref=noted.lol">Fusion</a>, the RSS reader that's been flying under the radar, but is definitely worth checking out if you're looking for a better way to manage your online feeds.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/111.png" class="kg-image" alt="Introducing Fusion: A Sleek, Self-Hosted RSS Reader That Keeps It Simple" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/111.png 600w, https://noted.lol/content/images/size/w1000/2024/08/111.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/111.png 1600w, https://noted.lol/content/images/2024/08/111.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><h2 id="fusion-rss-reader-core-features">Fusion RSS Reader Core Features</h2><p>• Organize: Group feeds by categories, bookmark favorite items, and search for specific topics<br>• Feed types: Supports RSS, Atom, and JSON feed formats with import and export options<br>• Customization: Responsive design with light/dark mode options and Progressive Web App (PWA) capabilities<br>• Self-hosted simplicity: Lightweight and designed to be self-hosted, making it easy to deploy and manage<br>• Technical details: Built with Golang and SQLite for fast performance and efficient storage, with a single binary deployment option<br>• Easy deployment: Includes a pre-built Docker image for quick setup and testing<br>• Resource-friendly: Uses approximately 80MB of memory, perfect for running on most devices or servers</p><div class="kg-card kg-callout-card kg-callout-card-accent"><div class="kg-callout-emoji">🚀</div><div class="kg-callout-text">Run your own instance of Fusion for as little as $1.0/Month with PikaPods! – <a href="https://www.pikapods.com/pods?utm_source=noted&run=fusion" rel="noreferrer">Start free with $5 welcome credit</a> <b><strong style="white-space: pre-wrap;">🤗</strong></b></div></div><h2 id="install-fusion-using-docker">Install Fusion Using Docker</h2><p>To install Fusion on your server, use this Docker Compose stack, which makes the process easy to follow. If you're new to self-hosting, don't worry, we have guides available to help you <a href="https://noted.lol/get-started-self-hosting/">get started with self-hosting</a>. For information on the latest features and updates, refer to the <a href="https://github.com/0x2E/fusion/releases?ref=noted.lol">Fusion releases</a>.</p><pre><code class="language-yaml">services:
|
|
fusion:
|
|
ports:
|
|
- 8080:8080
|
|
volumes:
|
|
- /docker/fusion:/data
|
|
environment:
|
|
- PASSWORD=changeme
|
|
image: rook1e404/fusion</code></pre><p>To customize the deployment, simply adjust the port number located on the left side of the colon (:), if necessary (e.g., change 8080:8080 to 8085:8080). Additionally, it's a good idea to modify the password for added security. Once you've made these changes, deploy the container and access the web interface to log in with your new credentials.</p><p>First, I added a group called Subreddits because I want to start adding Subreddits I follow as RSS feeds. Under "Feeds", there is a small icon that has two folders. Click that to add a group.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/fusion-self-hosted-rss-reader-add-group.png" class="kg-image" alt="Introducing Fusion: A Sleek, Self-Hosted RSS Reader That Keeps It Simple" loading="lazy" width="943" height="216" srcset="https://noted.lol/content/images/size/w600/2024/08/fusion-self-hosted-rss-reader-add-group.png 600w, https://noted.lol/content/images/2024/08/fusion-self-hosted-rss-reader-add-group.png 943w"></figure><p>To start adding feeds, navigate to the "Feeds" menu at the top and click on it. From there, you will see a plus icon where you can enter the RSS URL and give your feed a name. For this example, let's add the <a href="https://www.reddit.com/r/selfhosted/?ref=noted.lol">r/selfhosted Subreddit</a> by appending .rss to its URL. In this case, that would be <code>https://www.reddit.com/r/selfhosted/.rss</code>. Simply copy and paste this URL into the "Link" field.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/fusion-self-hosted-rss-reader-add-feed.png" class="kg-image" alt="Introducing Fusion: A Sleek, Self-Hosted RSS Reader That Keeps It Simple" loading="lazy" width="777" height="433" srcset="https://noted.lol/content/images/size/w600/2024/08/fusion-self-hosted-rss-reader-add-feed.png 600w, https://noted.lol/content/images/2024/08/fusion-self-hosted-rss-reader-add-feed.png 777w"></figure><p>After adding a new feed, click "Save" and then revisit the "Unread" tab to start exploring the fresh content. With multiple feeds, you can filter items by website or blog using the dropdown menu. Once you've read an article, mark it as read and it will be removed from the "Unread" tab. However, you can still access it in the "All" tab or bookmark your favorite articles to store them under the "Bookmarks" tab for future reference.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/fusion-self-hosted-rss-reader-feeds.png" class="kg-image" alt="Introducing Fusion: A Sleek, Self-Hosted RSS Reader That Keeps It Simple" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/fusion-self-hosted-rss-reader-feeds.png 600w, https://noted.lol/content/images/size/w1000/2024/08/fusion-self-hosted-rss-reader-feeds.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/fusion-self-hosted-rss-reader-feeds.png 1600w, https://noted.lol/content/images/2024/08/fusion-self-hosted-rss-reader-feeds.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><h2 id="final-notes-and-thoughts">Final Notes and Thoughts</h2><p>Fusion's simplicity and good looks make it shine. It's easy to set up and start using, making it a top choice for RSS feed management. Having reviewed many<a href="https://noted.lol/tag/self-hosted-rss-readers/"> self-hosted RSS reader</a> options, I highly recommend Fusion as one of the best.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://noted.lol/tag/self-hosted-rss-readers/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Self Hosted RSS Readers - Noted</div><div class="kg-bookmark-description">Self Hosted RSS Readers we have reviewed. Installation guides and Docker Compose.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://noted.lol/content/images/size/w256h256/2023/08/Icon-1.2-1.png" alt="Introducing Fusion: A Sleek, Self-Hosted RSS Reader That Keeps It Simple"><span class="kg-bookmark-author">Noted</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://noted.lol/content/images/2024/07/12704536_5066999.jpg" alt="Introducing Fusion: A Sleek, Self-Hosted RSS Reader That Keeps It Simple"></div></a></figure><p>Fusion has quickly gained traction within the self-hosted community, and we're excited to see its popularity grow.</p><p>For any support related questions or inquiries, please refer to the official <a href="https://github.com/0x2E/fusion?ref=noted.lol">Fusion Github repo</a>. Give Fusion a star on its Github repo, it's a small gesture that goes a long way in supporting open-source initiatives like this one!</p><div class="kg-card kg-signup-card kg-width-wide " data-lexical-signup-form style="background-color: #272727; display: none;">
|
|
|
|
<div class="kg-signup-card-content">
|
|
|
|
<div class="kg-signup-card-text ">
|
|
<h2 class="kg-signup-card-heading" style="color: #FFFFFF;"><span style="white-space: pre-wrap;">Sign up for Noted</span></h2>
|
|
<p class="kg-signup-card-subheading" style="color: #FFFFFF;"><span style="white-space: pre-wrap;">Maximize Your Homelab Potential with Self-Hosting and Open-Source Solutions.</span></p>
|
|
|
|
<form class="kg-signup-card-form" data-members-form="signup">
|
|
|
|
<div class="kg-signup-card-fields">
|
|
<input class="kg-signup-card-input" id="email" data-members-email type="email" required="true" placeholder="Your email">
|
|
<button class="kg-signup-card-button kg-style-accent" style="color: #FFFFFF;" type="submit">
|
|
<span class="kg-signup-card-button-default">Subscribe</span>
|
|
<span class="kg-signup-card-button-loading"><svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewbox="0 0 24 24">
|
|
<g stroke-linecap="round" stroke-width="2" fill="currentColor" stroke="none" stroke-linejoin="round" class="nc-icon-wrapper">
|
|
<g class="nc-loop-dots-4-24-icon-o">
|
|
<circle cx="4" cy="12" r="3"/>
|
|
<circle cx="12" cy="12" r="3"/>
|
|
<circle cx="20" cy="12" r="3"/>
|
|
</g>
|
|
<style data-cap="butt">
|
|
.nc-loop-dots-4-24-icon-o{--animation-duration:0.8s}
|
|
.nc-loop-dots-4-24-icon-o *{opacity:.4;transform:scale(.75);animation:nc-loop-dots-4-anim var(--animation-duration) infinite}
|
|
.nc-loop-dots-4-24-icon-o :nth-child(1){transform-origin:4px 12px;animation-delay:-.3s;animation-delay:calc(var(--animation-duration)/-2.666)}
|
|
.nc-loop-dots-4-24-icon-o :nth-child(2){transform-origin:12px 12px;animation-delay:-.15s;animation-delay:calc(var(--animation-duration)/-5.333)}
|
|
.nc-loop-dots-4-24-icon-o :nth-child(3){transform-origin:20px 12px}
|
|
@keyframes nc-loop-dots-4-anim{0%,100%{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}
|
|
</style>
|
|
</g>
|
|
</svg></span>
|
|
</button>
|
|
</div>
|
|
<div class="kg-signup-card-success" style="color: #FFFFFF;">
|
|
Email sent! Check your inbox to complete your signup.
|
|
</div>
|
|
<div class="kg-signup-card-error" style="color: #FFFFFF;" data-members-error></div>
|
|
</form>
|
|
|
|
<p class="kg-signup-card-disclaimer" style="color: #FFFFFF;"><span style="white-space: pre-wrap;">No spam. Unsubscribe anytime.</span></p>
|
|
</div>
|
|
</div>
|
|
</div>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:7;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:48:"Paperless-ngx: Scan and Digitize Your Documents";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:201:"Keep your papers under control! With Paperless-ngx, you can easily convert your physical documents and receipts into digital files on your own server. Plus, access them on the go with a native iOS app.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:32:"https://noted.lol/paperless-ngx/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"66c4afb000ed580001bc6b6c";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:27:"Slef Hosted Document Viewer";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:22:"Self Hosted File Hosts";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Thu, 22 Aug 2024 12:39:54 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:76:"https://noted.lol/content/images/2024/08/self-hosted-paperless-ngx-noted.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:16300:"<img src="https://noted.lol/content/images/2024/08/self-hosted-paperless-ngx-noted.jpg" alt="Paperless-ngx: Scan and Digitize Your Documents"><p>For many of us, scanned documents and files are a common reality, but finding a reliable and secure way to store and organize them can be a challenge. As data security concerns grow, users are seeking alternatives to cloud-based storage solutions that come with modern scanners. Self-hosted options like Paperless-ngx provide a reliable and secure way to manage digital documents. By running your own instance of Paperless-ngx on a local server or virtual machine, you gain full control over your data, ensuring it remains private and secure.</p><h2 id="what-is-paperless-ngx">What is Paperless-ngx?</h2><p><a href="https://github.com/paperless-ngx/paperless-ngx?ref=noted.lol">Paperless-ngx</a> helps you switch from storing physical documents to digital ones, making it easy to find what you need online. Paperless-ngx was built as a new version of Paperless and its previous updates (Paperless-ng), so that a team of people can work together to improve and support the project. And for those wondering, the "ng" in Paperless-ngx stands for "next generation".</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/paperless-ngx-documents-smallcards-dark.png" class="kg-image" alt="Paperless-ngx: Scan and Digitize Your Documents" loading="lazy" width="2000" height="1432" srcset="https://noted.lol/content/images/size/w600/2024/08/paperless-ngx-documents-smallcards-dark.png 600w, https://noted.lol/content/images/size/w1000/2024/08/paperless-ngx-documents-smallcards-dark.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/paperless-ngx-documents-smallcards-dark.png 1600w, https://noted.lol/content/images/2024/08/paperless-ngx-documents-smallcards-dark.png 2000w" sizes="(min-width: 1200px) 1200px"></figure><h2 id="paperless-ngx-core-features">Paperless-ngx Core Features</h2><ul><li>Organize and index scanned documents with tags, correspondents, and types</li><li>Store data locally, never transmitting or sharing it (there are options to share)</li><li>OCR functionality for searchable text</li><li>Supports multiple file formats (PDF, images, Office files)</li><li>Machine-learning adds automatic tags, correspondents, and document types</li><li>Customizable web app with filtering, bulk editing, and drag-and-drop uploading</li></ul><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/paperless-ngx-OCR-1-noted.lol.png" class="kg-image" alt="Paperless-ngx: Scan and Digitize Your Documents" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/paperless-ngx-OCR-1-noted.lol.png 600w, https://noted.lol/content/images/size/w1000/2024/08/paperless-ngx-OCR-1-noted.lol.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/paperless-ngx-OCR-1-noted.lol.png 1600w, https://noted.lol/content/images/2024/08/paperless-ngx-OCR-1-noted.lol.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>With the Paperless-ngx tagging feature, you can label each document with relevant keywords, making it easy to find what you need later. You can also categorize your documents by type or correspondent, keeping everything organized and easily accessible. </p><p>Paperless-ngx also includes advanced features like OCR (Optical Character Recognition) to make your scanned documents searchable. This means you can quickly find specific words or phrases within a document, without having to manually scroll through it. Plus, it supports multiple file formats, including PDFs, images, and Office files, so you can store all your important documents in one place. And with machine learning powered automatic tagging, you can let the app do the work for you. Just scan your documents and let Paperless-ngx organize them for you... if you trust it to. 😉</p><h2 id="install-paperless-ngx-using-docker">Install Paperless-ngx using Docker</h2><p>The <a href="https://docs.paperless-ngx.com/setup/?ref=noted.lol#docker_script">Paperless-ngx installation script</a> makes it easy to set up your instance. It asks for some basic settings, downloads necessary files, pulls the Docker image, starts Paperless, and even creates a user account.</p><p>Need assistance? Check out our resources for <a href="https://noted.lol/get-started-self-hosting/">getting started with self-hosting and setting up Docker</a>.</p><pre><code>$ bash -c "$(curl --location --silent --show-error https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)"</code></pre><p>The bash script cannot be run as root and you will need permission to write to the current directory.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/paperless-ngx-bash-script-noted.png" class="kg-image" alt="Paperless-ngx: Scan and Digitize Your Documents" loading="lazy" width="1109" height="501" srcset="https://noted.lol/content/images/size/w600/2024/08/paperless-ngx-bash-script-noted.png 600w, https://noted.lol/content/images/size/w1000/2024/08/paperless-ngx-bash-script-noted.png 1000w, https://noted.lol/content/images/2024/08/paperless-ngx-bash-script-noted.png 1109w"></figure><p>Paperless-ngx uses <a href="https://tika.apache.org/?ref=noted.lol">Tika</a> and <a href="https://gotenberg.dev/?ref=noted.lol">Gotenberg</a> to parse metadata and convert Office documents (like .doc, .xlsx, and .odt) and emails (.eml). To use this feature, you'll need to set up separate servers for Tika and Gotenberg, configure their endpoints, and enable the feature. Fortunately, Paperless-ngx provides <a href="https://github.com/paperless-ngx/paperless-ngx/tree/dev/docker/compose?ref=noted.lol">ready made Docker Compose examples</a> that simplify the setup process and offer multiple database options with or without Gotenberg and Tika. </p><p>However, the installation script above also lets you choose to use Tika and Gotenberg, which I highly recommend. You can customize settings like port, database, URL, username, and password all from this bash script. It does the work for you making setup simple. Once it's complete, visit your server or computer's IP address and port number to begin using Paperless-ngx.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/paperless-ngx-start-the-tour-noted.png" class="kg-image" alt="Paperless-ngx: Scan and Digitize Your Documents" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/paperless-ngx-start-the-tour-noted.png 600w, https://noted.lol/content/images/size/w1000/2024/08/paperless-ngx-start-the-tour-noted.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/paperless-ngx-start-the-tour-noted.png 1600w, https://noted.lol/content/images/2024/08/paperless-ngx-start-the-tour-noted.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>Sign in with your chosen username and password. To get the most out of Paperless-ngx, I suggest taking the built-in tour to learn about its core features. Simply click the "Start the tour" button to begin exploring!</p><h2 id="getting-documents-on-the-paperless-ngx-server">Getting Documents on the Paperless-ngx Server</h2><p>This part is up to personal preference. Some people might prefer traditional methods and buy a scanner, while I like using my iPhone with the <a href="https://apps.apple.com/us/app/swift-paperless/id6448698521?ref=noted.lol">Swift Paperless app</a>. The Swift Paperless app offers more features than just scanning documents. It's free, highly rated, and lets me control every aspect of Paperless-ngx, including adding tags, document type, and correspondents before uploading scanned documents to the server. (these settings can also be changed after the scan is completed) I can also create new scans or import documents and photos from my device. Lastly, there's no annoying nag screens asking for donations... nowhere in the app. You can see what people have to say about it <a href="https://github.com/paperless-ngx/paperless-ngx/discussions/3283?ref=noted.lol">here on the Paperless-ngx discussions</a>. You can also sponsor the iOS app here on the <a href="https://github.com/sponsors/paulgessinger?frequency=one-time&sponsor=&ref=noted.lol">Github Repo</a>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/paperless-ngx-native-ios-app-noted.png" class="kg-image" alt="Paperless-ngx: Scan and Digitize Your Documents" loading="lazy" width="2000" height="861" srcset="https://noted.lol/content/images/size/w600/2024/08/paperless-ngx-native-ios-app-noted.png 600w, https://noted.lol/content/images/size/w1000/2024/08/paperless-ngx-native-ios-app-noted.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/paperless-ngx-native-ios-app-noted.png 1600w, https://noted.lol/content/images/2024/08/paperless-ngx-native-ios-app-noted.png 2000w" sizes="(min-width: 1200px) 1200px"></figure><p>While I've tried other iOS iPhone scanning apps, none have met my needs as well as Swift Paperless. Those apps are more general-purpose scanning tools, whereas Swift Paperless was designed specifically for Paperless-ngx. Its tailored features make it the perfect fit for my use case.</p><p>You can simply log into your Paperless-ngx server and have access to all of your documents. From there you can begin scanning or importing new documents or even edit existing docs.</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/IMG_3470.png" width="1284" height="2778" loading="lazy" alt="Paperless-ngx: Scan and Digitize Your Documents" srcset="https://noted.lol/content/images/size/w600/2024/08/IMG_3470.png 600w, https://noted.lol/content/images/size/w1000/2024/08/IMG_3470.png 1000w, https://noted.lol/content/images/2024/08/IMG_3470.png 1284w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/IMG_3471.png" width="1284" height="2778" loading="lazy" alt="Paperless-ngx: Scan and Digitize Your Documents" srcset="https://noted.lol/content/images/size/w600/2024/08/IMG_3471.png 600w, https://noted.lol/content/images/size/w1000/2024/08/IMG_3471.png 1000w, https://noted.lol/content/images/2024/08/IMG_3471.png 1284w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/IMG_3477-1.png" width="1284" height="2778" loading="lazy" alt="Paperless-ngx: Scan and Digitize Your Documents" srcset="https://noted.lol/content/images/size/w600/2024/08/IMG_3477-1.png 600w, https://noted.lol/content/images/size/w1000/2024/08/IMG_3477-1.png 1000w, https://noted.lol/content/images/2024/08/IMG_3477-1.png 1284w" sizes="(min-width: 720px) 720px"></div></div></div></figure><p>To connect, I used my local Paperless-ngx server, keeping it private and not exposing it through Cloudflare. This allowed me to simply enter the server's IP address and port in the Swift Paperless app.</p><p>If you do decide to expose your self-hosted Paperless-ngx server to the internet, exercise caution. This is particularly important when storing sensitive documents containing personal details such as social security numbers, phone numbers, or birth certificates.</p><div class="kg-card kg-callout-card kg-callout-card-accent"><div class="kg-callout-emoji">🚀</div><div class="kg-callout-text">Run your own instance of Paperless-ngx for as little as $2.7/Month with PikaPods! – <a href="https://www.pikapods.com/pods?utm_source=noted&run=paperless-ngx" rel="noreferrer">Start free with $5 welcome credit</a> <b><strong style="white-space: pre-wrap;">🤗</strong></b></div></div><h2 id="final-notes-and-thoughts">Final Notes and Thoughts</h2><p>I've been using Paperless for 2 years, and since its fork to ngx, my experience has been revolutionary! I've digitized important papers, receipts, manuals, and even sentimental cards, giving them new life. With the iOS app, scanning and organizing documents is seamless: open, scan, tag, and send - effortless!</p><p>I've relied heavily on the search function to dig up old receipts, remembering key details like dates or prices. My ultimate dream is to integrate Paperless-ngx with Ollama, allowing me to simply ask questions about my documents and receive instant answers directly on my <a href="https://noted.lol/ollama-openwebui/">self-hosted server through Open WebUI</a>. I'm sure there'll be a solution soon enough, if not already out there.</p><p>For support related questions or inquiries, please refer to the <a href="https://github.com/paperless-ngx/paperless-ngx?ref=noted.lol">Paperless-ngx Github repo</a>. Drop by and give the project a star at the very least!</p><div class="kg-card kg-signup-card kg-width-wide " data-lexical-signup-form style="; display: none;">
|
|
|
|
<picture><img class="kg-signup-card-image" src="https://noted.lol/content/images/2024/08/subscribe-envelopes-flying-in-space-noted.lol.jpg" alt="Paperless-ngx: Scan and Digitize Your Documents"></picture>
|
|
|
|
<div class="kg-signup-card-content">
|
|
|
|
<div class="kg-signup-card-text ">
|
|
<h2 class="kg-signup-card-heading" style="color: #FFFFFF;"><span style="white-space: pre-wrap;">Sign up for Noted</span></h2>
|
|
<p class="kg-signup-card-subheading" style="color: #FFFFFF;"><span style="white-space: pre-wrap;">Maximize Your Homelab Potential with Self-Hosting and Open-Source Solutions.</span></p>
|
|
|
|
<form class="kg-signup-card-form" data-members-form="signup">
|
|
|
|
<div class="kg-signup-card-fields">
|
|
<input class="kg-signup-card-input" id="email" data-members-email type="email" required="true" placeholder="Your email">
|
|
<button class="kg-signup-card-button kg-style-accent" style="color: #FFFFFF;" type="submit">
|
|
<span class="kg-signup-card-button-default">Subscribe</span>
|
|
<span class="kg-signup-card-button-loading"><svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewbox="0 0 24 24">
|
|
<g stroke-linecap="round" stroke-width="2" fill="currentColor" stroke="none" stroke-linejoin="round" class="nc-icon-wrapper">
|
|
<g class="nc-loop-dots-4-24-icon-o">
|
|
<circle cx="4" cy="12" r="3"/>
|
|
<circle cx="12" cy="12" r="3"/>
|
|
<circle cx="20" cy="12" r="3"/>
|
|
</g>
|
|
<style data-cap="butt">
|
|
.nc-loop-dots-4-24-icon-o{--animation-duration:0.8s}
|
|
.nc-loop-dots-4-24-icon-o *{opacity:.4;transform:scale(.75);animation:nc-loop-dots-4-anim var(--animation-duration) infinite}
|
|
.nc-loop-dots-4-24-icon-o :nth-child(1){transform-origin:4px 12px;animation-delay:-.3s;animation-delay:calc(var(--animation-duration)/-2.666)}
|
|
.nc-loop-dots-4-24-icon-o :nth-child(2){transform-origin:12px 12px;animation-delay:-.15s;animation-delay:calc(var(--animation-duration)/-5.333)}
|
|
.nc-loop-dots-4-24-icon-o :nth-child(3){transform-origin:20px 12px}
|
|
@keyframes nc-loop-dots-4-anim{0%,100%{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}
|
|
</style>
|
|
</g>
|
|
</svg></span>
|
|
</button>
|
|
</div>
|
|
<div class="kg-signup-card-success" style="color: #FFFFFF;">
|
|
Email sent! Check your inbox to complete your signup.
|
|
</div>
|
|
<div class="kg-signup-card-error" style="color: #FFFFFF;" data-members-error></div>
|
|
</form>
|
|
|
|
<p class="kg-signup-card-disclaimer" style="color: #FFFFFF;"><span style="white-space: pre-wrap;">No spam. Unsubscribe anytime.</span></p>
|
|
</div>
|
|
</div>
|
|
</div>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:8;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:50:"Tasks.md - Self-Hosted Markdown Based Task Manager";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:42:"Stupid simple self-hosted task management.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:27:"https://noted.lol/tasks-md/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"66a3a7971df9fc000145532e";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:36:"Self Hosted To-do/Project Management";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:28:"Self Hosted Note Taking apps";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Fri, 16 Aug 2024 14:08:14 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:71:"https://noted.lol/content/images/2024/08/tasks.md-self-hosted-noted.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:6489:"<img src="https://noted.lol/content/images/2024/08/tasks.md-self-hosted-noted.jpg" alt="Tasks.md - Self-Hosted Markdown Based Task Manager"><p>I'm completely honest when I say that organization just doesn't come naturally to me. Notes are scattered all over the place, reminders are stuck to random surfaces, and my calendars feel like wishful thinking rather than actual planning tools. It's as if my brain is a black hole for tasks and deadlines and anything that goes in seems to get sucked down and never makes it back out again! And let's be real, cloud-based solutions can be intimidating too. I get that they're supposed to make life easier, but I'm just not comfortable entrusting my entire life to some company's servers. So, what I really need is a self-hosted solution that lets me get organized (or at least pretend to!). And that's exactly what Tasks.md is, the perfect antidote to my organizational chaos!</p><h2 id="what-is-tasksmd">What is Tasks.md</h2><p><a href="https://github.com/BaldissaraMatheus/Tasks.md?ref=noted.lol">Tasks.md</a> is a self-hosted, Markdown file-based task management board.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/tasks.md-noted-main.png" class="kg-image" alt="Tasks.md - Self-Hosted Markdown Based Task Manager" loading="lazy" width="1920" height="1015" srcset="https://noted.lol/content/images/size/w600/2024/08/tasks.md-noted-main.png 600w, https://noted.lol/content/images/size/w1000/2024/08/tasks.md-noted-main.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/tasks.md-noted-main.png 1600w, https://noted.lol/content/images/2024/08/tasks.md-noted-main.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><h2 id="tasksmd-core-features">Tasks.md Core Features</h2><p><strong>Design & Interface</strong></p><ul><li>Craft your task management system with ease using our modern, responsive interface that adapts to any device as a PWA.</li><li>Create cards, lanes, and tags to organize your tasks in a way that suits your workflow</li></ul><p><strong>Content Creation</strong></p><ul><li>Write tasks as Markdown files for a seamless and enjoyable experience</li><li>Take advantage of the power of Markdown to add rich formatting and style to your task descriptions</li></ul><p><strong>Installation & Customization</strong></p><ul><li>Get started quickly with our easy-to-install single Docker image</li><li>Personalize your experience with light or dark themes that sync with your operating system settings</li><li>Choose from three default color themes (Adwaita, Nord, and Catppuccin) to match your unique style</li></ul><p><strong>Flexibility & Integration</strong></p><ul><li>Seamlessly integrate Tasks.md into your existing workflow using subpath-based reverse-proxy support with an environment variable for base path</li></ul><h2 id="install-tasksmd-using-docker">Install Tasks.md using Docker</h2><p>To install Tasks.md on your server, use this Docker Compose stack, which makes the process easy to follow. If you're new to self-hosting, don't worry, we have guides available to help you <a href="https://noted.lol/get-started-self-hosting/">get started with self-hosting</a>. For information on the latest features and updates, refer to the <a href="https://github.com/BaldissaraMatheus/Tasks.md/releases?ref=noted.lol">Tasks.md releases</a>.</p><pre><code>version: "3"
|
|
services:
|
|
tasks.md:
|
|
image: baldissaramatheus/tasks.md
|
|
container_name: tasks.md
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- Title=Noted Tasks
|
|
volumes:
|
|
- /path/to/tasks:/tasks
|
|
- /path/to/config:/config
|
|
restart: unless-stopped
|
|
ports:
|
|
- 3333:8080</code></pre><p>Let's begin! Set up your task management system by adding lanes and cards. Organizing can be a enjoyable experience with Tasks.md.</p><figure class="kg-card kg-image-card"><img src="https://noted.lol/content/images/2024/08/demo.gif" class="kg-image" alt="Tasks.md - Self-Hosted Markdown Based Task Manager" loading="lazy" width="600" height="335" srcset="https://noted.lol/content/images/2024/08/demo.gif 600w"></figure><p>Easily organize your tasks by dragging and dropping cards into different lanes. This simple feature makes task management a seamless experience.</p><p>Tasks.md offers an effortless approach to organization. Each lane you create serves as a corresponding directory on your filesystem, making it easy to navigate and manage. Additionally, each task is represented by a file, providing a clear and structured system for tracking and managing your tasks.</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/directories-organization-1.png" width="1039" height="363" loading="lazy" alt="Tasks.md - Self-Hosted Markdown Based Task Manager" srcset="https://noted.lol/content/images/size/w600/2024/08/directories-organization-1.png 600w, https://noted.lol/content/images/size/w1000/2024/08/directories-organization-1.png 1000w, https://noted.lol/content/images/2024/08/directories-organization-1.png 1039w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/directories-organization-2.png" width="591" height="217" loading="lazy" alt="Tasks.md - Self-Hosted Markdown Based Task Manager"></div><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/directories-organization-3.png" width="591" height="217" loading="lazy" alt="Tasks.md - Self-Hosted Markdown Based Task Manager"></div></div></div></figure><h2 id="final-notes-and-thoughts">Final Notes and Thoughts</h2><p>If you're looking for Kanban-style task management software, Tasks.md is an excellent choice. It offers a minimalist approach that even those new to task management can easily use. For those who prioritize simplicity, Tasks.md is a great option that gets the job done without overwhelming features. Give it a try and discover how simple it is to manage your tasks!</p><p>Swing by the <a href="https://github.com/BaldissaraMatheus/Tasks.md?ref=noted.lol">Tasks.md GitHub repo</a> and give it a star. If you have questions or would like to suggest new features, visit the issue tracker to get involved. Your feedback is important in helping to improve Tasks.md.</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:9;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:42:"Forgejo - Powerful Self-Hosted Git Service";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:84:"Safely self-host your code with Forgejo and take control of your project management.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:26:"https://noted.lol/forgejo/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"66af7f1c1df9fc0001455f88";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:15:"Self Hosted Git";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Mon, 12 Aug 2024 15:02:12 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:58:"https://noted.lol/content/images/2024/08/forgejo-noted.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:7737:"<img src="https://noted.lol/content/images/2024/08/forgejo-noted.jpg" alt="Forgejo - Powerful Self-Hosted Git Service"><p>Having a centralized platform to manage code repositories and collaborate with team members has become increasingly essential. With modern software development often involving multiple moving parts, maintaining control over your project's direction can be a challenge. This is where self-hosted solutions like Forgejo come into play, providing a single, unified space for teams to work together seamlessly.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/frgejo-main-1.png" class="kg-image" alt="Forgejo - Powerful Self-Hosted Git Service" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/frgejo-main-1.png 600w, https://noted.lol/content/images/size/w1000/2024/08/frgejo-main-1.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/frgejo-main-1.png 1600w, https://noted.lol/content/images/2024/08/frgejo-main-1.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><h2 id="what-is-forgejo">What is Forgejo?</h2><p><a href="https://forgejo.org/?ref=noted.lol">Forgejo</a> is a self-hosted Git service that empowers developers to manage their projects without relying on proprietary tools. By self-hosting Forgejo, you'll gain control over your environment, allowing you to customize it to fit your team's needs. You can integrate Forgejo with other tools and services to streamline your workflow, ensure the integrity of your software development process, and collaborate seamlessly with your team members. With Forgejo, you'll have a lightweight, scalable, and secure platform that meets your unique project requirements.</p><p>Brought to you by the collaborative efforts of <a href="https://docs.codeberg.org/getting-started/what-is-codeberg/?ref=noted.lol#what-is-codeberg-e.v.%3F">Codeberg e.V.</a>, Forgejo is a community-driven project that prioritizes freedom and transparency. As a fully open-source solution, it can be trusted to always remain free from proprietary influences. Users have the flexibility to create an account on any instance, or download and self-host their own copy for maximum control and customization. With a focus on security, scalability, federation, and privacy, Forgejo is designed to empower developers like you to work together seamlessly.</p><h2 id="forgejo-key-highlights">Forgejo Key Highlights</h2><p>• <strong>Easy Setup</strong>: Forgejo can be installed in minutes with a <a href="https://forgejo.org/download/?ref=noted.lol#installation-from-binary">simple binary installer</a> or using <a href="https://forgejo.org/docs/latest/admin/installation-docker/?ref=noted.lol">Docker</a> for maximum flexibility.<br>• <strong>Wide Compatibility</strong>: Forgejo runs on Windows, macOS, Linux, ARM, and more making it accessible across a range of platforms.<br>• <strong>Efficient Performance</strong>: Forgejo's lightweight design ensures that it can run smoothly even on resource constrained devices like Raspberry Pi.<br>• <strong>Community-Driven</strong>: As an open-source project, Forgejo allows the community to contribute to its development, shape its future, and benefit from collective expertise.</p><h2 id="installing-forgejo-using-docker-compose">Installing Forgejo using Docker Compose</h2><p>To ensure a secure installation, when using Docker to install Forgejo, make sure to set up your Cloudflare tunnel or Nginx domain beforehand. This is necessary for the installation process, and once complete, you can access the web interface by pointing your domain to port 3000. </p><p>This Docker Compose stack can be used to install Forgejo on your server. If you need help, see our guides about <a href="https://noted.lol/get-started-self-hosting/">getting started with self-hosting</a>. Refer to the <a href="https://forgejo.org/releases/?ref=noted.lol">Forgejo releases</a> for the most recent version.</p><pre><code>version: "3"
|
|
|
|
networks:
|
|
forgejo:
|
|
external: false
|
|
|
|
services:
|
|
server:
|
|
image: codeberg.org/forgejo/forgejo:8.0.1
|
|
container_name: forgejo
|
|
environment:
|
|
- USER_UID=1000
|
|
- USER_GID=1000
|
|
- FORGEJO__database__DB_TYPE=postgres
|
|
- FORGEJO__database__HOST=db:5432
|
|
- FORGEJO__database__NAME=forgejo
|
|
- FORGEJO__database__USER=forgejo
|
|
- FORGEJO__database__PASSWD=forgejo
|
|
restart: always
|
|
networks:
|
|
- forgejo
|
|
volumes:
|
|
- /docker/forgejo/data:/data
|
|
- /etc/timezone:/etc/timezone:ro
|
|
- /etc/localtime:/etc/localtime:ro
|
|
ports:
|
|
- "3000:3000"
|
|
- "222:22"
|
|
depends_on:
|
|
- db
|
|
|
|
db:
|
|
image: postgres:14
|
|
restart: always
|
|
environment:
|
|
- POSTGRES_USER=forgejo
|
|
- POSTGRES_PASSWORD=forgejo
|
|
- POSTGRES_DB=forgejo
|
|
networks:
|
|
- forgejo
|
|
volumes:
|
|
- /docker/forgejo/postgres:/var/lib/postgresql/data</code></pre><p>For added security, when deploying Forgejo in production environments, it is strongly recommended to modify the default database username and password. In our demonstration setup, we'll utilize the default credentials for simplicity, but please update these settings before going live.</p><p>After setting up the Docker Compose stack, navigate to your designated domain to access the Forgejo installation page. Fill out the required information to complete the installation process.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/forgejo-installation-postgress-noted.png" class="kg-image" alt="Forgejo - Powerful Self-Hosted Git Service" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/forgejo-installation-postgress-noted.png 600w, https://noted.lol/content/images/size/w1000/2024/08/forgejo-installation-postgress-noted.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/forgejo-installation-postgress-noted.png 1600w, https://noted.lol/content/images/2024/08/forgejo-installation-postgress-noted.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>After completing the installation form, click the "Install" button to initiate the process. Once the installation is complete, you'll be automatically redirected to the main Forgejo dashboard. From here, you can start creating new repositories, organizations, or performing migrations to get started with managing your Git workflow.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/forgejo-main.png" class="kg-image" alt="Forgejo - Powerful Self-Hosted Git Service" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/forgejo-main.png 600w, https://noted.lol/content/images/size/w1000/2024/08/forgejo-main.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/forgejo-main.png 1600w, https://noted.lol/content/images/2024/08/forgejo-main.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><h3 id="final-notes-and-thoughts">Final Notes and Thoughts</h3><p>As you begin your experience with Forgejo, remember that you're not just installing a Git service - you're joining a community committed to open-source principles. By choosing Forgejo, you're supporting a project that values transparency, collaboration, and the freedom to code without restrictions. With its flexible architecture and modular design, Forgejo enables you to tailor your Git workflow to meet your unique needs, while also contributing to the development of a platform that is truly yours.</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:10;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:43:"Wavelog - Self-Hosted Amateur Radio Logging";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:98:"Self-hosted online amateur radio logging software to record and track your contacts from anywhere!";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:26:"https://noted.lol/wavelog/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"66b76aad00ed580001bc6555";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:12:"Self Hosting";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Sun, 11 Aug 2024 13:16:00 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:70:"https://noted.lol/content/images/2024/08/wavelog-self-hosted-noted.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:10924:"<img src="https://noted.lol/content/images/2024/08/wavelog-self-hosted-noted.jpg" alt="Wavelog - Self-Hosted Amateur Radio Logging"><p>Amateur radio is a hobby where people around the world communicate with each other using special radios and frequencies. Ham radio operators, as they're called, love the thrill of making new contacts and sharing stories from all over the globe. But keeping track of those contacts can be a challenge. That's where Wavelog comes in! By self-hosting your contact logs on Wavelog, you avoid relying on third-party services and enjoy a more personalized experience.</p><h2 id="what-is-wavelog">What is Wavelog?</h2><p><a href="https://github.com/wavelog/wavelog?ref=noted.lol">Wavelog</a> is a self-hosted PHP application that lets you log your amateur radio contacts from anywhere, as long as you have a web browser and an internet connection.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/wavelog-self-hosted-ham-radio-log-main-1.png" class="kg-image" alt="Wavelog - Self-Hosted Amateur Radio Logging" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/wavelog-self-hosted-ham-radio-log-main-1.png 600w, https://noted.lol/content/images/size/w1000/2024/08/wavelog-self-hosted-ham-radio-log-main-1.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/wavelog-self-hosted-ham-radio-log-main-1.png 1600w, https://noted.lol/content/images/2024/08/wavelog-self-hosted-ham-radio-log-main-1.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>Wavelog's development began as a spin-off of Cloudlog in late 2023, driven by four core developers (DF2ET, DJ7NT, HB9HIL, and LA8AJA). Since its initial release on February 1, 2024, Wavelog has made significant progress in stability and functionality. As an open-source project developed by radio amateurs for fellow enthusiasts, Wavelog's code is the result of dedicated effort to continuously improve this great software. With a focus on simplicity, powerful tools, and transparency, Wavelog offers web-based logging accessible from anywhere worldwide. Whether hosted on a professional server, rented space, or a RaspberryPi at home, Wavelog enables you to manage your logbook whenever and wherever you want.</p><h2 id="wavelog-core-features">Wavelog Core Features</h2><p>Wavelog offers a simple web interface for logging contacts. Additionally, the WLGate tool allows you to log contacts from WSJT-X or send CAT data from your radio directly to your Wavelog account. Supports: Windows, Mac, and Linux.</p><p>Wavelog includes advanced mapping features that enable you to easily create custom maps of your contacts. You can also export and share your QSOs as maps, or automatically include them in your QRZ.com bio.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/wavelog-self-hosted-ham-radio-log-QSO.png" class="kg-image" alt="Wavelog - Self-Hosted Amateur Radio Logging" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/wavelog-self-hosted-ham-radio-log-QSO.png 600w, https://noted.lol/content/images/size/w1000/2024/08/wavelog-self-hosted-ham-radio-log-QSO.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/wavelog-self-hosted-ham-radio-log-QSO.png 1600w, https://noted.lol/content/images/2024/08/wavelog-self-hosted-ham-radio-log-QSO.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>Wavelog also provides in-depth analytics to help you understand your ham radio activities. Some examples of what you can track and analyze include:</p><ul><li>Number of grids worked</li><li>Average days per year spent hamming it up</li><li>Farthest distance worked on specific bands, like 70cm</li></ul><p>And many more insights to help you refine your amateur radio experience.</p><p>Wavelog also assists in analyzing your data, providing insights on how close you are to achieving your next award certificate. Currently, over 20 international award programs have been integrated into Wavelog, with more to come.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/wavelog-self-hosted-ham-radio-log-awards.png" class="kg-image" alt="Wavelog - Self-Hosted Amateur Radio Logging" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/wavelog-self-hosted-ham-radio-log-awards.png 600w, https://noted.lol/content/images/size/w1000/2024/08/wavelog-self-hosted-ham-radio-log-awards.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/wavelog-self-hosted-ham-radio-log-awards.png 1600w, https://noted.lol/content/images/2024/08/wavelog-self-hosted-ham-radio-log-awards.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>Wavelog supports seamless integration with popular third-party services, including:</p><ul><li>eQSL</li><li>LoTW</li><li>HRDlog</li><li>QRZ.com</li><li>QO-100 Dx Club</li></ul><p>Your logged contacts are automatically confirmed with eQSL and LoTW, and you can also view and upload scanned eQSL cards directly within the Wavelog web interface.</p><p>Wavelog is available in partial translation across 16 languages, thanks to the collaborative efforts of developers and the community. Some languages still require further refinement, but the software's global reach is a testament to the power of teamwork. Anyone interested in contributing to Wavelog's translations can join the platform and get involved.</p><h2 id="install-wavelog-via-docker-compose">Install Wavelog via Docker Compose</h2><p>This Docker Compose stack can be used to install Wavelog on your server. If you need help, see our guides about <a href="https://noted.lol/get-started-self-hosting/">getting started with self-hosting</a>.</p><pre><code>---
|
|
services:
|
|
wavelog-db:
|
|
image: mariadb:11.3
|
|
container_name: wavelog-db
|
|
environment:
|
|
MARIADB_RANDOM_ROOT_PASSWORD: yes
|
|
MARIADB_DATABASE: wavelog
|
|
MARIADB_USER: wavelog
|
|
MARIADB_PASSWORD: wavelog # <- Insert a strong password here
|
|
volumes:
|
|
- wavelog-dbdata:/var/lib/mysql
|
|
restart: unless-stopped
|
|
|
|
wavelog-main:
|
|
container_name: wavelog-main
|
|
image: ghcr.io/wavelog/wavelog:latest
|
|
depends_on:
|
|
- wavelog-db
|
|
environment:
|
|
CI_ENV: docker
|
|
volumes:
|
|
- wavelog-config:/var/www/html/application/config/docker
|
|
- wavelog-uploads:/var/www/html/uploads
|
|
- wavelog-userdata:/var/www/html/userdata
|
|
ports:
|
|
- "8086:80"
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
wavelog-dbdata:
|
|
wavelog-uploads:
|
|
wavelog-userdata:
|
|
wavelog-config:</code></pre><p>Access Wavelog by visiting the server's IP address on port 8086, where you'll initiate the pre check process.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/wavelog-installer-noted.png" class="kg-image" alt="Wavelog - Self-Hosted Amateur Radio Logging" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/wavelog-installer-noted.png 600w, https://noted.lol/content/images/size/w1000/2024/08/wavelog-installer-noted.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/wavelog-installer-noted.png 1600w, https://noted.lol/content/images/2024/08/wavelog-installer-noted.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>To ensure Wavelog functions properly, you might need to adjust the permissions for three volumes within the wavelog-main container by running a CHMOD command. This allows the application to create and write files in these directories as needed.</p><p>If you leave everything in the Docker Compose as default, (as I did for testing purposes) this is what you will enter for the database section.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/wavelog-db-connection.png" class="kg-image" alt="Wavelog - Self-Hosted Amateur Radio Logging" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/wavelog-db-connection.png 600w, https://noted.lol/content/images/size/w1000/2024/08/wavelog-db-connection.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/wavelog-db-connection.png 1600w, https://noted.lol/content/images/2024/08/wavelog-db-connection.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>If you plan to deploy Wavelog through Cloudflare or a reverse proxy, it's strongly recommended that you update the Docker Compose configuration file to customize these settings.</p><p>If everything went well, you should see green checkmarks across the board.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/wavelog-installer-complete.png" class="kg-image" alt="Wavelog - Self-Hosted Amateur Radio Logging" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/wavelog-installer-complete.png 600w, https://noted.lol/content/images/size/w1000/2024/08/wavelog-installer-complete.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/wavelog-installer-complete.png 1600w, https://noted.lol/content/images/2024/08/wavelog-installer-complete.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>Once you've completed the pre check process, simply click 'Install Now' to finalize the setup and start using Wavelog for logging your amateur radio contacts.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/wavelog-welcome.png" class="kg-image" alt="Wavelog - Self-Hosted Amateur Radio Logging" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/wavelog-welcome.png 600w, https://noted.lol/content/images/size/w1000/2024/08/wavelog-welcome.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/wavelog-welcome.png 1600w, https://noted.lol/content/images/2024/08/wavelog-welcome.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><h2 id="final-notes-and-thoughts">Final Notes and Thoughts</h2><p>Wavelog is more than just a tool for logging amateur radio contacts, it's a way to store and manage your QSOs exactly as you like, without relying on external services. By using Wavelog, you're getting a self-hosted solution that lets you keep your data private and customized to your needs. And with its open-source foundation, you have the power to shape the software's future and make it an even better fit for your ham radio journey.</p><p>Swing by the <a href="https://github.com/wavelog/wavelog?ref=noted.lol">Wavelog Github repo</a> and give it a star. Be sure to direct any support questions or feature requests on the issue tracker there.</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:11;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:39:"Homelab Spotlight - 3D Printed NUC Rack";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:92:"Homelab Spotlight makes a come back with Reddit user u/NeyPalm and their 6 NUC rack cluster!";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:38:"https://noted.lol/3d-printed-nuc-rack/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"66abef5b1df9fc0001455e5e";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:17:"Homelab Spotlight";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Fri, 09 Aug 2024 17:46:49 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:82:"https://noted.lol/content/images/2024/08/3d-printed-nuc-rack-homelab-spotlight.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:5934:"<img src="https://noted.lol/content/images/2024/08/3d-printed-nuc-rack-homelab-spotlight.jpg" alt="Homelab Spotlight - 3D Printed NUC Rack"><p>I recently had the opportunity to conduct a Q&A session with Reddit user u/NeyPalm. After I saw their impressive <a href="https://www.reddit.com/r/homelab/comments/1cbu80j/finally_finished_my_custom_rack_project/?ref=noted.lol">homelab setup posted on r/homelab</a>, I knew I had to share it with all of you. The level of detail and expertise on display is truly remarkable, and I think many people would benefit from seeing how they've put together this system.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/finally-finished-my-custom-rack-project-v0-i75u1rapbewc1.webp" class="kg-image" alt="Homelab Spotlight - 3D Printed NUC Rack" loading="lazy" width="2000" height="1126" srcset="https://noted.lol/content/images/size/w600/2024/08/finally-finished-my-custom-rack-project-v0-i75u1rapbewc1.webp 600w, https://noted.lol/content/images/size/w1000/2024/08/finally-finished-my-custom-rack-project-v0-i75u1rapbewc1.webp 1000w, https://noted.lol/content/images/size/w1600/2024/08/finally-finished-my-custom-rack-project-v0-i75u1rapbewc1.webp 1600w, https://noted.lol/content/images/2024/08/finally-finished-my-custom-rack-project-v0-i75u1rapbewc1.webp 2000w" sizes="(min-width: 1200px) 1200px"></figure><p><strong>Tell us about the hardware in this homelab setup.</strong></p><p>My Homelab is only for my in-house IT and is intended as a playground for further training, testing services and simplifying everyday life.</p><p>Specs: 6x NUC7i3BNK each with 16GB RAM, Thinkcentre M720q 32GB, Netgear GS324 Switch 24 Port and a PC Engines APU 2D4 16GB Ram Firewall</p><p>The Thinkcentre is my ProxMox on which all services run. I also use the APU2 board as a firewall/router and the NUC Cluster as a Kubernetes playground.</p><p><strong>What inspired you to build the 3D rack and for what purpose? It sure looks awesome! But was it just for aesthetics?</strong></p><p>I wanted to have (almost) all my IT in one place. However, I had the problem that some things didn't fit into a 10inch rack and I decided to build a custom rack because I don't have the space for a 19inch rack. Besides, building it is certainly as much fun as using it afterwards. Aesthetics of course also play a big role, as it's quite open in my house and everyone can see it.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/finally-finished-my-custom-rack-project-v0-qoz14tapbewc1.webp" class="kg-image" alt="Homelab Spotlight - 3D Printed NUC Rack" loading="lazy" width="2000" height="1126" srcset="https://noted.lol/content/images/size/w600/2024/08/finally-finished-my-custom-rack-project-v0-qoz14tapbewc1.webp 600w, https://noted.lol/content/images/size/w1000/2024/08/finally-finished-my-custom-rack-project-v0-qoz14tapbewc1.webp 1000w, https://noted.lol/content/images/size/w1600/2024/08/finally-finished-my-custom-rack-project-v0-qoz14tapbewc1.webp 1600w, https://noted.lol/content/images/size/w2400/2024/08/finally-finished-my-custom-rack-project-v0-qoz14tapbewc1.webp 2400w" sizes="(min-width: 1200px) 1200px"></figure><p><strong>What 3D printer do you use?</strong></p><p>I'm using a Anycubic Vyper. Its a 245x245 and it was pretty challenging to fit some parts on the bed. The panels are 28cm long, it was a tight fit diagonal.</p><p><strong>Can you share any files or links for the 3D project?</strong></p><p>I have shared some files under the following link: <a href="https://www.thingiverse.com/thing:6593228?ref=noted.lol">https://www.thingiverse.com/thing:6593228</a> Please note that these files were created for exactly my setup with custom sizes that are not standard.</p><p><strong>What self-hosted applications are you running on this setup?</strong></p><p>I used the NUC cluster to learn about Kubernetes, more precisely to build a barebones cluster and to train myself further for work. The Lenovo ThinkCentre runs Proxmox with some services like Docker, Plex with Debrid/Servarr Stack, Pihole, Bookstack and some Unix machines for testing. The PC Engines APU2 board is my router, it ran for Pfsense some time, but I have now switched to OPNsense because I had some problems with PFsense and because i didnt like.</p><p><strong>Have you added anything to it since the Reddit post? Any new photos you'd like to share?</strong></p><p>The rack is currently being rebuilt. I no longer have any use for the NUC cluster and some of these machines are being replaced with other ThinkCentres to build a ProxMox cluster so that I have more computing power available and build redundancy. As I still have space available, I have other options in the pipeline that I can't say anything more about at the moment.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/finally-finished-my-custom-rack-project-v0-l18gwsapbewc1.webp" class="kg-image" alt="Homelab Spotlight - 3D Printed NUC Rack" loading="lazy" width="1080" height="608" srcset="https://noted.lol/content/images/size/w600/2024/08/finally-finished-my-custom-rack-project-v0-l18gwsapbewc1.webp 600w, https://noted.lol/content/images/size/w1000/2024/08/finally-finished-my-custom-rack-project-v0-l18gwsapbewc1.webp 1000w, https://noted.lol/content/images/2024/08/finally-finished-my-custom-rack-project-v0-l18gwsapbewc1.webp 1080w"></figure><h2 id="final-notes-and-thoughts">Final Notes and Thoughts</h2><p>I'm really impressed by this homelab setup! It's one of the coolest I've seen in a while. If you're not already inspired to build your own, I don't know what would be! And speaking of inspiration, wouldn't this make an amazing first post for someone starting a blog? Hint hint u/NeyPalm. 🙂</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:12;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:45:"Snapp - Yet Another Self-Hosted Url Shortener";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:69:"Snapp empowers you to effortlessly create and manage shortened links.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:24:"https://noted.lol/snapp/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"669ff5dccaf0210001ac6379";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:26:"Self Hosted URL Shorteners";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Thu, 08 Aug 2024 14:49:00 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:91:"https://noted.lol/content/images/2024/07/snapp-self-hosted-url-shortener-main-noted.lol.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:6019:"<img src="https://noted.lol/content/images/2024/07/snapp-self-hosted-url-shortener-main-noted.lol.jpg" alt="Snapp - Yet Another Self-Hosted Url Shortener"><p>Introducing Snapp, a reliable self-hosted URL shortener, crafted to simplify link collecting and sharing.</p><h2 id="what-is-snapp">What is Snapp?</h2><p><a href="https://github.com/urania-dev/snapp?ref=noted.lol">Snapp</a> is your self-hostable URL shortening service. Effortlessly shorten links, and with Snapp's self-hosting capability, you have complete control. Create concise, shareable links on your terms with Snapp's user-friendly platform.</p><p>Snapp was created with an emphasis on privacy and control. With Snapp, you get to personalize your link endings, monitor how many times your links are clicked, and for an extra layer of security, you can set expiration dates on your links.</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/snapp-analytics.png" width="1920" height="911" loading="lazy" alt="Snapp - Yet Another Self-Hosted Url Shortener" srcset="https://noted.lol/content/images/size/w600/2024/08/snapp-analytics.png 600w, https://noted.lol/content/images/size/w1000/2024/08/snapp-analytics.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/snapp-analytics.png 1600w, https://noted.lol/content/images/2024/08/snapp-analytics.png 1920w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/snapp-links.png" width="1920" height="911" loading="lazy" alt="Snapp - Yet Another Self-Hosted Url Shortener" srcset="https://noted.lol/content/images/size/w600/2024/08/snapp-links.png 600w, https://noted.lol/content/images/size/w1000/2024/08/snapp-links.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/snapp-links.png 1600w, https://noted.lol/content/images/2024/08/snapp-links.png 1920w" sizes="(min-width: 720px) 720px"></div></div></div></figure><h2 id="snapp-core-features">Snapp Core Features</h2><ul><li><strong>Intuitive User Interface:</strong> Snapp offers a user-friendly interface for easy link shortening.</li><li><strong>Secure Authentication:</strong> Enjoy secure sessions for your user. Their information is protected.</li><li><strong>Custom Short Codes:</strong> Personalize your short codes to make your links memorable and easy to share.</li><li><strong>Expiration Dates:</strong> Manage link lifespans with expiration dates. You can set expiry dates for added security or let links remain active indefinitely.</li><li><strong>Secret Links:</strong> Enhance security with secret links, allowing you to share with a select audience using unique secrets.</li><li><strong>Usage Analytics:</strong> Access detailed, anonymous analytics for your links. Snapp provides insights into link engagements.</li><li><strong>Extended Metrics:</strong> Integrate Snapp with your self-hosted or cloud-based Umami Analytics for advanced metrics.</li><li><strong>URL Reputation Check:</strong> Ensure the safety of links with VirusTotal API reputation checks.</li><li><strong>REST API:</strong> Community-requested REST API endpoints enable remote management of your Snapp instance.</li></ul><p>Snapp started as a way for the developer to learn Svelte, Svelte5 Runes, and Tabler, which form the core of Snapp's functionality.</p><p>Snapp's easy installation using Docker allows you to get it up and running in seconds on your homelab or cloud host. If you need help, see our guides about <a href="https://noted.lol/get-started-self-hosting/">getting started with self-hosting</a>.</p><h2 id="install-snapp-using-docker">Install Snapp using Docker</h2><p>Use the following Docker run command to install Snapp on your system.</p><pre><code>services:
|
|
snapp:
|
|
image: uraniadev/snapp:0.8
|
|
ports:
|
|
- 3000:3000
|
|
environment:
|
|
DATABASE_URL: 'file:./db.sqlite'
|
|
DATABASE_PROVIDER: sqlite # mysql | sqlite | pg
|
|
TOKEN_SECRET: # openssl rand -base64 32
|
|
ORIGIN: https://example.com</code></pre><p><strong>Note</strong>: SQLite database is located in /app/prisma/{DATABASE_URL} if you want to mount it</p><h2 id="default-admin-authentication">Default Admin Authentication</h2><p><a href="https://github.com/urania-dev/snapp?ref=noted.lol#default-admin-authentication"></a></p><p>If ENV variables ADMIN_USERNAME and ADMIN_PASSWORD are not set it defaults to:</p><pre><code> username: admin
|
|
password: password</code></pre><p>To get started, simply update the origin and public URL to your domain or local IP, and then access it through your web browser.</p><p>You can then begin adding links to be shortened.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/snapp-add-url.png" class="kg-image" alt="Snapp - Yet Another Self-Hosted Url Shortener" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/snapp-add-url.png 600w, https://noted.lol/content/images/size/w1000/2024/08/snapp-add-url.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/snapp-add-url.png 1600w, https://noted.lol/content/images/2024/08/snapp-add-url.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><h2 id="final-notes-and-thoughts">Final Notes and Thoughts</h2><p>Snapp is user-friendly and functions smoothly right away. I encountered a minor hiccup where the initial URL page didn't generate the custom short code on the first try. Instead, it gave it a random one so I had to edit the link and save it once more for it to work. Aside from that, it operates effectively, and I suggest you try it out! If you like using Snapp, don't forget to visit the <a href="https://github.com/urania-dev/snapp?ref=noted.lol">Snapp GitHub repository</a> and show your support with a star!</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:13;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:60:"Automate your Proxmox Homelab with Proxmox VE Helper Scripts";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:53:"Super cool scripts for Promox VE that automate tasks.";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:44:"https://noted.lol/proxmox-ve-helper-scripts/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"66af7cc11df9fc0001455f78";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:12:"Homelab Tips";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Wed, 07 Aug 2024 17:10:36 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:78:"https://noted.lol/content/images/2024/08/proxmox-helper-scripts-main-noted.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:9587:"<img src="https://noted.lol/content/images/2024/08/proxmox-helper-scripts-main-noted.jpg" alt="Automate your Proxmox Homelab with Proxmox VE Helper Scripts"><p>For those who use Proxmox VE as part of their home lab setup, these helper scripts can be a valuable asset. By streamlining the process of setting up and deploying applications and tools, they make it possible to get started with new projects and experiments more quickly and efficiently.</p><h2 id="what-are-proxmox-ve-helper-scripts">What are Proxmox VE Helper Scripts?</h2><p>The <a href="https://github.com/tteck/Proxmox?ref=noted.lol">Proxmox VE Helper Scripts</a> were developed to simplify the process of deploying self-hosted applications and tools using Promox Virtual Environment. These scripts have gained popularity among users, particularly those who create and share their own homelab setups online. Notably, they've been featured by popular YouTuber TechnoTim, a well-known figure in the homelab community. With over 12,000 stars on GitHub, these scripts are highly respected for making it easier to set up and manage virtual environments.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/kcpu4z5eSEU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Proxmox Automation with Proxmox Helper Scripts!"></iframe></figure><p>The Proxmox VE Helper Scripts repository offers a vast collection of nearly 200 pre-configured applications and tools, each accessible via a one line bash script that handles installation, updates, and configuration.</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/proxmox-helper-scripts-website-1.png" width="941" height="703" loading="lazy" alt="Automate your Proxmox Homelab with Proxmox VE Helper Scripts" srcset="https://noted.lol/content/images/size/w600/2024/08/proxmox-helper-scripts-website-1.png 600w, https://noted.lol/content/images/2024/08/proxmox-helper-scripts-website-1.png 941w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/proxmox-helper-scripts-website-2.png" width="1195" height="583" loading="lazy" alt="Automate your Proxmox Homelab with Proxmox VE Helper Scripts" srcset="https://noted.lol/content/images/size/w600/2024/08/proxmox-helper-scripts-website-2.png 600w, https://noted.lol/content/images/size/w1000/2024/08/proxmox-helper-scripts-website-2.png 1000w, https://noted.lol/content/images/2024/08/proxmox-helper-scripts-website-2.png 1195w" sizes="(min-width: 720px) 720px"></div></div></div></figure><p>You can use these scripts to create a Linux container or virtual machine by making choices interactively. You'll see options in a window that helps you set up your container or virtual machine.</p><p>There are two ways to do this: one is simple and uses default settings, and the other lets you customize those defaults if you want to. When you make your selections, the script will gather and check your input to create the final setup for your container or virtual machine.</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/proxmox-helper-scripts-debian.png" width="1423" height="613" loading="lazy" alt="Automate your Proxmox Homelab with Proxmox VE Helper Scripts" srcset="https://noted.lol/content/images/size/w600/2024/08/proxmox-helper-scripts-debian.png 600w, https://noted.lol/content/images/size/w1000/2024/08/proxmox-helper-scripts-debian.png 1000w, https://noted.lol/content/images/2024/08/proxmox-helper-scripts-debian.png 1423w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/proxmox-helper-scripts-debian-2.png" width="1421" height="614" loading="lazy" alt="Automate your Proxmox Homelab with Proxmox VE Helper Scripts" srcset="https://noted.lol/content/images/size/w600/2024/08/proxmox-helper-scripts-debian-2.png 600w, https://noted.lol/content/images/size/w1000/2024/08/proxmox-helper-scripts-debian-2.png 1000w, https://noted.lol/content/images/2024/08/proxmox-helper-scripts-debian-2.png 1421w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/proxmox-helper-scripts-debian-3.png" width="1429" height="626" loading="lazy" alt="Automate your Proxmox Homelab with Proxmox VE Helper Scripts" srcset="https://noted.lol/content/images/size/w600/2024/08/proxmox-helper-scripts-debian-3.png 600w, https://noted.lol/content/images/size/w1000/2024/08/proxmox-helper-scripts-debian-3.png 1000w, https://noted.lol/content/images/2024/08/proxmox-helper-scripts-debian-3.png 1429w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://noted.lol/content/images/2024/08/proxmox-helper-scripts-debian-4.png" width="1595" height="663" loading="lazy" alt="Automate your Proxmox Homelab with Proxmox VE Helper Scripts" srcset="https://noted.lol/content/images/size/w600/2024/08/proxmox-helper-scripts-debian-4.png 600w, https://noted.lol/content/images/size/w1000/2024/08/proxmox-helper-scripts-debian-4.png 1000w, https://noted.lol/content/images/2024/08/proxmox-helper-scripts-debian-4.png 1595w" sizes="(min-width: 720px) 720px"></div></div></div></figure><h2 id="final-notes-and-thoughts">Final Notes and Thoughts</h2><p>As someone who uses Proxmox VE in my own homelab, I can attest to the value of these helper scripts firsthand. By leveraging them to quickly deploy applications and tools, I've been able to save myself hours of setup time using them.</p><p>Be sure to check out the <a href="https://github.com/tteck/Proxmox?ref=noted.lol">Proxmox Helper Scripts Github</a> for more details and be sure to give it a star!</p><p><a href="https://www.proxmox.com/en/proxmox-virtual-environment/overview?ref=noted.lol">Proxmox VE</a> is a popular choice for those looking to sel-host their own applications and services at home. As an open-source solution, it offers a lot of flexibility and customization options. And as it's completely free to use, it's a great option for anyone who wants to experiment with virtualization or build a small-scale cloud infrastructure.</p><p>If you'd like to learn more about Proxmox, see the following articles:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://noted.lol/proxmox-for-beginners/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">A Complete Beginners Guide to Proxmox</div><div class="kg-bookmark-description">Proxmox is a free, open-source virtualization platform that allows you to run multiple operating systems and virtual machines on a single physical server. Get started with Proxmox here! 🔥</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://noted.lol/content/images/size/w256h256/2023/08/Icon-1.2-1.png" alt="Automate your Proxmox Homelab with Proxmox VE Helper Scripts"><span class="kg-bookmark-author">Noted</span><span class="kg-bookmark-publisher">Jeremy</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://noted.lol/content/images/2023/03/proxmox-getting-started-noted.lol.jpg" alt="Automate your Proxmox Homelab with Proxmox VE Helper Scripts"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://noted.lol/2-years-with-proxmox-on-a-nuc10i7fnh/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">2 Years with Proxmox on a NUC10i7FNH</div><div class="kg-bookmark-description">Small form factor PCs are becoming more popular in homelab environments. Here’s my experience with the NUC 10 and Proxmox over the last 2 years.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://noted.lol/content/images/size/w256h256/2023/08/Icon-1.2-1.png" alt="Automate your Proxmox Homelab with Proxmox VE Helper Scripts"><span class="kg-bookmark-author">Noted</span><span class="kg-bookmark-publisher">Jeremy</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://noted.lol/content/images/2022/06/nuc-noted-main.png" alt="Automate your Proxmox Homelab with Proxmox VE Helper Scripts"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://noted.lol/an-intro-to-proxmox-backup-server/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">An Intro and Crash Course on Proxmox Backup Server</div><div class="kg-bookmark-description">Let’s take a close look at Proxmox Backup Server and how to get started with it. 🧡</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://noted.lol/content/images/size/w256h256/2023/08/Icon-1.2-1.png" alt="Automate your Proxmox Homelab with Proxmox VE Helper Scripts"><span class="kg-bookmark-author">Noted</span><span class="kg-bookmark-publisher">Jeremy</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://noted.lol/content/images/2023/03/an-intro-to-proxmox-backup-server-noted.lol.jpg" alt="Automate your Proxmox Homelab with Proxmox VE Helper Scripts"></div></a></figure>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:14;a:6:{s:4:"data";s:0:"";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:4:{s:0:"";a:6:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:37:"Medama - Simple Self-Hosted Analytics";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:69:"Meet Medama, the ultra simple self-hosted website analytics solution!";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:25:"https://noted.lol/medama/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:24:"66abae611df9fc0001455de0";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:21:"Self Hosted Analytics";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:29:"Sat, 03 Aug 2024 14:52:58 GMT";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:6:"Jeremy";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:29:"http://search.yahoo.com/mrss/";a:1:{s:7:"content";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:2:{s:3:"url";s:79:"https://noted.lol/content/images/2024/08/medama-self-hosted-analytics-noted.jpg";s:6:"medium";s:5:"image";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:4501:"<img src="https://noted.lol/content/images/2024/08/medama-self-hosted-analytics-noted.jpg" alt="Medama - Simple Self-Hosted Analytics"><p>Setting up self-hosted analytics can sometimes be a pain. Some solutions are complicated and require technical expertise. But Medama Analytics is a breath of fresh air. Its easy installation process means you can start tracking your data quickly, without getting overwhelmed by technical details.</p><h2 id="what-is-medama-analytics">What is Medama Analytics?</h2><p>As an open-source project, <a href="https://github.com/medama-io/medama?ref=noted.lol">Medama Analytics</a> offers self-hostable, cookie-free website analytics that puts privacy first. With a lightweight tracker that's less than 1KB in size, it provides valuable insights while minimizing data collection.</p><p>Medama Analytics offers a range of tools to help users gain insights into their online presence. Real-time analytics provide instant feedback on website performance and user interactions. Meanwhile, Medama's focus on privacy ensures that data is collected without cookies, IP addresses, or other identifying information. The platform also features an OpenAPI-based server for easy integration with existing dashboards, as well as a self-hostable setup that can be deployed on virtual machines with modest memory requirements.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/medama-self-hosted-analytics-main.png" class="kg-image" alt="Medama - Simple Self-Hosted Analytics" loading="lazy" width="960" height="768" srcset="https://noted.lol/content/images/size/w600/2024/08/medama-self-hosted-analytics-main.png 600w, https://noted.lol/content/images/2024/08/medama-self-hosted-analytics-main.png 960w"></figure><h2 id="install-medama-using-docker-compose">Install Medama using Docker Compose</h2><p>This Docker Compose stack can be used to install Medama on your server. If you need help, see our guides about <a href="https://noted.lol/get-started-self-hosting/">getting started with self-hosting</a>.</p><pre><code class="language-yaml">version: '3'
|
|
services:
|
|
medama:
|
|
image: ghcr.io/medama-io/medama:latest
|
|
ports:
|
|
- "8080:8080"
|
|
volumes:
|
|
- medama-data:/app/data
|
|
volumes:
|
|
medama-data:
|
|
</code></pre><p>For login purposes, only localhost and HTTPS connections are accepted. Logging in via an insecure HTTP connection will result in failure.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://noted.lol/content/images/2024/08/medama-self-hosted-analytics-dash.png" class="kg-image" alt="Medama - Simple Self-Hosted Analytics" loading="lazy" width="1920" height="911" srcset="https://noted.lol/content/images/size/w600/2024/08/medama-self-hosted-analytics-dash.png 600w, https://noted.lol/content/images/size/w1000/2024/08/medama-self-hosted-analytics-dash.png 1000w, https://noted.lol/content/images/size/w1600/2024/08/medama-self-hosted-analytics-dash.png 1600w, https://noted.lol/content/images/2024/08/medama-self-hosted-analytics-dash.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><p>To start using Medama, login then add your website. Next, grab the tracking code from the docs since it's not currently available in the backend.</p><pre><code><script defer src="https://[your-public-api-hostname].com/script.js"></script></code></pre><p>If you need more ways to install Medama, please see the <a href="https://oss.medama.io/introduction?ref=noted.lol" rel="noreferrer">Medama documentation</a>. There is also a single binary installation option.</p><h2 id="final-notes-and-thoughts">Final Notes and Thoughts</h2><p>It's odd that I had to search for the tracking snippet, while many other analytics platforms provide it automatically. You'd think it would be a standard feature.</p><p>Overall, Medama is a solid choice for analytics due to its ease of use and simplicity. The fact that you can quickly install it using Docker and start viewing stats right away on one page is a major plus. While it's still a relatively new solution, we may see some exciting developments in the future, including potentially enhanced tracking capabilities within the backend.</p><p>See more about Medama on the <a href="https://github.com/medama-io/medama?ref=noted.lol">Medama Github repo</a>. Don't forget to show your appreciation by giving the project a star!</p>";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}}}s:27:"http://www.w3.org/2005/Atom";a:1:{s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:3:{s:4:"href";s:22:"https://noted.lol/rss/";s:3:"rel";s:4:"self";s:4:"type";s:19:"application/rss+xml";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}}}}}}}}s:4:"type";i:128;s:7:"headers";a:14:{s:4:"date";s:29:"Sun, 27 Oct 2024 11:29:42 GMT";s:12:"content-type";s:23:"text/xml; charset=utf-8";s:13:"cache-control";s:17:"public, max-age=0";s:16:"content-encoding";s:4:"gzip";s:4:"etag";s:37:"W/"28106-q08E7lpQtCxfAL0qMW4ZB+kAH+g"";s:4:"vary";s:15:"Accept-Encoding";s:12:"x-powered-by";s:7:"Express";s:15:"cf-cache-status";s:7:"DYNAMIC";s:9:"report-to";s:227:"{endpoints:[{url:https:\/\/a.nel.cloudflare.com\/report\/v4?s=GPJnX2vRmMFoXUOBXQb94lHJq7z%2FSZSP%2FcAeXs7xbt9PkkebtfG9mAPvVKTMV3TPvR%2BNlo8BNJTfGJdk%2FGiYfboDopZBXdQv8wsTBsNkaeuS03e0WTAbSg6Ud7E%3D}],group:cf-nel,max_age:604800}";s:3:"nel";s:52:"{success_fraction:0,report_to:cf-nel,max_age:604800}";s:6:"server";s:10:"cloudflare";s:6:"cf-ray";s:20:"8d925990ee23e1a6-MRS";s:7:"alt-svc";s:17:"h3=:443; ma=86400";s:13:"server-timing";s:170:"cfL4;desc=?proto=TCP&rtt=19638&sent=6&recv=9&lost=0&retrans=0&sent_bytes=3380&recv_bytes=1013&delivery_rate=161652&cwnd=239&unsent_bytes=0&cid=0193890018617b59&ts=558&x=0";}s:5:"build";s:14:"20240826063859";s:5:"mtime";i:1730028583;s:3:"md5";s:32:"634f78c12a5cb8ddf25d2066b5fe2c13";} |