Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ edition = "2021"
rust-version = "1.96"
license = "MIT OR Apache-2.0"
repository = "https://github.com/frames-sg/j2k"
homepage = "https://github.com/frames-sg/j2k"
homepage = "https://frames-sg.github.io/j2k/rust-jpeg2000-codec/"
keywords = ["jpeg", "jpeg2000", "htj2k", "gpu", "transcode"]
categories = ["multimedia::images", "multimedia::encoding", "compression"]

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# J2K
# J2K — Pure-Rust JPEG 2000 and HTJ2K Codec

[![crates.io](https://img.shields.io/crates/v/j2k.svg)](https://crates.io/crates/j2k)
[![docs.rs](https://img.shields.io/docsrs/j2k)](https://docs.rs/j2k)
[![CI](https://github.com/frames-sg/j2k/actions/workflows/ci.yml/badge.svg)](https://github.com/frames-sg/j2k/actions/workflows/ci.yml)
[![downloads](https://img.shields.io/crates/d/j2k.svg)](https://crates.io/crates/j2k)
[![license](https://img.shields.io/crates/l/j2k.svg)](#license)

**Docs & guides:** <https://frames-sg.github.io/j2k/>
**Docs & guides:** [Pure-Rust JPEG 2000 codec documentation](https://frames-sg.github.io/j2k/rust-jpeg2000-codec/)

**Release status:** `0.7.3` is published and security-supported. See the
[release notes](CHANGELOG.md) and [release policy](docs/release.md).
Expand Down
3 changes: 2 additions & 1 deletion crates/j2k/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
[package]
name = "j2k"
description = "Safe public JPEG 2000 and HTJ2K CPU codec APIs with optional CUDA and Metal adapters"
description = "Pure-Rust JPEG 2000 and HTJ2K codec APIs with optional CUDA and Metal adapters"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
keywords.workspace = true
categories.workspace = true
readme = "README.md"
Expand Down
3 changes: 2 additions & 1 deletion crates/j2k/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# j2k
# j2k — Pure-Rust JPEG 2000 and HTJ2K Codec

JPEG 2000 Part 1 and HTJ2K Part 15 public CPU codec facade for J2K.

Expand Down Expand Up @@ -38,5 +38,6 @@ callers that need fail-closed validation should construct native images with
## Links

- API docs: <https://docs.rs/j2k>
- [Pure-Rust JPEG 2000 codec documentation](https://frames-sg.github.io/j2k/rust-jpeg2000-codec/)
- Repository: <https://github.com/frames-sg/j2k>
- Support policy: <https://github.com/frames-sg/j2k/blob/main/docs/public-support.md>
2 changes: 1 addition & 1 deletion crates/j2k/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: MIT OR Apache-2.0

//! Public JPEG 2000 Part 1 and HTJ2K Part 15 CPU codec facade.
//! Pure-Rust JPEG 2000 Part 1 and HTJ2K Part 15 codec APIs.
//!
//! This crate provides inspection, decode, encode, lossless J2K-to-HTJ2K
//! recoding, still-image container wrapping, and device-decode planning. Shared
Expand Down
14 changes: 7 additions & 7 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>J2K: Rust JPEG 2000 / HTJ2K Codec</title>
<title>J2K Codec Project — Documentation and Packages</title>
<meta name="description" content="J2K provides safe public Rust APIs for JPEG 2000 Part 1 / HTJ2K Part 15, with audited unsafe implementation boundaries, JP2/JPH wrappers, and optional CUDA and Apple Metal adapters.">
<link rel="canonical" href="https://frames-sg.github.io/j2k/">
<meta property="og:title" content="J2K: Rust JPEG 2000 / HTJ2K Codec">
<meta property="og:title" content="J2K Codec Project — Documentation and Packages">
<meta property="og:description" content="Safe public Rust JPEG 2000 Part 1 and HTJ2K Part 15 APIs with audited unsafe implementation boundaries and optional CUDA and Apple Metal adapters.">
<meta property="og:url" content="https://frames-sg.github.io/j2k/">
<meta property="og:type" content="website">
<meta property="og:image" content="https://frames-sg.github.io/j2k/assets/og-card.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="J2K: Rust JPEG 2000 / HTJ2K Codec">
<meta name="twitter:title" content="J2K Codec Project — Documentation and Packages">
<meta name="twitter:description" content="Safe public Rust JPEG 2000 / HTJ2K APIs with audited unsafe implementation boundaries and optional CUDA and Apple Metal adapters.">
<meta name="twitter:image" content="https://frames-sg.github.io/j2k/assets/og-card.png">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
Expand All @@ -25,7 +25,7 @@
"@context": "https://schema.org",
"@type": "SoftwareSourceCode",
"name": "J2K",
"headline": "J2K: Rust JPEG 2000 / HTJ2K Codec",
"headline": "J2K Codec Project — Documentation and Packages",
"codeRepository": "https://github.com/frames-sg/j2k",
"programmingLanguage": "Rust",
"license": "https://www.apache.org/licenses/LICENSE-2.0",
Expand All @@ -39,7 +39,7 @@
<div class="bar">
<a class="brand" href="./">J2K</a>
<nav class="nav" aria-label="Primary">
<a href="rust-jpeg2000-codec/">Rust JPEG 2000</a>
<a href="rust-jpeg2000-codec/">Pure-Rust JPEG 2000 Codec</a>
<a href="gpu-jpeg2000-rust/">GPU Backends</a>
<a href="cuda-jpeg2000-rust/">CUDA</a>
<a href="metal-jpeg2000-rust/">Metal</a>
Expand All @@ -52,7 +52,7 @@
<section class="hero docs-hero">
<div class="wrap narrow">
<p class="eyebrow">Project documentation</p>
<h1>J2K: Rust JPEG 2000 / HTJ2K Codec</h1>
<h1>J2K Codec Project</h1>
<p class="lead">Safe public Rust APIs for JPEG 2000 Part 1 and HTJ2K Part 15 inspection, decode, encode, recode, and coefficient-domain JPEG-to-HTJ2K transcode workflows. CPU is the correctness baseline; CUDA and Apple Metal adapters accelerate supported paths without becoming the public API.</p>
<div class="actions">
<a class="button primary" href="https://crates.io/crates/j2k">crates.io</a>
Expand Down Expand Up @@ -173,7 +173,7 @@ <h2>Package map</h2>
<div>
<h2>Topic pages</h2>
<ul class="link-list">
<li><a href="rust-jpeg2000-codec/">Rust JPEG 2000 Codec</a><span>Part 1 decode, encode, JP2/J2K codestreams, and crate selection.</span></li>
<li><a href="rust-jpeg2000-codec/">Pure-Rust JPEG 2000 Codec</a><span>Part 1 decode, encode, JP2/J2K codestreams, and crate selection.</span></li>
<li><a href="gpu-jpeg2000-rust/">GPU Backends</a><span>Backend behavior, CPU fallback, CUDA, Metal, and strict device requests.</span></li>
<li><a href="cuda-jpeg2000-rust/">CUDA JPEG2000 Rust</a><span>NVIDIA adapter crates and runtime feature boundaries.</span></li>
<li><a href="metal-jpeg2000-rust/">Metal JPEG2000 Rust</a><span>Apple Metal adapter crates for macOS GPU-backed paths.</span></li>
Expand Down
20 changes: 10 additions & 10 deletions docs/rust-jpeg2000-codec/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,28 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Safe Public Rust JPEG 2000 APIs - J2K</title>
<meta name="description" content="J2K provides safe public Rust JPEG 2000 Part 1 APIs with audited unsafe implementation boundaries for J2K/J2C codestreams, JP2 still-image files, HTJ2K/JPH workflows, decode, encode, and recode.">
<title>Pure-Rust JPEG 2000 Codec — J2K</title>
<meta name="description" content="J2K is a pure-Rust JPEG 2000 and HTJ2K codec with safe APIs for J2K/J2C codestreams, JP2/JPH files, decode, encode, recode, CUDA, and Apple Metal.">
<link rel="canonical" href="https://frames-sg.github.io/j2k/rust-jpeg2000-codec/">
<meta property="og:title" content="Safe Public Rust JPEG 2000 APIs">
<meta property="og:description" content="J2K provides safe public Rust JPEG 2000 Part 1 APIs with audited unsafe implementation boundaries for codestream and still-image workflows.">
<meta property="og:title" content="Pure-Rust JPEG 2000 Codec — J2K">
<meta property="og:description" content="Pure-Rust JPEG 2000 and HTJ2K codec APIs for codestream and still-image workflows.">
<meta property="og:url" content="https://frames-sg.github.io/j2k/rust-jpeg2000-codec/">
<meta property="og:type" content="article">
<meta property="og:image" content="https://frames-sg.github.io/j2k/assets/og-card.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Safe Public Rust JPEG 2000 APIs">
<meta name="twitter:description" content="J2K provides safe public Rust JPEG 2000 Part 1 APIs with audited unsafe implementation boundaries.">
<meta name="twitter:title" content="Pure-Rust JPEG 2000 Codec — J2K">
<meta name="twitter:description" content="Pure-Rust JPEG 2000 and HTJ2K codec APIs for codestream and still-image workflows.">
<meta name="twitter:image" content="https://frames-sg.github.io/j2k/assets/og-card.png">
<link rel="icon" href="../assets/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="../assets/apple-touch-icon.png">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "Safe Public Rust JPEG 2000 APIs",
"description": "J2K provides safe public Rust JPEG 2000 Part 1 APIs with audited unsafe implementation boundaries for J2K/J2C codestreams, JP2 still-image files, HTJ2K/JPH workflows, decode, encode, and recode.",
"headline": "Pure-Rust JPEG 2000 Codec — J2K",
"description": "J2K is a pure-Rust JPEG 2000 and HTJ2K codec with safe APIs for J2K/J2C codestreams, JP2/JPH files, decode, encode, and recode.",
"url": "https://frames-sg.github.io/j2k/rust-jpeg2000-codec/",
"isPartOf": { "@type": "SoftwareSourceCode", "name": "J2K", "codeRepository": "https://github.com/frames-sg/j2k", "programmingLanguage": "Rust" }
}
Expand All @@ -48,8 +48,8 @@
<div class="wrap hero-grid">
<div>
<p class="eyebrow">Rust JPEG 2000 codec</p>
<h1>Safe Public Rust JPEG 2000 APIs</h1>
<p class="lead">Use <code>j2k</code> for safe public JPEG 2000 Part 1 application APIs in Rust: inspect, decode, encode, recode, JP2 still-image containers, J2K/J2C codestreams, and HTJ2K/JPH paths. Audited unsafe code remains isolated at documented implementation boundaries.</p>
<h1>Pure-Rust JPEG 2000 Codec</h1>
<p class="lead">Use <code>j2k</code> as a pure-Rust JPEG 2000 and HTJ2K codec: inspect, decode, encode, recode, handle JP2/JPH still-image containers, and process J2K/J2C codestreams through safe public APIs. Audited unsafe code remains isolated at documented implementation boundaries.</p>
<div class="actions">
<a class="button primary" href="https://crates.io/crates/j2k">cargo add j2k</a>
<a class="button" href="https://docs.rs/j2k">API docs</a>
Expand Down
4 changes: 2 additions & 2 deletions docs/sitemap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://frames-sg.github.io/j2k/</loc>
<priority>1.0</priority>
<priority>0.8</priority>
</url>
<url>
<loc>https://frames-sg.github.io/j2k/rust-jpeg2000-codec/</loc>
<priority>0.9</priority>
<priority>1.0</priority>
</url>
<url>
<loc>https://frames-sg.github.io/j2k/gpu-jpeg2000-rust/</loc>
Expand Down
34 changes: 34 additions & 0 deletions xtask/tests/repo_lint_support/public_docs_policy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -834,3 +834,37 @@ fn packaged_rust_sources_do_not_include_files_outside_their_crate() {
"package source include paths must stay inside their crate so packaged tests/benches/examples are not dead: {escaping:?}"
);
}

#[test]
fn public_search_metadata_routes_generic_queries_to_one_landing_page() {
let root = repo_root();
let read = |relative: &str| {
let path = root.join(relative);
fs::read_to_string(&path).unwrap_or_else(|err| panic!("read {}: {err}", path.display()))
};

let root_readme = read("README.md");
let workspace_manifest = read("Cargo.toml");
let crate_manifest = read("crates/j2k/Cargo.toml");
let crate_readme = read("crates/j2k/README.md");
let crate_lib = read("crates/j2k/src/lib.rs");
let home = read("docs/index.html");
let landing = read("docs/rust-jpeg2000-codec/index.html");
let sitemap = read("docs/sitemap.xml");

assert!(root_readme.starts_with("# J2K — Pure-Rust JPEG 2000 and HTJ2K Codec\n"));
assert!(root_readme.contains("[Pure-Rust JPEG 2000 codec documentation](https://frames-sg.github.io/j2k/rust-jpeg2000-codec/)"));
assert!(workspace_manifest
.contains("homepage = \"https://frames-sg.github.io/j2k/rust-jpeg2000-codec/\""));
assert!(crate_manifest.contains("description = \"Pure-Rust JPEG 2000"));
assert!(crate_manifest.contains("homepage.workspace = true"));
assert!(crate_readme.contains("[Pure-Rust JPEG 2000 codec documentation](https://frames-sg.github.io/j2k/rust-jpeg2000-codec/)"));
assert!(crate_lib.contains("//! Pure-Rust JPEG 2000"));
assert!(landing.contains("<title>Pure-Rust JPEG 2000 Codec — J2K</title>"));
assert!(landing.contains("<h1>Pure-Rust JPEG 2000 Codec</h1>"));
assert!(landing.contains(
"<link rel=\"canonical\" href=\"https://frames-sg.github.io/j2k/rust-jpeg2000-codec/\">"
));
assert!(!home.contains("<title>J2K: Rust JPEG 2000 / HTJ2K Codec</title>"));
assert!(sitemap.contains("<loc>https://frames-sg.github.io/j2k/rust-jpeg2000-codec/</loc>\n <priority>1.0</priority>"));
}
Loading