• Stars
    star
    437
  • Rank 99,602 (Top 2 %)
  • Language
    Rust
  • License
    GNU General Publi...
  • Created over 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Zoomable image downloader for Google Arts & Culture, Zoomify, IIIF, and others

dezoomify-rs

Continuous Integration

dezoomify-rs is a tiled image downloader. Some webpages present high-resolution zoomable images without a way to download them. These images are often tiled: the original large image has been split into smaller individual image files called tiles. The only way to download such an image is to download all the tiles separately and then stitch them together. This process can be automated by a tiled image downloader.

The most common tiled image downloader is probably dezoomify, an online tool which is very easy to use.

The goal of this project is not to replace the traditional dezoomify. However, some images are so large that they can't be efficiently downloaded and displayed inside a web browser. Other times, a website tries to protect its tiles by refusing access to them when certain HTTP headers are not set to the right values. dezoomify-rs is a desktop application for Windows, MacOs and linux that does not have the same limitations as the online zoomify. dezoomify-rs also lets the user choose between several image formats, whereas in dezoomify, you can only save the image as PNG.

dezoomify-rs supports several zoomable image formats, each backed by a dedicated dezoomer. The following dezoomers are currently available:

  • Google Arts & Culture supports downloading images from artsandculture.google.com;
  • zoomify supports the popular zoomable image format Zoomify.
  • deepzoom supports Microsoft's DZI format (Deep Zoom Image), that is often used with the seadragon viewer.
  • IIIF supports the widely used International Image Interoperability Framework format.
  • Zoomify PFF supports the old zoomify single-file image format.
  • Krpano supports the krpano panorama viewer
  • IIPImage supports the iipimage image format
  • NYPLImage supports the nypl image format
  • generic For when the tile URLs follow a simple pattern.
  • custom for advanced users. It allows you to specify a custom tile URL format that can contain multiple variables. This gives you the most flexibity, but requires some manual work.

Screenshots

dezoomify-rs screenshot

Usage instructions

Download dezoomify-rs

First of all, you have to download the application.

  1. Go to the the latest release page,
  2. download the version that matches your operating system (Windows, MacOS, or Linux),
  3. Extract the binary from the compressed file.

On some operating systems, you may have to authorize the application execution before being able to launch it. See how to do in MacOS.

Supported output image formats

Dezoomify-rs supports multiple output image formats. The format to use is determined by the name of the output file. For instance, entering dezoomify-rs http://example.com/ my_image.png on the command line will create a PNG image.

Each image format encoder has a distinct set of features and limitations :

  • PNG images are compressed losslessly, which means that the output image quality is (very slightly) better than JPEG, at the expense of much larger file sizes. The PNG encoder in dezoomify-rs can create very large images; it is not limited by the available memory on your computer. This format is chosen by default when the image is very large, or its size is not known in advance.
  • JPEG is the most common image format. JPEG images cannot be more than 65,535 pixels wide or high. This format is chosen be default for images that fit within this limit. The JPEG encoder in dezoomify-rs requires the whole image to fit in memory on your computer.
  • All formats supported by image-rs are also supported.
  • IIIF, which allows you to re-create a zoomable image locally. This is the recommended output format when your image is very large (multiple hundreds of megapixels), since most image viewers do not accept huge PNGs or JPEGs. If the output path ends with .iiif, a folder will be created instead of a single file, with its structure following the IIIF specification. A file called viewer.html will be created inside this folder, which you can open in your browser to view the image.

Tile cache

By default, dezoomify-rs works entirely in memory, which is very fast. However, the latest versions added the possibility to use a "tile cache". When you launch dezoomify-rs from the commandline with dezoomify-rs --tile-cache my_caching_folder http://myurl.com, it will save all the image tiles it downloads to the specified folder. If the download is interrupted before the end, you will be able to resume it later by specifying the same tile cache folder. A tile cache also allows you to manually get the individual tiles if you want to stitch them manually.

Dezoomers

Google Arts Culture

