diff --git a/doc/snippets/imageconverter-info-gltf.ansi b/doc/snippets/imageconverter-info-gltf.ansi
new file mode 100644
index 000000000..f62721739
--- /dev/null
+++ b/doc/snippets/imageconverter-info-gltf.ansi
@@ -0,0 +1,11 @@
+[1;37m2D image 0:[0m[1;33m alpha baseColor[0m
+ Level 0: {1024, 1024}[0;34m @[0m[0;36m RGBA8Unorm[0m (4096.0 kB)
+[1;37m2D image 1:[0m[1;33m alpha metallicRoughness[0m
+ Level 0: {1024, 1024}[0;34m @[0m[0;36m RGB8Unorm[0m (3072.0 kB)
+[1;37m2D image 2:[0m[1;33m interiors baseColor[0m
+ Level 0: {512, 512}[0;34m @[0m[0;36m RGB8Unorm[0m (768.0 kB)
+[1;37m2D image 3:[0m[1;33m interiors emissive[0m
+ Level 0: {512, 512}[0;34m @[0m[0;36m RGB8Unorm[0m (768.0 kB)
+[1;37m2D image 4:[0m[1;33m plastic soft baseColor[0m
+ Level 0: {4096, 4096}[0;34m @[0m[0;36m RGB8Unorm[0m (49152.0 kB)
+…
diff --git a/doc/snippets/imageconverter-info.ansi b/doc/snippets/imageconverter-info.ansi
new file mode 100644
index 000000000..ac53ebc69
--- /dev/null
+++ b/doc/snippets/imageconverter-info.ansi
@@ -0,0 +1,8 @@
+[1;37m3D image 0:[0m
+ Level 0: {512, 512, 6}[0;34m @[0m[0;33m Bc3RGBAUnorm[0m (1536.0 kB)
+ Level 1: {256, 256, 6}[0;34m @[0m[0;33m Bc3RGBAUnorm[0m (384.0 kB)
+ Level 2: {128, 128, 6}[0;34m @[0m[0;33m Bc3RGBAUnorm[0m (96.0 kB)
+ Level 3: {64, 64, 6}[0;34m @[0m[0;33m Bc3RGBAUnorm[0m (24.0 kB)
+ Level 4: {32, 32, 6}[0;34m @[0m[0;33m Bc3RGBAUnorm[0m (6.0 kB)
+ Level 5: {16, 16, 6}[0;34m @[0m[0;33m Bc3RGBAUnorm[0m (1.5 kB)
+Total image data size: 2047.5 kB
diff --git a/doc/snippets/sceneconverter-info.ansi b/doc/snippets/sceneconverter-info.ansi
new file mode 100644
index 000000000..f23a5baf7
--- /dev/null
+++ b/doc/snippets/sceneconverter-info.ansi
@@ -0,0 +1,24 @@
+[1;37mScene 0:[0m
+ Bound: 2 objects[0;34m @[0;36m UnsignedInt[0m (0.1 kB)
+ Fields:
+ [1;37m Parent[0;34m @[0;36m Int[0m, 2 entries
+ [1;37m ImporterState[0;34m @[0;36m Pointer[0m, 2 entries
+ [1;37m Transformation[0;34m @[0;36m Matrix4x4[0m, 1 entries
+ [1;37m Mesh[0;34m @[0;36m UnsignedInt[0m, 1 entries
+ [1;37m MeshMaterial[0;34m @[0;36m Int[0m, 1 entries
+Total scene data size: 0.1 kB
+[1;37mObject 0[0m (referenced by 1 scenes)[1;37m:[0m
+ Fields:[0;36m Parent[0m,[0;36m ImporterState[0m,[0;36m Transformation[0m
+[1;37mObject 1[0m (referenced by 1 scenes)[1;37m:[0m
+ Fields:[0;36m Parent[0m,[0;36m ImporterState[0m,[0;36m Mesh[0m,[0;36m MeshMaterial[0m
+[1;37mMaterial 0[0m (referenced by 1 objects)[1;37m:[0m[1;33m Red[0m
+ Type:[0;36m PbrMetallicRoughness[0m
+ Base layer:
+ [1;37m BaseColor[0;34m @[0;36m Vector4[0m: [38;2;204;0;0m[48;2;204;0;0mâ–“â–“[0m {0.8, 0, 0, 1}
+ [1;37m Metalness[0;34m @[0;36m Float[0m: 0
+[1;37mMesh 0[0m (referenced by 1 objects)[1;37m:[0m[1;33m Mesh[0m
+ Level 0: 24 vertices[0;34m @[0;36m Triangles[0m (0.6 kB)
+ [1;37m Normal[0;34m @[0;36m Vector3[0m, offset 0, stride 12
+ [1;37m Position[0;34m @[0;36m Vector3[0m, offset 288, stride 12
+ 36 indices[0;34m @[0;36m UnsignedShort[0m, offset 0, stride 2 (0.1 kB)
+Total mesh data size: 0.6 kB
diff --git a/src/Magnum/SceneTools/sceneconverter.cpp b/src/Magnum/SceneTools/sceneconverter.cpp
index 30d61a00c..1219d75ba 100644
--- a/src/Magnum/SceneTools/sceneconverter.cpp
+++ b/src/Magnum/SceneTools/sceneconverter.cpp
@@ -61,6 +61,7 @@ namespace Magnum {
@brief Converts scenes of different formats
@m_since{2020,06}
+@tableofcontents
@m_footernavigation
@m_keywords{magnum-sceneconverter sceneconverter}
@@ -76,9 +77,53 @@ add_custom_command(OUTPUT ... COMMAND Magnum::sceneconverter ...)
@endcode
See @ref building and @ref cmake and the @ref Trade namespace for more
-information.
+information. There's also a corresponding @ref magnum-imageconverter "image conversion utility".
-@section magnum-sceneconverter-usage Usage
+@section magnum-sceneconverter-example Example usage
+
+Listing contents of a glTF file, implicitly using
+@relativeref{Trade,AnySceneImporter} that delegates to
+@relativeref{Trade,GltfImporter}, @relativeref{Trade,AssimpImporter} or
+@ref file-formats "any other plugin capable of glTF import" depending on what's
+available:
+
+@m_class{m-code-figure}
+
+@parblock
+
+@code{.sh}
+magnum-sceneconverter --info Box.gltf
+@endcode
+
+
+
+@m_class{m-nopad}
+
+@include sceneconverter-info.ansi
+
+@endparblock
+
+Converting an OBJ file to a PLY, implicitly using
+@relativeref{Trade,AnySceneConverter} that delegates to
+@relativeref{Trade,StanfordSceneConverter} or
+@ref file-formats "any other plugin capable of PLY export" depending on what's
+available:
+
+@code{.sh}
+magnum-sceneconverter chair.obj chair.ply
+@endcode
+
+Processing an OBJ file with @relativeref{Trade,MeshOptimizerSceneConverter},
+setting @ref Trade-MeshOptimizerSceneConverter-configuration "plugin-specific configuration options"
+to reduce the index count to half, saving as a PLY, with verbose output showing
+the processing stats:
+
+@code{.sh}
+magnum-sceneconverter chair.obj -C MeshOptimizerSceneConverter \
+ -c simplify=true,simplifyTargetIndexCountThreshold=0.5 chair.ply -v
+@endcode
+
+@section magnum-sceneconverter-usage Full usage documentation
@code{.sh}
magnum-sceneconverter [-h|--help] [-I|--importer PLUGIN]
@@ -171,34 +216,6 @@ scene hierarchy transformation baked in using
@ref SceneTools::flattenMeshHierarchy3D(). Only attributes that are present in
the first mesh are taken, if `--only-attributes` is specified as well, the IDs
reference attributes of the first mesh.
-
-@section magnum-sceneconverter-example Example usage
-
-Printing info about all meshes in a glTF file:
-
-@code{.sh}
-magnum-sceneconverter --info scene.gltf
-@endcode
-
-Converting an OBJ file to a PLY, using @ref Trade::StanfordSceneConverter "StanfordSceneConverter"
-picked by @ref Trade::AnySceneConverter "AnySceneConverter":
-
-@code{.sh}
-magnum-sceneconverter chair.obj chair.ply
-@endcode
-
-Processing an OBJ file with @ref Trade::MeshOptimizerSceneConverter "MeshOptimizerSceneConverter",
-setting @ref Trade-MeshOptimizerSceneConverter-configuration "plugin-specific configuration options"
-to reduce the index count to half, saving as a PLY, with verbose output showing
-the processing stats:
-
-@m_class{m-console-wrap}
-
-@code{.sh}
-magnum-sceneconverter chair.obj --converter MeshOptimizerSceneConverter -c simplify=true,simplifyTargetIndexCountThreshold=0.5 chair.ply -v
-@endcode
-
-@see @ref magnum-imageconverter
*/
}
diff --git a/src/Magnum/ShaderTools/shaderconverter.cpp b/src/Magnum/ShaderTools/shaderconverter.cpp
index dd2d69f1d..2abf0eca1 100644
--- a/src/Magnum/ShaderTools/shaderconverter.cpp
+++ b/src/Magnum/ShaderTools/shaderconverter.cpp
@@ -42,6 +42,7 @@ namespace Magnum {
@brief Converts, compiles, optimizes and links shaders of different formats
@m_since_latest
+@tableofcontents
@m_footernavigation
@m_keywords{magnum-shaderconverter shaderconverter}
@@ -59,7 +60,31 @@ add_custom_command(OUTPUT ... COMMAND Magnum::shaderconverter ...)
See @ref building, @ref cmake and the @ref ShaderTools namespace for more
information.
-@section magnum-shaderconverter-usage Usage
+@section magnum-shaderconverter-example Example usage
+
+Validate a SPIR-V file for a Vulkan 1.1 target, implicitly using
+@ref ShaderTools::AnyConverter "AnyShaderConverter" that delegates to
+@ref ShaderTools::SpirvToolsConverter "SpirvToolsShaderConverter" or
+@ref file-formats "any other plugin capable of SPIR-V validation" depending on
+what's available:
+
+@code{.sh}
+magnum-shaderconverter --validate --output-version vulkan1.1 shader.spv
+@endcode
+
+Converting a GLSL 4.10 file to a SPIR-V, supplying various preprocessor
+definitions, treating warnings as errors and targeting OpenGL instead of the
+(default) Vulkan, this time delegated to @ref ShaderTools::GlslangConverter "GlslangShaderConverter"
+or @ref file-formats "any other plugin capable of GLSL->SPIR-V conversion"
+depending on what's available:
+
+@code{.sh}
+magnum-shaderconverter phong.frag phong.frag.spv \
+ -DDIFFUSE_TEXTURE -DNORMAL_TEXTURE --warning-as-error \
+ --input-version "410 core" --output-version opengl4.5
+@endcode
+
+@section magnum-shaderconverter-usage Full usage documentation
@code{.sh}
magnum-shaderconverter [-h|--help] [--validate] [--link]
@@ -146,26 +171,6 @@ Values accepted by `-O` / `--optimize`, `-g` / `--debug-info`, `--input-format`,
converter-specific, see documentation of a particular converter for more
information.
-@section magnum-shaderconverter-example Example usage
-
-Validate a SPIR-V file for a Vulkan 1.1 target, using
-@ref ShaderTools::SpirvToolsConverter "SpirvToolsShaderConverter" picked by
-@ref ShaderTools::AnyConverter "AnyShaderConverter":
-
-@code{.sh}
-magnum-shaderconverter --validate --output-version vulkan1.1 shader.spv
-@endcode
-
-Converting a GLSL 4.10 file to a SPIR-V, supplying various preprocessor
-definitions, treating warnings as errors and targeting OpenGL instead of the
-(default) Vulkan, using @ref ShaderTools::GlslangConverter "GlslangShaderConverter"
-picked again by @ref ShaderTools::AnyConverter "AnyShaderConverter":
-
-@m_class{m-console-wrap}
-
-@code{.sh}
-magnum-shaderconverter phong.frag -DDIFFUSE_TEXTURE -DNORMAL_TEXTURE --input-version "410 core" --output-version opengl4.5 --warning-as-error phong.frag.spv
-@endcode
*/
}
diff --git a/src/Magnum/Text/fontconverter.cpp b/src/Magnum/Text/fontconverter.cpp
index 0c81d7cd0..ba007a1c6 100644
--- a/src/Magnum/Text/fontconverter.cpp
+++ b/src/Magnum/Text/fontconverter.cpp
@@ -62,6 +62,7 @@ namespace Magnum {
@page magnum-fontconverter Font conversion utility
@brief Converts font to raster one of given atlas size
+@tableofcontents
@m_footernavigation
@m_keywords{magnum-fontconverter fontconverter}
@@ -78,7 +79,27 @@ add_custom_command(OUTPUT ... COMMAND Magnum::fontconverter ...)
See @ref building, @ref cmake and the @ref Text namespace for more information.
-@section magnum-fontconverter-usage Usage
+@note This executable is available only if Magnum is compiled with
+ @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features
+ for more information.
+
+@section magnum-fontconverter-example Example usage
+
+Making raster font from TTF file with default set of characters using
+@ref Text::FreeTypeFont "FreeTypeFont" font plugin and
+@ref Text::MagnumFontConverter "MagnumFontConverter" converter plugin:
+
+@code{.sh}
+magnum-fontconverter DejaVuSans.ttf myfont \
+ --font FreeTypeFont --converter MagnumFontConverter
+@endcode
+
+According to @ref Text::MagnumFontConverter "MagnumFontConverter" plugin
+documentation, this will generate files `myfont.conf` and `myfont.tga` in
+current directory. You can then load and use them via the
+@ref Text::MagnumFont "MagnumFont" plugin.
+
+@section magnum-fontconverter-usage Full usage documentation
@code{.sh}
magnum-fontconverter [--magnum-...] [-h|--help] --font FONT
@@ -107,25 +128,6 @@ Arguments:
The resulting font files can be then used as specified in the documentation of
`converter` plugin.
-
-@section magnum-fontconverter-example Example usage
-
-Making raster font from TTF file with default set of characters using
-@ref Text::FreeTypeFont "FreeTypeFont" font plugin and
-@ref Text::MagnumFontConverter "MagnumFontConverter" converter plugin:
-
-@code{.sh}
-magnum-fontconverter --font FreeTypeFont --converter MagnumFontConverter DejaVuSans.ttf myfont
-@endcode
-
-According to @ref Text::MagnumFontConverter "MagnumFontConverter" plugin
-documentation, this will generate files `myfont.conf` and `myfont.tga` in
-current directory. You can then load and use them via the
-@ref Text::MagnumFont "MagnumFont" plugin.
-
-@note This executable is available only if Magnum is compiled with
- @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features
- for more information.
*/
namespace Text {
diff --git a/src/Magnum/TextureTools/distancefieldconverter.cpp b/src/Magnum/TextureTools/distancefieldconverter.cpp
index 5aad73f6a..81b846f3b 100644
--- a/src/Magnum/TextureTools/distancefieldconverter.cpp
+++ b/src/Magnum/TextureTools/distancefieldconverter.cpp
@@ -69,6 +69,7 @@ namespace Magnum {
/** @page magnum-distancefieldconverter Distance Field conversion utility
@brief Converts red channel of an image to distance field representation
+@tableofcontents
@m_footernavigation
@m_keywords{magnum-distancefieldconverter distancefieldconverter}
@@ -86,7 +87,22 @@ add_custom_command(OUTPUT ... COMMAND Magnum::distancefieldconverter ...)
See @ref building, @ref cmake and the @ref TextureTools namespace for more
information.
-@section magnum-distancefieldconverter-usage Usage
+@note This executable is available only if Magnum is compiled with
+ @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features
+ for more information.
+
+@section magnum-distancefield-example Example usage
+
+@code{.sh}
+magnum-distancefieldconverter logo-src.png logo.png \
+ --output-size "256 256" --radius 24
+@endcode
+
+This will open monochrome `logo-src.png` image using any plugin that can open
+PNG files and converts it to 256x256 distance field `logo.png` using any plugin
+that can write PNG files.
+
+@section magnum-distancefieldconverter-usage Full usage documentation
@code{.sh}
magnum-distancefieldconverter [--magnum-...] [-h|--help] [--importer IMPORTER]
@@ -115,20 +131,6 @@ Images with @ref PixelFormat::R8Unorm, @ref PixelFormat::RGB8Unorm or
The resulting image can be then used with @ref Shaders::DistanceFieldVectorGL
shader. See also @ref TextureTools::DistanceField for more information about
the algorithm and parameters.
-
-@section magnum-distancefield-example Example usage
-
-@code{.sh}
-magnum-distancefieldconverter --output-size "256 256" --radius 24 logo-src.png logo.png
-@endcode
-
-This will open monochrome `logo-src.png` image using any plugin that can open
-PNG files and converts it to 256x256 distance field `logo.png` using any plugin
-that can write PNG files.
-
-@note This executable is available only if Magnum is compiled with
- @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features
- for more information.
*/
namespace TextureTools {
diff --git a/src/Magnum/Trade/imageconverter.cpp b/src/Magnum/Trade/imageconverter.cpp
index 810bd4869..f17e00151 100644
--- a/src/Magnum/Trade/imageconverter.cpp
+++ b/src/Magnum/Trade/imageconverter.cpp
@@ -48,6 +48,7 @@ namespace Magnum {
/** @page magnum-imageconverter Image conversion utility
@brief Converts images of different formats
+@tableofcontents
@m_footernavigation
@m_keywords{magnum-imageconverter imageconverter}
@@ -63,94 +64,53 @@ add_custom_command(OUTPUT ... COMMAND Magnum::imageconverter ...)
@endcode
See @ref building, @ref cmake and the @ref Trade namespace for more
-information.
+information. There's also a corresponding @ref magnum-sceneconverter "scene conversion utility".
-@section magnum-imageconverter-usage Usage
+@section magnum-imageconverter-example Example usage
-@code{.sh}
-magnum-imageconverter [-h|--help] [-I|--importer PLUGIN]
- [-C|--converter PLUGIN]... [--plugin-dir DIR] [--map]
- [-i|--importer-options key=val,key2=val2,…]
- [-c|--converter-options key=val,key2=val2,…]... [-D|--dimensions N]
- [--image N] [--level N] [--layer N] [--layers] [--levels] [--in-place]
- [--info] [--color on|off|auto] [-v|--verbose] [--profile] [--] input output
-@endcode
+Listing contents of a cubemap DDS file with mipmaps, implicitly using
+@relativeref{Trade,AnyImageImporter} that delegates to
+@relativeref{Trade,DdsImporter} or
+@ref file-formats "any other plugin capable of DDS import" depending on what's
+available:
-Arguments:
+@m_class{m-code-figure}
-- `input` --- input image
-- `output` --- output image; ignored if `--info` is present, disallowed for
- `--in-place`
-- `-h`, `--help` --- display this help message and exit
-- `-I`, `--importer PLUGIN` --- image importer plugin (default:
- @ref Trade::AnyImageImporter "AnyImageImporter")
-- `-C`, `--converter PLUGIN` --- image converter plugin (default:
- @ref Trade::AnyImageConverter "AnyImageConverter")
-- `--plugin-dir DIR` --- override base plugin dir
-- `--map` --- memory-map the input for zero-copy import (works only for
- standalone files)
-- `-i`, `--importer-options key=val,key2=val2,…` --- configuration options to
- pass to the importer
-- `-c`, `--converter-options key=val,key2=val2,…` --- configuration options
- to pass to the converter(s)
-- `-D`, `--dimensions N` --- import and convert image of given dimensions
- (default: `2`)
-- `--image N` --- image to import (default: `0`)
-- `--level N` --- import given image level instead of all
-- `--layer N` --- extract a layer into an image with one dimension less
-- `--layers` --- combine multiple layers into an image with one dimension
- more
-- `--levels` --- combine multiple image levels into a single file
-- `--in-place` --- overwrite the input image with the output
-- `--info` --- print info about the input file and exit
-- `--color` --- colored output for `--info` (default: `auto`)
-- `-v`, `--verbose` --- verbose output from importer and converter plugins
-- `--profile` --- measure import and conversion time
+@parblock
-Specifying `--importer raw:<format>` will treat the input as a raw
-tightly-packed square of pixels in given @ref PixelFormat. Specifying `-C` /
-`--converter raw` will save raw imported data instead of using a converter
-plugin.
+@code{.sh}
+magnum-imageconverter --info cubemap.dds
+@endcode
-If `--info` is given, the utility will print information about all images
-present in the file, independently of the `-D` / `--dimensions` option. In this
-case no conversion is done and output file doesn't need to be specified.
+
-The `-i` / `--importer-options` and `-c` / `--converter-options` arguments
-accept a comma-separated list of key/value pairs to set in the importer /
-converter plugin configuration. If the `=` character is omitted, it's
-equivalent to saying `key=true`; configuration subgroups are delimited with
-`/`.
+@m_class{m-nopad}
-It's possible to specify the `-C` / `--converter` option (and correspondingly
-also `-c` / `--converter-options`) multiple times in order to chain more
-converters together. All converters in the chain have to support image-to-image
-conversion, the last converter has to be either `raw` or support either
-image-to-image or image-to-file conversion. If the last converter doesn't
-support conversion to a file, @relativeref{Trade,AnyImageConverter} is used to
-save its output; if no `-C` / `--converter` is specified,
-@relativeref{Trade,AnyImageConverter} is used.
+@include imageconverter-info.ansi
-@section magnum-imageconverter-example Usage examples
+@endparblock
-Converting a JPEG file to a PNG:
+Converting a JPEG file to a PNG, implicitly using
+@relativeref{Trade,AnyImageConverter} that delegates to
+@relativeref{Trade,PngImageConverter}, @relativeref{Trade,StbImageConverter} or
+@ref file-formats "any other plugin capable of PNG export" depending on what's
+available:
@code{.sh}
magnum-imageconverter image.jpg image.png
@endcode
Creating a JPEG file with 95% quality from a PNG, by setting a plugin-specific
-configuration option. The @relativeref{Trade,AnyImageConverter} plugin is
-implicitly used and it proxies the option to either
-@relativeref{Trade,JpegImageConverter} or
-@relativeref{Trade,StbImageConverter}, depending on which one is available:
+configuration option that's recognized by both
+@ref Trade-JpegImageConverter-configuration "JpegImageConverter" and
+@ref Trade-StbImageConverter-configuration "StbImageConverter":
@code{.sh}
magnum-imageconverter image.png image.jpg -c jpegQuality=0.95
@endcode
-Extracting raw (uncompressed, compressed) data from a DDS file for manual
-inspection:
+Extracting raw (uncompressed or block-compressed) data from a DDS file for
+manual inspection:
@code{.sh}
magnum-imageconverter image.dds --converter raw data.dat
@@ -159,17 +119,31 @@ magnum-imageconverter image.dds --converter raw data.dat
Extracting an arbitrary image from a glTF file. Note that only image formats
are considered by default so you have to explicitly supply a scene importer,
either the generic @relativeref{Trade,AnySceneImporter} or for example directly
-the @relativeref{Trade,TinyGltfImporter}:
-
-@code{.shell-session}
-$ # print a list of all images in the file
-$ magnum-imageconverter -I AnySceneImporter --info file.gltf
-2D image 0: PixelFormat::RGBA8Unorm Vector(2048, 2048)
-2D image 1: PixelFormat::RGBA8Unorm Vector(2048, 2048)
-2D image 2: PixelFormat::RGBA8Unorm Vector(2048, 2048)
-…
-$ # extract the third image to a PNG file for inspection
-$ magnum-imageconverter -I AnySceneImporter --image 2 file.gltf image.png
+the @relativeref{Trade,GltfImporter}. First printing a list of images to choose
+from:
+
+@m_class{m-code-figure}
+
+@parblock
+
+@code{.sh}
+magnum-imageconverter -I AnySceneImporter --info file.gltf
+@endcode
+
+
+
+@m_class{m-nopad}
+
+@include imageconverter-info-gltf.ansi
+
+@endparblock
+
+@m_class{m-noindent}
+
+and then extracting the third image to a PNG file for inspection:
+
+@code{.sh}
+magnum-imageconverter -I AnySceneImporter --image 2 file.gltf image.png
@endcode
Converting a PNG file to a KTX2, block-compressing the data to BC3 using
@@ -209,7 +183,71 @@ file again:
magnum-imageconverter cube-mips.exr --layer 2 --level 1 +x-128.exr
@endcode
-@see @ref magnum-sceneconverter
+@section magnum-imageconverter-usage Full usage documentation
+
+@code{.sh}
+magnum-imageconverter [-h|--help] [-I|--importer PLUGIN]
+ [-C|--converter PLUGIN]... [--plugin-dir DIR] [--map]
+ [-i|--importer-options key=val,key2=val2,…]
+ [-c|--converter-options key=val,key2=val2,…]... [-D|--dimensions N]
+ [--image N] [--level N] [--layer N] [--layers] [--levels] [--in-place]
+ [--info] [--color on|off|auto] [-v|--verbose] [--profile] [--] input output
+@endcode
+
+Arguments:
+
+- `input` --- input image
+- `output` --- output image; ignored if `--info` is present, disallowed for
+ `--in-place`
+- `-h`, `--help` --- display this help message and exit
+- `-I`, `--importer PLUGIN` --- image importer plugin (default:
+ @ref Trade::AnyImageImporter "AnyImageImporter")
+- `-C`, `--converter PLUGIN` --- image converter plugin (default:
+ @ref Trade::AnyImageConverter "AnyImageConverter")
+- `--plugin-dir DIR` --- override base plugin dir
+- `--map` --- memory-map the input for zero-copy import (works only for
+ standalone files)
+- `-i`, `--importer-options key=val,key2=val2,…` --- configuration options to
+ pass to the importer
+- `-c`, `--converter-options key=val,key2=val2,…` --- configuration options
+ to pass to the converter(s)
+- `-D`, `--dimensions N` --- import and convert image of given dimensions
+ (default: `2`)
+- `--image N` --- image to import (default: `0`)
+- `--level N` --- import given image level instead of all
+- `--layer N` --- extract a layer into an image with one dimension less
+- `--layers` --- combine multiple layers into an image with one dimension
+ more
+- `--levels` --- combine multiple image levels into a single file
+- `--in-place` --- overwrite the input image with the output
+- `--info` --- print info about the input file and exit
+- `--color` --- colored output for `--info` (default: `auto`)
+- `-v`, `--verbose` --- verbose output from importer and converter plugins
+- `--profile` --- measure import and conversion time
+
+Specifying `--importer raw:<format>` will treat the input as a raw
+tightly-packed square of pixels in given @ref PixelFormat. Specifying `-C` /
+`--converter raw` will save raw imported data instead of using a converter
+plugin.
+
+If `--info` is given, the utility will print information about all images
+present in the file, independently of the `-D` / `--dimensions` option. In this
+case no conversion is done and output file doesn't need to be specified.
+
+The `-i` / `--importer-options` and `-c` / `--converter-options` arguments
+accept a comma-separated list of key/value pairs to set in the importer /
+converter plugin configuration. If the `=` character is omitted, it's
+equivalent to saying `key=true`; configuration subgroups are delimited with
+`/`.
+
+It's possible to specify the `-C` / `--converter` option (and correspondingly
+also `-c` / `--converter-options`) multiple times in order to chain more
+converters together. All converters in the chain have to support image-to-image
+conversion, the last converter has to be either `raw` or support either
+image-to-image or image-to-file conversion. If the last converter doesn't
+support conversion to a file, @relativeref{Trade,AnyImageConverter} is used to
+save its output; if no `-C` / `--converter` is specified,
+@relativeref{Trade,AnyImageConverter} is used.
*/
}