Standalone Engine

Gap-driven video and simulation engine

Root Next.js app with local SQLite persistence, local asset output, replaceable queue/storage/AI seams, and v1 API routes based on the payload spec.

SQLite localpubsub queuelocal assets
Total Jobs
330
Queued
2
Rendering
0
Complete
184
Failed
144

Recent Jobs

JobStatusTopicRenderer
anim-job-987507be-1fb6...queuedNewton Second Law in Non-Inertial Frameshtml_three_js_local
View Request / Response Details
Request Payload
{
  "gap": {
    "topic": "newton-second-law-non-inertial",
    "severity": "dangerous",
    "error_type": "wrong_assumption",
    "memory_state": "fragile",
    "display_topic": "Newton Second Law in Non-Inertial Frames",
    "common_wrong_answer": "Applied F=ma in an accelerating frame without pseudo force",
    "confidence_at_error": "high",
    "correct_understanding": "In non-inertial frames, include a pseudo force opposite to the frame acceleration."
  },
  "target": {
    "style": "auto",
    "render": {
      "fps": 30,
      "format": "mp4",
      "resolution": "1920x1080",
      "include_thumbnail": true,
      "include_transcript": true
    },
    "audience": {
      "tone": "neutral_instructional",
      "grade": "11",
      "language": "en"
    },
    "interactivity": "none",
    "duration_seconds": 15
  },
  "context": {
    "chapter": {
      "name": "Laws of Motion",
      "ncert_class": 11,
      "ncert_chapter_number": 5
    },
    "sub_topics": [
      {
        "topic": "Newton Second Law",
        "key_concepts": [
          "F = ma",
          "pseudo force"
        ]
      }
    ]
  },
  "metadata": {
    "priority": "normal"
  },
  "exam_type": "neet",
  "asset_type": "simulation",
  "request_id": "review-simulation-1789373203",
  "subject_area": "physics"
}
Error Context
"None"
anim-job-37abae0f-9f19...queuedNewton Second Law in Non-Inertial Framesmanim_local
View Request / Response Details
Request Payload
{
  "gap": {
    "topic": "newton-second-law-non-inertial",
    "severity": "dangerous",
    "error_type": "wrong_assumption",
    "memory_state": "fragile",
    "display_topic": "Newton Second Law in Non-Inertial Frames",
    "common_wrong_answer": "Applied F=ma in an accelerating frame without pseudo force",
    "confidence_at_error": "high",
    "correct_understanding": "In non-inertial frames, include a pseudo force opposite to the frame acceleration."
  },
  "target": {
    "style": "auto",
    "render": {
      "fps": 30,
      "format": "mp4",
      "resolution": "1920x1080",
      "include_thumbnail": true,
      "include_transcript": true
    },
    "audience": {
      "tone": "neutral_instructional",
      "grade": "11",
      "language": "en"
    },
    "interactivity": "none",
    "duration_seconds": 15
  },
  "context": {
    "chapter": {
      "name": "Laws of Motion",
      "ncert_class": 11,
      "ncert_chapter_number": 5
    },
    "sub_topics": [
      {
        "topic": "Newton Second Law",
        "key_concepts": [
          "F = ma",
          "pseudo force"
        ]
      }
    ]
  },
  "metadata": {
    "priority": "normal"
  },
  "exam_type": "neet",
  "asset_type": "animation",
  "request_id": "review-animation-1789373203",
  "subject_area": "physics"
}
Error Context
"None"
anim-job-0a1c9581-6a4c...completeAction-Reaction Pairshtml_three_js_local
View Request / Response Details
Request Payload
{
  "gap": {
    "topic": "laws_of_motion-action_reaction_pairs",
    "severity": "moderate",
    "error_type": "concept_misunderstanding",
    "memory_state": "fragile",
    "display_topic": "Action-Reaction Pairs",
    "common_wrong_answer": "The concept works the same way in all conditions.",
    "confidence_at_error": "high",
    "correct_understanding": "The concept depends on constraints, assumptions, and variable relationships."
  },
  "target": {
    "style": "auto",
    "render": {
      "fps": 30,
      "format": "mp4",
      "resolution": "1920x1080",
      "include_thumbnail": true,
      "include_transcript": true
    },
    "audience": {
      "tone": "neutral_instructional",
      "grade": "9",
      "language": "en"
    },
    "interactivity": "none",
    "duration_seconds": 15
  },
  "context": {
    "chapter": {
      "name": "Laws of Motion",
      "ncert_class": 9
    },
    "sub_topics": [
      {
        "topic": "laws_of_motion-action_reaction_pairs",
        "key_concepts": [
          "Action-Reaction Pairs",
          "Laws of Motion"
        ]
      }
    ]
  },
  "metadata": {
    "priority": "normal",
    "trace_id": "bulk-run-2026-05-21T09-46-48-791Z"
  },
  "exam_type": "neet",
  "asset_type": "simulation",
  "request_id": "bulk-2026-05-21T09-46-48-791Z-5-a1-physics.09.laws-of-motion.action-reaction-pairs",
  "subject_area": "physics"
}
Error Context
"None"
anim-job-e9a8b16d-69e3...completeNewton's Second Law (F = ma)html_three_js_local
View Request / Response Details
Request Payload
{
  "gap": {
    "topic": "newton-second-law",
    "severity": "moderate",
    "error_type": "wrong_assumption",
    "memory_state": "fragile",
    "display_topic": "Newton's Second Law (F = ma)",
    "common_wrong_answer": "Heavier objects accelerate faster for the same force.",
    "confidence_at_error": "high",
    "correct_understanding": "Acceleration is proportional to net force and inversely proportional to mass: a = F/m. Mass and acceleration are independent of each other."
  },
  "target": {
    "style": "auto",
    "render": {
      "fps": 30,
      "format": "mp4",
      "resolution": "1920x1080",
      "include_thumbnail": true,
      "include_transcript": true
    },
    "audience": {
      "tone": "neutral_instructional",
      "grade": "9",
      "language": "en"
    },
    "interactivity": "none",
    "duration_seconds": 15
  },
  "context": {
    "chapter": {
      "name": "Laws of Motion",
      "ncert_class": 9
    },
    "sub_topics": [
      {
        "topic": "newton-second-law",
        "key_concepts": [
          "F = ma",
          "acceleration",
          "force",
          "mass"
        ]
      }
    ]
  },
  "metadata": {
    "priority": "normal",
    "trace_id": "bulk-run-2026-05-21T09-46-48-791Z"
  },
  "exam_type": "neet",
  "asset_type": "simulation",
  "request_id": "bulk-2026-05-21T09-46-48-791Z-4-a1-physics.09.laws-of-motion.newton-second-law-fma",
  "subject_area": "physics"
}
Error Context
"None"
anim-job-6d5f7a18-dd0c...completeStatic to Kinetic Frictionhtml_three_js_local
View Request / Response Details
Request Payload
{
  "gap": {
    "topic": "friction-static_to_kinetic",
    "severity": "moderate",
    "error_type": "concept_misunderstanding",
    "memory_state": "fragile",
    "display_topic": "Static to Kinetic Friction",
    "common_wrong_answer": "The concept works the same way in all conditions.",
    "confidence_at_error": "high",
    "correct_understanding": "The concept depends on constraints, assumptions, and variable relationships."
  },
  "target": {
    "style": "auto",
    "render": {
      "fps": 30,
      "format": "mp4",
      "resolution": "1920x1080",
      "include_thumbnail": true,
      "include_transcript": true
    },
    "audience": {
      "tone": "neutral_instructional",
      "grade": "8",
      "language": "en"
    },
    "interactivity": "none",
    "duration_seconds": 15
  },
  "context": {
    "chapter": {
      "name": "Friction",
      "ncert_class": 8
    },
    "sub_topics": [
      {
        "topic": "friction-static_to_kinetic",
        "key_concepts": [
          "Static to Kinetic Friction",
          "Friction"
        ]
      }
    ]
  },
  "metadata": {
    "priority": "normal",
    "trace_id": "bulk-run-2026-05-21T09-46-48-791Z"
  },
  "exam_type": "neet",
  "asset_type": "simulation",
  "request_id": "bulk-2026-05-21T09-46-48-791Z-3-a1-physics.08.friction.static-to-kinetic",
  "subject_area": "physics"
}
Error Context
"None"
anim-job-f892deb7-160e...completeBalanced vs Unbalanced Forceshtml_three_js_local
View Request / Response Details
Request Payload
{
  "gap": {
    "topic": "force_pressure-balanced_vs_unbalanced",
    "severity": "moderate",
    "error_type": "concept_misunderstanding",
    "memory_state": "fragile",
    "display_topic": "Balanced vs Unbalanced Forces",
    "common_wrong_answer": "The concept works the same way in all conditions.",
    "confidence_at_error": "high",
    "correct_understanding": "The concept depends on constraints, assumptions, and variable relationships."
  },
  "target": {
    "style": "auto",
    "render": {
      "fps": 30,
      "format": "mp4",
      "resolution": "1920x1080",
      "include_thumbnail": true,
      "include_transcript": true
    },
    "audience": {
      "tone": "neutral_instructional",
      "grade": "8",
      "language": "en"
    },
    "interactivity": "none",
    "duration_seconds": 15
  },
  "context": {
    "chapter": {
      "name": "Force & Pressure",
      "ncert_class": 8
    },
    "sub_topics": [
      {
        "topic": "force_pressure-balanced_vs_unbalanced",
        "key_concepts": [
          "Balanced vs Unbalanced Forces",
          "Force & Pressure"
        ]
      }
    ]
  },
  "metadata": {
    "priority": "normal",
    "trace_id": "bulk-run-2026-05-21T09-46-48-791Z"
  },
  "exam_type": "neet",
  "asset_type": "simulation",
  "request_id": "bulk-2026-05-21T09-46-48-791Z-2-a1-physics.08.force-pressure.balanced-vs-unbalanced",
  "subject_area": "physics"
}
Error Context
"None"
anim-job-829442a8-36a5...completeDistance vs Displacementhtml_three_js_local
View Request / Response Details
Request Payload
{
  "gap": {
    "topic": "motion-distance_vs_displacement",
    "severity": "moderate",
    "error_type": "concept_misunderstanding",
    "memory_state": "fragile",
    "display_topic": "Distance vs Displacement",
    "common_wrong_answer": "The concept works the same way in all conditions.",
    "confidence_at_error": "high",
    "correct_understanding": "The concept depends on constraints, assumptions, and variable relationships."
  },
  "target": {
    "style": "auto",
    "render": {
      "fps": 30,
      "format": "mp4",
      "resolution": "1920x1080",
      "include_thumbnail": true,
      "include_transcript": true
    },
    "audience": {
      "tone": "neutral_instructional",
      "grade": "8",
      "language": "en"
    },
    "interactivity": "none",
    "duration_seconds": 15
  },
  "context": {
    "chapter": {
      "name": "Motion",
      "ncert_class": 8
    },
    "sub_topics": [
      {
        "topic": "motion-distance_vs_displacement",
        "key_concepts": [
          "Distance vs Displacement",
          "Motion"
        ]
      }
    ]
  },
  "metadata": {
    "priority": "normal",
    "trace_id": "bulk-run-2026-05-21T09-46-48-791Z"
  },
  "exam_type": "neet",
  "asset_type": "simulation",
  "request_id": "bulk-2026-05-21T09-46-48-791Z-1-a1-physics.08.motion.distance-vs-displacement",
  "subject_area": "physics"
}
Error Context
"None"
anim-job-e11a8e93-1973...completeStatic to Kinetic Frictionhtml_three_js_local
View Request / Response Details
Request Payload
{
  "gap": {
    "topic": "friction-static_to_kinetic",
    "severity": "moderate",
    "error_type": "concept_misunderstanding",
    "memory_state": "fragile",
    "display_topic": "Static to Kinetic Friction",
    "common_wrong_answer": "The concept works the same way in all conditions.",
    "confidence_at_error": "high",
    "correct_understanding": "The concept depends on constraints, assumptions, and variable relationships."
  },
  "target": {
    "style": "auto",
    "render": {
      "fps": 30,
      "format": "mp4",
      "resolution": "1920x1080",
      "include_thumbnail": true,
      "include_transcript": true
    },
    "audience": {
      "tone": "neutral_instructional",
      "grade": "8",
      "language": "en"
    },
    "interactivity": "none",
    "duration_seconds": 15
  },
  "context": {
    "chapter": {
      "name": "Friction",
      "ncert_class": 8
    },
    "sub_topics": [
      {
        "topic": "friction-static_to_kinetic",
        "key_concepts": [
          "Static to Kinetic Friction",
          "Friction"
        ]
      }
    ]
  },
  "metadata": {
    "priority": "normal",
    "trace_id": "bulk-run-2026-05-21T09-24-28-957Z"
  },
  "exam_type": "neet",
  "asset_type": "simulation",
  "request_id": "bulk-2026-05-21T09-24-28-957Z-3-a1-physics.08.friction.static-to-kinetic",
  "subject_area": "physics"
}
Error Context
"None"

