I'm an indie game developer and I often hire freelancers for artwork. We sign an agreement to basically state that I'd get ownership of the resources they produce.

I'm a fairly picky person when it comes to formalities in these agreements, and I can't find a good system to document file transfers between freelancer and client. What I'm looking for is:

A way to track a relationship between their email account and mine, and document file exchanges, like a "timeline":

  • Freelancer uploaded X file at 16:50 UTC+03:00, [download button]
  • Freelancer uploaded Y file at 17:43 UTC+03:00, [download button]
  • Client uploaded Z file at 18:35 UTC+03:00, [download button]

And files are permanently kept in the timeline for documentation purposes - it should be impossible to delete an entry (unless both parties agree to delete it). The point of such structure is to "vouch" that this person transferred a file at some point and neither party can deny it.

Technically, e-mail attachments do exactly this. However, if it is a relatively large file, Gmail will ask them to upload to Google Drive. The problem with this is that Drive lets them keep ownership of the file (so if they delete it, I cannot get it back unless I had downloaded it); we would lose the whole "record" thing as there will be no guarantee that the file that I have is in fact the file that they uploaded.

How we've worked with a few freelancers in the past is that they will transfer a bulk of files (zip) to us using whatever convenient method, and then, in written, state that they have produced and transferred a zip with some MD5 hash. So if it is ever necessary to prove that such a file was given to me by a freelancer, we'd just compute its hash. However that's understandably inconvenient.

  • \$\begingroup\$ While I understand the need on one level, I worry that it points to an underlying problem, if not with the existing contract than with the client relationship. \$\endgroup\$ Commented Apr 17, 2021 at 18:11

1 Answer 1


Version control software designed for large binary files would solve this problem.

For example, git lfs provides efficient versioned storage for any type of file with infinite history (provided infinite storage space). It supports commit signing to prevent resource corruption.

Perforce is another example common the game dev industry (source).

The key factor is that you want version control designed for binary data rather than source code/text data. Most version control works by using diffs between subsequent versions of a file - while this works great for text, it performs poorly on the compressed data found in most image & audio formats.

  • 1
    \$\begingroup\$ What kinds of permissions would you need to set to ensure no one can delete a past version? Is that the default configuration, or would OP need to do anything custom? \$\endgroup\$
    – DMGregory
    Commented Nov 10, 2020 at 20:43
  • 1
    \$\begingroup\$ @DMGregory If OP decides to go this way, they should research gitolite. It is an authentication/authoristion system for custom git servers. Thank you for the effort and interest to comment and do please continue doing so. \$\endgroup\$
    – Vorac
    Commented Nov 10, 2020 at 23:26

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .