openvibers/openvibe.cam Commits
AI text may describe people; only sex acts and porn stay gated (#21)
Changes
@@@ -34,7 +34,7 @@ must come from `openvibe.cam` (Sec-Fetch-Site same-origin, or an Origin equal topair a camera, grant a viewer, revoke a grant or upload a photo. The `/internal/events` account route is loopbackonly and refuses a proxied request; nginx answers 404 for `/internal` and `/metrics`.--There is no face recognition, no nudity or violence classifier, no AI call and no recording in v1. The camera is++There is no stranger search and no nudity or violence classifier, no AI call and no recording in v1. The camera issame-origin only (`Permissions-Policy: camera=(self), microphone=()`), and the filter runs in the browser.## Supported versionsnnew file mode 100644@@@ -0,0 +1,18 @@++'use strict';++// Owner, 2026-10-31: AI may describe people; only sex acts and porn stay gated. No server file may call the old++// looks filter again.++const assert = require('assert');++const fs = require('fs');++const path = require('path');++++const root = path.join(__dirname, '..');++const offenders = [];++(function walk(dir) {++ for (const e of fs.readdirSync(dir, { withFileTypes: true })) {++ const p = path.join(dir, e.name);++ if (e.isDirectory()) walk(p);++ else if (e.name.endsWith('.js') && /\b(noLooks|noLooksTags|hasLooks)\s*\(|openvibe-sdk\/no-looks/.test(fs.readFileSync(p, 'utf8'))) offenders.push(path.relative(root, p));++ }++})(path.join(root, 'server'));++assert.deepStrictEqual(offenders, [], 'no looks filter in server/');++console.log('No looks filter: AI text describes people as written.');
@@ -34,7 +34,7 @@ must come from `openvibe.cam` (Sec-Fetch-Site same-origin, or an Origin equal to
@@ -34,7 +34,7 @@ must come from `openvibe.cam` (Sec-Fetch-Site same-origin, or an Origin equal to
pair a camera, grant a viewer, revoke a grant or upload a photo. The `/internal/events` account route is loopback
pair a camera, grant a viewer, revoke a grant or upload a photo. The `/internal/events` account route is loopback
only and refuses a proxied request; nginx answers 404 for `/internal` and `/metrics`.
only and refuses a proxied request; nginx answers 404 for `/internal` and `/metrics`.
-There is no face recognition, no nudity or violence classifier, no AI call and no recording in v1. The camera is
+There is no stranger search and no nudity or violence classifier, no AI call and no recording in v1. The camera is
same-origin only (`Permissions-Policy: camera=(self), microphone=()`), and the filter runs in the browser.
same-origin only (`Permissions-Policy: camera=(self), microphone=()`), and the filter runs in the browser.
## Supported versions
## Supported versions
new file mode 100644
new file mode 100644
@@ -0,0 +1,18 @@
@@ -0,0 +1,18 @@
+'use strict';
+// Owner, 2026-10-31: AI may describe people; only sex acts and porn stay gated. No server file may call the old
+// looks filter again.
+const assert = require('assert');
+const fs = require('fs');
+const path = require('path');
+
+const root = path.join(__dirname, '..');
+const offenders = [];
+(function walk(dir) {
+ for (const e of fs.readdirSync(dir, { withFileTypes: true })) {
+ const p = path.join(dir, e.name);
+ if (e.isDirectory()) walk(p);
+ else if (e.name.endsWith('.js') && /\b(noLooks|noLooksTags|hasLooks)\s*\(|openvibe-sdk\/no-looks/.test(fs.readFileSync(p, 'utf8'))) offenders.push(path.relative(root, p));
+ }
+})(path.join(root, 'server'));
+assert.deepStrictEqual(offenders, [], 'no looks filter in server/');
+console.log('No looks filter: AI text describes people as written.');