How to add, extract, modify "tiddlers" from command line? To do IPFS media transfer

La_Corporation-Documentaire.dragdrop.json (698 Bytes)

For playing IPFS video in tiddler, I made “type”: “text/vnd.tiddlywiki”, json files using <video> html5 inclusion.
What would be the tiddlywiki command to import this file?

Per the docs (https://tiddlywiki.com/#ImportCommand), the --import command should do it.

I tried –import command, and it works! Thanks :wink:

  1. Get the latest “ipfs online version”
    ipfs cat /ipns/k51qzi5uqu5dkavscgxvllbwh00eo74hqplaltrl4fk347602oq0y5hdc1y2fw > index.html

  2. Add tiddler
    tiddlywiki --verbose --load index.html --import ~/Bureau/Journal/youtube/Original_Atari_PONG-1972-arcade_machine_gameplay_video.dragdrop.json json

Boot log:
  Startup task: load-modules
  Startup task: info after: load-modules before: startup
  Startup task: plugins after: load-modules
  Startup task: startup after: load-modules
  Startup task: story after: startup
  Startup task: commands platforms: node after: story
Executing command: load index.html
Executing command: import /home/fred/Bureau/Journal/youtube/Original_Atari_PONG-1972-arcade_machine_gameplay_video.dragdrop.json json
1 tiddler(s) imported

But it doesn’t change index.html … re-publishing it
NEWIPFS=$(ipfs add -q index.html) && ipfs name publish -k ipfswikikey /ipfs/$NEWIPFS


Now I would like to “export” tiddlers containing external links (“canonical_uri”) to add into IPFS, replace URI republish modified tiddler.

If it is possible to save to IPFS via HTTP requests, you could use the FileUploads plugin. It uploads any binary tiddlers to the specified backend and creates canonical URI tiddlers for them.

The choice of backends is extensible via uploader modules, which are relatively easy to write for HTTP APIs. There is one for Fission’s Webnative File System (which also uses IPFS under the covers) but I believe that needs updating for the current WNFS version.

See:

OK, thanks @saqimtiaz, the way you explain seems great to add binary files, but my goal is to process already recorded tiddlers.
Some tiddlers could contain binary data already, or canonical_uri field, I want to copy to IPFS and update treated tiddlers.

I still don’t understand how to create new index.html after import step 2

Try adding these options:

--output . --render "$:/core/save/all" "newindex.html" "text/plain"

1 Like

The FileUploads plugin uses a filter to determine what to tiddlers to upload, so is completely flexible in that regard.

Great !! Your help unlock my first wish :wink:
“Adding tiddler to an online IPFS Tiddlywiki”

My second wish then is “Copy internal/external media binaries from a tiddlywiki to IPFS to reduce index.html size and optimize my hosting”

Do you have an example of a command extracting some tiddlers.json from a specific field or tag values ?

After that, If I want to replace tiddler:

  • Do I need to remove old one, then add the new tiddler.
  • Or “update specific tiddler” command exists?

@saqimtiaz, maybe after I can understand how to use your method, before, I must learn how to manipulate tiddlers from command line

Continuing exploring commands
https://tiddlywiki.com/#FetchCommand
https://tiddlywiki.com/#SaveCommand

And found
http://tobibeer.github.io/tw/filters/#Filter%20Examples

Extending the command
tiddlywiki --verbose --load index.html --import ~/Bureau/Journal/youtube/Original_Atari_PONG-1972-arcade_machine_gameplay_video.dragdrop.json json
with

Result in the fact newindex.html and index.html are the same !?

I don’t know. Try this.

tiddlywiki --verbose --load index.html --load "~/Bureau/Journal/youtube/Original_Atari_PONG-1972-arcade_machine_gameplay_video.dragdrop.json" --output . --render "$:/core/save/all" "newindex.html" "text/plain"

How did you verify this? Are the files the same size? If the added tiddler does not contain a created field, it will not show up in the Recent tab, but it will show up in the All tab.

You’re right. My mistake was to put a trailing / in --output /tmp/ as file path

tiddlywiki  --verbose --load index.html \
            --import new_tiddler.json "application/json" \
            --output /tmp --render "$:/core/save/all" "newindex.html" "text/plain"

This is the working “import tiddler” command line.
I was missing "application/json" for import

PS: I get json template from “export tiddler as json” from GUI

About SaveCommand I am a bit lost with filters

I can save tiddler with certain tittle.

But some filtering expression examples are missing to me

Like

  • save to json format instead of .tid ?
  • knowing TW last modification date ?
  • “select & save tiddler” containing a tag, a field, with certain values ?
  • save tiddlers created after a certain date ?

Some examples would enhance my learning curve

I’m thinking you may actually want the render command. There is an example for saving to JSON, though I feel the example must be wrong (maybe a leftover from a prior command), because the elements are in the wrong order.

@Mark_S thanks.

Great, render is the command I was needing.

I could make a script

  • searching for tiddlers “tag=tube”,
  • find URL in “text”,
  • download it with yt-dlp,
  • add mp4 video file to IPFS,
  • create new tiddler removing first one
  • publish new version of TW to IPNS

I am using TW associated with a crypto key related with IPFS/IPNS key. So anyone can store its tiddlywiki in the “interplanetary file system” only through a “salt/pepper” NaCl key generator converted to ED25519 format

Btw, I still wonder how I could know TW last modification date ?

Unfortunately, there aren’t many built-in functions for handling dates. You could filter, say, all tiddlers modified in the last 3 days:

[days[-3]]

Or, if you make up your date like yyyymmdd you can compare it:

[tag[HelloThere]]:filter[get[modified]compare:date:gt[20200101]]
1 Like

Thanks again for your precious help !

I have a question about “encrypted tiddlers”, do you know if there is a way to manipulate them form command line?

Consider a created date it is stored in the form YYYYMMDDhhmmssxxx or the date format YYYY0MM0DD0hh0mm0ss0xxxsimple date comparisons is easy because any date before is a smaller number and any date after a larger number.

  • Just construct a date number for and compare it greater than or less than eg
    • [<now YYYY0MM0DD0hh0mm0ss0xxx>...
    • 20220902120000000 midday on 20220902
1 Like

@TW_Tones thanks for your good advice about date comparison

I found https://github.com/masonicGIT/sjcl-cli that is the same way tiddlers are encrypted… “Stanford JavaScript Crypto Library”

But import command is missing “crypto” encoding type…
Is the “encrypt widget” a way? Do you know what is PasswordVault ?