manyfold3d / manyfold

A self-hosted digital asset manager for 3d print files.
https://manyfold.app
MIT License
718 stars 46 forks source link

Alternate versions of files #1848

Open Floppy opened 7 months ago

Floppy commented 7 months ago

Initially requested by @rukongai in #1701

It'd be nice if we could designate a model folder, and choose have subfolders in that be variants of a model (supported, options, etc). With a lot of releases coming with a ton of variants, this would let my library stay cleaner

35 will do this for supported/unsupported, but is there something else we could make for custom variants perhaps?

Rukongai commented 7 months ago

i've been messing around with manyfold again and poking around the code. I know that my use-case doesn't exactly reflect the use-case of the many

That being said, expanding on my original thoughts here - it seems recursive scanning beyond the configured folder structure is what is bothering me.

It seems that I have the folder structure set to, for example, {creator}/{modelName} for a library called figurines, I would want to have the model be at /libraries/creator/modelname with nested folders being visible inside the model view as additional files/resources, not added as additional models.

And once this "root" model folder has been established, being able to view (by filename, not render) all files in that folder would be swell.

Right now it feels like the only viable organization method for models is having flat folders for models, organized by nested tag folders.

I guess, if I had to summarize, I am hoping for a self-hosted variant of something like Thingiverse or Printables for my personal model collection.

Also - I hope I'm not coming across as nitpicky. I love what this project might represent and if I were even halfway decent at coding i'd love to contribute. Maybe in the future!

Floppy commented 7 months ago

This should be possible, but it might not be obvious or particularly frictionless. I've got some documentation to write and I'll try to include scenarios like this in it.

Rukongai commented 7 months ago

I've been thinking on this and it seems to me a potential solution is having common_subfolders be user definable and able to be recursively scanned. I've been trying at it but haven't got it working

But that would allow you to define folders that expected by name, even nested and have it be part of the model.

I feel a big advantage here is not having to sort model files by name, allowing you to only need to worry about directory tree

Something like

    {
      "files" => file_pattern,
      "images" => image_pattern,
      "resources" => file_pattern,
      "presupported" => file_pattern,
      "supported" => file_pattern,
      "unsupported" => file_pattern,
      "parts" => file_pattern,
      "variants" => file_pattern,
      "extras" => file_pattern,
      "1_6th_scale" => file_pattern,
      "1_9th_scale" => file_pattern,
      "1_12th_scale" => file_pattern,
      "uncut" => file_pattern
    }

would be able to match

├───1_12th_scale
│   ├───supported
│   ├───extras
│   └───uncut
├───1_6th_scale
│   ├───supported
│   ├───extras
│   └───uncut
├───1_9th_scale
│   ├───supported
│   ├───extras
│   └───uncut
└───Images

All to a single model

I'll keep poking at it and see if I can make anything work

Floppy commented 7 months ago

Making common subfolders into a configurable setting is a good idea 👍🏻

nosyrbllewe commented 5 months ago

Subfolders would be a massive benefit for me and would make manyfold much more useful for me. Most of the models I get (from Patreons) almost always have a lot of subfolders or each model for various things (supported/unsupported, mesh variants, lychee/chitubox, colored/uncolored renders, scales, etc.). The models also usually have a ton of parts per variant (e.g. head, arms, legs) As manyfold is right now, I have to always place all of the files in a single folder, which makes it very messy, not to mention time-consuming to do.

As a side note, I would love it if I could organize ready-to-print sliced model (e.g. pwma or gcode) on a per printer basis. For example, a model sliced for Printer A and another sliced version of it for Printer B.

Floppy commented 5 months ago

👍 You can combine the subfolders, as long as there's something in the model root folder too. I do need to add the ability to merge folders that have a common but empty parent folder, I should open a ticket for that to remind me. There's already one to improve the file organisation within a model so that those subfolders are still useful.

srvoets commented 2 months ago

Just want to say I found this when trying to organize my minis, and some documentation, or examples on fodler structure, and these alt versions\variants would be xtremely useful

Rukongai commented 1 month ago

Hey I wanted to follow up on this as it's still the primary reason that I can't use Manyfold.

To illustrate the broader appeal beyond just my personal use case - having subfolders with variants and options is a common practice with model releases by the majority of resin focused 3D artists. It would be nice to be able to download the model from the patreon/cults/wherever and upload it as is, maintaining the structure and organization of the files without having to flatten the entire release to a single folder.

