• Stars
    star
    166
  • Rank 226,478 (Top 5 %)
  • Language
    Python
  • License
    Other
  • Created almost 11 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A file-sharing web app that doesn't suck.

fluffy: a file sharing web app that doesn't suck.

Overall build status GitHub Actions CI pre-commit.ci status
fluffy-server PyPI version
fluffy PyPI version

fluffy screenshots

What is fluffy?

fluffy is a Flask-based web application that allows you to upload arbitrary files to the web. Once you upload the files, you get a link to the file which you can share.

The reference instance of fluffy is online at fluffy.cc. You can also run your own!

What isn't fluffy?

  • fluffy isn't social. Files are given a long, random (unguessable) name. There's no upload feed or list of files.
  • fluffy isn't intrusive. Your files aren't resized, compressed, stripped, or modified in any way.
  • fluffy isn't annoying. A simple, modern page for uploading your files. No ads, no memes, and no comments.

Philosophy and motivation

fluffy was created out of frustration from seeing hundreds of files (mostly images) be lost or deleted over the years from popular image hosts such as imageshack which either deleted files or closed their doors entirely. Fluffy is designed so that it is easy to stop accepting uploads while still serving existing files, with the hope being that a "shut down" would involve no longer accepting uploads, but still continuing to serve existing uploads.

fluffy only handles uploading and storing your files. There's no database, and it's up to you to figure out how you serve the uploaded files. Once fluffy stores a file, it forgets about it.

This not only makes the code simple, but also makes maintenance easy. If you wish to stop accepting uploads, you can easily throw the existing uploads on S3 or any web server to ensure their continued availability.

This does make some features hard or impossible to implement, however, so if you want to do anything post-upload at the application level, fluffy probably isn't for you.

Storing files

fluffy hands off uploaded files to a storage backend, which is responsible for saving the file. The following backends are currently available:

  • File. Storage on the local filesystem. You can easily serve these with any web server.
  • Amazon S3. Storage on Amazon S3. You can serve these with S3 static websites or with CloudFront (if you want a CDN).

Writing a storage backend is dead simple and requires you to implement only a single method. The current backends are both about ten lines of code.

Serving files

fluffy won't serve your files, period. It's up to you to figure this part out. Depending on which backend you use, you may get it easily. For example, Amazon S3 makes it easy to serve uploaded files via the web.

Run your own fluffy

There's a public "reference implementation" of fluffy at fluffy.cc.

To host your own copy of fluffy, just adjust settings.py to your needs, being sure to uncomment whichever storage backend you wish to use. There's no database, so setup is very simple.

Once you've adjusted the configuration, you can deploy fluffy the way you deploy any Flask app. fluffy is tested with Python versions 3.5 and 3.6.

Command-line uploading tools

Two tools, fput and fpb, are provided. They can be installed with pip install fluffy and used from the command line. Use --help with either tool for more information.

Additionally, Debian packages for the command-line tools are available in the GitHub releases tab. These packages contain no binary components and should be compatible with most releases of Debian and Ubuntu.

Contributing, license, and credits

Contributions to fluffy are welcome! Send your pull requests or file an issue. Thanks for the help!

fluffy is released under the MIT license; see LICENSE for full details.

Running locally for development

To run fluffy during development, run make dev. You should now have fluffy running at http://localhost:5000.

FAQ

Why are there only certain languages in the dropdown? Can I add more?

Since it's just a normal <option> dropdown now, I didn't want to have all hundreds of languages that Pygments supports, as I thought that would make the UI worse for little benefit. Instead, currently there's a hand-picked list of languages that I thought were most popular (but it's definitely biased toward what I use!).

In the long term, I'd love to replace the dropdown with something smarter (maybe a JS dropdown with all the possible languages, featuring the most popular at the top, but with all available below, or with autocomplete or something).

In the medium term, definitely feel free to open an issue or send a PR to add another language. I'll happily merge it.

