{"library":"scour","title":"Scour SVG Optimizer","description":"Scour is an SVG optimizer/cleaner written in Python that reduces the size of scalable vector graphics by optimizing their structure and removing unnecessary data. Its goal is to produce an identically rendered image at a significantly smaller file size. Maintained on GitHub, the current version is 0.38.2 and it is open-source under the Apache License 2.0.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install scour"],"cli":{"name":"scour","version":"0.38.2"}},"imports":["from scour import scour","scour.sanitizeOptions(options)","scour.scourString(svg_string, options=scour_options)"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom scour import scour\n\n# Create a dummy SVG input string (replace with reading from a file)\ninput_svg_content = '<svg width=\"100\" height=\"100\"><circle cx=\"50\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"3\" fill=\"red\" /><!-- A comment --><metadata><dc:title>Test SVG</dc:title></metadata></svg>'\n\n# Get a clean scour options object\nscour_options = scour.sanitizeOptions(options=None)\n\n# Customize options (example: remove metadata and comments)\nscour_options.remove_metadata = True\nscour_options.remove_comments = True\nscour_options.enable_viewboxing = True # A common useful option\nscour_options.indent = 'none' # Remove indentation for smaller size\n\n# Scour the SVG string\noptimized_svg_content = scour.scourString(input_svg_content, options=scour_options)\n\n# Print or save the optimized SVG\nprint(\"Original SVG (snippet):\", input_svg_content[:80], \"...\")\nprint(\"\\nOptimized SVG (snippet):\", optimized_svg_content[:80], \"...\")\n\n# Example of saving to a file\n# with open('output_optimized.svg', 'w') as f:\n#     f.write(optimized_svg_content)\n# print('\\nOptimized SVG saved to output_optimized.svg')","lang":"python","description":"This quickstart demonstrates how to programmatically optimize an SVG string using Scour. It initializes options, customizes them (e.g., to remove metadata and comments), and then processes the SVG content. It's crucial to understand the available options to achieve the desired optimization level.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"0.38.2","pypi_latest":"0.38.2","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2.5,"avg_import_s":0.09,"wheel_type":"sdist"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"scour","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.08,"mem_mb":5.3,"disk_size":"19.6M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"scour","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":0.06,"mem_mb":5.3,"disk_size":"20M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"scour","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.12,"mem_mb":5.3,"disk_size":"22.1M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"scour","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":2.1,"import_time_s":0.11,"mem_mb":5.3,"disk_size":"23M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"scour","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.11,"mem_mb":5.4,"disk_size":"12.0M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"scour","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":3.2,"import_time_s":0.1,"mem_mb":5.4,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"scour","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.1,"mem_mb":5.4,"disk_size":"11.7M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"scour","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":2.8,"import_time_s":0.09,"mem_mb":5.2,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"scour","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.08,"mem_mb":5.2,"disk_size":"19.2M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"scour","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":2.4,"import_time_s":0.07,"mem_mb":5.2,"disk_size":"20M"}]}}