In order to download images from google arts and culture, just open dezoomify-rs, and when asked, enter the URL of a viewing page, such as https://artsandculture.google.com/asset/light-in-the-dark/ZQFouDGMVmsI2w

Zoomify

You have to give dezoomify-rs an url to the ImageProperties.xml file. You can use dezoomify-extension to find the URL of this file.

Alternatively, you can find it out manually by opening your network inspector. If the image tile URLs have the form http://example.com/path/to/TileGroup1/1-2-3.jpg, then the URL to enter is http://example.com/path/to/ImageProperties.xml.

IIIF

The IIIF dezoomer takes the URL of an info.json file as input.

You can use dezoomify-extension to find the URL of this file.

Alternatively, you can find this url in your browser's network inspector when loading the image.

DeepZoom

The DeepZoom dezoomer takes the URL of a dzi file as input, which you can find using dezoomify-extension.

You can find this url in your browser's network inspector when loading the image. If the image tile URLs have the form http://test.com/y/xy_files/1/2_3.jpg, then the URL to enter is http://test.com/y/xy.dzi.

Zoomify PFF

PFF is an old zoomable image file format format developed by zoomify. You can give a pff meta-information URL (one that contains requestType=1) to dezoomify-rs and it will download it.

Krpano

Krpano is a zoomable image format often used for panoramas, virtual tours, photoshperes, and other 3d zoomable images. dezoomify-rs supports downloading individual image planes from such images. You need to provide the xml meta-information file for the image.

Nypl

The digital collections of New York's Public Library use their own zoomable image format, which dezoomify-rs supports. Some images have a high-resolution version available, and work with this software. Others do not, and can be downloaded by simply right-clicking on them in your browser. To download an image, just enter the URL of its viewer page in dezoomify-rs, like for example:

https://digitalcollections.nypl.org/items/a28d6e6b-b317-f008-e040-e00a1806635d

IIPImage

IIPImage is an image web server that implements the Internet Imaging Protocol. Such images are easily recognizable by their tile URLs, which contain FIF=. You can pass an URL containing FIF= to dezoomify-rs to let it download the image.

Generic

You can use this dezoomer if you know the format of tile URLs. For instance, if you noticed that the URL of the first tile is

http://example.com/my_image/image-0-0.jpg

and the second is

http://example.com/my_image/image-1-0.jpg

then you can guess what the general format will be, and give dezoomify-rs the following:

http://example.com/my_image/image-{{X}}-{{Y}}.jpg

If the numbers have leading zeroes in the URL (such as image-01-00.jpg instead of image-1-0.jpg), then you can specify them in the url template as follows:

http://example.com/my_image/image-{{X:02}}-{{Y:02}}.jpg

Custom yaml

The custom yaml dezoomer is a powerful tool that lets you download tiled images in many different formats, including formats that are not explicitly supported by dezoomify-rs. In order to use this dezoomer, you'll need to create a tiles.yaml file, which is a little bit technical. However, we have a a tutorial for the custom YAML dezoomer to help you. If you are having troubles understanding the tutorial or adapting it to your use-case, you should get in touch by opening a new github issue.

Command-line options

When using dezoomify-rs from the command-line

dezoomify-rs 2.11.0
lovasoa
Allows downloading zoomable images. Supports several different formats such as zoomify, iiif, and deep zoom images.

USAGE:
    dezoomify-rs [FLAGS] [OPTIONS] [--] [ARGS]

FLAGS:
        --accept-invalid-certs    Whether to accept connecting to insecure HTTPS servers
        --help                    Prints help information
    -l, --largest                 If several zoom levels are available, then select the largest one
    -V, --version                 Prints version information

