This repository has been archived on 2023-08-21. You can view files and clone it, but cannot push or open issues/pull-requests.
Go to file
Shumatsu 44ca2dd53d De loli-safe (#77)
* Change all occurences of loli-safe to lolisafe

Saw that repository was renamed, links were changed, but a lot of files of lolisafe were unchanged. So I followed the links and changed what seemed safe to change. Which turned out to be all occurences. 

Also, bumped the copyright.

* Change year in LICENSE

This seems to be the proper format.

* Image fix

It was out of focus.

* Relative image path

Heard on StackOverflow it can be done like this.
2018-04-26 08:54:07 +02:00
controllers fixed "add to album" error on uploads (#92) 2018-04-26 08:51:17 +02:00
database SEMICOLONS, ermahgerd (#93) 2018-04-26 08:50:35 +02:00
pages De loli-safe (#77) 2018-04-26 08:54:07 +02:00
public De loli-safe (#77) 2018-04-26 08:54:07 +02:00
routes Added album downloading through front-end 2017-10-04 02:05:38 -03:00
views Aligned the album download button 2017-10-10 14:56:20 -03:00
.gitignore Fix 2018-01-24 05:29:13 +07:00
Dockerfile update deps and add dockerfile 2018-03-01 22:03:47 +01:00
LICENSE De loli-safe (#77) 2018-04-26 08:54:07 +02:00 De loli-safe (#77) 2018-04-26 08:54:07 +02:00
config.sample.js De loli-safe (#77) 2018-04-26 08:54:07 +02:00
lolisafe.js Added album downloading through front-end 2017-10-04 02:05:38 -03:00
nginx-ssl.sample.conf Mirrored nginx.sample.conf 2018-04-01 23:54:42 -07:00
nginx.sample.conf Add NGINX compile warning 2018-04-01 23:53:26 -07:00
package.json De loli-safe (#77) 2018-04-26 08:54:07 +02:00
real-ip-from-cf Updated IP's 2018-04-01 23:51:25 -07:00
yarn.lock update deps and add dockerfile 2018-03-01 22:03:47 +01:00

lolisafe GitHub license Chat / Support

lolisafe, a small safe worth protecting.

What's new in v3.0.0

  • Backend rewrite to make it faster, better and easier to extend
  • Album downloads (Thanks to PascalTemel)
  • See releases for changelog

If you're upgrading from a version prior to v3.0.0 make sure to run ONCE node database/migration.js to create the missing columns on the database.


  1. Ensure you have at least version 7.6.0 of node installed
  2. Clone the repo
  3. Rename config.sample.js to config.js
  4. Modify port, domain and privacy options if desired
  5. run npm install to install all dependencies
  6. run pm2 start lolisafe.js or node lolisafe.js to start the service

Getting started

This service supports running both as public and private. The only difference is that one needs a token to upload and the other one doesn't. If you want it to be public so anyone can upload files either from the website or API, just set the option private: false in the config.js file. In case you want to run it privately, you should set private: true.

Upon running the service for the first time, it's gonna create a user account with the username root and password root. This is your admin account and you should change the password immediately. This account will let you manage all uploaded files and remove any if necessary.

The option serveFilesWithNode in the config.js dictates if you want lolisafe to serve the files or nginx/apache once they are uploaded. The main difference between the two is the ease of use and the chance of analytics in the future. If you set it to true, the uploaded files will be located after the host like:

If you set it to false, you need to set nginx to directly serve whatever folder it is you are serving your downloads in. This also gives you the ability to serve them, for example, like this:

Both cases require you to type the domain where the files will be served on the domain key below. Which one you use is ultimately up to you. Either way, I've provided a sample config files for nginx that you can use to set it up quickly and painlessly!

If you set enableUserAccounts: true, people will be able to create accounts on the service to keep track of their uploaded files and create albums to upload stuff to, pretty much like imgur does, but only through the API. Every user account has a token that the user can use to upload stuff through the API. You can find this token on the section called Change your token on the administration dashboard, and if it gets leaked or compromised you can renew it by clicking the button titled Request new token.

Cloudflare Support

If you are running lolisafe behind Cloudflare there is support to make the NGINX logs have the users IP instead of Cloudflares IP. You will need to compile NGINX from source with --with-http_realip_module as well as uncomment the following line in the NGINX config: include /path/to/lolisafe/real-ip-from-cf;

Using lolisafe

Once the service starts you can start hitting the upload endpoint at /api/upload with any file. If you're using the frontend to do so then you are pretty much set, but if using the API to upload make sure the form name is set to files[] and the form type to multipart/form-data. If the service is running in private mode, dont forget to send a header of type token: YOUR-CLIENT-TOKEN to validate the request.

A sample of the returning json from the endpoint can be seen below:

	"name": "EW7C.png",
	"size": "71400",
	"url": ""

To make it easier and better than any other service, you can download our Chrome extension that will let you configure your hostname and tokens, so that you can simply right click -> loli-safe -> send to safe to any image/audio/video file on the web.

Because of how nodejs apps work, if you want it attached to a domain name you will need to make a reverse proxy for it. Here is a tutorial on how to do this with nginx. Keep in mind that this is only a requirement if you want to access your lolisafe service by using a domain name, otherwise you can use the service just fine by accessing it from your server's IP.

Sites using lolisafe

  • A small safe worth protecting.
  • The world's most unsafe pomf clone
  • A shitty clone. At least the files are more secure!
  • Just another clone.
  • File hosting for all~
  • a dmca-resistant, permanent file hosting service.
  • Feel free to add yours here.


lolisafe © Pitu, Released under the MIT License.
Authored and maintained by Pitu. · GitHub @Pitu