with one click
synthetic-data-generation
// Generate realistic synthetic oil & gas data (LAS well logs, SEG-Y seismic, core photos, time-series) with proper physical constraints for testing, demos, and training.
// Generate realistic synthetic oil & gas data (LAS well logs, SEG-Y seismic, core photos, time-series) with proper physical constraints for testing, demos, and training.
You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation.
Use when starting any conversation - establishes how to find and use skills, requiring Skill tool invocation before ANY response including clarifying questions
Pre-flight check that determines if brainstorming is required before any action. Invoke this FIRST for any request involving creative or generative work.
Meta-skill that detects software tasks and routes them to appropriate petropowers skills.
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Handle real-time SCADA data, WITSML/PRODML streams, and time-series analysis.
| name | synthetic-data-generation |
| description | Generate realistic synthetic oil & gas data (LAS well logs, SEG-Y seismic, core photos, time-series) with proper physical constraints for testing, demos, and training. |
Natural language interface for generating realistic oil & gas domain data.
Generate synthetic well logs (LAS/DLIS), seismic (SEG-Y), core photos, and time-series data with proper physical constraints for testing, demos, and training.
Generate data with realistic relationships:
from synthetic_data.well_log import LASGenerator
from synthetic_data.seismic import SEGYGenerator
Create realistic LAS files:
generator = LASGenerator(seed=42)
las_path = generator.create_record(
well_name="Test-Well-001",
curves=["GR", "RHOB", "NPHI", "RT"],
depth_range=(1000.0, 2000.0),
sample_interval=0.15,
lithology="sandstone"
)
Options:
well_name: Well identifiercurves: Log curves to generate (GR, RHOB, NPHI, RT, DT, CALI)depth_range: (start, end) in meterssample_interval: Sampling interval in meterslithology: sandstone | shale | carbonateseed: Random seed for reproducibilityCreate SEG-Y volumes:
generator = SEGYGenerator(seed=42)
segy_path = generator.create_record(
survey_name="Test-Survey",
n_inlines=100,
n_crosslines=100,
n_samples=500,
sample_interval=4000 # microseconds
)
IMPORTANT: Expensive Operation
Core photo generation uses AI image generation APIs which are costly. Before generating:
When user requests core photos, ask these in order:
Question 1 - Count:
"How many core photos do you need? (Image generation is expensive - each photo costs API credits)"
Question 2 - Lithology:
"What lithology? (A) Sandstone (B) Shale (C) Carbonate (D) Limestone (E) Dolomite (F) Mixed/varies"
Question 3 - Visual Features (if user wants detail):
"Any specific visual features? (A) Default/random (B) With fractures (C) With oil staining (D) Specific bedding angles (E) Let me specify"
Question 4 - Full Context (if user wants geological accuracy):
"Need full geological context? If yes, specify: depth range, formation name, field name, well naming convention"
from synthetic_data.core_photos import CorePhotoGenerator
generator = CorePhotoGenerator(api_key="YOUR_GOOGLE_AI_API_KEY")
result = generator.create_record(
well_name="Test-Well-001",
lithology="sandstone",
depth_range=(1000.0, 2000.0),
output_dir="./output"
)
Options:
well_name: Well identifierlithology: sandstone | shale | carbonate | limestone | dolomitedepth_range: (start, end) in meterscore_length: Length of core sample in meters (default: 1.0)field_name: Field name for metadataformation: Formation name for metadataoutput_dir: Directory to save images and metadataReference examples available at synthetic_data/assets/:
core-photos.png - Real core sample photographs showing proper formatcore-photos.webp - WebP versionThese show proper format: depth markers, well identification, lithology variations, and scale bars.
Files validate against domain libraries:
Generate manifests for OSDU:
from synthetic_data.osdu import LASMapper
mapper = LASMapper()
manifest = mapper.to_manifest(
las_path,
legal_tags={"legaltags": ["test-license"]}
)
User says:
"Generate 5 LAS files for testing"
ā Uses LASGenerator.create_dataset(n_records=5)
User says:
"Create realistic well log with GR, RHOB, NPHI for carbonate formation"
ā Uses lithology="carbonate"
User says:
"Generate well log data with OSDU manifests for demo deployment"
ā Creates LAS files + OSDU-compliant JSON manifests
User says:
"Generate core photos for testing"
ā Ask: "How many?" then "What lithology?" then generate
User says:
"I need 5 sandstone core photos with visible fractures"
ā Confirms count (5), lithology (sandstone), feature (fractures) ā generate
User says:
"Generate synthetic data for my reservoir project"
ā Ask: "What type of data? (well logs, seismic, core photos, production data)" ā If core photos selected, proceed with mandatory questions
If user requests:
petropowers:oil-gas-delegationpip install lasio welly dlisio segyio numpy pandas scipy
See references/physical-constraints.md for detailed petrophysical relationships.