{"library":"pyobjc-framework-scenekit","title":"PyObjC SceneKit Framework","description":"PyObjC is the bridge between Python and the Objective-C programming language, used to develop applications for macOS. This specific package, `pyobjc-framework-scenekit` (currently at version 12.1), provides Python wrappers for Apple's SceneKit framework, enabling 3D graphics and game development. PyObjC generally follows the macOS SDK release cycle for updates.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install pyobjc-framework-scenekit","pip install 'pyobjc[allbindings]'"],"cli":null},"imports":["import SceneKit","from Cocoa import NSApplication, NSWindow, NSView","from PyObjCTools import AppHelper"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import SceneKit\nfrom Cocoa import NSApplication, NSWindow, NSView, NSRect, NSMakeRect\nfrom PyObjCTools import AppHelper\nimport objc\n\nclass AppDelegate(objc.NSObject):\n    def applicationDidFinishLaunching_(self, aNotification):\n        print(\"SceneKit app launched!\")\n\n        # Create a window\n        rect = NSMakeRect(100, 100, 640, 480)\n        self.window = NSWindow.alloc().initWithContentRect_styleMask_backing_defer_(\n            rect, \n            (1 << 0) | (1 << 1) | (1 << 2), # NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable\n            2, # NSBackingStoreBuffered\n            False\n        )\n        self.window.setTitle_(\"PyObjC SceneKit Cube\")\n        \n        # Create an SCNView (SceneKit view)\n        self.scnView = SceneKit.SCNView.alloc().initWithFrame_(rect)\n        self.window.setContentView_(self.scnView)\n\n        # Create a scene\n        scene = SceneKit.SCNScene.scene()\n        self.scnView.setScene_(scene)\n\n        # Create a camera and add it to a node\n        camera = SceneKit.SCNCamera.camera()\n        cameraNode = SceneKit.SCNNode.node()\n        cameraNode.setCamera_(camera)\n        cameraNode.setPosition_(SceneKit.SCNVector3(0, 0, 15))\n        scene.rootNode().addChildNode_(cameraNode)\n        self.scnView.setPointOfView_(cameraNode)\n\n        # Create a light and add it to a node\n        light = SceneKit.SCNLight.light()\n        light.setType_(SceneKit.SCNLightTypeOmni)\n        lightNode = SceneKit.SCNNode.node()\n        lightNode.setLight_(light)\n        lightNode.setPosition_(SceneKit.SCNVector3(0, 10, 10))\n        scene.rootNode().addChildNode_(lightNode)\n\n        # Create an ambient light\n        ambientLight = SceneKit.SCNLight.light()\n        ambientLight.setType_(SceneKit.SCNLightTypeAmbient)\n        ambientLight.setColor_(SceneKit.SCNColor.colorWithRed_green_blue_alpha_(0.1, 0.1, 0.1, 1.0))\n        ambientLightNode = SceneKit.SCNNode.node()\n        ambientLightNode.setLight_(ambientLight)\n        scene.rootNode().addChildNode_(ambientLightNode)\n\n        # Create a cube geometry\n        box = SceneKit.SCNBox.boxWithWidth_height_length_chamferRadius_(5.0, 5.0, 5.0, 0.5)\n        boxNode = SceneKit.SCNNode.nodeWithGeometry_(box)\n        scene.rootNode().addChildNode_(boxNode)\n        \n        # Allow the user to manipulate the camera\n        self.scnView.setAllowsCameraControl_(True)\n\n        self.window.makeKeyAndOrderFront_(None)\n\ndef main():\n    app = NSApplication.sharedApplication()\n    delegate = AppDelegate.alloc().init()\n    app.setDelegate_(delegate)\n    AppHelper.runEventLoop()\n\nif __name__ == '__main__':\n    main()\n","lang":"python","description":"This quickstart code initializes a basic macOS application window and embeds an SCNView. It then sets up a SceneKit scene with a camera, lights, and a simple rotating cube, allowing user camera control. The `AppHelper.runEventLoop()` ensures the Cocoa application event loop is started and managed.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":null,"pypi_latest":"12.1","is_stale":null,"summary":{"python_range":"3.10–3.9","success_rate":0,"avg_install_s":null,"avg_import_s":null,"wheel_type":null},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"allbindings","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pyobjc-framework-scenekit","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"allbindings","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":3.2,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pyobjc-framework-scenekit","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":3,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"allbindings","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pyobjc-framework-scenekit","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"allbindings","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":3.4,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pyobjc-framework-scenekit","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":3,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"allbindings","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pyobjc-framework-scenekit","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"allbindings","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":1.4,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pyobjc-framework-scenekit","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":2.8,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"allbindings","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pyobjc-framework-scenekit","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"allbindings","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":2.6,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pyobjc-framework-scenekit","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":2.5,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"allbindings","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pyobjc-framework-scenekit","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"allbindings","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":3.7,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pyobjc-framework-scenekit","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":3.5,"import_time_s":null,"mem_mb":null,"disk_size":null}]}}