{"id":17995090,"url":"https://github.com/aetheryx/sharex-upload-server","last_synced_at":"2025-10-23T20:47:27.841Z","repository":{"id":83426672,"uuid":"175659605","full_name":"aetheryx/sharex-upload-server","owner":"aetheryx","description":"A lightweight, dependency-less ShareX upload server in Node.js","archived":false,"fork":false,"pushed_at":"2019-12-02T20:15:23.000Z","size":21,"stargazers_count":31,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-06T18:23:47.708Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aetheryx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-14T16:28:17.000Z","updated_at":"2025-03-02T13:28:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"18502414-a1eb-4ac7-8b7c-5441796e5cf9","html_url":"https://github.com/aetheryx/sharex-upload-server","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aetheryx/sharex-upload-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aetheryx%2Fsharex-upload-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aetheryx%2Fsharex-upload-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aetheryx%2Fsharex-upload-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aetheryx%2Fsharex-upload-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aetheryx","download_url":"https://codeload.github.com/aetheryx/sharex-upload-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aetheryx%2Fsharex-upload-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280690614,"owners_count":26374330,"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-23T02:00:06.710Z","response_time":142,"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":[],"created_at":"2024-10-29T20:17:54.229Z","updated_at":"2025-10-23T20:47:27.814Z","avatar_url":"https://github.com/aetheryx.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sharex-upload-server\nA lightweight, dependency-less ShareX upload server in Node.js\n\n# Instructions\n## Setting up the server\n```bash\ngit clone https://github.com/aetheryx/sharex-upload-server\ncd sharex-upload-server\nnpm run -s generate-key # save the output of this command\npm2 start ./src/index.js --name sharex # or whatever node process manager you want to use!\n```\n\n## The configuration file\nThe default `config.json` has fairly sensible defaults (after you run `npm run -s generate-key`), but it might be worthwhile to take a look at what you can configure.  \n\n###### config.port\nThe port the HTTP server runs on. ¯\\\\\\_(ツ)\\_/¯\n###### config.key\nThe authorization header the server expects for authorized requests. Automatically generated for you with `npm run -s generate-key`.\n###### config.fileIDLength\nThe length of the file identifier (the request path, the bit after your actual domain). Default is `3`. Make sure you're familiar with your `config.format` to know what this should be for you personally.\n###### config.format\nThe format of the file identifier. There are two options available - `base62` (default) and `zws`.  \n\n`base62` is fairly self explanatory. It's a format of 62 possible characters (`a-z`, `A-Z`, `0-9`). You don't need a high `fileIDLength` when using `base62`, the default `fileIDLength` already gives you **238,328** (`62^3`) possible files.  \n\n`zws` is a format inspired by [zws.im](https://zws.im/). The format only contains five possible characters, so you need a higher `fileIDLength` than you would with `base62`. You can calculate `5^n` where `n` is your `fileIDLength` to see how many files you could store. The advantage of this format is that all of the characters are invisible, making it look like the link is just your domain. On the other hand, typing out the URL manually is basically impossible - you _have to_ copy it to share it.\n\n## Setting up ShareX\n1. Go to [Destinations -\u003e Custom Uploader Settings](https://aeth.dev/b0df61)\n2. Press the New button, give the entry a name, and tick [these](https://aeth.dev/519c61) destination types\n3. On the Request tab,\n    1. Set the method to POST\n    2. Enter the URL of your domain\n    3. Set the body to Binary\n    4. Add a header with the key being \"Authorization\" and the value being your key from the `npm run -s generate-key` command\n\n        \u003csup\u003eEnd result should look something like [this](https://aeth.dev/7f9d32.png)\u003c/sup\u003e\n4. On the Response tab, [set the URL to your domain and then append `$json:.filename$`](https://aeth.dev/613be3).\n5. Make sure you [set the Destination entries to their respective \"Custom\" options](https://aeth.dev/a36337).  \n\n## Setting up Flameshot\n[Flameshot](https://github.com/lupoDharkael/flameshot) is a popular Linux screenshot tool. Here's a wrapper script that pipes your screenshot directly to the file server:\n```bash\ndomain=\"https://example.com\" # Change to your own domain\ntoken=\"Tp1f9JSFEczdGJ5/eY7TfIWdrLeMWUqt2VC4kSWY/2o=\" # Change to your own token\n\nscreenshot() {\n  flameshot gui -r\n}\n\nupload() {\n  curl -s \\\n    -X POST \\\n    -H \"Authorization: $token\" \\\n    -H \"Content-Type: image/png\" \\\n    --data-binary @- \\\n    \"$domain\"\n}\n\ncopy() {\n  xclip -sel c\n}\n\nfilename=$(screenshot | upload | jq -r '.filename')\necho \"$domain/$filename\" | copy\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faetheryx%2Fsharex-upload-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faetheryx%2Fsharex-upload-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faetheryx%2Fsharex-upload-server/lists"}