{"library":"scrapbook","title":"Scrapbook","description":"Scrapbook is a Python library for recording and reading data in Jupyter and nteract Notebooks. It allows users to persist data values and generated visual content (referred to as 'scraps') directly within the notebook file's output. These recorded scraps can then be recalled, read, or summarized programmatically for later use or for building robust notebook workflows. It aims to replace existing record functionality in libraries like Papermill. The library is actively maintained by the nteract team.","language":"python","status":"active","last_verified":"Wed May 20","install":{"commands":["pip install scrapbook","pip install scrapbook[all]"],"cli":null},"imports":["import scrapbook as sb","sb.glue('my_data', {'key': 'value'})","notebook = sb.read_notebook('path/to/output.ipynb')","scrapbook_collection = sb.read_notebooks('path/to/directory')","from scrapbook.models import Scrapbook"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import scrapbook as sb\nimport os\n\n# --- Part 1: Write data to a dummy notebook (simulating execution) ---\n# This part would typically run inside a Jupyter/nteract notebook cell.\n# For demonstration, we'll create a dummy output file.\n\n# In a real notebook, you'd just call sb.glue directly.\n# Here, we simulate it by writing to a temporary file.\nnotebook_content_template = '''{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"application/scrapbook+json\": {\n       \"data\": {}, \n       \"encoder\": \"json\", \n       \"name\": \"my_string\", \n       \"display\": null\n      }\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\"import scrapbook as sb\\n\", \"sb.glue('my_string', 'Hello Scrapbook!')\"]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"application/scrapbook+json\": {\n       \"data\": 12345, \n       \"encoder\": \"json\", \n       \"name\": \"my_number\", \n       \"display\": null\n      }\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\"sb.glue('my_number', 12345)\"]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.7\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}'''\n\n# Manually inject the data for the example since we're not running a live kernel\n# In a real scenario, these outputs would be generated by `sb.glue` calls\nimport json\nnb_dict = json.loads(notebook_content_template)\n# Update the 'my_string' scrap\nnb_dict['cells'][0]['outputs'][0]['data']['application/scrapbook+json']['data'] = 'Hello Scrapbook!'\n# Update the 'my_number' scrap\nnb_dict['cells'][1]['outputs'][0]['data']['application/scrapbook+json']['data'] = 12345\n\noutput_notebook_path = 'output_test_notebook.ipynb'\nwith open(output_notebook_path, 'w') as f:\n    json.dump(nb_dict, f, indent=4)\n\nprint(f\"Created dummy notebook: {output_notebook_path}\")\n\n# --- Part 2: Read data from the notebook --- \n# This part can run in a separate script or notebook.\n\n# Read the notebook containing the 'scraps'\nnb = sb.read_notebook(output_notebook_path)\n\n# Access a specific scrap by name\nmy_string_scrap = nb.scraps.my_string\nmy_number_scrap = nb.scraps.my_number\n\nprint(f\"\\nRetrieved string scrap: {my_string_scrap.data}\")\nprint(f\"Retrieved number scrap: {my_number_scrap.data}\")\n\n# You can also get all scraps as a dictionary\nall_scraps = nb.scraps.to_dict()\nprint(f\"\\nAll scraps: {all_scraps}\")\n\n# Clean up the dummy file\nos.remove(output_notebook_path)\nprint(f\"Cleaned up {output_notebook_path}\")\n","lang":"python","description":"This quickstart demonstrates how to 'glue' (record) data into a notebook's output and then 'read' it back. The `sb.glue()` function is used within a notebook cell to store data. Subsequently, `sb.read_notebook()` can be used to load the notebook and access the stored 'scraps' by name. For demonstration purposes outside a live kernel, the example simulates the creation of an output notebook file containing 'scraps'.","tag":null,"tag_description":null,"last_tested":"2026-04-25","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-20","installed_version":"0.5.0","pypi_latest":"0.5.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":22,"avg_import_s":4.46,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"scrapbook","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.5,"mem_mb":47.4,"disk_size":"420.2M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"scrapbook","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.6,"mem_mb":47.3,"disk_size":"397.0M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":6.08,"mem_mb":89.6,"disk_size":"536.3M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":6.66,"mem_mb":89,"disk_size":"512.1M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"scrapbook","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":16.6,"import_time_s":1.86,"mem_mb":47.4,"disk_size":"385M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"scrapbook","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.87,"mem_mb":47.3,"disk_size":"362M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":29.3,"import_time_s":4,"mem_mb":82.5,"disk_size":"505M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.67,"mem_mb":82.1,"disk_size":"481M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"scrapbook","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":3.19,"mem_mb":53.7,"disk_size":"440.3M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"scrapbook","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.46,"mem_mb":53.5,"disk_size":"417.0M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":7.19,"mem_mb":100,"disk_size":"564.5M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":8.02,"mem_mb":99.4,"disk_size":"540.2M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"scrapbook","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":16,"import_time_s":2.75,"mem_mb":55.5,"disk_size":"405M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"scrapbook","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.03,"mem_mb":53.5,"disk_size":"381M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":27.9,"import_time_s":5.37,"mem_mb":93.7,"disk_size":"533M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":6.51,"mem_mb":93.2,"disk_size":"509M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"scrapbook","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.98,"mem_mb":52.6,"disk_size":"432.3M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"scrapbook","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.48,"mem_mb":52.5,"disk_size":"409.4M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":6.8,"mem_mb":98,"disk_size":"546.8M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":8.15,"mem_mb":97.5,"disk_size":"522.5M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"scrapbook","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":16.1,"import_time_s":3.02,"mem_mb":52.7,"disk_size":"398M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"scrapbook","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.23,"mem_mb":52.5,"disk_size":"376M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":23.9,"import_time_s":5.61,"mem_mb":91.9,"disk_size":"515M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":7.89,"mem_mb":91.4,"disk_size":"491M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"scrapbook","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.78,"mem_mb":53.6,"disk_size":"422.5M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"scrapbook","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.43,"mem_mb":53.4,"disk_size":"399.2M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":6.13,"mem_mb":100.3,"disk_size":"545.6M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":7.5,"mem_mb":99.8,"disk_size":"521.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"scrapbook","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":16.1,"import_time_s":2.87,"mem_mb":53.6,"disk_size":"387M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"scrapbook","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.28,"mem_mb":53.4,"disk_size":"363M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":24,"import_time_s":5.49,"mem_mb":94.1,"disk_size":"514M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":7.32,"mem_mb":93.5,"disk_size":"490M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"scrapbook","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":2.36,"mem_mb":47.7,"disk_size":"385.6M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"scrapbook","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.36,"mem_mb":47.7,"disk_size":"385.4M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":4.31,"mem_mb":74.8,"disk_size":"481.1M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.68,"mem_mb":74.5,"disk_size":"479.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"scrapbook","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":18.6,"import_time_s":2.26,"mem_mb":47.7,"disk_size":"359M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"scrapbook","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.95,"mem_mb":47.7,"disk_size":"359M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":31.3,"import_time_s":4.17,"mem_mb":74.8,"disk_size":"462M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.56,"mem_mb":74.5,"disk_size":"461M"}]}}