Of course proof is pushed a bit here. Evidence may be a better word. Showing how the book developed tp me would go a long way.
Over on the Reddit subforum for scriverner, someone asked if there was an automatic way to show your whole edit history so that later if you were accused of using AI or of being an AI you could trot out all the variations.
The suggestions fell into two categories:
-
Use the automatic backup facility – Downside, it’s a full backup each time. Showing the differences is tough.
-
Use the snapshot facility. For me that requires that I remember to do it.
So, with the help of Claude (yes, I use AI for some tasks)
Overview:
- Each day, we use unrtf – a program that turns the native RTF to plain text.
- We create a file structure that maps the binder structure, and use a modified binder/title name as the file name. By my convention, this is stored in ProjectName.mirror in the same directory that ProjectName.scriv is.
- We use the command line program ‘git’ to track changes in this set of files. Using git we can see each day’s changes.
Git is not snapshots. You should use it in addition to snapshots.
This process creates a mirror without formatting. You end up with a plain text version of your file. For me this isn’t a big worry. There’s not a lot of formatting in my scenes. If this system helped me recover an overwritten scene, it wouldn’t take me long to restore formatting.
I created 3 scripts:
Scrivx_walk: This goes thorugh the scrivx binder.XML file, and builds a UUID to binder path mapping, where path reflects it’s binder path, and the actual titles.
It outputs a comma separated value file:
UUID,Type,Title,Path
F8F9FDEF-FD9F-4A8C-B33D-3434A1220ADC,Text,Novel Format,Novel_Format
03B47784-78E7-45A3-99BD-B1A48B7B4739,Folder,Volume 2,Volume_2
B8D55E00-80C4-4A87-9AE4-67173D03BE45,Text,(missing),Volume_2/UNTITLED_B8D55E00
B1EDB4F8-953B-424E-81F9-C8E266FC9DB2,Text,Resiliance,Volume_2/Resiliance
In generating titles, it makes some conversions: space becomes underscore, apostrophes become hyphens, ampersands become pluses. Becuase working with this is done in a terminal window, it helps to avoid characters that are special to the shell.
usage: scrivx_walk.py [-h] [–manuscript-only] [–roots ROOTS] [–list-roots] [–scriv-dir SCRIV_DIR] [–out OUT] [scrivx_path]
-
-h, --help
- show this help message and exit
-
–manuscript-only
- Restrict output to the Manuscript/Draft subtree only (only works if a DraftFolder exists – see –roots otherwise)
-
–roots ROOTS
- Comma-separated top-level UUIDs to walk, when there is no single DraftFolder root. Use --list-roots
first to find UUIDs.
- Comma-separated top-level UUIDs to walk, when there is no single DraftFolder root. Use --list-roots
-
–list-roots
- Print top-level binder items (UUID, Type, Title) and exit
-
–scriv-dir SCRIV_DIR
- Path to the .scriv package directory. Can be omitted if run from that directory and it’s the only .scriv folder present.
-
–out OUT
-
Output CSV path (default: stdout)
=========
-
Normally scrivx_walk is not called by humans, but is used in the next chunk:
mirror+commit.py
Overview: Mirror+commit runs scrivx_walk, and uses it plus docs.checksum to create a manifest.
When it runs, it generates a new manifest, then compares it to the old one. Anything with a new checksum needs to be unrtf’ and compared to the older version. If the manifest isn’t present, it compares them all. This is a somewhat slower, but at present on a 280,000 word book on a Mac M4 still runs in only a few seconds.
If you run mirror+commit nightly, you can see what changes you made on a day by day basis, either on a single file, or on a set of files.
There are graphical front ends for git that make it easier to use. I’m currently using one called “Fork” which is available for both windows and mac.
The third script in the set is ‘what-changed’ It’s new, and not really tested yet.
It actually measures the changes for each file between current version, and a week ago (default) or the first run on a given date. This then can be sorted in descending order. I wanted this so I could keep my therapist up to date on what I’ve been working on. So I can send her the files that I’ve been working on most. But it would also be useful for people who are collaborating on a project.