{"id":48148348,"url":"https://github.com/godot-mobile-plugins/godot-native-camera","last_synced_at":"2026-05-09T10:08:04.636Z","repository":{"id":332886188,"uuid":"1130266602","full_name":"godot-mobile-plugins/godot-native-camera","owner":"godot-mobile-plugins","description":"A Godot plugin that provides a unified camera capture interface for Android and iOS using native platform APIs.","archived":false,"fork":false,"pushed_at":"2026-03-12T09:08:01.000Z","size":1369,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-12T15:59:59.301Z","etag":null,"topics":["android","godot","godot-plugin","ios","mobile-camera"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/godot-mobile-plugins.png","metadata":{"files":{"readme":"docs/README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"cengiz-pz"}},"created_at":"2026-01-08T09:07:43.000Z","updated_at":"2026-03-12T09:07:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/godot-mobile-plugins/godot-native-camera","commit_stats":null,"previous_names":["godot-mobile-plugins/godot-native-camera"],"tags_count":2,"template":false,"template_full_name":"godot-mobile-plugins/godot-plugin-template","purl":"pkg:github/godot-mobile-plugins/godot-native-camera","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godot-mobile-plugins%2Fgodot-native-camera","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godot-mobile-plugins%2Fgodot-native-camera/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godot-mobile-plugins%2Fgodot-native-camera/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godot-mobile-plugins%2Fgodot-native-camera/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/godot-mobile-plugins","download_url":"https://codeload.github.com/godot-mobile-plugins/godot-native-camera/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godot-mobile-plugins%2Fgodot-native-camera/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31407405,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","godot","godot-plugin","ios","mobile-camera"],"created_at":"2026-04-04T17:02:40.985Z","updated_at":"2026-05-09T10:08:04.605Z","avatar_url":"https://github.com/godot-mobile-plugins.png","language":"Shell","funding_links":["https://github.com/sponsors/cengiz-pz"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n![](https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/demo/assets/native-camera-android.png) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; ![](https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/demo/assets/native-camera-ios.png)\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\t\u003ca href=\"https://github.com/godot-mobile-plugins/godot-native-camera\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/godot-mobile-plugins/godot-native-camera?label=Stars\u0026style=plastic\" height=\"40\"/\u003e\u003c/a\u003e\n\t\u003cimg src=\"https://img.shields.io/github/v/release/godot-mobile-plugins/godot-native-camera?label=Latest%20Release\u0026style=plastic\" height=\"40\"/\u003e\n\t\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-native-camera/latest/total?label=Downloads\u0026style=plastic\" height=\"40\"/\u003e\n\t\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-native-camera/total?label=Total%20Downloads\u0026style=plastic\" height=\"40\"/\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n# \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"24\"\u003e Godot Native Camera Plugin\n\nA Godot plugin that provides a **unified camera capture interface** for **Android** and **iOS** using native platform APIs. It enables real‑time camera frame streaming directly into Godot with configurable resolution, rotation, frame skipping, horizontal/vertical mirroring, and optional grayscale output.\n\n**Key Features:**\n\n* Unified GDScript API for Android and iOS\n* Enumerate available cameras and their supported output sizes\n* Start and stop native camera frame streaming\n* Receive raw frame buffers or ready‑to‑use `Image` objects\n* Configurable resolution, rotation, frame skipping, horizontal/vertical mirroring, grayscale capture, and post-capture scaling\n* **Auto-upright orientation correction** — automatically rotates every frame to be upright as the device is tilted, without any manual rotation tracking in your game code\n* Designed for real‑time use cases (CV, AR preprocessing, custom rendering)\n\n## \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"20\"\u003e Table of Contents\n\n* [Installation](#installation)\n* [Usage](#usage)\n* [Signals](#signals)\n* [Methods](#methods)\n* [Classes](#classes)\n* [Platform-Specific Notes](#platform-specific-notes)\n* [Links](#links)\n* [All Plugins](#all-plugins)\n* [Credits](#credits)\n* [Contributing](#contributing)\n\n\u003ca name=\"installation\"\u003e\u003c/a\u003e\n\n## \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"20\"\u003e Installation\n\n*Before installing this plugin, make sure to uninstall any previous versions of the same plugin.*\n\n*If installing both Android and iOS versions of the plugin in the same project, ensure that both versions use the same addon interface version.*\n\nThere are two ways to install the `NativeCamera` plugin into your project:\n\n* Through the Godot Editor AssetLib\n* Manually by downloading archives from GitHub\n\n### \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"18\"\u003e Installing via AssetLib\n\nSteps:\n\n* Search for **NativeCamera** in the Godot Editor AssetLib\n* Click **Download**\n* In the installation dialog:\n\n  * Keep **Change Install Folder** set to your project root\n  * Keep **Ignore asset root** checked\n  * Click **Install**\n* Enable the plugin from **Project → Project Settings → Plugins**\n\n#### \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"16\"\u003e Installing both Android and iOS versions\n\nWhen installing both platforms via AssetLib, Godot may warn that some files conflict and will not be installed. This is expected and safe to ignore, as both platforms share the same addon interface code.\n\n### \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"18\"\u003e Installing manually\n\nSteps:\n\n* Download the release archive from GitHub\n* Unzip the archive\n* Copy the contents into your Godot project root\n* Enable the plugin via **Project → Project Settings → Plugins**\n\n\u003ca name=\"usage\"\u003e\u003c/a\u003e\n\n## \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"20\"\u003e Usage\n\nAdd a `NativeCamera` node to your main scene or register it as an autoload (singleton).\n\nTypical workflow:\n\n1. Query available cameras using `get_cameras()`\n2. Choose a camera and desired output size\n3. Create a `FeedRequest` to configure the stream\n4. Start the camera feed\n5. Receive frames via signals\n\n### Example\n\n```gdscript\n@onready var camera := $NativeCamera\n\nfunc _ready():\n\tcamera.camera_permission_granted.connect(_on_camera_permission_granted)\n\tcamera.camera_permission_denied.connect(_on_camera_permission_denied)\n\tcamera.frame_available.connect(_on_frame_available)\n\tcamera.request_camera_permission()\n\nfunc _on_camera_permission_granted() -\u003e void:\n\tvar cameras := camera.get_all_cameras()\n\tif cameras.is_empty():\n\t\treturn\n\n\tvar cam: CameraInfo = cameras[0]\n\tvar request := FeedRequest.new()\n\t\t.set_camera_id(cam.get_camera_id())\n\t\t.set_width(1280)\n\t\t.set_height(720)\n\t\t.set_rotation(90)\n\t\t.set_grayscale(false)\n\t\t.set_mirror_horizontal(true)   # flip left-right (e.g. selfie camera preview)\n\t\t.set_mirror_vertical(false)\n\t\t.set_scale_width(640)          # downscale to 640×360 before emitting\n\t\t.set_scale_height(360)\n\n\tcamera.start(request)\n\nfunc _on_camera_permission_denied() -\u003e void:\n\tpush_error(\"Camera permission denied\")\n\nfunc _on_frame_available(frame: FrameInfo) -\u003e void:\n\tvar img := frame.get_image()\n\t# Use the image or raw buffer here\n```\n\n### Example with auto-upright\n\nWhen `auto_upright` is enabled the plugin detects device orientation in real time and automatically applies the correct rotation to every frame. There is no need to set `rotation` manually or track orientation changes in your code.\n\n```gdscript\n@onready var camera := $NativeCamera\n\nfunc _ready():\n\tcamera.camera_permission_granted.connect(_on_camera_permission_granted)\n\tcamera.frame_available.connect(_on_frame_available)\n\tcamera.request_camera_permission()\n\nfunc _on_camera_permission_granted() -\u003e void:\n\tvar cameras := camera.get_all_cameras()\n\tif cameras.is_empty():\n\t\treturn\n\n\tvar cam: CameraInfo = cameras[0]\n\tvar request := FeedRequest.new()\n\t\t.set_camera_id(cam.get_camera_id())\n\t\t.set_width(1280)\n\t\t.set_height(720)\n\t\t.set_auto_upright(true)        # rotate frames automatically — no manual rotation needed\n\n\tcamera.start(request)\n\nfunc _on_frame_available(frame: FrameInfo) -\u003e void:\n\tvar img := frame.get_image()\n\t# img is always upright regardless of how the device is held\n\t# frame.get_rotation() reports the rotation that was applied\n```\n\nYou can also set `auto_upright` through the Inspector by enabling the **Auto Upright** export property on the `NativeCamera` node and then calling `create_feed_request()`:\n\n```gdscript\n# In the Inspector, enable \"Auto Upright\" on the NativeCamera node, then:\nvar request := camera.create_feed_request()\ncamera.start(request)\n```\n\n\u003ca name=\"signals\"\u003e\u003c/a\u003e\n\n## \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"20\"\u003e Signals\n\nRegister listeners on the `NativeCamera` node:\n\n* `camera_permission_granted()`\n\n  * Emitted when camera permission is granted by the user\n\n* `camera_permission_denied()`\n\n  * Emitted when camera permission is denied by the user\n\n* `frame_available(frame: FrameInfo)`\n\n  * Emitted when a new camera frame is available\n\n\u003ca name=\"methods\"\u003e\u003c/a\u003e\n\n## \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"20\"\u003e Methods\n\n* `has_camera_permission() -\u003e bool`\n\n  * Returns whether camera permission has already been granted\n\n* `request_camera_permission()`\n\n  * Requests camera permission from the OS\n\n* `get_all_cameras() -\u003e Array[CameraInfo]`\n\n  * Returns a list of available cameras\n\n* `create_feed_request() -\u003e FeedRequest`\n\n  * Creates a `FeedRequest` pre-populated with the node's exported property values (`frame_width`, `frame_height`, `frames_to_skip`, `frame_rotation`, `is_grayscale`, `mirror_horizontal`, `mirror_vertical`, `scale_width`, `scale_height`, `auto_upright`)\n\n* `start(request: FeedRequest)`\n\n  * Starts the camera feed with the given configuration\n\n* `stop()`\n\n  * Stops the active camera feed\n\n\u003ca name=\"classes\"\u003e\u003c/a\u003e\n\n## \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"20\"\u003e Classes\n\nThis section documents the GDScript interface classes implemented and exposed by the plugin.\n\n### \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"16\"\u003e CameraInfo\n\nEncapsulates camera metadata provided by the mobile OS.\n\n**Properties / Methods:**\n\n* `get_camera_id() -\u003e String`\n* `is_front_facing() -\u003e bool`\n* `get_output_sizes() -\u003e Array[FrameSize]`\n* `get_sensor_orientation() -\u003e int`\n  * Returns the clockwise angle in degrees (`0`, `90`, `180`, or `270`) that the camera sensor image must be rotated to be upright when the device is held in its natural (portrait) orientation. This value is a fixed hardware property of the camera and does not change with device rotation. Defaults to `0` when the value is unavailable (e.g. on emulators). Useful when implementing custom frame processing that needs to account for sensor mounting angle independently of device orientation.\n\n### \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"16\"\u003e FeedRequest\n\nDefines configuration parameters for starting a camera feed.\n\n**Configurable options:**\n\n* Camera ID\n* Output width and height\n* Frames to skip (performance tuning)\n* Rotation (degrees: 0, 90, 180, 270 — applied first; ignored when `auto_upright` is enabled)\n* Grayscale capture\n* Horizontal mirror (`mirror_horizontal`) — flips the frame left-to-right after rotation\n* Vertical mirror (`mirror_vertical`) — flips the frame top-to-bottom after rotation\n* Scale width and height (`scale_width`, `scale_height`) — resizes the pixel buffer to the given dimensions as the final post-processing step (after rotation and mirroring); both must be non-zero for scaling to take effect; defaults to 0 (disabled)\n* **Auto-upright** (`auto_upright`) — when enabled, the plugin detects the current device orientation on every frame and automatically computes and applies the rotation needed to keep the image upright; the manual `rotation` value is ignored while this flag is active; defaults to `false`\n\nBoth mirror flags default to `false` and can be combined independently with any rotation value. Mirroring is applied as a post-processing step after rotation on both Android and iOS, so the axis labels always refer to the final upright image.\n\nScaling is applied after mirroring and uses nearest-neighbour interpolation, making it suitable for real-time use cases such as downscaling before CV inference. Setting either `scale_width` or `scale_height` to 0 disables scaling entirely.\n\nWhen `auto_upright` is active, `FrameInfo.get_rotation()` reports the rotation that was actually applied to that frame, which changes dynamically as the device is tilted. This value can be used for diagnostics or to inform downstream processing.\n\nSupports fluent chaining via setter methods.\n\n**Setter methods:**\n\n* `set_camera_id(value: String) -\u003e FeedRequest`\n* `set_width(value: int) -\u003e FeedRequest`\n* `set_height(value: int) -\u003e FeedRequest`\n* `set_frames_to_skip(value: int) -\u003e FeedRequest`\n* `set_rotation(value: int) -\u003e FeedRequest`\n* `set_grayscale(value: bool) -\u003e FeedRequest`\n* `set_mirror_horizontal(value: bool) -\u003e FeedRequest`\n* `set_mirror_vertical(value: bool) -\u003e FeedRequest`\n* `set_scale_width(value: int) -\u003e FeedRequest`\n* `set_scale_height(value: int) -\u003e FeedRequest`\n* `set_auto_upright(value: bool) -\u003e FeedRequest`\n\n### \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"16\"\u003e FrameInfo\n\nRepresents a single captured frame.\n\n**Accessors:**\n\n* `get_buffer() -\u003e PackedByteArray`\n* `get_width() -\u003e int`\n* `get_height() -\u003e int`\n* `get_rotation() -\u003e int`\n* `is_grayscale() -\u003e bool`\n* `get_image() -\u003e Image`\n\n### \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"16\"\u003e FrameSize\n\nRepresents a supported camera output resolution.\n\n**Accessors:**\n\n* `get_width() -\u003e int`\n* `get_height() -\u003e int`\n* `get_raw_data() -\u003e Dictionary`\n\n\u003ca name=\"platform-specific-notes\"\u003e\u003c/a\u003e\n\n## \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"20\"\u003e Platform-Specific Notes\n\n### Android\n\n* Ensure Android export templates are installed\n* Enable Gradle build in export settings\n* Camera permission is required at runtime\n* The **\"Two-Strike\" Rule**: Starting in Android 11, if a user taps \"Deny\" for a specific permission more than once during the app's lifetime on the device, the system will no longer show the dialog for future requests. Once this two-strike threshold is reached, any subsequent calls to request the permission will immediately be denied without showing any dialogs.\n\n**Auto-upright on Android:**\n\nWhen `auto_upright` is enabled the plugin reads the camera's `SENSOR_ORIENTATION` value (0, 90, 180, or 270°) from `CameraCharacteristics` once when the camera opens, and reads the live device rotation from `Display.getRotation()` on every processed frame. The required rotation is computed using the standard Camera2 formula:\n\n| Camera type | Formula |\n| :---------- | :------ |\n| Back-facing | `(sensorOrientation − deviceDegrees + 360) % 360` |\n| Front-facing | `(sensorOrientation + deviceDegrees + 360) % 360` |\n\nFront cameras use addition rather than subtraction because their sensor image is horizontally mirrored, so the sensor and device rotations reinforce each other.\n\n**Troubleshooting:**\n\n* Logs (Linux/macOS): `adb logcat | grep godot`\n* Logs (Windows): `adb.exe logcat | select-string \"godot\"`\n\nHelpful resources:\n\n* Godot Android export documentation\n* Android Studio \u0026 ADB documentation\n\n### iOS\n\n* Follow Godot's iOS export instructions\n* Camera permission must be declared in the generated Xcode project\n* Use Xcode console logs for debugging\n\n**Auto-upright on iOS:**\n\nWhen `auto_upright` is enabled the plugin subscribes to `UIDevice.orientationDidChangeNotification` (started and stopped alongside the camera session) and caches the most recently observed `UIDeviceOrientation`. On every processed frame it maps that orientation to the rotation degrees needed to make the raw sensor buffer upright:\n\n| `UIDeviceOrientation` | Back camera | Front camera |\n| :-------------------- | :---------- | :----------- |\n| `.portrait` | 90° | 90° |\n| `.portraitUpsideDown` | 270° | 270° |\n| `.landscapeLeft` *(top points left)* | 0° | 180° |\n| `.landscapeRight` *(top points right)* | 180° | 0° |\n| `.faceUp` / `.faceDown` / `.unknown` | 90° *(portrait fallback)* | 90° *(portrait fallback)* |\n\nFront and back cameras produce mirrored values in the landscape cases because the front sensor image is horizontally flipped relative to the back sensor. Portrait orientations are the same for both camera types because the mirror axis does not interact with a 90°/270° rotation.\n\n\u003cbr\u003e\n\n\u003ca name=\"links\"\u003e\u003c/a\u003e\n\n# \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"24\"\u003e Links\n\n* [AssetLib Entry Android](https://godotengine.org/asset-library/asset/4675)\n* [AssetLib Entry iOS](https://godotengine.org/asset-library/asset/4676)\n\n\u003cbr\u003e\n\n\u003ca name=\"all-plugins\"\u003e\u003c/a\u003e\n\n# \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"24\"\u003e All Plugins\n\n| ✦ | Plugin | Android | iOS | Latest Release | Downloads | Stars |\n| :--- | :--- | :---: | :---: | :---: | :---: | :---: |\n| \u003cimg src=\"https://raw.githubusercontent.com/godot-sdk-integrations/godot-admob/main/addon/src/main/icon.png\" width=\"20\"\u003e | [Admob](https://github.com/godot-sdk-integrations/godot-admob) | ✅ | ✅ | \u003ca href=\"https://github.com/godot-sdk-integrations/godot-admob/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release-date/godot-sdk-integrations/godot-admob?label=%20\" /\u003e\u003cimg src=\"https://img.shields.io/github/v/release/godot-sdk-integrations/godot-admob?label=%20\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-sdk-integrations/godot-admob/latest/total?label=latest\" /\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-sdk-integrations/godot-admob/total?label=total\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"https://github.com/godot-sdk-integrations/godot-admob/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/godot-sdk-integrations/godot-admob?style=plastic\u0026label=%20\" /\u003e\u003c/a\u003e |\n| \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-connection-state/main/addon/src/icon.png\" width=\"20\"\u003e | [Connection State](https://github.com/godot-mobile-plugins/godot-connection-state) | ✅ | ✅ | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-connection-state/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release-date/godot-mobile-plugins/godot-connection-state?label=%20\" /\u003e\u003cimg src=\"https://img.shields.io/github/v/release/godot-mobile-plugins/godot-connection-state?label=%20\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-connection-state/latest/total?label=latest\" /\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-connection-state/total?label=total\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-connection-state/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/godot-mobile-plugins/godot-connection-state?style=plastic\u0026label=%20\" /\u003e\u003c/a\u003e |\n| \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-deeplink/main/addon/src/icon.png\" width=\"20\"\u003e | [Deeplink](https://github.com/godot-mobile-plugins/godot-deeplink) | ✅ | ✅ | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-deeplink/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release-date/godot-mobile-plugins/godot-deeplink?label=%20\" /\u003e\u003cimg src=\"https://img.shields.io/github/v/release/godot-mobile-plugins/godot-deeplink?label=%20\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-deeplink/latest/total?label=latest\" /\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-deeplink/total?label=total\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-deeplink/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/godot-mobile-plugins/godot-deeplink?style=plastic\u0026label=%20\" /\u003e\u003c/a\u003e |\n| \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-firebase/main/addon/src/main/icon.png\" width=\"20\"\u003e | [Firebase](https://github.com/godot-mobile-plugins/godot-firebase) | ✅ | ✅ | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-firebase/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release-date/godot-mobile-plugins/godot-firebase?label=%20\" /\u003e\u003cimg src=\"https://img.shields.io/github/v/release/godot-mobile-plugins/godot-firebase?label=%20\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-firebase/latest/total?label=latest\" /\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-firebase/total?label=total\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-firebase/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/godot-mobile-plugins/godot-firebase?style=plastic\u0026label=%20\" /\u003e\u003c/a\u003e |\n| \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-inapp-review/main/addon/src/icon.png\" width=\"20\"\u003e | [In-App Review](https://github.com/godot-mobile-plugins/godot-inapp-review) | ✅ | ✅ | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-inapp-review/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release-date/godot-mobile-plugins/godot-inapp-review?label=%20\" /\u003e\u003cimg src=\"https://img.shields.io/github/v/release/godot-mobile-plugins/godot-inapp-review?label=%20\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-inapp-review/latest/total?label=latest\" /\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-inapp-review/total?label=total\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-inapp-review/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/godot-mobile-plugins/godot-inapp-review?style=plastic\u0026label=%20\" /\u003e\u003c/a\u003e |\n| \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"20\"\u003e | [Native Camera](https://github.com/godot-mobile-plugins/godot-native-camera) | ✅ | ✅ | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-native-camera/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release-date/godot-mobile-plugins/godot-native-camera?label=%20\" /\u003e\u003cimg src=\"https://img.shields.io/github/v/release/godot-mobile-plugins/godot-native-camera?label=%20\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-native-camera/latest/total?label=latest\" /\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-native-camera/total?label=total\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-native-camera/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/godot-mobile-plugins/godot-native-camera?style=plastic\u0026label=%20\" /\u003e\u003c/a\u003e |\n| \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-notification-scheduler/main/addon/src/icon.png\" width=\"20\"\u003e | [Notification Scheduler](https://github.com/godot-mobile-plugins/godot-notification-scheduler) | ✅ | ✅ | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-notification-scheduler/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release-date/godot-mobile-plugins/godot-notification-scheduler?label=%20\" /\u003e\u003cimg src=\"https://img.shields.io/github/v/release/godot-mobile-plugins/godot-notification-scheduler?label=%20\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-notification-scheduler/latest/total?label=latest\" /\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-notification-scheduler/total?label=total\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-notification-scheduler/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/godot-mobile-plugins/godot-notification-scheduler?style=plastic\u0026label=%20\" /\u003e\u003c/a\u003e |\n| \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-oauth2/main/addon/src/icon.png\" width=\"20\"\u003e | [OAuth 2.0](https://github.com/godot-mobile-plugins/godot-oauth2) | ✅ | ✅ | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-oauth2/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release-date/godot-mobile-plugins/godot-oauth2?label=%20\" /\u003e\u003cimg src=\"https://img.shields.io/github/v/release/godot-mobile-plugins/godot-oauth2?label=%20\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-oauth2/latest/total?label=latest\" /\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-oauth2/total?label=total\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-oauth2/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/godot-mobile-plugins/godot-oauth2?style=plastic\u0026label=%20\" /\u003e\u003c/a\u003e |\n| \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-qr/main/addon/src/icon.png\" width=\"20\"\u003e | [QR](https://github.com/godot-mobile-plugins/godot-qr) | ✅ | ✅ | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-qr/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release-date/godot-mobile-plugins/godot-qr?label=%20\" /\u003e\u003cimg src=\"https://img.shields.io/github/v/release/godot-mobile-plugins/godot-qr?label=%20\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-qr/latest/total?label=latest\" /\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-qr/total?label=total\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-qr/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/godot-mobile-plugins/godot-qr?style=plastic\u0026label=%20\" /\u003e\u003c/a\u003e |\n| \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-share/main/addon/src/icon.png\" width=\"20\"\u003e | [Share](https://github.com/godot-mobile-plugins/godot-share) | ✅ | ✅ | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-share/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release-date/godot-mobile-plugins/godot-share?label=%20\" /\u003e\u003cimg src=\"https://img.shields.io/github/v/release/godot-mobile-plugins/godot-share?label=%20\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-share/latest/total?label=latest\" /\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-share/total?label=total\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-share/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/godot-mobile-plugins/godot-share?style=plastic\u0026label=%20\" /\u003e\u003c/a\u003e |\n| \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-vision/main/addon/src/main/icon.png\" width=\"20\"\u003e | [Vision](https://github.com/godot-mobile-plugins/godot-vision) | ✅ | ✅ | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-vision/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release-date/godot-mobile-plugins/godot-vision?label=%20\" /\u003e\u003cimg src=\"https://img.shields.io/github/v/release/godot-mobile-plugins/godot-vision?label=%20\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"#\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-vision/latest/total?label=latest\" /\u003e\u003cimg src=\"https://img.shields.io/github/downloads/godot-mobile-plugins/godot-vision/total?label=total\" hspace=\"4\" /\u003e\u003c/a\u003e | \u003ca href=\"https://github.com/godot-mobile-plugins/godot-vision/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/godot-mobile-plugins/godot-vision?style=plastic\u0026label=%20\" /\u003e\u003c/a\u003e |\n\n\u003cbr\u003e\n\n\u003ca name=\"credits\"\u003e\u003c/a\u003e\n\n# \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"24\"\u003e Credits\n\nDeveloped by [Cengiz](https://github.com/cengiz-pz)\n\nBased on [Godot Mobile Plugin Template v7](https://github.com/godot-mobile-plugins/godot-plugin-template/tree/v7)\n\nOriginal repository: [Godot Native Camera Plugin](https://github.com/godot-mobile-plugins/godot-native-camera)\n\n\u003cbr\u003e\n\n\u003ca name=\"contributing\"\u003e\u003c/a\u003e\n\n# \u003cimg src=\"https://raw.githubusercontent.com/godot-mobile-plugins/godot-native-camera/main/addon/src/main/icon.png\" width=\"24\"\u003e Contributing\n\nContributions are welcome. Please see the [contributing guide](https://github.com/godot-mobile-plugins/godot-native-camera?tab=contributing-ov-file) in the repository for details.\n\n\u003cbr\u003e\n\n# 💖 Support the Project\n\nIf this plugin has helped you, consider supporting its development! Every bit of support helps keep the plugin updated and bug-free.\n\n| ✦ | Ways to Help | How to do it |\n| :--- | :--- | :--- |\n|✨⭐| **Spread the Word** | [Star this repo](https://github.com/godot-mobile-plugins/godot-native-camera/stargazers) to help others find it. |\n|💡✨| **Give Feedback** | [Open an issue](https://github.com/godot-mobile-plugins/godot-native-camera/issues) or [suggest a feature](https://github.com/godot-mobile-plugins/godot-native-camera/issues/new). |\n|🧩| **Contribute** | [Submit a PR](https://github.com/godot-mobile-plugins/godot-native-camera?tab=contributing-ov-file) to help improve the codebase. |\n|❤️| **Buy a Coffee** | Support the maintainers on GitHub Sponsors or other platforms. |\n\n\u003cbr\u003e\n\n## ⭐ Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=godot-mobile-plugins/godot-native-camera\u0026type=date\u0026theme=dark\u0026legend=top-left)](https://www.star-history.com/?repos=godot-mobile-plugins%2Fgodot-native-camera\u0026type=date\u0026theme=dark\u0026legend=top-left)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgodot-mobile-plugins%2Fgodot-native-camera","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgodot-mobile-plugins%2Fgodot-native-camera","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgodot-mobile-plugins%2Fgodot-native-camera/lists"}