OPTIONS:
        --compression <compression>
            A number between 0 and 100 expressing how much to compress the output image. For lossy output formats such
            as jpeg, this affects the quality of the resulting image. 0 means less compression, 100 means more
            compression. Currently affects only the JPEG and PNG encoders [default: 20]
        --connect-timeout <connect-timeout>
            Time after which we should give up when trying to connect to a server [default: 6s]

    -d, --dezoomer <dezoomer>                      Name of the dezoomer to use [default: auto]
    -H, --header <headers>...
            Sets an HTTP header to use on requests. This option can be repeated in order to set multiple headers. You
            can use `-H "Referer: URL"` where URL is the URL of the website's viewer page in order to let the site think
            you come from the legitimate viewer
        --logging <logging>
            Level of logging verbosity. Set it to "debug" to get all logging messages [default: warn]

    -h, --max-height <max-height>
            If several zoom levels are available, then select the one with the largest height that is inferior to max-
            height
        --max-idle-per-host <max-idle-per-host>
            Maximum number of idle connections per host allowed at the same time [default: 32]

    -w, --max-width <max-width>
            If several zoom levels are available, then select the one with the largest width that is inferior to max-
            width
        --min-interval <min-interval>
            Minimum amount of time to wait between two consequent requests. This throttles the flow of image tile
            requests coming from your computer, reducing the risk of crashing the remote server of getting banned for
            making too many requests in a short succession [default: 0s]
    -n, --parallelism <parallelism>
            Degree of parallelism to use. At most this number of tiles will be downloaded at the same time [default: 16]

    -r, --retries <retries>
            Number of new attempts to make when a tile load fails before giving up. Setting this to 0 is useful to speed
            up the generic dezoomer, which relies on failed tile loads to detect the dimensions of the image. On the
            contrary, if a server is not reliable, set this value to a higher number [default: 1]
        --retry-delay <retry-delay>
            Amount of time to wait before retrying a request that failed. Applies only to the first retry. Subsequent
            retries follow an exponential backoff strategy: each one is twice as long as the previous one [default: 2s]
    -c, --tile-cache <tile-storage-folder>
            A place to store the image tiles when after they are downloaded and decrypted. By default, tiles are not
            stored to disk (which is faster), but using a tile cache allows retrying partially failed downloads, or
            stitching the tiles with an external program
        --timeout <timeout>
            Maximum time between the beginning of a request and the end of a response before the request should be
            interrupted and considered failed [default: 30s]

ARGS:
    <input-uri>    Input URL or local file name
    <outfile>      File to which the resulting image should be saved

Documentation

  • For documentation specific to this tool, see the dezoomify-rs wiki. Do not hesitate to contribute to it by creating new pages or modifying existing ones.
  • For general purpose documentation about zoomable images, the dezoomify wiki may be useful.

Batch mode

dezoomify-rs does not yet have the ability to download multiple images at once itself. However, since it is a commandline application. You can use it within a for loop in a batch script in Windows or a bash script in Linux, MacOS (or windows with wsl).

For instance, in bash, you could create a file called urls.txt containing all the urls you want to dezoomify, and then use xargs together with dezoomify-rs :

xargs -d '\n' -n 1 ./dezoomify-rs < ./urls.txt

More Repositories

1

whitebophir

Online collaborative Whiteboard that is simple, free, easy to use and to deploy
JavaScript
1,720
star
2

react-contenteditable

React component for a div with editable contents
TypeScript
1,612
star
3

dezoomify

Dezoomify is a web application to download zoomable images from museum websites, image galleries, and map viewers. Many different zoomable image technologies are supported.
JavaScript
581
star
4

marshmallow_dataclass

Automatic generation of marshmallow schemas from dataclasses.
Python
452
star
5

bad_json_parsers

Exposing problems in json parsers of several programming languages.
Python
363
star
6

sanipasse

Vérificateur de passe sanitaire open-source
Svelte
176
star
7

json_in_type

Fast json encoder in rust, that encodes the structure of JSON values in their types
Rust
82
star
8

custom_error

Define custom errors without boilerplate using the custom_error! macro.
Rust
70
star
9

ophirofox

Une extension pour navigateur qui permet de lire les articles de presse en ligne sur le compte de bibliothèques ayant souscrit à europresse
JavaScript
59
star
10

