[eluser]CroNiX[/eluser]
I use a database-based config system (basically same as CI config, except it uses the database so it's easily editable by the customer) where I (or the site owner) can enter the paths for various assets, so paths are customizable.
Then there is an assets table that only stores the filename (no path), a category id for the asset type (which is how the path gets determined), a single field to store a serialized array of parameters for that asset (which differ from images/video/audio/pdf/etc so I don't have to use separate tables for each type), the id of the entity that the asset belongs to and the order that the asset gets displayed (like an image gallery might have a specified order to display the images). A few more common fields like mime-type, file size, etc.
There are predetermined sizes that things like images get turned into (small thumbnail, large thumbnail, actual image) and each one has the path in the db config along with the image dimensions each one gets resized to. Since this is for all images, we just store the main image data in the db and can determine which type to load based on its case use (gallery might get all small thumbnails which point to the large images). If we need a small thumbnail for an image, we just use the same data from the assets table (image filename) and use the appropriate path when displaying that particular image (small thumbnail dir).
Each project has different requirements, of course, but I use this system, or a variation of it, on several larger sites and it works a treat.
Hope some of the ideas are useful.