API Surface

POST /api/v1/animations/generateGET /api/v1/animations/jobs/{job_id}GET /api/v1/health

Local Infra

Database
data/animation-engine.db
Assets
storage/assets
Redis
docker compose up redis

Sample Request

{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "asset_type": "simulation",
  "subject_area": "physics",
  "exam_type": "neet",
  "context": {
    "chapter": { "name": "Laws of Motion", "ncert_class": 11, "ncert_chapter_number": 5 },
    "sub_topics": [{ "topic": "Newton's Second Law", "key_concepts": ["F = ma", "pseudo force"] }]
  },
  "gap": {
    "topic": "newton-second-law-non-inertial",
    "display_topic": "Newton's Second Law in Non-Inertial Frames",
    "error_type": "wrong_assumption",
    "memory_state": "fragile",
    "severity": "dangerous",
    "confidence_at_error": "high",
    "common_wrong_answer": "Applied F=ma in a rotating frame without pseudo force",
    "correct_understanding": "In non-inertial frames, include pseudo force opposite frame acceleration."
  },
  "target": {
    "duration_seconds": 60,
    "audience": { "grade": "11", "language": "en", "tone": "neutral_instructional" },
    "render": { "format": "mp4", "resolution": "1920x1080", "fps": 30, "include_transcript": true, "include_thumbnail": true },
    "style": "auto",
    "interactivity": "parameter_sliders"
  },
  "metadata": { "priority": "high" }
}