pagelabels-py

Python library to manipulate PDF page labels
Python
55
star
11

highs-js

Javascript linear programming library
JavaScript
45
star
12

salesman.js

Solves the traveling salesman problem using simulated annealing.
JavaScript
43
star
13

linear-solve

Small javascript library to solve a system of linear equations, invert a matrix, and nothing more.
JavaScript
38
star
14

bloomfilter

Simplistic (but fast) java implementation of a bloom filter.
Java
37
star
15

mandelbrot

A mandelbrot fractal viewer in javascript using svelte
JavaScript
34
star
16

bin2png

Embed binary data inside an HTML file in an efficient way.
JavaScript
34
star
17

dezoomify-extension

A browser extension to detect zoomable images in web pages and downloading them with dezoomify
JavaScript
33
star
18

TPCH-sqlite

SQLite TPCH database
Shell
32
star
19

Sensitive-Topic-History-Quiz

This is the only place where me, the human is talking. All of the files in this repo were generated by ChatGPT. They required hours of interactions with the language model to make it fix its own bugs, and create coherent components, but I am very proud of the result.
JavaScript
31
star
20

fast_array_intersect

The fastest javascript array intersection function
JavaScript
18
star
21

eml2csv

Convert a collection of eml files to CSV
Python
17
star
22

SQLpage

SQL-only webapp builder, empowering data analysts to build websites and applications quickly
Rust
17
star
23

dia2code

Dia2Code is a small utility used to generate code from a Dia diagram.
C
14
star
24

historique-velib-opendata

Historique des données d'occupation de stations vélib' (publiées en opendata)
Python
13
star
25

musreact

Mustache template to react component compiler
JavaScript
12
star
26

graham-fast

Graham scan implementation in javascript
JavaScript
10
star
27

html2unicode

Node module for transforming HTML into unicode
JavaScript
10
star
28

wordsearch

Search words by regex
Svelte
9
star
29

seamcarving

Seam carving implemented in rust
Rust
9
star
30

ZIF

zif file format documantation and tools
JavaScript
9
star
31

samsung-email-password-decrypt

Decrypt encrypted passwords in EmailProvider.db on samsung phones.
Java
9
star
32

dezoom.sh

Download and assemble tiled images. Dezoomify for bash. Depends on imagemagick
Shell
8
star
33

github-sloc

Firefox extension that prints the number of lines of code of a project on project pages on github.
JavaScript
8
star
34

wikipedia-externallinks-fast-extraction

Fast extraction of all external links from wikipedia
Rust
8
star
35

lagrange-cpp

Lagrange interpolation polynomials in C++11
C++
7
star
36

gnome-keyboard-backlight-menu

Set the keyboard backlight brightness with a slider in gnome shell's system menu.
JavaScript
7
star
37

docurun

JavaScript
6
star
38

rectangle-overlap

Fastly compute the intersection of two rectangles.
TypeScript
6
star
39

pyformat-challenge

Python format string vulnerability exploitation challenge
Python
6
star
40

memoization

Straightforward implementation of memoization in javascript
JavaScript
6
star
41

reg

rÊg is a simple grid game
JavaScript
5
star
42

dezoomify-py

Fork of https://sourceforge.net/projects/dezoomify/
Python
5
star
43

haskell-exercises

Exercices pour apprendre le haskell
Haskell
4
star
44

GoodChat

Simple chat application with ES6 + Vue.js + CouchDB
JavaScript
4
star
45

kdsearch

Search k-dimensional datasets efficiently using KDTrees
Python
4
star
46

secured-file-transfer

Secured file transfer implemented in nodeJS.
JavaScript
4
star
47

expectation-maximization

Multivariate gaussian fit with expectation–maximization (EM) algorithm in javascript.
JavaScript
4
star
48

maya_numerals_converter

Online decimal to maya numeral converter.
HTML
4
star
49

BarcodeDetector-api-demo

