Jellyfin @ Cédric Walter | Sunday, Jan 7, 2024 | 11 minutes read | 2306 Words | Update at Tuesday, Mar 19, 2024

Automation Architecture

%%{ init: { 'theme': 'base', 'themeVariables': { 'nodeFontSize': '14', 'primaryColor': '#2e8b57', 'primaryTextColor': '#fff', 'primaryBorderColor': '#7C0000', 'lineColor': '#F8B229', 'secondaryColor': '#006100', 'tertiaryColor': '#fff' } } }%% flowchart LR subgraph Internet Area Internet --> Router end subgraph Firewall Area Router --> OpenSense OpenSense --> UbiquityWifi end subgraph Authentik Area OpenSense --> Authentik Authentik --> Users Authentik --> Admin end subgraph User Area Users(🙎‍♂️🙎‍♀️🙎‍♂️🙎‍♀️) --> Homarr(Homarr Dashboard) Users(🙎‍♂️🙎‍♀️🙎‍♂️🙎‍♀️) --> Jellyfin(Jellyfin Mediacenter) Users(🙎‍♂️🙎‍♀️🙎‍♂️🙎‍♀️) --> Kavita(Kavita comics reader) Kavita --> |read|KavitaFolder[(Kavita folder)] Users(🙎‍♂️🙎‍♀️🙎‍♂️🙎‍♀️) --> CalibreWeb(CalibreWeb books reader) CalibreWeb --> |read|CalibreWebFolder[(CalibreWeb folder)] Jellyfin --> Jellyseer((Jellyseer request)) Jellyfin --> |read, write|JellyfinFolder[(Jellyfin folder)] Users(🙍‍♂️🙍‍♂️🙍‍♂️) --> Jellyseer(Jellyseer requests) end subgraph Admin Area Jellyseer(Jellyseer requests) --> Sonarr(Sonarr for series) Jellyseer(Jellyseer requests) --> Radarr(Radarr for movies) Admin(Admin 🥷) --> Prowlar Prowlar(Prowlar for indexers) --> |RSS, API|Torrents Prowlar(Prowlar for indexers) --> |RSS, API|NZB Prowlar(Prowlar for indexers) --> |use proxy|Solarflare(Solarflare proxy) Prowlar(Prowlar for indexers) --> |Inject indexers|Sonarr Prowlar(Prowlar for indexers) --> |Inject indexers|Radarr Prowlar(Prowlar for indexers) --> |Inject indexers|Lidarr Prowlar(Prowlar for indexers) --> |Inject indexers|Readarr Prowlar(Prowlar for indexers) --> |Inject indexers|Mylar3 Prowlar(Prowlar for indexers) --> |Inject indexers|Bazarr Admin(Admin 🥷) --> Lidarr Admin(Admin 🥷) --> Filebot(Filebot 8080) Lidarr(Lidarr Audio) --> |as download client|RTDClient(Real-Debrid Torrent Client) Admin(Admin 🥷) --> Readarr Readarr --> |write new books|CalibreWebFolder Readarr(Readarr Book) --> |as download client|RTDClient(Real-Debrid Torrent Client) Readarr(Readarr Book) --> |as download client|SABnzbd(SABnzbd usenet client) Admin(Admin 🥷) --> Radarr Radarr(Radarr Movies) --> |as download client|RTDClient(Real-Debrid Torrent Client) Admin(Admin 🥷) --> Sonarr Sonarr(Sonarr TVshow) --> |as download client|RTDClient(Real-Debrid Torrent Client) Admin(Admin 🥷) --> Mylar3 Mylar3 --> |write new comics|KavitaFolder Mylar3(Mylar3 Comics) --> |as download client|RTDClient(Real-Debrid Torrent Client) Admin(Admin 🥷) --> Bazarr Bazarr(Bazarr Subtitle) --> |as download client|RTDClient(Real-Debrid Torrent Client) Admin(Admin 🥷) --> RTDClient(Real-Debrid Torrent Client) RTDClient(Real-Debrid Torrent Client) --> |API key|RealDebrid(https://real-debrid.com) RTDClient(Real-Debrid Torrent Client) --> |write|LidarrFolder[(Lidarr folder)] RTDClient(Real-Debrid Torrent Client) --> |write|SonarrFolder[(Sonarr folder)] RTDClient(Real-Debrid Torrent Client) --> |write|ReadarrFolder[(Readarr folder)] RTDClient(Real-Debrid Torrent Client) --> |write|RadarrFolder[(Radarr folder)] RTDClient(Real-Debrid Torrent Client) --> |write|Mylar3Folder[(Mylar3 folder)] RTDClient(Real-Debrid Torrent Client) --> |write|BazarrFolder[(Bazarr folder)] end

Real-Debrid Torrent Client https://github.com/rogerfar/rdt-client All Arr-tools listed https://github.com/Ravencentric/awesome-arr

Link to Gist

There is no easy way to script it more, you need to define an administrator login in each tool, and remove in all rr tools any configuration errors.

Jellyfin and IPTV

IPTV is really a first class citizen in Jellyfin, no need to run Xteve or udproxy! just add m3u url in dashboard

here is a great list of free IPTV m3u list https://github.com/iptv-org/iptv

some channels will be geo blocked

Running Filebot for free

If you have some media that require renaming, Filebot can quickly rename a bulk of media files by pulling their metadata from specific resources. This is great until the application became closed source or behind the paywall. There are many forks of the last open-source version, but the repo from coppit/filebot is a docker container with web-UI. The old version 4.9.7 is still open source and is mroe than enough to support plex or jellyfin.

Here is a simple docker compose file using https://hub.docker.com/r/coppit/filebot

Use proper USER_ID/GROUP_ID, one reason you’d want to run the container under the same UID and GID as your user is so that any files created by the container in the host file system will be owned by you

version: '3'
services:
  filebot:
    container_name: filebot
    image: coppit/filebot
    env_file: .env
    environment:
      - WIDTH=1920
      - HEIGHT=1080
      - USER_ID=1000 # use the right value by running: id -u $USER
      - GROUP_ID=1000 # use the right value by running: id -g $USER
    ports:
      - 8080:8080
    volumes:
      - /root/docker/filebot:/config:rw
      - /my/my_media_path:/media:rw
    restart: unless-stopped

To get the web UI working, we need first to modify the filebot.conf that is located in the /config folder.

sed -i 's/RUN_UI=no/RUN_UI=yes/' /root/docker/filebot/filebot.conf

Once done, run the command docker-compose up -d and open a web browser and the URL is http://:<8080 and it should take you the web interface of the coppit/filebot container. This docker image use Apache Guacamole , Apache Guacamole provides access to much of the functionality of a desktop from within your web browser.

Open the Apache Guacamole menu, it is a sidebar which is hidden until explicitly shown. On a desktop or other device which has a hardware keyboard, you can show this menu by pressing

  • Shift+Control+Command (Macos)
  • Ctrl+Alt+Shift (windows)

Choose “Input Method” the value “Text Input” so you can cut and paste inside the desktop.

For Jellyfin, you can use the following format (right click, then select movie, then use) {plex.derive{" by $director"} { [imdb-$imdbid] } {" [$vf, $vc, $ac]"}} but also `{plex}`` may be enough.

Goodbye Plex, Hello Jellyfin! The Future of Media Servers

I made the switch from Plex Media Server to Jellyfin due to its open-source nature, better privacy protection, cost-effectiveness, compatibility with more file formats, and customization options. With a growing community of users and developers behind it, Jellyfin is poised to become an even stronger contender in the media server market. If you are looking for a reliable and feature-rich alternative to Plex, give Jellyfin a try – I’m confident that you won’t be disappointed!

Why Did I Switch from Plex?

  1. One platform to rule it all. Even if not as good as dedicated software I can use Jellyfin and manage all my needs
  • Jellyfin Books instead of calibre (I still use it to convert and add metadata)
  • Jellyfin AudioBooks, instead of audiobookshelf
  • Jellyfin Photos, instead of photoprism
  • Jellyfin Comics instead of Kavita
  • Jellyfin Music, together with Musicbrainz Picard, Apple music plugin, Last.Fm plugin,
  1. Open Source: One of the primary reasons for choosing Jellyfin was that it is an open-source project. This means that its codebase is available for anyone to view, modify, or contribute to. In contrast, Plex is a closed-source solution with limited customization options and potential security risks due to proprietary software.

  2. Privacy: With Jellyfin being open source, it provides better privacy protection compared to Plex. As an end-user, you can have more control over your data and ensure that no third parties are tracking or collecting information about your media consumption habits.

  3. Cost: Jellyfin’s has no premium plan. All users get transcoding for free! In plex, all user need a Plex premium pass (119€ lifetime). Plexamp is free and great but Finamp will be catching soon on the number of features.

  4. Compatibility: Jellyfin supports more file formats and codecs out-of-the-box compared to Plex. This means that you can enjoy your media library in its original format without having to worry about compatibility issues, ensuring the best possible viewing experience.

  5. Customization: As an open-source project, Jellyfin offers a plethora of customization options for both users and developers alike. You can tailor the platform to fit your specific needs or contribute back to the community by improving its features. Plex, on the other hand, has limited customization options due to its closed-source nature. Jellyfin has still plugins, so no need to wait for a spcial features (at the cost of stability and vulnerabilities)

Benefits of Jellyfin Over Plex

  1. Community Support: With a growing user base and an active development team, Jellyfin receives regular updates and improvements from passionate contributors. This ensures that you are always using the latest features and bug fixes available in the media server world.

  2. Plugin Ecosystem: Jellyfin’s plugin ecosystem is more extensive and better supported by its community. This means that you can find a wider range of plugins for your specific needs or interests.

  3. Mobile Apps: Jellyfin offers official mobile apps for iOS and Android devices, providing seamless access to your media library on the go.

Jellyfin Tips and Tricks

  1. Activate the unofficial Apple Music plugin
  2. Jellyfin run best in Linux, windows is a joke, windows or macos let you use Backblaze unlimited desktop backup for $75 a year, but linux not.
  3. Hide you real IP behind a DNS proxy using Cloudflare Free
  4. Update your floating IP, using DDCLient
  5. Add a NGINX reverse proxy for having HTTPS

Do not use a Raspberry Pi, an Intel N100 is way better for Jellyfin, Plex

The Intel NUC (Next Unit of Computing) n100 and the Raspberry Pi 5 are both small form factor computers, but they have different capabilities and use cases.

The Intel NUC n100 is equipped with an Intel Core processor (either i3 or i5), which offers better performance than the Raspberry Pi 5, which uses a more basic ARM-based processor.

You can get a fully fledged Intel N100 with 16GB RAM, 2TB SSD for $180 on Aliexpress.

The Intel NUC n100 is typically comes with up to 8GB-16GB of DDR4 RAM, while the Raspberry Pi 5 has currently a maximum of 4GB LPDDR4 RAM. More RAM allows for smoother multitasking and running more memory-intensive applications or games on the Intel NUC n100 compared to the Raspberry Pi 5.

The Intel NUC n100 supports various storage options, including SSDs (Solid State Drives) for faster data access and HDDs (Hard Disk Drives) for larger capacity. In contrast, the Raspberry Pi 5 uses an SD card as its primary storage medium, which is slower and has a limited capacity compared to traditional hard drives or SSDs.

The Intel NUC n100 can run various operating systems like Windows, Linux, or macOS, providing more flexibility in terms of software compatibility and user experience.

The Intel NUC n100 has more expansion options such as additional storage slots, multiple USB ports, and support for various peripherals like monitors, keyboards, and mice. Intel N100 has Quicksync, a hardware decoder for transcoding (up to 6 stream in 1080p concurently)

The Intel NUC n100 consumes more power than a Raspberry Pi 5 because it uses a more powerful processor and has additional features, which might make it less suitable for energy-efficient applications or when using limited power sources. However, the Intel NUC n100 can be more efficient in terms of performance per watt compared to traditional desktop computers due to its compact design and optimized components.

Jellyfin permission to write on USB disks

How to mount properly disks with jellyfin native (not docker)

sudo useradd media # create a new user 'media'
sudo usermod -aG media jellyfin # add the user jellyfin to the media group.
sudo usermod -aG media $user # add yourself to the media group

blkid # You can find the UUID of the USB disk using the `blkid` command.

id $user
# uid=1000(xxxx) gid=1000(xxxx) groups=1000(xxxx
id media # get the id of user media
# uid=1001(media) gid=1001(media) groups=1001(media)

sudo vi /etc/fstab # edit the fstab or use the disk gnome utils to change each disk mount option
# uid=1000 you are still the owner
# gid=1001 group 'media' can write to it
# umask=002 mean rwxrwxr--x
/dev/disk/by-id/xxxxxxxxxxxxxx /mnt/xxxxx auto nosuid,nodev,nofail,x-gvfs-show,uid=1000,gid=1001,umask=002 0 0

# verify that file is valid
sudo mount -a

# save and reboot
sudo reboot

In Ubuntu, when USB disks are auto-mounted on the desktop, they are typically mounted with permissions that allow the user who inserted the USB disk to read and write to it. If Jellyfin is running as a different user, such as the jellyfin user, it may not have the necessary permissions to write to the auto-mounted USB disk.

To address this, you can adjust the mount options for the USB disk to grant appropriate permissions. Here’s a step-by-step guide:

  1. Identify the USB disk:

    • Connect the USB disk to your system.
    • Run the following command to identify the device name of your USB disk:
      lsblk
      
      Look for your USB disk in the output. It will be listed as a block device (e.g., /dev/sdX).
  2. Find the USB disk mount point:

    • Run the following command to find the current mount point of your USB disk:
      df -h
      
      Look for the entry corresponding to your USB disk. Note the mount point (e.g., /media/username/usb_disk).
  3. Modify the /etc/fstab file:

    • Edit the /etc/fstab file to include the appropriate mount options for the USB disk. Open the file in a text editor with root privileges, such as sudo nano or sudo gedit:
      sudo nano /etc/fstab
      
    • Add an entry for the USB disk. Replace /dev/sdX1 and /media/username/usb_disk with the actual device and mount point:
      UUID=your-usb-disk-uuid /media/username/usb_disk ntfs-3g defaults,uid=jellyfin,gid=jellyfin 0 0
      
      You can find the UUID of the USB disk using the blkid command.
  4. Save the changes and exit the editor.

  5. Remount the USB disk:

    • Unmount and then remount the USB disk to apply the new settings:
      sudo umount /media/username/usb_disk
      sudo mount -a
      
  6. Verify permissions:

    • Check the permissions of the USB disk to ensure that the jellyfin user has the necessary rights:
      ls -l /media/username/usb_disk
      

Now, Jellyfin should have the appropriate permissions to read and write to the auto-mounted USB disk. Adjust the instructions based on your specific paths and configuration. Always exercise caution when editing system files and make backups before making significant changes.

Useful Jellyfin scripts

Find all duplicates

Poor man approach that does the job

find /mediapath -name "*.mkv" -exec basename {} .mkv \; > list.txt
find /mediapath -name "*.mp4" -exec basename {} .mp4 \; >> list.txt
find /mediapath -name "*.avi" -exec basename {} .avi \; >> list.txt
find /mediapath -name "*.wmv" -exec basename {} .wmv \; >> list.txt
sort list.txt | uniq -cd

Delete all jellyfin duplicates

This script is able to find and delete duplicate files using MD5 checksums. It uses an associative array to store MD5 values and corresponding file paths. The only drawback of this methos is that it is really slow, all file need to be read (IO) and hash one after the other.

Create a file vi dup.sh and chmod +x dup.sh

#!/bin/bash
declare -A file_md5_map

find "$1" -type f | while read -r file; do
    md5=$(md5sum <(cat "$file") | awk '{ print $1 }')

    if [ -n "${file_md5_map[$md5]}" ]; then
        echo "Duplicate found:"
        echo "  File 1: ${file_md5_map[$md5]}"
        echo "  File 2: $file"

        read -p "Do you want to delete the duplicate file? (y/n): " choice
        [ "$choice" == "y" ] && rm "$file" && echo "File deleted: $file" || echo "File not deleted: $file"
    else
        echo "."
        file_md5_map["$md5"]=$file
    fi
done

run with ./dup.sh /media/paths

Support me

Buy me a coffee

Related content

Building a Plex Media Server on Raspberry Pi 4: Your Ultimate DIY Guide

Building a Plex Media Server on Raspberry Pi 4: Your Ultimate DIY Guide

Monday, Aug 28, 2023

In the era of digital media consumption, having a centralized hub to manage and stream your media content has become increasingly important. Enter the Plex Media Server—an incredibly versatile platform that allows you to organize, access, and enjoy your movies, TV shows, music, and photos from any device, anywhere. And what ’s even better? You can set up your very own Plex Media Server using a Raspberry Pi 4, a budget-friendly and energy-efficient solution that ’s perfect for DIY enthusiasts. In this guide, we ’ll walk you through the steps to create your very own Plex server on a Raspberry Pi 4.
3 minutes read

© 1997 - 2024 Cédric Walter blog

Powered by Open Sources technologies

avatar

Cédric WalterA true selfless act always sparks another

6s a1 acide-hyaluronique acma adaptability advocate-for-change ai airplane algorand alice-hlidkova-author alpine alps altruism-vs-commercialization antique-scooters antiseptic-rinse apache arcade arcade-gaming armattan art artemis artemis-viper artistic-expression atlassian authenticity-in-writing authenticity-matters avis bag bambulab bash bean bennu bernardet bestwishes betaflight betruger beware bien-vivre bien-être bien-être-physique bio bioethics bitcoin blessures-sportives blockchain blockchain-consensus-encyclopedia blockchain-systems blog book-review books bots Bought box brand-authenticity brand-integrity brand-protection breaking-barriers business-management business-milestones business-strategy business-success business-transformation businessbooks byzantine-fault-tolerance calculator calibre calibre-web camera case-studies cc2500 cgm-next challenges changement-de-vie channel-setup cheaper cherry-blossoms chirurgie-orthopédique choosing-fbl-gyro ci/cd classic-games classic-scooters classic-vespa climb climbing codefest collectible-scooters collectibles collection collector color competition consensus-algorithms consensus-mechanisms console consommation-responsable consumer-awareness containerization contest control-surfaces controller copy corticostéroïdes counterfeit-awareness counterfeit-culture counterfeit-market counterfeit-vs-authentic covid19 creating croissance-personnelle cryptocurrency cultural-experience cultural-richness curve-adjustments customer-discovery cve-issues dance-dreams death decentralization decentralized dental-hygiene dependency Design development devfest devops distributed-ledger-technology diverse-perspectives diy-dental diy-health dji docker docker-compose docker-hosting docker-networking docker-registry docker-security dont-buy dotnet Download downloading dreams-and-reality drone dynamic-ip désencombrement développement-personnel développement-spirituel ecology edgetx elrs elta emotional-challenges emotional-hurdles empowering-narrative endpoints engelberg Ensitm entrepreneurial-lessons entrepreneurial-mindset entrepreneurs entrepreneurship entrepreneurship-books Essaim essentially ethereum ethical-dilemmas evoque execution exercices-de-renforcement exercise-form facebook failure-analysis failure-stigma failure-to-success fake fake-apparel fake-brands fake-goods family family-building family-dynamics fashion-ethics fashion-fraud fbl-controllers fbl-system-compatibility fbl-system-features fbl-system-reviews fertility-struggles finance-books finances-personnelles financial-modeling financiallanning firearm firmware-customization firmware-issues fissure-horizontale fitness-routine fitness-tips flexibilité flight-controller flybarless-advantages flybarless-systems foss fpv frame France freestyle fresh-breath friendship-goals front gallery game-music gameplay-mechanics gamer-community games gaming-culture gaming-enthusiast gaming-history gaming-legacy gaming-nostalgia generative-ai genou gestion-de-ladouleur gestion-du-temps git global-impact google green-tea green-tea-mouthwash growth-hacking-books growth-mindset guide hackathon hackday hackfest health-and-wellness helicopter helicopter-community helicopter-gyro helicopter-tuning herbal-mouthwash hewlettpackard historical-scooters hobbies hobby hobbyist-blog holidays holistic-oralcare hollidays home-remedy home-workouts homelab homemade-oralcare honda honesty honey hornet how-to howTo https hugo human-connection hygiene-routine icecream iconic-scooters iflight iflightnazgulevoque immich indoor industrial-shit industry injections-intra-articulaires injury-prevention innovation innovation-books innovation-journey ios japan-travel japanese-cuisine jar java jdk11 jellyfin joint-health junit jupiter kitchen knee-rehabilitation knee-stability knockoff-alert kyoto lacoste lacoste-counterfeit lambretta landmarks leadership leadership-books lean-startup learning-from-failure leg-day leg-workouts legal-complexities legit-fashion let's-encrypt libération life-transformations link linux llm local-traditions m2evo macos magical-adventure magician-lord main make manurhin manurhin-sm75 mapping marathon market-research marketing-books maven me medical medical-advancements metakernel miami-entertainment mid-century-scooters migration mindset-shifts minimalisme minimum-viable-product minty-fresh mixer-settings mk3 mk4 mobilité model-setup modern-family modern-motherhood moon moral-encounters motherhood-dilemmas motorcycle mount mountain mountains mouth-rinse mouthwash-ingredients mouthwash-recipe Mulhouse muscle-activation music mvs mycollection ménisque NASA natural-mouthwash nature nazgul neo-geo-aes neogeo network new-bookrelease nginx-proxy north-face north-face-replica nostalgic-scooters nv14 objectifs old-school-scooters omphobby open-source open-source-rc opensource opentx openvpn oral-care oral-health organizer osaka oss overcoming-challenges p1p p1s parental-rights parenthood-reflections parts passion patella-health persistence personal-relationships photos physical-therapy physiothérapie pivot-strategy pixel-art planet plasma-riche-en-plaquettes platform plex pluto pretty-girl-complex privacy product-market-fit productivity-books proof-of-stake proof-of-work protect-your-style prusa prusa-research public-image quadcopter quadriceps-strength radio-control radio-programming radiomaster rare-scooters raspberrypi raspbian rates-configuration rc rc-community rc-configuration rc-firmware RC helicopter rc-helicopter-electronics rc-helicopter-enthusiasts rc-helicopter-setup rc-helicopter-technology rc-helicopter-tips rc-helicopters rc-modeling rc-simulator realdebrid realflight receiver reflex-xtr refreshing-breath rehabilitation-exercises relations-personnelles relationship-complexities released remote remote-control-flying reproductive-ethics resilience-in-business resilient-women restored-scooters retro-gaming retro-gaming-community retro-gaming-console retro-scooters reverse-proxy rhythms-of-life risk-management robotic router rx réadaptation rééducation sab sab-raw-420 sab-raw-580 sab-raw-700 sales-books santé-articulaire santé-mentale scooter-enthusiast scooter-memorabilia scooters security-nightmare self-leveling-helicopter server-configuration servo-config skydiving snk snk-corporation snk neo geo soap social-issues solex space spams sport ssl-termination ssl/tls startup-books startup-failure static-code-generator steam strategic-networking streaming strength-training success-stories sun support surrogacy-agency surrogacy-journey surrogacy-narratives swiftui swiss switzerland team team-building team-dynamics teeth-cleaning temples-and-shrines tendermint terrot thérapie-physique tokyo torvol traefik traitement-des-fissures transmitter transmitter-firmware travel travel-tips trouver-du-sens tunnel turning-setbacks-into-success tutorial tx unconventional-strategies vacation velosolex vespa viaferrata video video-game-review vintage vintage-scooters vintage-two-wheelers vintage-vespa vintagegaming vmo-exercises warez web-security wind winner winterthur women-supporting-women wordpress workout-progression x1c zurich zyxel zyxel-avoid zyxel-not-serious-with-security zyxel-outdated zyxel-router-not-good équilibre
Me

Cédric Walter is a French-Swiss entrepreneur, investor, and software engineer based in Zurich, Switzerland. He spent his career developing software applications for Swiss insurance companies to handle billions of dollars in premiums. He cofounded Innoveo AG and as the software architect developed the no-code platform designed to reduce the manual coding that powers many software apps. As an active participant in the European hacking community, he works on many open source projects including blockchain. Cédric is a winner of multiple hackathons. His expertise include designing back end, event-based, and blockchain systems. Cédric is also the founded Disruptr GmbH, a software development company that offers full spectrum of services for businesses of all sizes.

JAVA full-stack developer since 2000, in Blockchain since 2017, Certified Scrum Master 2012, Corda Certified Developer in 2019, Ethereum smart contract expert in the SWISS Blockchain Security working group

Hackathons

  • HackZurich 2022 – Level Up in top 25 finalist among 134 submissions
  • SBHACK21 – SwiFi winner of best Solution on Algorand, overall Winner 3rd Prize, CV Labs Fast Track Ticket
  • HackZurich 2020 Europe’s Biggest Hackathon winner in category Migros
  • SBHACK19 – LendIt winner of Swiss biggest Blockchain Hackathon. On chain insurance and ledger for agricultural land soil.
  • Member of the Bitcoin Association Switzerland and Cryptovalley association Switzerland,

PGP: DF52 ADDA C81A 08A6

Copyright information

All editorial content and graphics on our sites are protected by U.S. copyright, international treaties, and other applicable copyright laws and may not be copied without the express permission of Cedric Walter, which reserves all rights. Reuse of any of Cedric Walter editorial content and graphics for any purpose without The author ’s permission is strictly prohibited.

DO NOT copy or adapt the HTML or other code that this site creates to generate pages. It also is covered by copyright.

Reproduction without explicit permission is prohibited. All Rights Reserved. All photos remain copyright © their rightful owners. No copyright infringement is intended.

Disclaimer: The editor(s) reserve the right to edit any comments that are found to be abusive, offensive, contain profanity, serves as spam, is largely self-promotional, or displaying attempts to harbour irrelevant text links for any purpose.

Others

If you like my work or find it helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and maintain more projects in the future. 🦾

It is better to attach some information or leave a message so that I can record the donation 📝 , thank you very much 🙏.

Reproduction without explicit permission is prohibited. All Rights Reserved. All photos remain copyright © their rightful owners. No copyright infringement is intended.