{"id":34794777,"url":"https://github.com/ricohapi/fake-theta","last_synced_at":"2026-01-20T16:47:59.333Z","repository":{"id":156838569,"uuid":"608975215","full_name":"ricohapi/fake-theta","owner":"ricohapi","description":"THETA API Simulator","archived":false,"fork":false,"pushed_at":"2025-06-04T23:21:03.000Z","size":4811,"stargazers_count":0,"open_issues_count":1,"forks_count":4,"subscribers_count":32,"default_branch":"main","last_synced_at":"2025-06-05T04:49:56.887Z","etag":null,"topics":["api","ricoh","ricoh360","theta"],"latest_commit_sha":null,"homepage":"https://fake-theta.vercel.app","language":"TypeScript","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/ricohapi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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}},"created_at":"2023-03-03T05:28:09.000Z","updated_at":"2025-06-04T23:21:00.000Z","dependencies_parsed_at":"2024-02-01T01:33:35.415Z","dependency_job_id":null,"html_url":"https://github.com/ricohapi/fake-theta","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/ricohapi/fake-theta","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricohapi%2Ffake-theta","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricohapi%2Ffake-theta/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricohapi%2Ffake-theta/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricohapi%2Ffake-theta/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ricohapi","download_url":"https://codeload.github.com/ricohapi/fake-theta/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricohapi%2Ffake-theta/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28026968,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-25T02:00:05.988Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["api","ricoh","ricoh360","theta"],"created_at":"2025-12-25T10:38:33.915Z","updated_at":"2025-12-25T10:38:35.154Z","avatar_url":"https://github.com/ricohapi.png","language":"TypeScript","funding_links":[],"categories":[":iphone: THETA Mobile SDK and Library"],"sub_categories":[],"readme":"# Fake THETA\n\nFake THETA is a [RICOH THETA Web APIs](https://github.com/ricohapi/theta-api-specs) simulator.\nIt can be used for testing applications that work with THETA Web APIs.\nYou can switch from which model you get the responses of web APIs.\nFake THETA supports the following models of THETA:\n\n- THETA X\n- THETA Z1\n\n## Features\n\nFake THETA provides fake responses (fixed values) for the following Web APIs.\nSee [THETA API Specifications](https://github.com/ricohapi/theta-api-specs) for details of each API.\n\nPlease note that Fake THETA returns a single JPEG frame while the actual THETA device returns stream of MotionJPEG frames with `Transfer-Encoding: chunked` header when calling `camera.getLivePreview` API.\n\n### Protocols\n\n- [CheckForUpdates](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/protocols/check_for_updates.md)\n- [Commands/Execute](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/protocols/commands_execute.md)\n- [Commands/Status](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/protocols/commands_status.md)\n- [Info](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/protocols/info.md)\n- [State](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/protocols/state.md)\n\n### Commands\n\n- [camera.\\_cancelVideoConvert](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._cancel_video_convert.md)\n- [camera.\\_convertVideoFormats](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._convert_video_formats.md)\n- [camera.\\_deleteAccessPoint](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._delete_access_point.md)\n- [camera.\\_deleteMySetting](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._delete_mysetting.md)\n- [camera.\\_finishWlan](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._finish_wlan.md)\n- [camera.\\_getMetadata](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._get_metadata.md)\n- [camera.\\_getMySetting](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._get_my_setting.md)\n- [camera.\\_getPluginLicense](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._get_plugin_license.md)\n- [camera.\\_getPluginOrders](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._get_plugin_orders.md)\n- [camera.\\_listAccessPoints](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._list_access_points.md)\n- [camera.\\_listPlugins](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._list_plugins.md)\n- [camera.\\_pluginControl](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._plugin_control.md)\n- [camera.\\_setAccessPoint](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._set_access_point.md)\n- [camera.\\_setBluetoothDevice](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._set_bluetooth_device.md)\n- [camera.\\_setMySetting](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._set_my_setting.md)\n- [camera.\\_setPlugin](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._set_plugin.md)\n- [camera.\\_setPluginOrders](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._set_plugin_orders.md)\n- [camera.\\_stopSelfTimer](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera._stop_self_timer.md)\n- [camera.delete](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera.delete.md)\n- [camera.getLivePreview](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera.get_live_preview.md)\n- [camera.getOptions](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera.get_options.md)\n- [camera.listFiles](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera.list_files.md)\n- [camera.reset](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera.reset.md)\n- [camera.setOptions](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera.set_options.md)\n- [camera.startCapture](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera.start_capture.md)\n- [camera.stopCapture](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera.stop_capture.md)\n- [camera.takePicture](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera.take_picture.md)\n\n## Usage\n\nFake THETA is implemented as vercel serverless functions deployed on \"fake-theta.vercel.app\".\nYou can get the fake responses of RICOH THETA web APIs by setting https://fake-theta.vercel.app\nas an endpoint.\n\n**_Note: \"fake-theta.vercel.app\" is an endpoint deployed from the master branch of this repository, so its behavior may change when the master branch is updated._**\n\nIn order to specify the model, you can add a header parameter `emulating-theta-model` when sending a Request. If nothing is specified, Fake THETA behaves as THETA X.\n\nFake THETA only supports required parameters for each command execution basically.\nNon-required parameters, except for `_detail` of `camera.listFiles` command, are ignored in the current implementation (treated as if they were never entered). You can check if each parameter is a required parameter or not in the API Specifications.\n\n### Examples\n\n- Get /osc/info response (THETA X)\n\n  ```bash\n  curl -H \"emulating-theta-model:x\" https://fake-theta.vercel.app/osc/info\n  ```\n\n  ```json\n  {\n    \"api\": [\n      \"/osc/info\",\n      \"/osc/state\",\n      \"/osc/checkForUpdates\",\n      \"/osc/commands/execute\",\n      \"/osc/commands/status\"\n    ],\n    \"apiLevel\": [2],\n    \"endpoints\": { \"httpPort\": 80, \"httpUpdatesPort\": 80 },\n    \"firmwareVersion\": \"1.41.0\",\n    \"gps\": false,\n    \"gyro\": false,\n    \"manufacturer\": \"Ricoh Company, Ltd.\",\n    \"model\": \"RICOH THETA X\",\n    \"serialNumber\": \"10100001\",\n    \"supportUrl\": \"https://theta360.com/en/support/\",\n    \"uptime\": 67,\n    \"_wlanMacAddress\": \"00:45:78:bc:45:67\"\n  }\n  ```\n\n- Get camera.takePicture response (THETA X)\n\n  ```bash\n  curl -X POST -H \"emulating-theta-model:x\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"name\\\": \\\"camera.takePicture\\\"}\" https://fake-theta.vercel.app/osc/commands/execute\n  ```\n\n  ```json\n  {\n    \"id\": \"10\",\n    \"progress\": { \"completion\": 0 },\n    \"name\": \"camera.takePicture\",\n    \"state\": \"inProgress\"\n  }\n  ```\n\n- Get camera.getOptions response (THETA Z1)\n\n  ```bash\n  curl -X POST  -H \"emulating-theta-model:z1\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"name\\\": \\\"camera.getOptions\\\", \\\"parameters\\\": {\\\"optionNames\\\": [\\\"fileFormatSupport\\\"]}}\" \\\n  https://fake-theta.vercel.app/osc/commands/execute\n  ```\n\n  ```json\n  {\n    \"name\": \"camera.getOptions\",\n    \"results\": {\n      \"options\": {\n        \"fileFormatSupport\": [\n          { \"height\": 3360, \"type\": \"jpeg\", \"width\": 6720 },\n          { \"height\": 3360, \"type\": \"raw+\", \"width\": 6720 }\n        ]\n      }\n    },\n    \"state\": \"done\"\n  }\n  ```\n\n- Get JPG file in the camera\n\n  ```bash\n  curl https://fake-theta.vercel.app/files/150100525831424d42075b53ce68c300/100RICOH/R0010015.JPG \\\n  \u003e ~/R0010015.JPG\n  ```\n\n## TODO\n\n- [ ] Support dynamic responses simulation according to internal states of the camera\n- [ ] Support completely-reproduced error responses for each model\n- [ ] Add parameter validation of APIs\n- [ ] Support non-required parameters for each command\n\n## License\n\n[MIT License](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fricohapi%2Ffake-theta","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fricohapi%2Ffake-theta","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fricohapi%2Ffake-theta/lists"}