Тут вопрос в архитектуре. Например, можно при записи файла просто вычислять перцептивный хэш и индексировать его.
Тогда запись выглядела бы так:
- Вычислить хэш файла
- Поискать в списке индексов самый близкий хэш
- Если найден достаточно близкий, посчитать разницу
- Если целесобразно - записать на диск только патч
Мне кажется, конкретно то, что ты рассказываешь, нужно делать ПОВЕРХ файловой системы внутри файлов.
То есть пользоваться, например, не условным png для картинок, а каким-нибудь webp и концепцией слоёв (webp же умеет в слои?), тогда ты на уровне софта сможешь добавлять "патчи" (ты говорил про вотермарки?) в виде допслоёв и отдавать картинку в нужном виде с минимальными изменениями метаинформации в webp с отключением или включением нужного тебе слоя.