varbhat / exatorrent

🧲 Easy to Use Torrent Client. Can be hosted in Cloud. Files can be streamed in Browser/Media Player.
GNU General Public License v3.0
1.88k stars 103 forks source link

Next Generation Ideas #406

Open varbhat opened 8 months ago

varbhat commented 8 months ago

exatorrent right now is good enough for my usecases. that's why you might have seen less activity on adding new features even though we fixed bugs and did occasional changes. this might be because of the reason that I only released this project to the public after i felt that it's good enough for my usecases. Regardless of these, it will be maintained and developed in future.

I have been thinking of how we can improve exatorrent in future and i want to publicly discuss this.

1) Multiple users: exatorrent has always supported Multiple users. Is anyone using this feature? Is this beneficial?

2) Alternative torrent engines: exatorrent currently depends upon anacrolix/torrent library. Maybe we can support external torrent engines. qbittorrent, rtorrent and transmission comes to my mind.

3) UI revamp: Not gonna lie, I hastily wrote the UI for exatorrent. As such, it lacks some features and might be improved even more. exatorrent doesn't have pagination which i desire to have.

4) API revamp: Currently,i have only exposed websocket API with few other REST APIs for serving files. But, instead of using websocket, we can improve upon by streaming JSON and REST endpoints.

Thus said, i would like to have discussions on this, and love to hear your opinions. You are also heartily welcome to contribute to this project at any capacity. Open source projects thrive though the community.

varbhat commented 8 months ago

CC: @nlevee @mckaygerhard

nlevee commented 8 months ago

I'm just starting to use it, and regarding the features you propose I generally agree with your feedback:

  1. Multi-user is not useful to me today. I can't think of a case where it would be. What was the original need?
  2. What would be exatorrent's role in supporting these other clients?
  3. I like the minimalist side of exatorrent (one of the reasons I chose it) but I agree that pagination, display of download and upload speed, and other informations would be great.
  4. The websocket API is great, but a standard REST API would be a real plus compared to other "oldschool" clients.

My usage is a bit particular: I have a mini-cluster and I try to decouple as much as possible the bricks linked to my uploads (download, search, rename, move, ...) with respect to this usage, I might add:

  1. Write to non-local media: s3 (for example)
  2. Manage more webhook type events (start of download, seed reached...), today very few clients communicate their events by webhook, this is a real plus of exatorrent for me.

Happy to help on any subject ;-)

mckaygerhard commented 8 months ago

Note the amount of interest that the project generated, this is because it offered something different, but these users are like geeks, and they leave with the same thing they come with, because for a long time it had no collaborators.. he made the project for their own needs and gains so much praise in nowadays

You see, @nlevee exatorrent is practically a customer-service system, and unless it is oriented to be used on phones must be multiuser or multiengine like uget (gui) + aria2 (console) does for linux as the only multi downloader ,

look: there are very advanced clients on the desktop, also taking into account that in Winshit there are too many popular options and in Linux the minimalists would prefer their own for that. "one click app", if it is not multi-user it would not have meaning in the wide world..

have a mini-cluster and I try to decouple as much as possible the bricks linked to my uploads

this confirms all what i write here, only rare geeks with nonsense complicated customized setups, cloud for cloud files? torrents are cloud files and only those not so common will need care.. if you try to re download the game in windos fo ancient times there is no seeds available unless is a popular game!

The websocket API is great, but a standard REST API would be a real plus compared to other "oldschool" clients.

also

Alternative torrent engines: exatorrent currently depends upon anacrolix/torrent library.

there is aria2c command line + library, this is the best unix-like application for downloading @varbhat inclusively from mega downloads!

so making exatorrent multiclient or supporting aria2c will convert exatorrent in a multi downloader frontend and put the project in a super direction..

most of the ideas are for rare customized setup but after such implementation is infected in the project authors abandoned such project.. inclusively today VarBAt is so busy . .. and you with your "customized clouds super geek setup" will try to change the project but after that? will continue until end supporting that?

sorry for hard words.. but some things are just sad realities, i am a friend of VArBath and I appreciate it for its promising future, but I am super anti windos shit and super anti anything non-traditional or windo winbuntu vould arshit containerized or etc like

