{"id":15413428,"url":"https://github.com/cromefire/jf-server-announcer","last_synced_at":"2025-10-11T11:43:37.415Z","repository":{"id":64303238,"uuid":"321108526","full_name":"cromefire/jf-server-announcer","owner":"cromefire","description":"A small application that may be used to advertise a Jellyfin Server under a different address / name or inside another local network. (Mirror, only issues, not pull requests via GitHub, use GitLab merge requests instead)","archived":false,"fork":false,"pushed_at":"2020-12-13T17:27:08.000Z","size":25,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-08T12:45:04.284Z","etag":null,"topics":["gitlab-mirror","golang","jellyfin"],"latest_commit_sha":null,"homepage":"https://gitlab.com/cromefire_/jf-server-announcer","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cromefire.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".gitlab/CODEOWNERS","security":null,"support":null}},"created_at":"2020-12-13T16:27:08.000Z","updated_at":"2023-09-08T18:15:56.000Z","dependencies_parsed_at":"2023-01-15T10:00:46.222Z","dependency_job_id":null,"html_url":"https://github.com/cromefire/jf-server-announcer","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/cromefire/jf-server-announcer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cromefire%2Fjf-server-announcer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cromefire%2Fjf-server-announcer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cromefire%2Fjf-server-announcer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cromefire%2Fjf-server-announcer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cromefire","download_url":"https://codeload.github.com/cromefire/jf-server-announcer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cromefire%2Fjf-server-announcer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279007040,"owners_count":26084228,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gitlab-mirror","golang","jellyfin"],"created_at":"2024-10-01T16:57:01.824Z","updated_at":"2025-10-11T11:43:37.397Z","avatar_url":"https://github.com/cromefire.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jellyfin Server Announcer\n[![platform: gitlab](https://img.shields.io/badge/gitlab-cromefire__-%23e65328?logo=gitlab)](https://gitlab.com/cromefire_/jf-server-announcer)\n[![pipeline status](https://gitlab.com/cromefire_/jf-server-announcer/badges/main/pipeline.svg)](https://gitlab.com/cromefire_/jf-server-announcer/-/pipelines)\n\nThis is a small application that may be used to advertise a Jellyfin Server under a different address / name or inside another local network.\n\n## Use cases\nThis is useful in 2 cases primarily:\n- Your server ist behind a reverse proxy and not (securely) reachable for it local ip address that it advertises\n- Your want to advertise a server inside you network that is not inside you network (e.g. a friend's server)\n\n## Usage\nThe app needs 3 parameters:\n- `--id`: The Jellyfin server ID (see below)\n- `--address`: The address the clients should use to communicate with Jellyfin (include the protocol and (if applicable) the base url, e.g. `https://jellyfin.example.com` or `http://1.2.3.4:8006/jellyfin`)\n- `--name`: The Jellyfin server name as it should be shown to the clients, useful, if you have multiple servers being announced in the local network\n\nYou can get the current parameters by navigating to your Jellyfin instance, logging in and pasting the following into your browser console, you will sometimes want to change your address though.\u003cbr\u003e\n_(only do this, if you can understand what this code does, your browser will also warn you about not pasting untrusted code)_\n```javascript\nJSON.parse(localStorage.getItem(\"jellyfin_credentials\")).Servers.forEach((e, i) =\u003e console.info(`Server ${i + 1}: --id=\"${e.Id}\" --name=\"${e.Name}\" --address=\"${e.ManualAddress}\"`));\n```\n\n## Installation\n_It's only tested on linux so far and binaries are only available for amd64, it should word on other platforms though._\n\nYou can fetch the binary from the [packages](https://gitlab.com/cromefire_/jf-server-announcer/-/packages) and make it executable.\n\nFor the sake of security it's probably best to add a user for it, so it's not running as root:\n```shell\nsudo adduser --system --disabled-login --group --home /var/lib/jf-server-announcer jf-server-announcer\n```\n\nYou also have to open port `7359/udp` if you have a fire wall, because this is the port it uses to communicate\n\nIf you use systemd, here's a sample unit file (with a bit of hardening applied):\n\u003cdetails\u003e\n\u003csummary\u003ejf-server-announcer.service\u003c/summary\u003e\n\n```unit file (systemd)\n[Unit]\nDescription=Jellyfin Server Announcer\nAfter=network-online.target\n\n[Service]\nType=simple\nExecStart=/path/to/jf-server-announcer --id \"...\" --address \"https://...\" --name \"...\"\nRestart=on-failure\nRestartSec=60s\n\n# Hardening\nUser=jf-server-announcer\nGroup=jf-server-announcer\nPrivateTmp=true\nProtectSystem=strict\nNoNewPrivileges=true\nRestrictNamespaces=uts ipc pid user cgroup\nProtectKernelTunables=yes\nProtectKernelModules=yes\nProtectControlGroups=yes\nPrivateDevices=yes\nRestrictSUIDSGID=true\n\n[Install]\nWantedBy=multi-user.service\n```\n\u003c/details\u003e\n\n## Building\n\nThis is a standard go modules project, so you just have to have [go](https://golang.org) installed and run `go build`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcromefire%2Fjf-server-announcer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcromefire%2Fjf-server-announcer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcromefire%2Fjf-server-announcer/lists"}