chart-vision — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited chart-vision (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Unified skill covering the entire chart image pipeline in one place:
chart-vision-renderer → render OHLCV to PNG
chart-image-preprocessor → clean, denoise, extract ROI
chart-pattern-vision → detect candle + chart patterns from image
trendline-sr-vision → detect S/R and trendlines from image
chart-pattern-scanner → detect patterns from price data (no image needed)
chart-annotation-overlay → draw everything back onto chart ← final step| File | Contents |
|---|---|
references/rendering.md | Chart renderer: mplfinance + matplotlib, indicators, dark/light themes |
references/preprocessing.md | Image preprocessing: denoise, ROI extract, grid removal, contrast, color analysis |
references/pattern-vision.md | CV candlestick detection + classical chart pattern detection from images |
references/trendline-sr.md | Hough transforms, LSD, horizontal projection, S/R clustering, channels |
references/scanner-and-annotation.md | Price-data pattern scanner (swing-based) + annotation overlay drawing engine |
import mplfinance as mpf
import pandas as pd
df = pd.read_csv("ohlcv.csv", index_col="date", parse_dates=True)
mpf.plot(df, type="candle", style="charles", volume=True,
mav=(20, 50), savefig="chart.png", figsize=(14, 8))import cv2
import numpy as np
img = cv2.imread("screenshot.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Remove grid lines
denoised = cv2.fastNlMeansDenoising(gray, h=15)
# Enhance edges for pattern detection
edges = cv2.Canny(denoised, 50, 150)
# Extract ROI (crop to chart area)
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
largest = max(contours, key=cv2.contourArea)
x, y, w, h = cv2.boundingRect(largest)
chart_roi = img[y:y+h, x:x+w]from scipy.signal import find_peaks
# Project pixel intensities horizontally to find price levels
projection = np.mean(gray, axis=1)
peaks, props = find_peaks(-projection, distance=20, prominence=10)
sr_levels = peaks # pixel y-coordinates of S/R lines
# Draw detected levels
for level in sr_levels:
cv2.line(img, (0, level), (img.shape[1], level), (0, 255, 0), 1)from PIL import Image, ImageDraw, ImageFont
img = Image.open("chart.png")
draw = ImageDraw.Draw(img)
font = ImageFont.truetype("arial.ttf", 14)
# Draw buy signal
draw.text((entry_x, entry_y - 20), "BUY", fill="green", font=font)
draw.rectangle([sl_x-2, sl_y-2, sl_x+2, sl_y+2], fill="red")
draw.text((sl_x + 5, sl_y), f"SL: {sl_price:.5f}", fill="red", font=font)
draw.text((tp_x + 5, tp_y), f"TP: {tp_price:.5f}", fill="green", font=font)
img.save("annotated_chart.png")~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.