ai.muna.muna 0.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/Editor/Build/AndroidBuildHandler.cs +96 -0
  2. package/Editor/Build/AndroidBuildHandler.cs.meta +11 -0
  3. package/Editor/Build/BuildHandler.cs +128 -0
  4. package/Editor/Build/BuildHandler.cs.meta +11 -0
  5. package/Editor/Build/LinuxBuildHandler.cs +26 -0
  6. package/Editor/Build/LinuxBuildHandler.cs.meta +11 -0
  7. package/Editor/Build/WebGLBuildHandler.cs +69 -0
  8. package/Editor/Build/WebGLBuildHandler.cs.meta +11 -0
  9. package/Editor/Build/WindowsBuildHandler.cs +24 -0
  10. package/Editor/Build/WindowsBuildHandler.cs.meta +11 -0
  11. package/Editor/Build/iOSBuildHandler.cs +119 -0
  12. package/Editor/Build/iOSBuildHandler.cs.meta +11 -0
  13. package/Editor/Build/macOSBuildHandler.cs +133 -0
  14. package/Editor/Build/macOSBuildHandler.cs.meta +11 -0
  15. package/Editor/Build.meta +8 -0
  16. package/Editor/Muna.Editor.asmdef +18 -0
  17. package/Editor/Muna.Editor.asmdef.meta +7 -0
  18. package/Editor/MunaMenu.cs +32 -0
  19. package/Editor/MunaMenu.cs.meta +11 -0
  20. package/Editor/MunaProjectSettings.cs +43 -0
  21. package/Editor/MunaProjectSettings.cs.meta +11 -0
  22. package/Editor/MunaSettingsProvider.cs +27 -0
  23. package/Editor/MunaSettingsProvider.cs.meta +11 -0
  24. package/Editor.meta +8 -0
  25. package/LICENSE +201 -0
  26. package/LICENSE.meta +7 -0
  27. package/Plugins/Android/Function.aar +0 -0
  28. package/Plugins/Android/Function.aar.meta +32 -0
  29. package/Plugins/Android.meta +8 -0
  30. package/Plugins/Linux/arm64/libFunction.so +0 -0
  31. package/Plugins/Linux/arm64/libFunction.so.meta +62 -0
  32. package/Plugins/Linux/arm64.meta +8 -0
  33. package/Plugins/Linux/x86_64/libFunction.so +0 -0
  34. package/Plugins/Linux/x86_64/libFunction.so.meta +82 -0
  35. package/Plugins/Linux/x86_64.meta +8 -0
  36. package/Plugins/Linux.meta +8 -0
  37. package/Plugins/Web/libFunction.a +0 -0
  38. package/Plugins/Web/libFunction.a.meta +87 -0
  39. package/Plugins/Web.meta +8 -0
  40. package/Plugins/Windows/arm64/Function.dll +0 -0
  41. package/Plugins/Windows/arm64/Function.dll.meta +58 -0
  42. package/Plugins/Windows/arm64.meta +8 -0
  43. package/Plugins/Windows/x86_64/Function.dll +0 -0
  44. package/Plugins/Windows/x86_64/Function.dll.meta +82 -0
  45. package/Plugins/Windows/x86_64.meta +8 -0
  46. package/Plugins/Windows.meta +8 -0
  47. package/Plugins/iOS/Function.xcframework/Info.plist +75 -0
  48. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/Function +0 -0
  49. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/Headers/FXNConfiguration.h +313 -0
  50. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/Headers/FXNPrediction.h +165 -0
  51. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/Headers/FXNPredictionStream.h +63 -0
  52. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/Headers/FXNPredictor.h +108 -0
  53. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/Headers/FXNStatus.h +42 -0
  54. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/Headers/FXNValue.h +395 -0
  55. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/Headers/FXNValueMap.h +148 -0
  56. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/Headers/FXNVersion.h +26 -0
  57. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/Headers/Function.h +18 -0
  58. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/Info.plist +0 -0
  59. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/Modules/module.modulemap +6 -0
  60. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/PrivacyInfo.xcprivacy +36 -0
  61. package/Plugins/iOS/Function.xcframework/ios-arm64/Function.framework/_CodeSignature/CodeResources +223 -0
  62. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/Function +0 -0
  63. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/Headers/FXNConfiguration.h +313 -0
  64. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/Headers/FXNPrediction.h +165 -0
  65. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/Headers/FXNPredictionStream.h +63 -0
  66. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/Headers/FXNPredictor.h +108 -0
  67. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/Headers/FXNStatus.h +42 -0
  68. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/Headers/FXNValue.h +395 -0
  69. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/Headers/FXNValueMap.h +148 -0
  70. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/Headers/FXNVersion.h +26 -0
  71. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/Headers/Function.h +18 -0
  72. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/Info.plist +0 -0
  73. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/Modules/module.modulemap +6 -0
  74. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/PrivacyInfo.xcprivacy +36 -0
  75. package/Plugins/iOS/Function.xcframework/ios-arm64_x86_64-simulator/Function.framework/_CodeSignature/CodeResources +223 -0
  76. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/Function +0 -0
  77. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/Headers/FXNConfiguration.h +313 -0
  78. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/Headers/FXNPrediction.h +165 -0
  79. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/Headers/FXNPredictionStream.h +63 -0
  80. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/Headers/FXNPredictor.h +108 -0
  81. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/Headers/FXNStatus.h +42 -0
  82. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/Headers/FXNValue.h +395 -0
  83. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/Headers/FXNValueMap.h +148 -0
  84. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/Headers/FXNVersion.h +26 -0
  85. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/Headers/Function.h +18 -0
  86. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/Info.plist +0 -0
  87. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/Modules/module.modulemap +6 -0
  88. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/PrivacyInfo.xcprivacy +36 -0
  89. package/Plugins/iOS/Function.xcframework/xros-arm64/Function.framework/_CodeSignature/CodeResources +223 -0
  90. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/Function +0 -0
  91. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/Headers/FXNConfiguration.h +313 -0
  92. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/Headers/FXNPrediction.h +165 -0
  93. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/Headers/FXNPredictionStream.h +63 -0
  94. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/Headers/FXNPredictor.h +108 -0
  95. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/Headers/FXNStatus.h +42 -0
  96. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/Headers/FXNValue.h +395 -0
  97. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/Headers/FXNValueMap.h +148 -0
  98. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/Headers/FXNVersion.h +26 -0
  99. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/Headers/Function.h +18 -0
  100. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/Info.plist +0 -0
  101. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/Modules/module.modulemap +6 -0
  102. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/PrivacyInfo.xcprivacy +36 -0
  103. package/Plugins/iOS/Function.xcframework/xros-arm64_x86_64-simulator/Function.framework/_CodeSignature/CodeResources +223 -0
  104. package/Plugins/iOS/Function.xcframework.meta +83 -0
  105. package/Plugins/iOS.meta +8 -0
  106. package/Plugins/macOS/Function.dylib +0 -0
  107. package/Plugins/macOS/Function.dylib.meta +82 -0
  108. package/Plugins/macOS.meta +8 -0
  109. package/Plugins.meta +8 -0
  110. package/README.md +79 -0
  111. package/README.md.meta +7 -0
  112. package/Runtime/API/DotNetClient.cs +106 -0
  113. package/Runtime/API/DotNetClient.cs.meta +11 -0
  114. package/Runtime/API/MunaClient.cs +96 -0
  115. package/Runtime/API/MunaClient.cs.meta +11 -0
  116. package/Runtime/API.meta +8 -0
  117. package/Runtime/Beta/BetaClient.cs +33 -0
  118. package/Runtime/Beta/BetaClient.cs.meta +11 -0
  119. package/Runtime/Beta/PredictionService.cs +32 -0
  120. package/Runtime/Beta/PredictionService.cs.meta +11 -0
  121. package/Runtime/Beta/RemoteAcceleration.cs +38 -0
  122. package/Runtime/Beta/RemoteAcceleration.cs.meta +11 -0
  123. package/Runtime/Beta/RemotePredictionService.cs +187 -0
  124. package/Runtime/Beta/RemotePredictionService.cs.meta +11 -0
  125. package/Runtime/Beta/Value.cs +92 -0
  126. package/Runtime/Beta/Value.cs.meta +11 -0
  127. package/Runtime/Beta.meta +8 -0
  128. package/Runtime/C/Configuration.cs +139 -0
  129. package/Runtime/C/Configuration.cs.meta +11 -0
  130. package/Runtime/C/Function.cs +294 -0
  131. package/Runtime/C/Function.cs.meta +11 -0
  132. package/Runtime/C/Prediction.cs +70 -0
  133. package/Runtime/C/Prediction.cs.meta +11 -0
  134. package/Runtime/C/PredictionStream.cs +36 -0
  135. package/Runtime/C/PredictionStream.cs.meta +11 -0
  136. package/Runtime/C/Predictor.cs +42 -0
  137. package/Runtime/C/Predictor.cs.meta +11 -0
  138. package/Runtime/C/Value.cs +194 -0
  139. package/Runtime/C/Value.cs.meta +11 -0
  140. package/Runtime/C/ValueMap.cs +50 -0
  141. package/Runtime/C/ValueMap.cs.meta +11 -0
  142. package/Runtime/C.meta +8 -0
  143. package/Runtime/Muna.Runtime.asmdef +27 -0
  144. package/Runtime/Muna.Runtime.asmdef.meta +7 -0
  145. package/Runtime/Muna.cs +109 -0
  146. package/Runtime/Muna.cs.meta +11 -0
  147. package/Runtime/Services/Prediction.cs +247 -0
  148. package/Runtime/Services/Prediction.cs.meta +11 -0
  149. package/Runtime/Services/Predictor.cs +44 -0
  150. package/Runtime/Services/Predictor.cs.meta +11 -0
  151. package/Runtime/Services/User.cs +43 -0
  152. package/Runtime/Services/User.cs.meta +11 -0
  153. package/Runtime/Services.meta +8 -0
  154. package/Runtime/Types/Dtype.cs +118 -0
  155. package/Runtime/Types/Dtype.cs.meta +11 -0
  156. package/Runtime/Types/Image.cs +93 -0
  157. package/Runtime/Types/Image.cs.meta +11 -0
  158. package/Runtime/Types/Prediction.cs +113 -0
  159. package/Runtime/Types/Prediction.cs.meta +11 -0
  160. package/Runtime/Types/Predictor.cs +193 -0
  161. package/Runtime/Types/Predictor.cs.meta +11 -0
  162. package/Runtime/Types/Tensor.cs +58 -0
  163. package/Runtime/Types/Tensor.cs.meta +11 -0
  164. package/Runtime/Types/User.cs +54 -0
  165. package/Runtime/Types/User.cs.meta +11 -0
  166. package/Runtime/Types.meta +8 -0
  167. package/Runtime.meta +8 -0
  168. package/Unity/API/PredictionCacheClient.cs +144 -0
  169. package/Unity/API/PredictionCacheClient.cs.meta +11 -0
  170. package/Unity/API/UnityClient.cs +147 -0
  171. package/Unity/API/UnityClient.cs.meta +11 -0
  172. package/Unity/API.meta +8 -0
  173. package/Unity/Internal/MunaSettings.cs +59 -0
  174. package/Unity/Internal/MunaSettings.cs.meta +11 -0
  175. package/Unity/Internal.meta +8 -0
  176. package/Unity/Muna.Unity.asmdef +29 -0
  177. package/Unity/Muna.Unity.asmdef.meta +7 -0
  178. package/Unity/MunaUnity.cs +130 -0
  179. package/Unity/MunaUnity.cs.meta +11 -0
  180. package/Unity/Types/CachedPrediction.cs +36 -0
  181. package/Unity/Types/CachedPrediction.cs.meta +11 -0
  182. package/Unity/Types.meta +8 -0
  183. package/Unity.meta +8 -0
  184. package/package.json +38 -0
  185. package/package.json.meta +7 -0
