How can I create procedural tiles with uniquely seeded textures for each one? [Updated] My goal with this experiment was to create a procedurally tiling floor where each tile is unique.
After messing around for a while, this is what I came up with:

Result:

I was really pleased, until I realized I have no idea how to make this tileable/repeatable. I found this post, but those solutions didn't work (or I failed to properly implement them). I tried to find out how to recreate the Brick Texture node from scratch because I think that would probably answer my questions, but this was really all I could find.
I was even less pleased with my work when I started inserting my marble texture into the material and realized it wasn't going to work. I tweaked some things and this is what I came up with:

My end goal is creating a procedural texture where tile shapes are created by a voronoi texture node and each tile has a different &quot;seed&quot;. Is there a way to do this? I imagined using colors values from the voronoi node to provide the value that seeds each marble tile, but I can't figure out how to actually do that.
This is as far as I've been able to get (it doesn't tile and I'm pretty sure each tile's texture is static). Any help and/or feedback would be very much appreciated. Thanks in advance!


EDIT: Updated node tree. Still doesn't do what I want, but at least it's prettier...

UPDATE: Thanks for the help! I spent a few more hours cleaning up the shader and adding a bunch of input sliders. These are the &quot;final&quot; results. The textures, tiles, tile shapes, grout thickness, and seed are fully procedural! The grout is pretty bad, but it's 7AM and I'm going to sleep.




Updated Blender file:
I wonder how much computational difference there actually is,between using the Voronoi node for tiling, and doing the maths yourself, especially after you've introduced a couple of Noise nodes to do your randomness for you.. ?
Anyway, you certainly get lot out for not much in, in the way of nodes, with this kind of tree..

(I've made a group of it, here) .. You get UV-per-Cell, by subtracting the Position output from the texture-space, which lets you tile any texture you like into each cell:

You get 3 random numbers (a color) per cell, which you can use to randomise any of the cell's attributes (here, used to randomly rotate a texture, per cell):

And from the parallel Voronoi in the tree, you can get the distance to the cell's edges, which you can use to make a grouting mask, as here, or you can map ranges of it to other ranges to bevel tile edges:

And you can use the Randomness setting in the Voronoi nodes to take you from square tiles..

.. to Voronoi tiles, without any further adjustment.


(Just the group.. the other trees are a bit of a rushed mess :) )