As a workaround, note that the "automatically detect" can detect languages not in the dropdown (but it's not very accurate much of the time, unfortunately). Additionally, if you use the CLI, you can pass -l <language> and use any language supported by Pygments.

Why are there only a few themes to choose from in the pastebin?

Mostly it's just lack of time to add more. If you have a Pygments theme you like, please open an issue or PR, I'll definitely help get it added.

Primarily the reasons are:

  • There are a lot of Pygments themes and many of them are (imo) low-quality or extremely similar. I thought it was better to hand-curate them and have a small-ish number, rather than a large number where it's hard to find the really good themes.

  • It's not quite as easy as just adding the style name to a list. Fluffy also needs to know colors to use for borders, line numbers, highlights, diff highlights, hover versions of all of these, ANSI color codes that work, etc. There's something like 30 constants to set per theme.

  • With the current implementation, every new theme bloats the CSS a little more. (There's probably a technical solution to this.)

fluffy uses awesome icon sets developed by FatCow.

More Repositories

1

dumb-pypi

PyPI generator, backed entirely by static files
Python
108
star
2

rustenv

Virtual, activate-able environments for Rust
Python
83
star
3

docker-storage-benchmark

Docker storage driver benchmarks (last updated October 2017)
Python
53
star
4

python3.6-debian-stretch

Python 3.6 backport for Debian stretch
Makefile
48
star
5

pypi-browser

PyPI package browsing web application
Python
37
star
6

dotfiles

My dotfiles.
Vim Script
35
star
7

puppet-pre-commit-hooks

pre-commit hooks for Puppet projects
Ruby
29
star
8

pygments-ansi-color

ANSI color-code highlighting for Pygments
Python
25
star
9

shipit

HTML
22
star
10

nacl.js

JavaScript implementation of the NaCl curve25519xsalsa20poly1305 crypto algorithm
JavaScript
9
star
11

mapman

nmap auto-config of Rackspace Cloud Monitoring
Python
6
star
12

browseright

iPad app for teaching students to be responsible digital citizens
JavaScript
5
star
13

ctf

Python
5
star
14

pre-commit-stats

Python
5
star
15

slack-asyncio

don't use this (yet)!
Python
4
star
16

checkup.py

Simple Python scripts for monitoring website uptime.
Python
4
star
17

dumb-init-dockers

dumb-init docker images
Python
4
star
18

magento-clone

Scripts for cloning a Magento installation over SSH in one step
Python
3
star
19

tap2tap

simple L2 point-to-point VPN
C
3
star
20

linux-wheels

Python
3
star
21

backup-tube

Java application for maintaining copies of a YouTube channel
Java
3
star
22

trenders.org

Online stock market sim for students & teachers
Groovy
3
star
23

nineteen

Simple control panel in Grails for Linux web server administration.
CSS
2
star
24

jacketeer-app

iPad app for collecting signatures, superlatives, and more from students
Objective-C
2
star
25

nodeenv

nodeenv Debian packaging
Python
2
star
26

banshee2itunes

Easily export a Banshee library to iTunes
Python
2
star
27

lazy-build

Remotely cache build artifacts based on file hashes
Python
2
star
28

musicman

Terrible music library mangler, exporting to Banshee and Android
Python
1
star
29

example-rust-pre-commit-hook

Rust
1
star
30

docker-tracker

Track Docker containers launched by processes
Python
1
star
31

jacketeer-distribution

iPad app for distributing yearbooks with signature collection.
Objective-C
1
star
32

fluffy-code

A developer-friendly code rendering library for Python web applications
Python
1
star
33

codedebt.io

Python
1
star
34

rescomp-dragon

Fire-breathing slayer of ResComp authentication portals
Objective-C
1
star
35

autopkgtest

Python
1
star
36

etcd-debian-bin

Binary-only Debian packages of etcd
Makefile
1
star
37

cargo-docserve

Cargo subcommand for serving docs with an embedded webserver
Rust
1
star
38

denon-receiver-control

Python
1
star