@@ -0,0 +1,147 @@
1
+ /*
2
+ * Muna
3
+ * Copyright © 2025 NatML Inc. All rights reserved.
4
+ */
5
+
6
+ #nullable enable
7
+
8
+ namespace Muna.API {
9
+
10
+ using System;
11
+ using System.Collections.Generic;
12
+ using System.IO;
13
+ using System.Text;
14
+ using System.Threading.Tasks;
15
+ using UnityEngine.Networking;
16
+ using Newtonsoft.Json;
17
+
18
+ /// <summary>
19
+ /// Muna API client for Unity Engine.
20
+ /// This uses Unity APIs for performing web requests.
21
+ /// </summary>
22
+ internal class UnityClient : MunaClient {
23
+
24
+ #region --Client API--
25
+ /// <summary>
26
+ /// Create the client.
27
+ /// </summary>
28
+ /// <param name="url">Muna API URL.</param>
29
+ /// <param name="accessKey">Muna access key.</param>
30
+ /// <param name="cache">Prediction cache.</param>
31
+ public UnityClient(
32
+ string url,
33
+ string? accessKey
34
+ ) : base(url.TrimEnd('/'), accessKey) { }
35
+
36
+ /// <summary>
37
+ /// Make a request to a REST endpoint.
38
+ /// </summary>
39
+ /// <typeparam name="T">Deserialized response type.</typeparam>
40
+ /// <param name="method">HTTP request method.</param>
41
+ /// <param name="path">Endpoint path.</param>
42
+ /// <param name="payload">Request body.</param>
43
+ /// <param name="headers">Request headers.</param>
44
+ /// <returns>Deserialized response.</returns>
45
+ public override async Task<T?> Request<T>(
46
+ string method,
47
+ string path,
48
+ Dictionary<string, object?>? payload = default,
49
+ Dictionary<string, string>? headers = default
50
+ ) where T : class {
51
+ // Create client
52
+ using var client = new UnityWebRequest($"{this.url}{path}", method) {
53
+ downloadHandler = new DownloadHandlerBuffer(),
54
+ disposeDownloadHandlerOnDispose = true,
55
+ disposeUploadHandlerOnDispose = true,
56
+ timeout = 20,
57
+ };
58
+ // Add headers
59
+ if (!string.IsNullOrEmpty(accessKey))
60
+ client.SetRequestHeader(@"Authorization", $"Bearer {accessKey}");
61
+ if (headers != null)
62
+ foreach (var header in headers)
63
+ client.SetRequestHeader(header.Key, header.Value);
64
+ // Add payload
65
+ if (payload != null) {
66
+ var serializationSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
67
+ var payloadStr = JsonConvert.SerializeObject(payload, serializationSettings);
68
+ client.SetRequestHeader(@"Content-Type", @"application/json");
69
+ client.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(payloadStr));
70
+ }
71
+ // Request
72
+ client.SendWebRequest();
73
+ while (!client.isDone)
74
+ await Task.Yield();
75
+ // Check error
76
+ var responseStr = client.downloadHandler.text;
77
+ if (client.responseCode == 0)
78
+ throw new MunaAPIException(
79
+ @"Failed to get response from server. Check that you have an internet connection.",
80
+ (int)client.responseCode
81
+ );
82
+ if (client.responseCode >= 400) {
83
+ var errorPayload = JsonConvert.DeserializeObject<ErrorResponse>(responseStr);
84
+ var error = errorPayload?.errors?[0]?.message ?? @"An unknown error occurred";
85
+ throw new MunaAPIException(error, (int)client.responseCode);
86
+ }
87
+ // Return
88
+ return JsonConvert.DeserializeObject<T>(responseStr)!;
89
+ }
90
+
91
+ /// <summary>
92
+ /// Download a file.
93
+ /// </summary>
94
+ /// <param name="url">URL</param>
95
+ public override async Task<Stream> Download(string url) {
96
+ using var request = UnityWebRequest.Get(url);
97
+ request.timeout = 20;
98
+ request.SendWebRequest();
99
+ while (!request.isDone)
100
+ await Task.Yield();
101
+ if (request.result != UnityWebRequest.Result.Success)
102
+ throw new InvalidOperationException(request.error);
103
+ var data = request.downloadHandler.data;
104
+ var stream = new MemoryStream(data, 0, data.Length, false, false);
105
+ return stream;
106
+ }
107
+
108
+ /// <summary>
109
+ /// Upload a data stream.
110
+ /// </summary>
111
+ /// <param name="stream">Data stream.</param>
112
+ /// <param name="url">Upload URL.</param>
113
+ /// <param name="mime">MIME type.</param>
114
+ public override async Task Upload(
115
+ Stream stream,
116
+ string url,
117
+ string? mime = null
118
+ ) {
119
+ using var client = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPUT) {
120
+ uploadHandler = new UploadHandlerRaw(ToArray(stream)),
121
+ downloadHandler = new DownloadHandlerBuffer(),
122
+ disposeDownloadHandlerOnDispose = true,
123
+ disposeUploadHandlerOnDispose = true,
124
+ timeout = 20,
125
+ };
126
+ client.SetRequestHeader(@"Content-Type", mime ?? @"application/octet-stream");
127
+ client.SendWebRequest();
128
+ while (!client.isDone)
129
+ await Task.Yield();
130
+ if (client.error != null)
131
+ throw new InvalidOperationException($"Failed to upload stream with error: {client.error}");
132
+ }
133
+ #endregion
134
+
135
+
136
+ #region --Operations--
137
+
138
+ private static byte[] ToArray(Stream stream) {
139
+ if (stream is MemoryStream memoryStream)
140
+ return memoryStream.ToArray();
141
+ using var dstStream = new MemoryStream();
142
+ stream.CopyTo(dstStream);
143
+ return dstStream.ToArray();
144
+ }
145
+ #endregion
146
+ }
147
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 56b5bcef04f804eefb5e901afa18a64d
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
package/Unity/API.meta ADDED
@@ -0,0 +1,8 @@
1
+ fileFormatVersion: 2
2
+ guid: 05f2ba3e249fe4d86ac2aec7eb253344
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -0,0 +1,59 @@
1
+ /*
2
+ * Muna
3
+ * Copyright © 2025 NatML Inc. All rights reserved.
4
+ */
5
+
6
+ #nullable enable
7
+
8
+ namespace Muna.Internal {
9
+
10
+ using System.Collections.Generic;
11
+ using UnityEngine;
12
+
13
+ /// <summary>
14
+ /// Muna settings for the current Unity project.
15
+ /// </summary>
16
+ [DefaultExecutionOrder(int.MinValue)]
17
+ internal sealed class MunaSettings : ScriptableObject {
18
+
19
+ #region --Client API--
20
+ /// <summary>
21
+ /// Project-wide access key.
22
+ /// </summary>
23
+ [field: SerializeField, HideInInspector]
24
+ public string accessKey { get; private set; } = string.Empty;
25
+
26
+ /// <summary>
27
+ /// Predictor cache.
28
+ /// </summary>
29
+ [field: SerializeField, HideInInspector]
30
+ public List<CachedPrediction> cache { get; internal set; } = new();
31
+
32
+ /// <summary>
33
+ /// Settings instance for this project.
34
+ /// </summary>
35
+ #pragma warning disable 8618
36
+ public static MunaSettings Instance;
37
+ #pragma warning restore 8618
38
+
39
+ /// <summary>
40
+ /// Create Muna settings.
41
+ /// </summary>
42
+ /// <param name="accessKey">Muna access key.</param>
43
+ public static MunaSettings Create(string accessKey) {
44
+ var settings = CreateInstance<MunaSettings>();
45
+ settings.accessKey = accessKey;
46
+ return settings;
47
+ }
48
+ #endregion
49
+
50
+
51
+ #region --Operations--
52
+
53
+ private void Awake() {
54
+ if (!Application.isEditor)
55
+ Instance = this;
56
+ }
57
+ #endregion
58
+ }
59
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 0abb4e27b1a574365885eb6b5c5a5f67
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,8 @@
1
+ fileFormatVersion: 2
2
+ guid: 53ed2cc7d436944269463ae403c509f8
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "Muna.Unity",
3
+ "rootNamespace": "",
4
+ "references": [
5
+ "Muna.Runtime"
6
+ ],
7
+ "includePlatforms": [
8
+ "Android",
9
+ "Editor",
10
+ "EmbeddedLinux",
11
+ "iOS",
12
+ "LinuxStandalone64",
13
+ "CloudRendering",
14
+ "macOSStandalone",
15
+ "VisionOS",
16
+ "WebGL",
17
+ "WindowsStandalone64"
18
+ ],
19
+ "excludePlatforms": [],
20
+ "allowUnsafeCode": true,
21
+ "overrideReferences": true,
22
+ "precompiledReferences": [
23
+ "Newtonsoft.Json.dll"
24
+ ],
25
+ "autoReferenced": true,
26
+ "defineConstraints": [],
27
+ "versionDefines": [],
28
+ "noEngineReferences": false
29
+ }
@@ -0,0 +1,7 @@
1
+ fileFormatVersion: 2
2
+ guid: 7a346b965c6044600831104d454f53e8
3
+ AssemblyDefinitionImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant:
@@ -0,0 +1,130 @@
1
+ /*
2
+ * Muna
3
+ * Copyright © 2025 NatML Inc. All rights reserved.
4
+ */
5
+
6
+ #nullable enable
7
+
8
+ using System.Reflection;
9
+ using System.Runtime.CompilerServices;
10
+
11
+ [assembly: AssemblyCompany(@"NatML Inc")]
12
+ [assembly: AssemblyTitle(@"Muna.Unity")]
13
+ [assembly: AssemblyVersion(Muna.Muna.Version)]
14
+ [assembly: AssemblyCopyright(@"Copyright © 2025 NatML Inc. All Rights Reserved.")]
15
+ [assembly: InternalsVisibleTo(@"Muna.Editor")]
16
+ [assembly: InternalsVisibleTo(@"Muna.Tests.Editor")]
17
+ [assembly: InternalsVisibleTo(@"Muna.Tests.Runtime")]
18
+
19
+ namespace Muna {
20
+
21
+ using System;
22
+ using System.Collections.Generic;
23
+ using UnityEngine;
24
+ using Unity.Collections.LowLevel.Unsafe;
25
+ using API;
26
+ using Internal;
27
+
28
+ /// <summary>
29
+ /// Utilities for working with Unity.
30
+ /// </summary>
31
+ public static class MunaUnity {
32
+
33
+ #region --Client API--
34
+ /// <summary>
35
+ /// Create a Muna client for Unity.
36
+ /// </summary>
37
+ /// <param name="accessKey">Muna access key. This defaults to your access key in Project Settings.</param>
38
+ /// <param name="url">Muna API URL.</param>
39
+ /// <param name="cachePath">Predictor cache path.</param>
40
+ /// <returns>Muna client.</returns>
41
+ public static Muna Create(
42
+ string? accessKey = null,
43
+ string? url = null
44
+ ) {
45
+ var settings = MunaSettings.Instance!;
46
+ var client = new PredictionCacheClient(
47
+ url ?? Muna.URL,
48
+ accessKey: accessKey ?? settings?.accessKey,
49
+ cache: settings?.cache
50
+ );
51
+ return new Muna(client);
52
+ }
53
+
54
+ /// <summary>
55
+ /// Convert a texture to an image.
56
+ /// NOTE: The texture format must be `R8`, `Alpha8`, `RGB24`, or `RGBA32`.
57
+ /// </summary>
58
+ /// <param name="texture">Input texture.</param>
59
+ /// <param name="pixelBuffer">Pixel buffer to store image data. Use this to prevent allocations.</param>
60
+ /// <returns>Image.</returns>
61
+ public static unsafe Image ToImage(
62
+ this Texture2D texture,
63
+ byte[]? pixelBuffer = null
64
+ ) {
65
+ if (texture == null)
66
+ throw new ArgumentNullException(nameof(texture));
67
+ if (!texture.isReadable)
68
+ throw new InvalidOperationException(@"Texture cannot be converted to a Muna image because it is not readable");
69
+ var FormatChannelMap = new Dictionary<TextureFormat, int> {
70
+ [TextureFormat.R8] = 1,
71
+ [TextureFormat.Alpha8] = 1,
72
+ [TextureFormat.RGB24] = 3,
73
+ [TextureFormat.RGBA32] = 4,
74
+ };
75
+ if (!FormatChannelMap.TryGetValue(texture.format, out var channels))
76
+ throw new InvalidOperationException($"Texture cannot be converted to a Muna image because it has unsupported format: {texture.format}");
77
+ var rowStride = texture.width * channels;
78
+ var bufferSize = rowStride * texture.height;
79
+ pixelBuffer ??= new byte[bufferSize];
80
+ if (pixelBuffer.Length < bufferSize)
81
+ throw new InvalidOperationException($"Texture cannot be converted to a Muna image because pixel buffer length was expected to be greater than or equal to {bufferSize} but got {pixelBuffer.Length}");
82
+ fixed (void* dst = pixelBuffer)
83
+ UnsafeUtility.MemCpyStride(
84
+ dst,
85
+ rowStride,
86
+ (byte*)texture.GetRawTextureData<byte>().GetUnsafePtr() + (rowStride * (texture.height - 1)),
87
+ -rowStride,
88
+ rowStride,
89
+ texture.height
90
+ );
91
+ var image = new Image(pixelBuffer, texture.width, texture.height, channels);
92
+ return image;
93
+ }
94
+
95
+ /// <summary>
96
+ /// Convert an image to a texture.
97
+ /// </summary>
98
+ /// <param name="value">Image.</param>
99
+ /// <param name="texture">Optional destination texture.</param>
100
+ /// <returns>Texture.</returns>
101
+ public static unsafe Texture2D ToTexture(
102
+ this Image image,
103
+ Texture2D? texture = null
104
+ ) {
105
+ var ChannelFormatMap = new Dictionary<int, TextureFormat> {
106
+ [1] = TextureFormat.Alpha8,
107
+ [3] = TextureFormat.RGB24,
108
+ [4] = TextureFormat.RGBA32
109
+ };
110
+ if (!ChannelFormatMap.TryGetValue(image.channels, out var format))
111
+ throw new InvalidOperationException($"Image cannot be converted to a Texture2D because it has unsupported channel count: {image.channels}");
112
+ texture = texture != null ? texture : new Texture2D(image.width, image.height, format, false);
113
+ if (texture.width != image.width || texture.height != image.height || texture.format != format)
114
+ texture.Reinitialize(image.width, image.height, format, false);
115
+ var rowStride = image.width * image.channels;
116
+ fixed (byte* srcData = image)
117
+ UnsafeUtility.MemCpyStride(
118
+ texture.GetRawTextureData<byte>().GetUnsafePtr(),
119
+ rowStride,
120
+ srcData + (rowStride * (image.height - 1)),
121
+ -rowStride,
122
+ rowStride,
123
+ image.height
124
+ );
125
+ texture.Apply();
126
+ return texture;
127
+ }
128
+ #endregion
129
+ }
130
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 68ef5490f6a0e4552b91b76387cee3c0
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,36 @@
1
+ /*
2
+ * Muna
3
+ * Copyright © 2025 NatML Inc. All rights reserved.
4
+ */
5
+
6
+ #nullable enable
7
+
8
+ namespace Muna {
9
+
10
+ using System;
11
+
12
+ /// <summary>
13
+ /// Cached prediction.
14
+ /// </summary>
15
+ [Preserve, Serializable]
16
+ internal class CachedPrediction : Prediction {
17
+
18
+ public string? clientId;
19
+
20
+ [Preserve]
21
+ public CachedPrediction() { }
22
+
23
+ public CachedPrediction(Prediction prediction, string clientId) {
24
+ this.id = prediction.id;
25
+ this.tag = prediction.tag;
26
+ this.created = prediction.created;
27
+ this.results = prediction.results;
28
+ this.latency = prediction.latency;
29
+ this.error = prediction.error;
30
+ this.logs = prediction.logs;
31
+ this.resources = prediction.resources;
32
+ this.configuration = prediction.configuration;
33
+ this.clientId = clientId;
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 7b5e913e3117a442abc1345c156f136d
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,8 @@
1
+ fileFormatVersion: 2
2
+ guid: 0c449c8b8a355457aa40b183e847e588
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
package/Unity.meta ADDED
@@ -0,0 +1,8 @@
1
+ fileFormatVersion: 2
2
+ guid: 0b6dfb363434245eb81b213967eba75d
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "ai.muna.muna",
3
+ "version": "0.0.42",
4
+ "displayName": "Muna",
5
+ "description": "Run AI inference in Unity Engine.",
6
+ "unity": "2022.3",
7
+ "dependencies": {
8
+ "com.unity.nuget.newtonsoft-json": "3.2.1"
9
+ },
10
+ "keywords": [
11
+ "fxn",
12
+ "natml",
13
+ "machine learning",
14
+ "ml",
15
+ "aritificial intelligence",
16
+ "ai",
17
+ "computer vision",
18
+ "opencv",
19
+ "android",
20
+ "ios",
21
+ "macos",
22
+ "windows",
23
+ "coreml",
24
+ "nnapi",
25
+ "directml",
26
+ "tensorflow",
27
+ "pytorch",
28
+ "torch",
29
+ "llm"
30
+ ],
31
+ "author": {
32
+ "name": "NatML Inc",
33
+ "email": "hi@muna.ai",
34
+ "url": "https://github.com/muna-ai"
35
+ },
36
+ "license": "Apache-2.0",
37
+ "repository": "github:muna-ai/muna-unity"
38
+ }
@@ -0,0 +1,7 @@
1
+ fileFormatVersion: 2
2
+ guid: bc5c081aa390c4293a55ef9ba8b3e9b6
3
+ PackageManifestImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant: