{"id":20428512,"url":"https://github.com/picalines/outer-scout","last_synced_at":"2026-02-06T07:36:18.218Z","repository":{"id":244717078,"uuid":"569431109","full_name":"Picalines/outer-scout","owner":"Picalines","description":"A cinematic toolbox for Outer Wilds \u0026 Blender","archived":false,"fork":false,"pushed_at":"2024-11-24T12:00:44.000Z","size":1214,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T13:45:34.367Z","etag":null,"topics":["http-server","machinima","mod","openapi","outer-wilds","owml"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Picalines.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,"publiccode":null,"codemeta":null}},"created_at":"2022-11-22T20:12:33.000Z","updated_at":"2024-11-24T12:00:48.000Z","dependencies_parsed_at":"2024-06-17T00:27:20.533Z","dependency_job_id":"d239f98d-6b70-495f-855c-996475cc1934","html_url":"https://github.com/Picalines/outer-scout","commit_stats":null,"previous_names":["picalines/outer-scout"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Picalines%2Fouter-scout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Picalines%2Fouter-scout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Picalines%2Fouter-scout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Picalines%2Fouter-scout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Picalines","download_url":"https://codeload.github.com/Picalines/outer-scout/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248619476,"owners_count":21134450,"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","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":["http-server","machinima","mod","openapi","outer-wilds","owml"],"created_at":"2024-11-15T07:27:25.501Z","updated_at":"2026-02-06T07:36:18.182Z","avatar_url":"https://github.com/Picalines.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Outer Scout\n\nA toolbox for creating and importing cinematic shots from Outer Wilds into Blender!\n\n![thumbnail](thumbnail.png)\n\nThe Outer Scout mod allows other programs to make advanced video recordings from Outer Wilds. It opens a software interface with which you can animate cameras and other objects, and then export video files and other recorded game data\n\n\u003e [!IMPORTANT]\n\u003e This repository contains only the backend part for the [Outer Scout Blender addon](https://github.com/Picalines/outer-scout-blender/blob/master/README.md) - visit its page to see more sample videos that you can make with this mod!\n\n## Requirements\n\n\u003e [!IMPORTANT]\n\u003e These requirements relate specifically to the mod, not the add-on for Blender\n\n[FFmpeg](https://ffmpeg.org/about.html) is required for video recording functionality. The `ffmpeg` command must be available in the PATH (a specific path to the executable can be specified in the settings). On Windows I recommend installing ffmpeg via [scoop](https://bjansen.github.io/scoop-apps/main/ffmpeg)\n\nThe add-on and the mod communicate over the HTTP protocol on local port `2209`. You can change the port in the settings of two programs\n\n## How it works\n\nThis mod implements the [API](OuterScout.WebApi/resources/openapi.yaml) that can:\n- Create custom Unity GameObjects\n- Add different types of cameras to them (even [360](OuterScout.WebApi/resources/openapi.yaml#L806)!)\n- Animate their transform and [perspective](OuterScout.WebApi/resources/openapi.yaml#L758) using [keyframes](OuterScout.WebApi/resources/openapi.yaml#L471)\n- Create [recorders](OuterScout.WebApi/resources/openapi.yaml#L529) of their RenderTextures (color or depth)\n- [Record](OuterScout.WebApi/resources/openapi.yaml#L119) your scene with a [fixed frame rate](https://docs.unity3d.com/ScriptReference/Time-captureFramerate.html)\n\n## Documentation\n\nAll API endpoints are available in the [swagger-ui](https://github.com/swagger-api/swagger-ui) interface. You can view them by opening a web browser and navigating to `localhost:2209` while you game's running\n\n## A more in-depth API example\n\n\u003e [!WARNING]\n\u003e I may forget to update this section if I change the API. Please see the specific documentation only in the OpenAPI schema\n\nLet's do something like the [dolly zoom](https://en.wikipedia.org/wiki/Dolly_zoom) effect. First we need to create an Outer Scout scene:\n\n```json5\n// POST /scene\n{\n    \"hidePlayerModel\": true,\n    \"origin\": {\n        \"parent\": \"TimberHearth_Body\",\n        \"position\": [20.8809223, -41.51514, 186.207733],\n        \"rotation\": [0.461064935, -0.4372242, -0.6413971, 0.429958254]\n    }\n}\n```\n\nNow we need a camera. The mod can create several cameras of different types, but we will only need one regular (perspective) camera:\n\n```json5\n// POST /objects\n{\n    \"name\": \"mainCamera\",\n    \"transform\": {\n        \"parent\": \"scene.origin\"\n        // scene.origin is a special object,\n        // located in the coordinates that we specified above\n    },\n}\n```\n\n```json5\n// POST /objects/mainCamera/camera\n{\n    \"type\": \"perspective\",\n    \"gateFit\": \"horizontal\",\n    \"resolution\": {\n        \"width\": 1920,\n        \"height\": 1080\n    },\n    \"perspective\": {\n        // See the Unity documentation on the physical properties of cameras\n        // https://docs.unity3d.com/Manual/PhysicalCameras.html\n        \"focalLength\": 20,\n        \"sensorSize\": [36, 24],\n        \"lensShift\": [0, 0],\n        \"nearClipPlane\": 0.1,\n        \"farClipPlane\": 5000\n    }\n}\n```\n\nNow we need to animate the camera position and focal length:\n\n```json5\n// PUT /objects/mainCamera/keyframes\n{\n    \"properties\": {\n        \"transform.position.z\": {\n            \"keyframes\": {\n                \"1\": { \"value\": -2 },\n                \"60\": { \"value\": 2 }\n            }\n        },\n        \"camera.perspective.focalLength\": {\n            \"keyframes\": {\n                \"1\": { \"value\": 40 },\n                \"60\": { \"value\": 10 }\n            }\n        }\n    }\n}\n```\n\nThen we need to specify which file on the disk to save the video to. To do this, we need to create a camera recorder:\n\n```json5\n// POST /objects/mainCamera/recorders\n{\n    \"property\": \"camera.renderTexture.color\",\n    \"outputPath\": \"D:\\\\assets\\\\color.mp4\",\n    \"format\": \"mp4\"\n}\n```\n\nAnd finally, we can record the created scene:\n\n```json5\n// POST /scene/recording\n{\n    \"startFrame\": 1,\n    \"endFrame\": 60,\n    \"frameRate\": 60\n}\n```\n\nhttps://github.com/Picalines/outer-scout/assets/42614422/7c9d7ad6-5e62-48a0-9215-d89a342c56e5\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpicalines%2Fouter-scout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpicalines%2Fouter-scout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpicalines%2Fouter-scout/lists"}