Best practices for organizing level assets?

I'm starting to adapt a proof of concept arcade game engine into something that supports a sequence of levels. Each level will have a few exclusive images that go along with it, and possibly music, SFX, and maybe even fonts. I'm not sure if there's a "right" answer — in fact, I'm pretty sure there's not — but I'm curious what most folks use as their primary organizing principle for level assets.

Specifically, do you…

  1. Keep all images, sounds, fonts, etc. in their respective top-level images, sounds, and fonts folders, either in subdirectories according to level/scene and/or using some filename prefix scheme?
  2. Group all level assets together with any other related files (including code, config, etc.) such that each level is entirely self-contained within your project structure?
  3. Something else I haven't thought of?

I'm flip-flopping on the best approach, and see pros and cons to each. There's a certain appeal to having a level manifest as a singular folder that you could hypothetically move around as a unit (that probably stems from a lifetime as a Mac user where apps and all sorts of other "bundles" are just fancy folders), but it goes against the recommended project structure.

I'd love to hear how others have approached this and any pitfalls I should look out for!

Do what you want, whatever fits your thinking! The recommended structure isn't vital.

I put SOME things in per-"level" folders, and other things, shared between them all, in common folders. And I have subfolders within the folders too.

I am finding that I personally like more subfolders rather than fewer: drilling down lets me find something within a smaller category, without dealing with such a huge list of files.

Also, since those folder names are in the code too, they can be handy for searching.