For example, here is the folder structure for Shadowheart by OXO3D released July, 2024

OXO3D - 2024-07 - Shadowheart
    ├───OXO3D_Figures_Shadowheart_Renders
    │              OXO3D_Figures_Shadowheart_001.jpg
    │              OXO3D_Figures_Shadowheart_002.jpg
    │              OXO3D_Figures_Shadowheart_003.jpg
    │              OXO3D_Figures_Shadowheart_006.jpg
    │              OXO3D_Figures_Shadowheart_008.jpg
    │              OXO3D_Figures_Shadowheart_NSFW_001.jpg
    │              OXO3D_Figures_Shadowheart_NSFW_003.jpg
    │              OXO3D_Figures_Shadowheart_NSFW_004.jpg
    │              OXO3D_Figures_Shadowheart_NSFW_006.jpg
    │              OXO3D_Figures_Shadowheart_NSFW_009.jpg
    │              OXO3D_Figures_Shadowheart_NSFW_011.jpg
    │
    ├───OXO3D_Figures_Shadowheart_SFW_NSFW_Split
    │              OXO3D_Figures_Shadowheart_Base_01.stl
    │              OXO3D_Figures_Shadowheart_Base_02.stl
    │              OXO3D_Figures_Shadowheart_Base_03.stl
    │              OXO3D_Figures_Shadowheart_Base_04.stl
    │              OXO3D_Figures_Shadowheart_Hair.stl
    │              OXO3D_Figures_Shadowheart_Hand_01.stl
    │              OXO3D_Figures_Shadowheart_Head.stl
    │              OXO3D_Figures_Shadowheart_Hip.stl
    │              OXO3D_Figures_Shadowheart_NSFW_Hair.stl
    │              OXO3D_Figures_Shadowheart_NSFW_Hand_01.stl
    │              OXO3D_Figures_Shadowheart_NSFW_Hand_02.stl
    │              OXO3D_Figures_Shadowheart_NSFW_Head.stl
    │              OXO3D_Figures_Shadowheart_NSFW_Hip.stl
    │              OXO3D_Figures_Shadowheart_NSFW_Shoe_01.stl
    │              OXO3D_Figures_Shadowheart_NSFW_Shoe_02.stl
    │              OXO3D_Figures_Shadowheart_NSFW_Torso.stl
    │              OXO3D_Figures_Shadowheart_NSFW_Weapon_01.stl
    │              OXO3D_Figures_Shadowheart_NSFW_Weapon_02.stl
    │              OXO3D_Figures_Shadowheart_Shoe_01.stl
    │              OXO3D_Figures_Shadowheart_Shoe_02.stl
    │              OXO3D_Figures_Shadowheart_Torso.stl
    │              OXO3D_Figures_Shadowheart_Weapon.stl
    │              OXO3D_Figures_Shadowheart_Weapon_02.stl
    │
    ├───OXO3D_Figures_Shadowheart_SFW_NSFW_UnSplit
    │              OXO3D_Figures_Shadowheart.stl
    │              OXO3D_Figures_Shadowheart_Base.stl
    │              OXO3D_Figures_Shadowheart_NSFW.stl
    │
    └───OXO3D_Figures_Shadowheart_Support
        ├───Chitubox
        │              OXO3D_Figures_Shadowheart_Batch_01.chitubox
        │              OXO3D_Figures_Shadowheart_Batch_02.chitubox
        │              OXO3D_Figures_Shadowheart_Batch_03.chitubox
        │
        └───STL
                       OXO3D_Figures_Shadowheart_Batch_01.stl
                       OXO3D_Figures_Shadowheart_Batch_02.stl
                       OXO3D_Figures_Shadowheart_Batch_03.stl

How I envision this is that these would all be a single model, and instead of having the groups displayed on the model page by filename, it would be by subfolder. Right now if I tried to upload this release without going through and manually flattening and renaming everything, I would get 4-5 separate models.

How I think this might be achievable is through the Model Path Template. If that path template was relative to the library root (say /libraries/Figurines) that would allow you to define a structure where the model root folder could easily be identified.

/libraries/{creator}/{model} Everything below model at that point would be part of the same model.

I understand that this would not allow for the {tags} key but I feel like the preference between the two styles could probably be set at the library level?

nosyrbllewe commented 1 month ago

I agree completely with Rukongai. This exact reason is why Manyfold isn't really used by me yet. Even if I do decide to flatten it later, it still becomes a mess as the model pieces are all mixed in together.