Sythos Canvas QR profile¶
The runtime ID frameqr names the Sythos Canvas QR profile. It is a
deliberately scoped Sythos profile built on QR Code Model 2. It is not a
native DENSO FrameQR implementation, does not claim DENSO interoperability and
is not certified by DENSO.
Compatibility boundary¶
The profile identity is sythos-canvas-qr/1 and its structural contract is:
| Property | Current profile |
|---|---|
| Base symbology | QR Code Model 2 |
| Error correction | QR H, forced by the profile |
| Certified | No |
| DENSO FrameQR compatible | No |
| Canvas shapes | square, circle, diamond |
| Canvas rotation | 0, 90, 180 or 270 degrees |
| QR version | 1–40, automatic or forced |
The encoder reserves a bounded group of QR data modules, clears them for the canvas artwork and checks the worst-case codeword damage per Reed–Solomon block. It rejects a canvas that overlaps QR function modules or exceeds the correction budget. This makes the profile deterministic and testable without pretending that a proprietary format has been re-created.
Encoding¶
The frameqr subpath exposes a QR-like API with a canvas option:
import {
decodeFrameQR,
encodeFrameQR,
} from '@sythos/js_barcode_universal/frameqr';
const matrix = encodeFrameQR('https://www.sythos.net/', {
canvas: {
shape: 'circle',
size: 5,
centerX: 20,
centerY: 20,
angle: 90,
},
});
const result = decodeFrameQR(matrix);
console.log(result.text, matrix.frameqr.profile);
The ecc option is fixed to H; passing another level is rejected. The other
QR-level options include version, mask, charset and kanji. Canvas
dimensions are module units and are normalized to odd dimensions so the centre
is unambiguous. The profile limits the centre away from the finder-pattern
boundary and keeps the canvas inside the symbol.
Artwork is an application concern¶
The SDK returns a module matrix and profile metadata. It does not fetch or embed an image asset for you. A browser application can composite its own artwork into a safe canvas after rendering, but it should keep the profile geometry and error-correction budget intact. The repository’s create example uses a remote Sythos favicon as an optional preview source and does not ship a copied graphic asset.
If a remote image is blocked by CORS or fails to load, keep the QR payload and render a plain profile symbol. Artwork is decoration; it must never be allowed to turn an otherwise invalid symbol into a claimed successful decode.
Reading and metadata¶
The profile keeps the ordinary QR payload decoder underneath. A normal QR matrix must not be silently relabelled as a Canvas QR symbol. The decoder uses the profile marker and validated canvas metadata; an unmarked matrix requires an explicit trusted opt-in from a caller that has already verified the profile.
import { decode } from '@sythos/js_barcode_universal';
const results = decode(imageDataLike, {
formats: ['frameqr'],
profile: 'camera',
});
if (results[0]) {
console.log(results[0].format, results[0].text);
}
The image path is validated on clean profile rasters and follows the supported fixed camera orientation policy. It is not a promise of arbitrary perspective, curved media, severe occlusion or native DENSO FrameQR reading.
Do not use this page as a DENSO implementation guide¶
DENSO SQRC, Face Authentication SQRC and native DENSO FrameQR are outside this MIT SDK. A user with the appropriate DENSO licence may adapt generic QR, Reed–Solomon, rendering and image-processing routines for a licensed integration, but that adaptation is governed by the applicable DENSO terms. This repository does not grant or replace that licence.
The project’s compatibility boundary and consultation record are in
PLAN.md, NOTICE.md,
LICENSE and licenses/frameqr.license.