{"id":28778641,"url":"https://github.com/thyeem/qed","last_synced_at":"2026-07-15T14:02:33.265Z","repository":{"id":53891975,"uuid":"519038414","full_name":"thyeem/qed","owner":"thyeem","description":"Encode your data into a tar stream of QR code","archived":false,"fork":false,"pushed_at":"2024-07-05T17:29:18.000Z","size":7601,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-26T01:38:56.570Z","etag":null,"topics":["backup-files","decoder","decoding","encoder","encoding","qr","qr-backup","qrcode","tar-archive"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thyeem.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-07-29T01:04:49.000Z","updated_at":"2024-12-15T15:02:49.000Z","dependencies_parsed_at":"2023-10-29T10:27:19.982Z","dependency_job_id":"ee760d97-a081-42e0-867e-f1952eda3f8b","html_url":"https://github.com/thyeem/qed","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thyeem/qed","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thyeem%2Fqed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thyeem%2Fqed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thyeem%2Fqed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thyeem%2Fqed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thyeem","download_url":"https://codeload.github.com/thyeem/qed/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thyeem%2Fqed/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35507793,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-15T02:00:06.706Z","response_time":131,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backup-files","decoder","decoding","encoder","encoding","qr","qr-backup","qrcode","tar-archive"],"created_at":"2025-06-17T16:42:28.729Z","updated_at":"2026-07-15T14:02:33.243Z","avatar_url":"https://github.com/thyeem.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# qed\n\n\u003cimg src=\"data/slideshow.gif\" width=\"480\" /\u003e\n\n_Quod Erat Demonstrandum_. _Q.E.D._\n\n__Encode any data into a tar stream of QR code images.__\n\nSeriously? Yes, we are. `'-']b`\n\nAs you know, this is deadly inefficient in terms of _storage_ and _encoding/decoding time_. Due to this inefficiency, it would not be great for simple backup purpose. However, __we believe it may have useful uses__.\n\n## Quick Start\n```bash\n# encode stream (stdin) -\u003e tar-stream (stdout)\n$ cat FILE | qed\n\n# decode tar-stream (stdin) -\u003e stream of the original contents (stdout)\n$ cat FILE | qed | qed -d\n\n# encode FILE_OR_DIR via argument -\u003e tar-stream (stdout)\n$ qed FILE_OR_DIR\n\n# encode FILE_OR_DIR via argument -\u003e filepath of TAR_FILE (stdout)\n$ qed FILE_OR_DIR \u003e TAR_FILE\n\n# the same as above\n$ qed -o TAR_FILE FILE_OR_DIR\n\n# create a video as a QR code slideshow\n$ qed -p FILE_OR_DIR\n\n# create a HTML of QR code images\n$ qed -q FILE_OR_DIR\n\n# decode TAR_FILE via argument -\u003e the original data's stream (stdout)\n$ qed -d TAR_FILE\n\n# can also decode a single IMAGE (*.png, *.jpg, ...) -\u003e the original data's stream (stdout)\n$ qed -d IMAGE\n\n# can also decode a single VIDEO (*.mp4, *.mov, ...) -\u003e the original data's stream (stdout)\n$ qed -d VIDEO\n\n# can also decode DIRECTORY conataining IMAGE(s) -\u003e the original data's stream (stdout)\n# data are automatically selected if various kinds of data are mixed.\n$ qed -d DIRECTORY\n\n# decode TAR_FILE via argument -\u003e filepath of a single concatanated file (stdout)\n$ qed -d TAR_FILE \u003e FILE\n\n# decode TAR_FILE via argument -\u003e filepath of NEW_DIR of the original contents (stdout)\n$ qed -d -o NEW_DIR TAR_FILE\n\n# -v increases verbosity. it shows the details how the work is progressing.\n$ qed -v FILE_OR_DIR | qed -dv\n```\nFor more detailed options, refer to the [Usage](https://github.com/thyeem/qed#usage) and [More Examples](https://github.com/thyeem/qed#more-examples) section below.\n\n\n## Features\nIn short, once encoded any data by `qed`, it __can be restored by `qed` at any moment__.\n\n- __Decodes deterministically__ even in ambiguous or conflicting cases, no matter of\n   * _data duplication_\n   * _filename corruption_\n   * _file unsorting_\n   * _filepath relocation_.\n\n- Fully support for setting [version](https://en.wikipedia.org/wiki/QR_code#Storage) and [error correction level](https://en.wikipedia.org/wiki/QR_code#Error_correction) of the QR code.\n\n- Uses `stdout` by default as encoder/decoder output.\n  \u003e If not provided `-o filepath` option, __output to `stdout` is the default__.\n\n- Creates some bytes of header when encoding, and provides some information when decoding.\n\n\n`qed` is heavily inspired by https://github.com/alisinabh/paperify.\nWe have improved usability and added some features.\n\n\n## Install\n```bash\n# prerequisites\n# ffmpeg is optional as only used with '-p' option.\n$ brew install zbar qrencode imagemagick ffmpeg\n\n# clone\n$ git clone https://github.com/thyeem/qed.git\n$ cd qed\n\n# put the 'qed' file in $PATH direcoty like $HOME/.local/bin/ if needed\n$ chmod +x qed \u0026\u0026 cp $_ $HOME/.local/bin\n\n# check it out if you want to know it works well. This may take a while.\n$ sh test.sh\n```\n\n## Usage\n```qed\n$ qed -h\n qed - encode data into a tar stream of QR Code images\n\n Usage: qed [-hdpqzv] [-o output] [-V version] [-l error-correction-level] [-r framerate]\n            [-s cell-size] [-m margin] [-1 qr-fg-color] [-0 qr-bg-color] filepath\n\n      -h    print this message\n      -d    decode input\n      -p    create QR Code slideshow (mp4) after encoding is finished\n      -q    create QR Code quick-view (HTML document) after encoding is finished\n      -v    show in detail how the work is progressing\n      -r    set QR code slideshow framerate  (default: 1)\n      -o    set output filepath              (default: '-' for stdout)\n      -s    set cell size of QR Code         (default: 13)\n      -m    set margin of QR Code            (recommended 4+,   default: 24)\n      -V    set version of QR Code           (1 to 40,          default: 40)\n      -l    set error correction level       (one of [L,M,Q,H], default: L)\n      -1    set foreground color of QR Code  (6-hexadecimal,    default: 000000)\n      -0    set background color of QR Code  (6-hexadecimal,    default: ffffff)\n```\n\n\n## More Examples\n```bash\n# get the encoding result of QR images in the current dir\n$ qed FILE_OR_DIR | tar xv\n\n# get the encoding result of QR images in the specified DIR\n$ qed FILE_OR_DIR | tar xv -C DIR\n\n# compress the QR code tarball after encoding\n$ cat FILE | qed | gzip -c \u003e tmp.tar.gz\n\n# uncompress the tar.gz archive then decode. go back to FILE again\n$ gunzip -c tmp.tar.gz | qed -d\n\n# create and play a mp4 video (QR code slideshow) when encoding is finished\n$ qed -p FILE | xargs open\n\n# create and open QR code images on browser when encoding is finished\n$ qed -q FILE | xargs open\n\n# stream -\u003e tar stream -\u003e stream\n$ curl -sL https://google.com | qed | qed -d\n\n# stream -\u003e QR-image mp4 file -\u003e stream\n$ curl -sL https://google.com | qed -p | xargs qed -d\n\n# FILE_OR_DIR -\u003e tar stream -\u003e NEW_DIR of the original contents\n$ qed FILE_OR_DIR | qed -d -o NEW_DIR\n\n# with other encoder\n$ echo \"QED: QR.Encoder.Decoder\" | base64 | qed | qed -d | base64 -d\n\n# backing up directory with qed: does the same thing as tar\n# $ tar -cvf - FROM_DIR | tar -xv -C TO_DIR\n$ qed -v FROM_DIR | qed -dv -o TO_DIR\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthyeem%2Fqed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthyeem%2Fqed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthyeem%2Fqed/lists"}