{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/craftium-an-extensible-framework-for-creating","title":"Craftium: An Extensible Framework for Creating Reinforcement Learning Environments","arxiv_id":"2407.03969","date":"2024-07-04","proceeding":null,"authors":["Mikel Malagón","Josu Ceberio","Jose A. Lozano"],"abstract":"Most Reinforcement Learning (RL) environments are created by adapting existing physics simulators or video games. However, they usually lack the flexibility required for analyzing specific characteristics of RL methods often relevant to research. This paper presents Craftium, a novel framework for exploring and creating rich 3D visual RL environments that builds upon the Minetest game engine and the popular Gymnasium API. Minetest is built to be extended and can be used to easily create voxel-based 3D environments (often similar to Minecraft), while Gymnasium offers a simple and common interface for RL research. Craftium provides a platform that allows practitioners to create fully customized environments to suit their specific research requirements, ranging from simple visual tasks to infinite and procedurally generated worlds. We also provide five ready-to-use environments for benchmarking and as examples of how to develop new ones. The code and documentation are available at https://github.com/mikelma/craftium/.","url_abs":"https://arxiv.org/abs/2407.03969v1","url_pdf":"https://arxiv.org/pdf/2407.03969v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"craftium-an-extensible-framework-for-creating","repo_url":"https://github.com/mikelma/craftium","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"NOASSERTION"}}],"tasks":[{"task_slug":"benchmarking","task_name":"Benchmarking"},{"task_slug":"minecraft","task_name":"Minecraft"},{"task_slug":"reinforcement-learning","task_name":"Reinforcement Learning"},{"task_slug":"reinforcement-learning-1","task_name":"Reinforcement Learning (RL)"},{"task_slug":"reinforcement-learning-2","task_name":"reinforcement-learning"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2407.03969","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2407.03969"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/mikelma/craftium","reach":{"status":"ok","spdx":"NOASSERTION"}}],"summary":{"ran":7,"ran_draft_wrong":1,"unverified":1},"by_repo_kind":{"official":{"samples":9,"ran":8,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":9,"samples":[{"code_sha256_prefix":"e061ee3edd47e583","entry":"clip_mouse","repo":"mikelma/craftium","repo_kind":"official","path":"craftium/wrappers.py","file_url":"https://github.com/mikelma/craftium/blob/HEAD/craftium/wrappers.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"e061ee3edd47e583"}},{"code_sha256_prefix":"2942e0a693aaf578","entry":"enu_to_nue","repo":"mikelma/craftium","repo_kind":"official","path":"craftium/wrappers.py","file_url":"https://github.com/mikelma/craftium/blob/HEAD/craftium/wrappers.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"2942e0a693aaf578"}},{"code_sha256_prefix":"fcdf8616b26dde6d","entry":"is_minetest_build_dir","repo":"mikelma/craftium","repo_kind":"official","path":"craftium/minetest.py","file_url":"https://github.com/mikelma/craftium/blob/HEAD/craftium/minetest.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"fcdf8616b26dde6d"}},{"code_sha256_prefix":"beb42d440ccf2925","entry":"layer_init","repo":"mikelma/craftium","repo_kind":"official","path":"cleanrl_ppo_lstm_train.py","file_url":"https://github.com/mikelma/craftium/blob/HEAD/cleanrl_ppo_lstm_train.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"beb42d440ccf2925"}},{"code_sha256_prefix":"133311fdca35a58c","entry":"load_task","repo":"mikelma/craftium","repo_kind":"official","path":"craftium/extra/crl_dungeons.py","file_url":"https://github.com/mikelma/craftium/blob/HEAD/craftium/extra/crl_dungeons.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"133311fdca35a58c"}},{"code_sha256_prefix":"47d8fe4d97b14b66","entry":"make_env","repo":"mikelma/craftium","repo_kind":"official","path":"cleanrl_ppo_lstm_train.py","file_url":"https://github.com/mikelma/craftium/blob/HEAD/cleanrl_ppo_lstm_train.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"47d8fe4d97b14b66"}},{"code_sha256_prefix":"362e38152eaf2597","entry":"make_env","repo":"mikelma/craftium","repo_kind":"official","path":"cleanrl_ppo_train.py","file_url":"https://github.com/mikelma/craftium/blob/HEAD/cleanrl_ppo_train.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"362e38152eaf2597"}},{"code_sha256_prefix":"7fd4284ce123489f","entry":"obs_to_bytes","repo":"mikelma/craftium","repo_kind":"official","path":"llava_agent.py","file_url":"https://github.com/mikelma/craftium/blob/HEAD/llava_agent.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"7fd4284ce123489f"}},{"code_sha256_prefix":"87eb76037fde12bd","entry":"test_agent","repo":"mikelma/craftium","repo_kind":"official","path":"marl_self_play.py","file_url":"https://github.com/mikelma/craftium/blob/HEAD/marl_self_play.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"87eb76037fde12bd"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}