[package]
edition = "2021"
rust-version = "1.70"
name = "dotmax"
version = "0.1.9"
authors = ["Frosty"]
build = false
exclude = [
".github/",
".bmad/",
".claude/",
".augment/",
".gemini/",
"docs/sprint-artifacts/",
"docs/profiling/",
"docs/adr/",
"docs/*.yaml",
"docs/bmm-*",
"docs/*-2025-*.md",
"docs/PRD.md",
"docs/epics.md",
"docs/research-*.md",
"docs/implementation-*.md",
"docs/sprint-*.md",
"tests/visual/",
"tests/visual_regression.rs",
"tests/assets/",
"tests/fixtures/",
"tests/test_assets/",
"site/",
"*.log",
"docs/examples/",
"src/image/",
"dotamax_pets/",
"examples/mikey.rs",
"examples/raphe.rs",
"examples/truck.rs",
"examples/gif_to_pack.rs",
"docs/progress_loader_sheet.html",
"docs/web_resource_workbench_report.md",
"*.context.xml",
"BRAILLE_GRAPHICS_MASTER_PLAN.md",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "High-performance terminal braille rendering for images, animations, and graphics"
homepage = "https://dotmax-sable.vercel.app"
documentation = "https://docs.rs/dotmax"
readme = "README.md"
keywords = [
"terminal",
"braille",
"graphics",
"cli",
"visualization",
]
categories = [
"command-line-interface",
"graphics",
"rendering",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/newjordan/dotmax"
[features]
chess = [
"dep:shakmaty",
"dep:pgn-reader",
]
default = []
image = [
"dep:image",
"dep:imageproc",
"dep:gif",
"dep:png",
]
raytracer = [
"dep:anyhow",
"dep:gltf",
]
svg = [
"dep:resvg",
"dep:usvg",
]
video = [
"dep:ffmpeg-next",
"image",
]
[lib]
name = "dotmax"
path = "src/lib.rs"
[[bin]]
name = "dotmax-braille"
path = "src/bin/dotmax_braille.rs"
required-features = ["image"]
[[example]]
name = "animated_apng"
path = "examples/animated_apng.rs"
required-features = ["image"]
[[example]]
name = "animated_gif"
path = "examples/animated_gif.rs"
required-features = ["image"]
[[example]]
name = "animation_buffer"
path = "examples/animation_buffer.rs"
[[example]]
name = "audit_styles"
path = "examples/audit_styles.rs"
[[example]]
name = "bouncing_ball"
path = "examples/animations/bouncing_ball.rs"
[[example]]
name = "braille_mapping_demo"
path = "examples/braille_mapping_demo.rs"
required-features = ["image"]
[[example]]
name = "circles_demo"
path = "examples/circles_demo.rs"
[[example]]
name = "circles_demo_simple"
path = "examples/circles_demo_simple.rs"
[[example]]
name = "clock"
path = "examples/animations/clock.rs"
[[example]]
name = "color_conversion_demo"
path = "examples/color_conversion_demo.rs"
[[example]]
name = "color_demo"
path = "examples/color_demo.rs"
[[example]]
name = "color_detection"
path = "examples/color_detection.rs"
[[example]]
name = "color_image"
path = "examples/color_image.rs"
required-features = ["image"]
[[example]]
name = "color_schemes_demo"
path = "examples/color_schemes_demo.rs"
[[example]]
name = "colored_shapes"
path = "examples/colored_shapes.rs"
[[example]]
name = "colored_shapes_simple"
path = "examples/colored_shapes_simple.rs"
[[example]]
name = "compare_all_sizes"
path = "examples/compare_all_sizes.rs"
required-features = ["image"]
[[example]]
name = "compare_resize_filters"
path = "examples/compare_resize_filters.rs"
required-features = ["image"]
[[example]]
name = "custom_image"
path = "examples/custom_image.rs"
required-features = ["image"]
[[example]]
name = "custom_scheme"
path = "examples/custom_scheme.rs"
[[example]]
name = "density_demo"
path = "examples/density_demo.rs"
[[example]]
name = "differential_demo"
path = "examples/differential_demo.rs"
[[example]]
name = "dither_comparison"
path = "examples/dither_comparison.rs"
required-features = ["image"]
[[example]]
name = "export_gallery_frames"
path = "examples/export_gallery_frames.rs"
[[example]]
name = "export_progress_catalog"
path = "examples/export_progress_catalog.rs"
[[example]]
name = "fireworks"
path = "examples/animations/fireworks.rs"
[[example]]
name = "fps_control"
path = "examples/fps_control.rs"
[[example]]
name = "generate_apng_fixtures"
path = "examples/generate_apng_fixtures.rs"
required-features = ["image"]
[[example]]
name = "generate_extreme_test_images"
path = "examples/generate_extreme_test_images.rs"
required-features = ["image"]
[[example]]
name = "generate_watermark"
path = "examples/generate_watermark.rs"
required-features = ["image"]
[[example]]
name = "heatmap"
path = "examples/heatmap.rs"
[[example]]
name = "hello_braille"
path = "examples/hello_braille.rs"
[[example]]
name = "image_browser"
path = "examples/image_browser.rs"
required-features = [
"image",
"svg",
]
[[example]]
name = "lines_demo"
path = "examples/lines_demo.rs"
[[example]]
name = "load_image"
path = "examples/load_image.rs"
required-features = ["image"]
[[example]]
name = "loading_bar_sheet"
path = "examples/loading_bar_sheet.rs"
[[example]]
name = "loading_bars"
path = "examples/loading_bars.rs"
[[example]]
name = "loading_spinner"
path = "examples/animations/loading_spinner.rs"
[[example]]
name = "logging_demo"
path = "examples/logging_demo.rs"
[[example]]
name = "measure_extreme_baseline"
path = "examples/measure_extreme_baseline.rs"
required-features = ["image"]
[[example]]
name = "prerendered_demo"
path = "examples/prerendered_demo.rs"
[[example]]
name = "purple_rain"
path = "examples/purple_rain.rs"
required-features = [
"raytracer",
"image",
]
[[example]]
name = "qa_render"
path = "examples/qa_render.rs"
[[example]]
name = "quick_demo"
path = "examples/quick_demo.rs"
[[example]]
name = "raytrace_sphere"
path = "examples/raytrace_sphere.rs"
required-features = ["raytracer"]
[[example]]
name = "render_braille"
path = "examples/render_braille.rs"
required-features = ["image"]
[[example]]
name = "render_cuda_dojo"
path = "examples/render_cuda_dojo.rs"
required-features = ["image"]
[[example]]
name = "render_tuner"
path = "examples/render_tuner.rs"
required-features = ["image"]
[[example]]
name = "resize_image"
path = "examples/resize_image.rs"
required-features = ["image"]
[[example]]
name = "save_svg_raster"
path = "examples/save_svg_raster.rs"
required-features = [
"image",
"svg",
]
[[example]]
name = "shapes_demo"
path = "examples/shapes_demo.rs"
[[example]]
name = "shapes_demo_simple"
path = "examples/shapes_demo_simple.rs"
[[example]]
name = "simple_animation"
path = "examples/simple_animation.rs"
[[example]]
name = "simple_image"
path = "examples/simple_image.rs"
required-features = ["image"]
[[example]]
name = "svg_demo"
path = "examples/svg_demo.rs"
required-features = [
"image",
"svg",
]
[[example]]
name = "svg_font_quality"
path = "examples/svg_font_quality.rs"
required-features = [
"image",
"svg",
]
[[example]]
name = "svg_font_visual_demo"
path = "examples/svg_font_visual_demo.rs"
required-features = [
"image",
"svg",
]
[[example]]
name = "terminal_debug"
path = "examples/terminal_debug.rs"
[[example]]
name = "test_adaptive_resize_performance"
path = "examples/test_adaptive_resize_performance.rs"
required-features = ["image"]
[[example]]
name = "test_svg_background_fix"
path = "examples/test_svg_background_fix.rs"
required-features = [
"image",
"svg",
]
[[example]]
name = "test_svg_loading"
path = "examples/test_svg_loading.rs"
required-features = [
"image",
"svg",
]
[[example]]
name = "test_svg_manual"
path = "examples/test_svg_manual.rs"
required-features = [
"image",
"svg",
]
[[example]]
name = "test_video_decode"
path = "examples/test_video_decode.rs"
required-features = ["video"]
[[example]]
name = "threshold_demo"
path = "examples/threshold_demo.rs"
required-features = ["image"]
[[example]]
name = "universal_media"
path = "examples/universal_media.rs"
required-features = ["image"]
[[example]]
name = "video_player"
path = "examples/video_player.rs"
required-features = ["video"]
[[example]]
name = "view_image"
path = "examples/view_image.rs"
required-features = ["image"]
[[example]]
name = "waveform"
path = "examples/animations/waveform.rs"
[[example]]
name = "webcam_selector"
path = "examples/webcam_selector.rs"
required-features = ["video"]
[[example]]
name = "webcam_tuner"
path = "examples/webcam_tuner.rs"
required-features = [
"image",
"video",
]
[[example]]
name = "webcam_viewer"
path = "examples/webcam_viewer.rs"
required-features = ["video"]
[[example]]
name = "zone_stream"
path = "examples/zone_stream.rs"
required-features = [
"raytracer",
"image",
"chess",
]
[[test]]
name = "density_integration_tests"
path = "tests/density_integration_tests.rs"
[[test]]
name = "image_loading_tests"
path = "tests/image_loading_tests.rs"
[[test]]
name = "image_rendering_tests"
path = "tests/image_rendering_tests.rs"
[[test]]
name = "integration_tests"
path = "tests/integration_tests.rs"
[[test]]
name = "media_integration_tests"
path = "tests/media_integration_tests.rs"
[[test]]
name = "property_tests"
path = "tests/property_tests.rs"
[[test]]
name = "temporal_coherence_tests"
path = "tests/temporal_coherence_tests.rs"
required-features = ["image"]
[[bench]]
name = "animation"
path = "benches/animation.rs"
harness = false
[[bench]]
name = "braille_mapping"
path = "benches/braille_mapping.rs"
[[bench]]
name = "color_apply"
path = "benches/color_apply.rs"
harness = false
[[bench]]
name = "color_conversion"
path = "benches/color_conversion.rs"
harness = false
[[bench]]
name = "color_rendering"
path = "benches/color_rendering.rs"
[[bench]]
name = "color_schemes"
path = "benches/color_schemes.rs"
harness = false
[[bench]]
name = "core_rendering"
path = "benches/core_rendering.rs"
harness = false
[[bench]]
name = "density"
path = "benches/density.rs"
[[bench]]
name = "dithering"
path = "benches/dithering.rs"
[[bench]]
name = "extreme_image_pipeline"
path = "benches/extreme_image_pipeline.rs"
harness = false
[[bench]]
name = "image_conversion"
path = "benches/image_conversion.rs"
[[bench]]
name = "image_processing"
path = "benches/image_processing.rs"
harness = false
required-features = ["image"]
[[bench]]
name = "image_resize"
path = "benches/image_resize.rs"
[[bench]]
name = "media_detection"
path = "benches/media_detection.rs"
harness = false
required-features = ["image"]
[[bench]]
name = "media_playback"
path = "benches/media_playback.rs"
harness = false
required-features = ["image"]
[[bench]]
name = "primitives"
path = "benches/primitives.rs"
[[bench]]
name = "quick"
path = "benches/quick.rs"
harness = false
[[bench]]
name = "rendering"
path = "benches/rendering.rs"
harness = false
[[bench]]
name = "svg_rendering"
path = "benches/svg_rendering.rs"
[dependencies.anyhow]
version = "1.0"
optional = true
[dependencies.crossterm]
version = "0.29"
[dependencies.ffmpeg-next]
version = "7.0"
optional = true
[dependencies.gif]
version = "0.13"
optional = true
[dependencies.gltf]
version = "1.4"
optional = true
[dependencies.image]
version = "0.25"
optional = true
[dependencies.imageproc]
version = "0.24"
optional = true
[dependencies.pgn-reader]
version = "0.27"
optional = true
[dependencies.png]
version = "0.18"
optional = true
[dependencies.ratatui]
version = "0.29"
[dependencies.resvg]
version = "0.38"
optional = true
[dependencies.serde]
version = "1.0"
features = ["derive"]
[dependencies.serde_json]
version = "1.0"
[dependencies.shakmaty]
version = "0.28"
optional = true
[dependencies.thiserror]
version = "2.0"
[dependencies.tracing]
version = "0.1"
[dependencies.usvg]
version = "0.38"
optional = true
[dev-dependencies.criterion]
version = "0.7"
features = ["html_reports"]
[dev-dependencies.proptest]
version = "1.4"
[dev-dependencies.static_assertions]
version = "1.1"
[dev-dependencies.tempfile]
version = "3.10"
[dev-dependencies.tracing-subscriber]
version = "0.3"
[lints.clippy]
cast_lossless = "allow"
cast_possible_truncation = "allow"
cast_possible_wrap = "allow"
cast_precision_loss = "allow"
cast_sign_loss = "allow"
doc_markdown = "allow"
imprecise_flops = "allow"
items_after_statements = "allow"
many_single_char_names = "allow"
missing_const_for_fn = "allow"
must_use_candidate = "allow"
needless_pass_by_value = "allow"
similar_names = "allow"
suboptimal_flops = "allow"
suspicious_operation_groupings = "allow"
too_many_lines = "allow"
uninlined_format_args = "allow"
unnecessary_cast = "allow"
unnecessary_literal_bound = "allow"
unreadable_literal = "allow"
use_self = "allow"
[lints.clippy.all]
level = "deny"
priority = -1
[lints.clippy.nursery]
level = "warn"
priority = -1
[lints.clippy.pedantic]
level = "warn"
priority = -1