nlevee commented 8 months ago

I don't really understand your position, the principle of an open source project is to let the community express itself. That's what @varbhat did, but I get the impression that it's harder for you to get feedback that doesn't go your way.

If the project perfectly met people's needs (geek or not) it wouldn't have been almost archived by @varbhat. So it's legitimate to ask what needs to be transformed.

I think that if @mckaygerhard responded to every feedback or need from the community as he do here, it's no wonder there are so few contributors. You (@mckaygerhard ) denigrate desktop users (win or linux) but you want to design an application that appeals to them. You denigrate "geeks" but you want them to remain contributors... I think your approach is wrong. You close all debate, but you offer nothing in return.

It seems to me that your requests are also very specific (cf. https://github.com/varbhat/exatorrent/issues/213)...

My needs are indeed very specific to my use, but I don't impose my ideas. If I'd wanted to propose nothing, I'd have forked and modified the repo on my own without ever contributing.

So @mckaygerhard , what are your proposals? Where are your contributions?

mckaygerhard commented 8 months ago

as a surprise for you i work for public people.. @nlevee and unless developers i pleniy understand users.. linux and geek user represent only 0.01 % of the shared marked..

nlevee commented 8 months ago

Ok but this issue is open to discuss next iteration and ideas. What are your's @mckaygerhard ?

mckaygerhard commented 8 months ago

Ok but this issue is open to discuss next iteration and ideas. What are your's @mckaygerhard ?

the UI is pretty great due simplicity.. of course you must know what to do.. this leave into a problem.. if you want a big user base.. this kind of messages must be selft explanatory.. by exampel "user already adde" so my opinions were HARD BUT TRUE!

image

also @nlevee the golang version is too high.. the idea is not to force a specific version and able to build with any version of swagger and golang..

mckaygerhard commented 8 months ago

I think that if @mckaygerhard responded to every feedback or need from the community as he do here, it's no wonder there are so few contributors.

as i posted here https://github.com/varbhat/exatorrent/issues/406#issuecomment-1806897079 (check picture) the usecase does not fit with normal users.. cos the user must know that the user was already add.. so this usecase is not well defined.. but lest take into consideration @nlevee

  1. exatorrent is a collaborative work so . the user must acept that (the ui just report a error that ws not error, just that the user already exits) but unfortunately normal users are dumbos .. so what we must expected?
  2. exatorrent is then made for a min level of knowledge? ok a more advanced user .. ugh.. already has windos.. so why use exatorrent... ?
  3. ok but we are geek so lest use exatorrent cos is light (EXTREME LIGHT) and can manage.. torrents? only torrents? but i want to download from mega? my movies! i want my movies! XD :smile:

men.. trust me ! i a good friend of Var.. i just try to put in the table the issues!

my 50c

i very liked the IDEA.. i was one of the firsts users.. here my older ui from first releases: https://t.me/opentechnologies/51616 0.1.2 i tried for a while and inclusive i downloaded just for fun the XP sources from there!

support a complete download backend

A. option 1 : proposed (but just rejected by @varbhat but lest just write here) to change the backend of exatorrent.. to support aria2c that already support torrents fully! B. option 2 : change the golang backend by an aria2c command line.. and only leaves the web ui to support aria2c.. this is lest to develop.. the aria2c could run as normal dedicated user

improve documentation and handle a demo site

there is no way to deploy a binary program but i can just try a host in the work.. i can ask for limited bandwidth and limited files.. offers the functionality

i can also help with github actions.. but as he said is not so simple and will fill the repo with buch of rules and files.. docker already can handle that.. but here the problem.. i already have 2 devices in home.. a 32bit daruma and a i9 dell .. the i9 is laptop so is not for dedicated downloads.. but your current build does not run in the daruma (AMD geode)

so builds for older and limited env is cruzial for user base also

embeb the help for users will improve cos user dont like to read

lest remembered that users dont like to read so :

https://github.com/varbhat/exatorrent/issues/407

nanreh commented 8 months ago

I vote for a simple HTTP API, one that would make it easy to integrate exatorrent into the *arrs applications (Sonarr, Radarr, etc). I've personally been looking for a minimalist torrent client in Go or Rust and exatorrent checks all the boxes but I don't see an integration yet for those popular daemons and I'd be willing to write one but not having a simple HTTP API makes it difficult.

I think it would also be nice to be able to modify configuration dynamically: like if the peer IP:port happens to change (as happens with VPN connections).

nlevee commented 8 months ago

I also think that this issue https://github.com/varbhat/exatorrent/issues/376 is interesting

mckaygerhard commented 8 months ago

@nlevee @varbhat i opened the discussion https://github.com/varbhat/exatorrent/discussions/418 to being more organized:

means that the rain must fall here and the result/conclusons in the issue will make the development separated from opinions! by example me! so you two if dessired can lock this issue for you two and leave the rest on the discussion threat

Just put an annunce on the tittle for future users

varbhat commented 8 months ago

People,

I have decided this. Please care to comment if you have objections.

  1. Remove multiuser: because no one seems to use this feature.
  2. Remove Postgresql alternative backend: we use db(sqlite or psql) for storing users AND byte completion. we currently can remove psql backend because i don't think it's good choice for the program rn.
  3. Look for cgo-free alternative to sqlite: it would be better if we can get rid of cgo(sqlite seems to be major culprit). we can look into native-go db(key-val dbs look good) and also we can experiment with modernc/sqlite which is cgo free implementation of sqlite.
  4. Implementation of VFS: Imagine if you can directly download torrents to your webdav/FTP location with your server only acting as torrent engine. I had originally thought of it but didn't implement. we may have to fork anacrolix/torrent if it doesn't provide API/ we can upstream our implementation but i think this is nice desirable feature to have.
  5. Webdav access for Torrents: If you have exatorrent server, you must be able to mount torrents as native directories using rclone AND you can also browse/view in file manager.
  6. Slim Web Interface: Add Pagination, Lightweight and Featureful UI. Simple by default, powerful when required.
  7. Alternative Backends: I have decided against having multiple backends. It would be hassle. One good point of exatorrent is that it's all in one package. you take the exatorrent binary and run it. That's it. That's it People!!!! But, having multiple backends don't look good. anacrolix/torrent is excellent library. but, if that proves to be inadequate, let us also have an option to use libtorrent rasterbar/rakshasa (via cgo bindings ofc)

Another thing, please don't fight. It doesn't look nice, let's keep everything professional (CC: @mckaygerhard )

If you have any suggestions/objections, let me know.

nlevee commented 8 months ago

Hi !

2-3. Maybe we can use a native embeddable database like :

I'm totally agree with every other points 👍

Do you create Issue for thoses features ?

mckaygerhard commented 8 months ago

Another thing, please don't fight. It doesn't look nice, let's keep everything professional (CC: @mckaygerhard )

you know me pretty well .. true always is hard.. but i will post into the discussion board https://github.com/varbhat/exatorrent/discussions/418#discussioncomment-7656870

If you have any suggestions/objections, let me know.

varbhat commented 2 months ago

Current Improvement Ideas:

If you have any other ideas or suggestions, please let me know.

zakaria-didah commented 2 months ago

show more info from the metadata. like pics and etc... definitely work on th UI a littel more.

ananthb commented 3 weeks ago

I'd love the option to disable user management entirely.

And speaking of UI refactors, can we explicitly say that using JS alerts as a notification system is a bad idea?

ananthb commented 3 weeks ago

OH I'd love Prometheus metrics too. Bit of a stretch this, but that would be cool.

anacrolix commented 2 weeks ago

I saw this issue from the above mentioned.

You might be interested in https://github.com/orgs/go-llsqlite/repositories, which supports the crawshaw interface to sqlite and allows switching to and from the cgo and modernc wrappers.

anacrolix/torrent supports this for storage. There's also a new storage implementation for anacrolix/torrent in Rust, https://crates.io/crates/possum-db. However this does require cgo again, but it's also particularly useful as a general cache for everything your application does. It's used for example in https://coveapp.info/, which might be something of an alternative to exatorrent.