I’m not sure if you’re implying it isn’t, that’s bad, or something else. The download link does take you to a single php file. It’s a mess, but it’s also kinda interesting. I’ve been doing PHP dev professionally for more than 20 years and I don’t think I’ve ever seen some of the conventions used. Even the PHP close tag inside a function like this.
function login_page($is_login_attempt, $sidx, $is_logout, $client_hash){
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
…
</html>
<?php exit; // end form and exit
}
This is precisely the kind of thing that should be a single file CGI-like script. It's a much better view than the stock file listing Apache would spit out. There is no need to complicate it with microservices, high availability, event-based architecture, etc. It takes a single HTTP GET request and spits out HTML that nicely renders the content. That's all it needs to do. One file is perfect.
I needed this for hosting an archive of documents and images that I didn't want to sort and create html pages for. Without something like this, I'd get an ugly directory view that's different browser by browser.
This solves the problem and it looks elegant. Great work.
As somebody who recently spent two weekends trying to figure out a self hosted photo solution that actually for my needs and was easy to install, this looks fantastic.
(I ended up using PhotoView, which works fine, but this looks like it might have been better.)
Very nice tool indeed, funny how the world works. I'm writing an Electron/React/PouchDB application that works kinda like this called "Filebase", you create a library and name it like "pictures", you pick a directory / or single file on your PC and it scans/indexes it, this allows you to tag individual files and folders so you remember what's in it (you can search these tags). you can search and filter by type. The last feature will be archiving but keeping the directory info handy so you can search for items that are archived. I came up with this idea after watching my partner try and organize Cricket art and PDF's. I realized that Windows Explorer kinda sucked for organizing. I wanted to build something that did not modify or touch files itself. It's been a great way to learn Electron. I have to say Electron makes building UI's easy for applications.
filebrowser is a nice option: https://github.com/filebrowser/filebrowser I don't think it has as slick of a photo view, but it does make it easy to spin up a server for files with a focus on editing.
Most shared web hosting already runs PHP, but anything newer like Node or Go won't generally work unless you have a more expensive hosting plan or cloud offering.
I am still looking for a simple tool to deduplicate, organize, and tag all the photos I have accumulated over the years. Old laptop hard drives, old cell phones, iPhoto libraries, aperture libraries, etc. I want to dump them into a staging area, remove all dupes, and start organizing and tagging them into a folder structure.
Have you looked at DigiKam? It offers directories, tagging (with custom tag hierarchies), deduplication and also face recognition. I think it can do quite a bit more, but I'm not a heavy user, at all. I just use it for keeping track of my modest library and it works great for that.
Another (paid) solution is Imageranger.com (don't have anything to do with them, but installed it for my father). I really like the import function that gets rid of duplicates (dedupes) and that put files into directories (video, photos, etc) and year/months based on how you have set up the import function.
The image viewing interface itself is okay although it might not be as smooth as e.g. Apple Photo (which I feel has its own challenges with how convoluted its image directories are e.g). ImageRanger has also tags and Face Detection and Recognition.
I have only installed the Home edition, and it seems to re-index the images to create thumbnails (relatively fast) if you have stored images on an external disk that is detached/attached between openings of the program. From what I understand, the Professional version does not have this issue as the images are cached (not tested out this myself). I don't think the face Detection and Recognition is on par with e.g. Apple Photo, but haven't tested it extensively enough to say that with 100% certainty.
What I like most about ImageRanger is its import functions and the way it stores the images in common folders and subfolders based on preferences and not in a convoluted DB.
I'm writing PhotoStructure to do exactly this task!
My to-do list is still long, but I'm plugging through it and I believe PhotoStructure already has the most robust tag extraction, inference, and image deduplication heuristics around, and has a novel browsing approach that scales well to very large (100k+ - 1mm+) libraries.
(Disclaimers: I'm the solo author, and although I am an open source author, PhotoStructure is commercial software. There are both a free and paid tiers of functionality: details are on the pricing page.)
No, it's not free. Every time you load up the page to view your own files with files.gallery, a big honkin' pop-up shows up instructing you to buy a $40 license for additional features:
Purchase a license [$39] to unlock features and support dev!
- Remove this popup
- Upload
- Download folder
- Code and text editor
- Create new file
- Create new folder
- Rename
- Delete
- Duplicate file
- Dedicated support
- Multi-user, panorama and much more coming soon!
[payment button]
The files.gallery website only hints at this restriction at the very bottom of the page in the "License" section, which devs would expect to mean an OSS license: "Files is free to use with basic features. To remove the license-popup and unlock additional features, you may purchase a license [$39] from within the app."
Now if you look at the rest of the landing page you can see it very carefully does not mention the ability to use basic file browsing features so that it's not technically a lie to present a tool that can "browse files and folders without complicated installations" that doesn't allow you to do anything more than download your own files without opening your wallet.
When you try and obfuscate the fact that it is a purchased product, it makes one a hustler. This is no different than the many click-bait sites that offer -free- stuff that are actually purchased items.
It's not obfuscated, the landing page says the following under the section "License".
> Files is free to use with basic features. To remove the license-popup and unlock additional features, you may purchase a license [$39] from within the app.
I used https://github.com/Jack000/Expose a couple of times. Advantage: it generates a static site. Disadvantage: it must be customized almost certainly. It's a bash script.
I just want to say that the minimal design of the site feels very pleasant to me. Some days I struggle to make the simplest things feel right even with tools like Tailwind. Well done!
I like what I see on the site and in the comments here. Im looking forward to checking this out more maybe.
Im kind of surprised that as a species we dont have a conclusive ubiquitous solution to the foggy problem of digital photo storage / management. So many of my photos are just in drawers on old hard drives and phones.
Anyway maybe its getting better. Or maybe Im just stupid.
I understand the risks of this approach, but I just dumped everything into google photos and I'm very happy with how it's working for now. I do not miss the days of keeping track of those devices at all.
The thing about Google photos that explodes my brain is that if I use albums to share with family members, Google prioritizes the use case of the recipients _joining_ the album and _adding_ my photos to their own albums. Google is trying to use me as a way to get my family members signed up for Google photos.
Then my family is confused about where photos live, etc.
Yeah, I made a Google Photos album to send a link to various potential contractors to show where I want some work done on my house, and since the Photos app for Android has the relevant URI registered, the link gets opened with it instead of just the browser, and the first thing the app does is a very prominent "join" CTA. Then the next person to view the album sees them as a member, gross. It works great incognito though, where the browser doesn't hand off links to any apps regardless of URI registration.
That was my solution since 2011, but just a few months ago I bought a nas that came with a Google Photos clone and moved everything over to that. Too scary knowing that Google can and will lock me out of my account at any time and forever.
The answer is simple, it's just kind of says an ugly thing about how computing has shifted; it's essentially the same reason e.g. the iPad didn't have a file manager.
Interfaces got really good and slick at the same time it became profitable/useful to alienate people from their own data for profit.
Files have some drawbacks... they're difficult for multiple people to work on together (slides). They're often not easy to organize, and they're often not available where you want them.
If you use something like Syncthing[0] (great, can recommend) you'll get them available exactly where you want them: on all your devices.
The only real problem with it is conflicts, where one file is edited simultaneously on two devices. I think Dropbox has solved that (?), but I'd rather keep my data on my own computers.
They do, but it's still a PITA when one comes up. It's great with KeepassXC database files because you can use the Merge databases function to manually merge the two databases (then delete the .sync-conflict).
Thats really interesting, I never thought about the fact that restrictive seeming mobile apps shift focus from local file storage to remote db file storage via apps.
Does anyone know any open source library that provides this feature as a widget for a web app?
I’d love to use Rails active storage + S3 to allow users to have a “mini Dropbox” inside my web App; the only one I could find that was nice enough was CKFinder, but it’s not open source and it’s tied to a Java or PHP backend as well.
That's a work-around, but not ideal. What I'd love to find is some CSS/JS that can build the beautiful Flickr-style[0] photo grids that I could integrate into a Hugo generator.
[0] Flickr, for those who haven't used it much, came up with a unique way of displaying photos in a "justified" view so that there are no gaps between photos in a page full of images of various dimensions and orientations and so that all images stretch all the way to both edges and and are organized into neat rows with no vertical gaps. Example: https://www.flickr.com/photos/defender90/albums/721576700986...
The output is very polished and fast, I like it a lot.
Unfortunately it's not technically a single file as it depends on code downloaded from their server, therefore it can't be deployed locally without Internet connection.
From the forum:
"In terms of license, you don't need an internet connection. However, Files app loads it's own Javascript, CSS and several plugins from CDN (jsdelivr.com), and this requires internet. We already have a request to allow serving all assets locally (as an option), although in your case that might not be practical as this means Files app is essentially no longer a"single file", but multiple files that you need to be included with each installation (although you could assign a global path perhaps). In any case, for now it's not possible to load Files app without internet."
> In any case, for now it's not possible to load Files app without internet
This is a major turn-off IMO. One of the main points of self-hosting is that you don't rely on the outer internet. If a self-hosted service relies on externally hosted resources, does this make it partially self-hosted?
Or even simpler just download the JS and put it next to the script if single file isn't a hard requirement (which I don't see a use case for besides simplicity)
I don't understand the marketing behind "single file" projects like this anymore. Sure, it was a very neat and useful thing to have back when everyone was deploying their sites by uploading in Filezilla.
But today we have everything in a single container which seems far more useful and maintainable.
What do you mean "have everything in a single container"? Many users want to view or manage some files in a folder, and then delete the app shortly after. It doesn't get easier than dropping a single file, and then deleting it afterwards.
When I’m working on something and need to poke around in a MySQL database, one of the things I rely on is adminer. One wget and I can log in graphically and see the database.
I think it makes sense in this particular case. I was actually looking for something like this for a while.
I just want a glorified `autoindex on`. I don't want to manage an extra container just for that.
(I'm speaking in regards to the file viewer option, looks like there's also a file manager option on the pro version and I have a bit more mixed feeling regarding that)
I think there's problem but it's elsewhere. Sure it's a single file, yes. However in order to run it you need a php interpreter, which I for example, do not have installed and an internet connection. But that would go for just about every scripting language in one form or another. Sure, just about every linux distribution has python for instance and same goes for macos afaik. This isn't the case for windows however(again afaik). Package it into a single binary file and I'd be all up for it: I do love AppImages.
> that would go for just about every scripting language in one form or another
You could use bash and be supported on almost every unix-a-like OS¹, or plain-'ol sh for even wider compatibility. You'd need to configure CGI/FCGI as well as dropping the script(s) in, but you have to do similar work for PHP/python/other if you don't already have them installed and configured for the site/directory in question.
[1] and others: it'll work with IIS if the server has a bash/sh interpreter² available
[2] plus any externals that the script relies upon, of course
> back when everyone was deploying their sites by uploading in Filezilla
There are a lot of people still doing this. Some of us have gotten away from it, but I support some people on the side that have multiple projects that still manage it this way and it works for them.
I would not want to be the one to explain to them what docker is, how it works and how to use it.
Apparently it's a nag-based paid software with an otherwise restricted feature set. This is not clearly explained on the page.
In fact, it looks like the site goes out of its way to try and pass for free software - the Demo is NOT of what you are actually downloading, no pricing info, no mention of Basic vs Full versions anywhere, including the Docs, except for an dull looking blurb at the very bottom on the home page -
License
Files is free to use with basic features. To remove the
license-popup and unlock additional features, you may
purchase a license [$39] from within the app.
The page also pulls a lot of scripts off the Internet on every load, so that too is not explained anywhere clearly and it's absolutely not good for hosting private photo archives.
Despite its good looks it kinda leaves bad aftertaste because of all these shady shenanigans.
"Files is free to use with basic features. To remove the license-popup and unlock additional features, you may purchase a license [$39] from within the app."
Not really. This index.php is just a wrapper as it will refer their .js/.php which you have no control of. To use it fully you'll have to write those as well, at which point you can just start from scratch on your own terms.
Not clearly visible until you scroll down to the very bottom, no. Most paid projects like this (that I have seen, anyway) have clear pricing info on the front page, or at least a Pricing item in the navigation bar. This site has neither. I feel like this is a bit misleading as you're immediately told to download the file, then perhaps discover that it is paid software later (or once you've already installed it), but I am willing to assume incompetence on the developer's part here.
> Add username and password to protect your Files app by login. You can encrypt your password by using our md5() hash tool if you don't want the password to be exposed in the PHP file.
Now I realize it's probably not using md5, but it does not bode well.
It looks like it links down to the PHP `password_hash` function, and there's this gem in the documentation [0]:
> If your pepper contains 128 bits of entropy, and so long as hmac-sha256 remains secure (even MD5 is technically secure for use in hmac: only its collision resistance is broken, but of course nobody would use MD5 because more and more flaws are found)...
Which means whoever developed this file photo app may have read this clear shot at MD5, and still used it anyways. That's kinda funny.
> The page also pulls a lot of scripts off the Internet on every load, so that too is not explained anywhere clearly and it's absolutely not good for hosting private photo archives.
Well to be fair, that can be explained by the whole 'drop this PHP file in and wham' model they are going for. Personally I would not advertise / make something like this as the single-file model becomes more and more of a constraint as the project evolves. It feels needlessly limited just to fit the single-file goal.
I really don't mind charging for software, as developers need to eat as much as the next person. $39 for something like this is really not excessive.
But I think it could have been made clearer that (1) you only download one file but it loads more from their CDN, it's not truly "single file" and (2) the free version is heavily limited and gated with a pop-up.
That said, I like the demo - it looks really slick and has a lot of features.
188 comments
[ 3.3 ms ] story [ 271 ms ] threadfunction login_page($is_login_attempt, $sidx, $is_logout, $client_hash){ ?> <!doctype html> <html> <head> <meta charset="utf-8"> … </html> <?php exit; // end form and exit }
- https://remoteok.com/open
- https://twitter.com/levelsio/status/1308145873843560449
https://twitter.com/levelsio/status/1308406118314635266
This solves the problem and it looks elegant. Great work.
(I ended up using PhotoView, which works fine, but this looks like it might have been better.)
The image viewing interface itself is okay although it might not be as smooth as e.g. Apple Photo (which I feel has its own challenges with how convoluted its image directories are e.g). ImageRanger has also tags and Face Detection and Recognition.
I have only installed the Home edition, and it seems to re-index the images to create thumbnails (relatively fast) if you have stored images on an external disk that is detached/attached between openings of the program. From what I understand, the Professional version does not have this issue as the images are cached (not tested out this myself). I don't think the face Detection and Recognition is on par with e.g. Apple Photo, but haven't tested it extensively enough to say that with 100% certainty.
What I like most about ImageRanger is its import functions and the way it stores the images in common folders and subfolders based on preferences and not in a convoluted DB.
https://wiki.gnome.org/Apps/Shotwell (it doesn't require Gnome, my desktop is XFCE)
https://www.geeqie.org/
My to-do list is still long, but I'm plugging through it and I believe PhotoStructure already has the most robust tag extraction, inference, and image deduplication heuristics around, and has a novel browsing approach that scales well to very large (100k+ - 1mm+) libraries.
https://photostructure.com/faq/why-photostructure/
(Disclaimers: I'm the solo author, and although I am an open source author, PhotoStructure is commercial software. There are both a free and paid tiers of functionality: details are on the pricing page.)
It's less polished, but it's free.
This submission is notable is because it's free and polished.
AH, DAMN. It is NOT indeed free, at least not as demoed.The child comment below is 100% correct.
It also pulls piles of stuff from cdn.jsdelivr.net and can't function without it. That's no bueno.
No, it's not free. Every time you load up the page to view your own files with files.gallery, a big honkin' pop-up shows up instructing you to buy a $40 license for additional features:
Purchase a license [$39] to unlock features and support dev! - Remove this popup - Upload - Download folder - Code and text editor - Create new file - Create new folder - Rename - Delete - Duplicate file - Dedicated support - Multi-user, panorama and much more coming soon! [payment button]
The files.gallery website only hints at this restriction at the very bottom of the page in the "License" section, which devs would expect to mean an OSS license: "Files is free to use with basic features. To remove the license-popup and unlock additional features, you may purchase a license [$39] from within the app."
Now if you look at the rest of the landing page you can see it very carefully does not mention the ability to use basic file browsing features so that it's not technically a lie to present a tool that can "browse files and folders without complicated installations" that doesn't allow you to do anything more than download your own files without opening your wallet.
The dev is just another hustler.
> The dev is just another hustler.
But this was really uncalled for even if this does look kinda deceiving and dark-pattern-ish.
Are you working for free or do you ask for a salary from your employer?
> Files is free to use with basic features. To remove the license-popup and unlock additional features, you may purchase a license [$39] from within the app.
But does this mean devaluing their work by calling them "just another hustler"? I believe this isn't necessary.
And sadly it totally devalues your comment for me.
More upfront than under the "License" section on the landing page?
Im kind of surprised that as a species we dont have a conclusive ubiquitous solution to the foggy problem of digital photo storage / management. So many of my photos are just in drawers on old hard drives and phones.
Anyway maybe its getting better. Or maybe Im just stupid.
Then my family is confused about where photos live, etc.
Might try something like this instead.
Interfaces got really good and slick at the same time it became profitable/useful to alienate people from their own data for profit.
The only real problem with it is conflicts, where one file is edited simultaneously on two devices. I think Dropbox has solved that (?), but I'd rather keep my data on my own computers.
But it's always been straight up evil to completely remove all meaningful access to them, and yet Apple et al chose to go in this direction.
Android has good third party file managers though, like Solid Explorer.
With it's SSH, SMB, and Wifi-Filetransfer it has so far outclasses most desktop filemanagers that I have tried.
It might not be stock, but it's easy to get from the app store.
This is really where PHP shines. I find it really sad to see what PHP has become, just because people keep wanting to use it for complex stuff…
As side effect it even executes faster and uses less resources for it.
> PHP4 spaghetti code
I’d love to use Rails active storage + S3 to allow users to have a “mini Dropbox” inside my web App; the only one I could find that was nice enough was CKFinder, but it’s not open source and it’s tied to a Java or PHP backend as well.
This dev also has others cool tool. Check it out on his Github page [0]
[0] https://github.com/lrsjng
[0] Flickr, for those who haven't used it much, came up with a unique way of displaying photos in a "justified" view so that there are no gaps between photos in a page full of images of various dimensions and orientations and so that all images stretch all the way to both edges and and are organized into neat rows with no vertical gaps. Example: https://www.flickr.com/photos/defender90/albums/721576700986...
https://github.com/flickr/justified-layout
Now to look into porting this to Hugo.
https://news.ycombinator.com/item?id=30234601
From the forum:
"In terms of license, you don't need an internet connection. However, Files app loads it's own Javascript, CSS and several plugins from CDN (jsdelivr.com), and this requires internet. We already have a request to allow serving all assets locally (as an option), although in your case that might not be practical as this means Files app is essentially no longer a"single file", but multiple files that you need to be included with each installation (although you could assign a global path perhaps). In any case, for now it's not possible to load Files app without internet."
This is a major turn-off IMO. One of the main points of self-hosting is that you don't rely on the outer internet. If a self-hosted service relies on externally hosted resources, does this make it partially self-hosted?
There is a use case for that. Maintainability. Drop one file to start. To delete, delete the file. To upgrade, replace the file.
For example, I really like tiddlywiki because no matter where or what, I only have to deal with and track 1 file.
It’s impressive what they’ve accomplished with just one file full of custom content. Even upgrading is possible.
First off, its already not a "single file" you need a PHP interpreter.
Secondly, you can cram the JS and CSS into a .phar file, the performance is horrible, but it's probably not noticeable in this scenario.
You can cram the JS and CSS into the PHP file itself, no phar needed. Performance change is unnoticeable on any modern machine.
Afterwards, I just delete and that’s it.
I just want a glorified `autoindex on`. I don't want to manage an extra container just for that.
(I'm speaking in regards to the file viewer option, looks like there's also a file manager option on the pro version and I have a bit more mixed feeling regarding that)
You could use bash and be supported on almost every unix-a-like OS¹, or plain-'ol sh for even wider compatibility. You'd need to configure CGI/FCGI as well as dropping the script(s) in, but you have to do similar work for PHP/python/other if you don't already have them installed and configured for the site/directory in question.
[1] and others: it'll work with IIS if the server has a bash/sh interpreter² available
[2] plus any externals that the script relies upon, of course
There are a lot of people still doing this. Some of us have gotten away from it, but I support some people on the side that have multiple projects that still manage it this way and it works for them.
I would not want to be the one to explain to them what docker is, how it works and how to use it.
Edit: oh, it's not free... I mean, $40 isn't bad, but then I expect a decent level of support. Also, $40 for... a year, a life?
Apparently it's a nag-based paid software with an otherwise restricted feature set. This is not clearly explained on the page.
In fact, it looks like the site goes out of its way to try and pass for free software - the Demo is NOT of what you are actually downloading, no pricing info, no mention of Basic vs Full versions anywhere, including the Docs, except for an dull looking blurb at the very bottom on the home page -
The page also pulls a lot of scripts off the Internet on every load, so that too is not explained anywhere clearly and it's absolutely not good for hosting private photo archives.Despite its good looks it kinda leaves bad aftertaste because of all these shady shenanigans.
[1] https://news.ycombinator.com/item?id=30235138
"Files is free to use with basic features. To remove the license-popup and unlock additional features, you may purchase a license [$39] from within the app."
Not clearly visible until you scroll down to the very bottom, no. Most paid projects like this (that I have seen, anyway) have clear pricing info on the front page, or at least a Pricing item in the navigation bar. This site has neither. I feel like this is a bit misleading as you're immediately told to download the file, then perhaps discover that it is paid software later (or once you've already installed it), but I am willing to assume incompetence on the developer's part here.
> Add username and password to protect your Files app by login. You can encrypt your password by using our md5() hash tool if you don't want the password to be exposed in the PHP file.
Now I realize it's probably not using md5, but it does not bode well.
[1] https://www.files.gallery/docs/config/#password
> If your pepper contains 128 bits of entropy, and so long as hmac-sha256 remains secure (even MD5 is technically secure for use in hmac: only its collision resistance is broken, but of course nobody would use MD5 because more and more flaws are found)...
Which means whoever developed this file photo app may have read this clear shot at MD5, and still used it anyways. That's kinda funny.
[0] https://www.php.net/manual/en/function.password-hash.php
Well to be fair, that can be explained by the whole 'drop this PHP file in and wham' model they are going for. Personally I would not advertise / make something like this as the single-file model becomes more and more of a constraint as the project evolves. It feels needlessly limited just to fit the single-file goal.
In my more noobie days, I had PHP _generate_ JS.
It loads 14 resources from https://cdn.jsdelivr.net/npm/
This also makes it completely broken if these dependencies are inaccessible or go missing.
* Requires a server to run (you don't just 'open from browser' as instructed
* CDN-dependent
This...is not terribly good or useful.
This page crashed. Cannot read properties of undefined (reading 'destroy')
I’m sure there are still dozens of open source alternatives floating around - some surely even maintained!
But I think it could have been made clearer that (1) you only download one file but it loads more from their CDN, it's not truly "single file" and (2) the free version is heavily limited and gated with a pop-up.
That said, I like the demo - it looks really slick and has a lot of features.