A quick demo for the Barcode Detection API
HTML
4
star
50

pff-extract

pff (zoomify single-file image format) to jpeg converter
C
3
star
51

choices

Represent a choice between multiple values, using radio buttons, checkboxes, or HTML's <select> element
Elm
3
star
52

elm-rolling-list

A circular buffer implementation in Elm.
Elm
3
star
53

robots

Multi-agents system where robots go fetch materials.
HTML
2
star
54

RLE

Run-length encoding and decoding in haskell.
Haskell
2
star
55

multivariate-gaussian

Multivariate normal distribution density function implemented in javascript
JavaScript
2
star
56

emotions

Detect emotions from webcam images.
CSS
2
star
57

download-book-of-kells

Shell
2
star
58

parse_wiki_text

Parse wiki text from Mediawiki into a tree of elements
Rust
2
star
59

SuperLogger

Log system information using logstash, store the information on ElasticSearch, and visualize it using Kibana.
Java
2
star
60

elm-jsonpseudolist

Elm Json.Decoder for javascript Array-like objects
Elm
2
star
61

SearchHitIterator

Java iterator for elasticsearch scrolls
Java
2
star
62

setup-emscripten

emscripten github action
JavaScript
2
star
63

sha_hashes

Collection of sha hashes of common passwords
2
star
64

sql2json

Convert sql database dumps to JSON
Rust
2
star
65

2048.lua

lua implementation of the popular game "2048". The aim is to merge tiles until you get a 2048 tile. Original game by @gabrielecirulli on http://gabrielecirulli.github.io/2048/ .
Lua
2
star
66

csv-fill-docx

Fill docx templates with data from a csv file
JavaScript
1
star
67

c-osi

C interface to Open Solver Interface solvers for easy integration with external solvers
C++
1
star
68

lovasoa.github.io

Github pages root
HTML
1
star
69

cemantriche

Cémantriche, pour tricher à cémantix
Jupyter Notebook
1
star
70

resume

Ophir LOJKINE's resume, in the jsonresume format.
1
star
71

lsystems

Haskell implementation of l systems
Haskell
1
star
72

libepeg.js

epeg compiled to javascript. Fast jpeg thumbnailing.
C
1
star
73

doublons-js

Find duplicates files in a folder (search files with similar names). GUI application with node-webkit.
JavaScript
1
star
74

ruzzleplayer

Javascript implementation of an algorithm that plays the mobile game "ruzzle"
JavaScript
1
star
75

ophir_odt_import

Drupal module to import odt (OpenDocument) files into drupal nodes.
PHP
1
star
76

kaigit

Svelte
1
star
77

srtmove-hs

Delay .srt subtitles
Haskell
1
star
78

find-candidate-keys

Finds the candidate keys from a list of functionnal dependencies
JavaScript
1
star
79

comptes

Expenses management for friends
JavaScript
1
star
80

poker

poker probabilities map
JavaScript
1
star
81

omodbus

OModbus is a GUI to interact with modbus devices
HTML
1
star
82

elm-fileinput

<input type="file" /> for Elm
Elm
1
star
83

elm-base-repo

Base repository containing an empty elm module, ready tobe forked.
Elm
1
star
84

dezoomify-browser

This is a small browser that automatically launches dezoomify when it meets a zoomified image. Uses node-webkit.
JavaScript
1
star
85

anylang

Type text in any alphabet. Anylang is a javascript library that converts a phonetic transcription of a text in a language to a text written in the alphabet of the target language. Currently works with hebrew (with vowels) and russian.
JavaScript
1
star
86

qrcode-dataset

A large dataset of partially damaged and distorted QR code images to be used for benchmarking scanning libraries and training new models
Python
1
star
87

srtmove-js

Short javascript program with an HTML interface to move subtitles (add or remove time) to an existing srt file.
JavaScript
1
star
88

dataiku-exercise

US census visualization web application. Given as an exercise by dataiku after a job interview. I didn't get the job.
Elm
1
star